xref: /php-src/Zend/zend_vm_execute.h (revision 6a2c5318)
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 uint8_t 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 #define SPEC_RULE_OBSERVER     0x02000000
320 
321 static const uint32_t *zend_spec_handlers;
322 static const void * const *zend_opcode_handlers;
323 static int zend_handlers_count;
324 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
325 static const void * const * zend_opcode_handler_funcs;
326 static zend_op hybrid_halt_op;
327 #endif
328 #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
329 static const void *zend_vm_get_opcode_handler(uint8_t opcode, const zend_op* op);
330 #endif
331 
332 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
333 static const void *zend_vm_get_opcode_handler_func(uint8_t opcode, const zend_op* op);
334 #else
335 # define zend_vm_get_opcode_handler_func zend_vm_get_opcode_handler
336 #endif
337 
338 #ifndef VM_TRACE
339 # define VM_TRACE(op)
340 #endif
341 #ifndef VM_TRACE_OP_END
342 # define VM_TRACE_OP_END(op)
343 #endif
344 #ifndef VM_TRACE_START
345 # define VM_TRACE_START()
346 #endif
347 #ifndef VM_TRACE_END
348 # define VM_TRACE_END()
349 #endif
350 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
351 # if defined(__GNUC__) && defined(__i386__)
352 #  define HYBRID_JIT_GUARD() __asm__ __volatile__ (""::: "ebx")
353 # elif defined(__GNUC__) && defined(__x86_64__)
354 #  define HYBRID_JIT_GUARD() __asm__ __volatile__ (""::: "rbx","r12","r13")
355 # elif defined(__GNUC__) && defined(__aarch64__)
356 #  define HYBRID_JIT_GUARD() __asm__ __volatile__ (""::: "x19","x20","x21","x22","x23","x24","x25","x26")
357 # else
358 #  define HYBRID_JIT_GUARD()
359 # endif
360 #define HYBRID_NEXT()     HYBRID_JIT_GUARD(); goto *(void**)(OPLINE->handler)
361 #define HYBRID_SWITCH()   HYBRID_NEXT();
362 #define HYBRID_CASE(op)   op ## _LABEL
363 #define HYBRID_BREAK()    HYBRID_NEXT()
364 #define HYBRID_DEFAULT    ZEND_NULL_LABEL
365 #endif
366 
367 #ifdef ZEND_VM_FP_GLOBAL_REG
368 # define ZEND_OPCODE_HANDLER_ARGS void
369 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
370 # define ZEND_OPCODE_HANDLER_ARGS_DC
371 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC
372 #else
373 # define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data
374 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data
375 # define ZEND_OPCODE_HANDLER_ARGS_DC , ZEND_OPCODE_HANDLER_ARGS
376 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC , ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
377 #endif
378 
379 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
380 # define ZEND_OPCODE_HANDLER_RET void
381 # define ZEND_VM_TAIL_CALL(call) call; return
382 # ifdef ZEND_VM_TAIL_CALL_DISPATCH
383 #  define ZEND_VM_CONTINUE()     ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); return
384 # else
385 #  define ZEND_VM_CONTINUE()     return
386 # endif
387 # if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
388 #  define ZEND_VM_RETURN()        opline = &hybrid_halt_op; return
389 #  define ZEND_VM_HOT             zend_always_inline ZEND_COLD ZEND_OPT_SIZE
390 #  define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
391 # else
392 #  define ZEND_VM_RETURN()        opline = NULL; return
393 #  define ZEND_VM_HOT
394 #  define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
395 # endif
396 #else
397 # define ZEND_OPCODE_HANDLER_RET int
398 # define ZEND_VM_TAIL_CALL(call) return call
399 # define ZEND_VM_CONTINUE()      return  0
400 # define ZEND_VM_RETURN()        return -1
401 # define ZEND_VM_HOT
402 # define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
403 #endif
404 
405 typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
406 
407 #define DCL_OPLINE
408 #ifdef ZEND_VM_IP_GLOBAL_REG
409 # define OPLINE opline
410 # define USE_OPLINE
411 # define LOAD_OPLINE() opline = EX(opline)
412 # define LOAD_OPLINE_EX()
413 # define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
414 # define SAVE_OPLINE() EX(opline) = opline
415 # define SAVE_OPLINE_EX() SAVE_OPLINE()
416 #else
417 # define OPLINE EX(opline)
418 # define USE_OPLINE const zend_op *opline = EX(opline);
419 # define LOAD_OPLINE()
420 # define LOAD_OPLINE_EX()
421 # define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()
422 # define SAVE_OPLINE()
423 # define SAVE_OPLINE_EX()
424 #endif
425 #define HANDLE_EXCEPTION() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_CONTINUE()
426 #define HANDLE_EXCEPTION_LEAVE() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_LEAVE()
427 #if defined(ZEND_VM_FP_GLOBAL_REG)
428 # define ZEND_VM_ENTER_EX()        ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()
429 # define ZEND_VM_ENTER()           execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX()
430 # define ZEND_VM_LEAVE()           ZEND_VM_CONTINUE()
431 #elif defined(ZEND_VM_IP_GLOBAL_REG)
432 # define ZEND_VM_ENTER_EX()        return  1
433 # define ZEND_VM_ENTER()           opline = EG(current_execute_data)->opline; ZEND_VM_ENTER_EX()
434 # define ZEND_VM_LEAVE()           return  2
435 #else
436 # define ZEND_VM_ENTER_EX()        return  1
437 # define ZEND_VM_ENTER()           return  1
438 # define ZEND_VM_LEAVE()           return  2
439 #endif
440 #define ZEND_VM_INTERRUPT()      ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
441 #define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
442 #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));
443 
444 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS);
445 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS);
446 
zend_add_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)447 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)
448 {
449 	USE_OPLINE
450 
451 	SAVE_OPLINE();
452 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
453 		op_1 = ZVAL_UNDEFINED_OP1();
454 	}
455 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
456 		op_2 = ZVAL_UNDEFINED_OP2();
457 	}
458 	add_function(EX_VAR(opline->result.var), op_1, op_2);
459 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
460 		zval_ptr_dtor_nogc(op_1);
461 	}
462 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
463 		zval_ptr_dtor_nogc(op_2);
464 	}
465 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
466 }
467 
zend_sub_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)468 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)
469 {
470 	USE_OPLINE
471 
472 	SAVE_OPLINE();
473 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
474 		op_1 = ZVAL_UNDEFINED_OP1();
475 	}
476 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
477 		op_2 = ZVAL_UNDEFINED_OP2();
478 	}
479 	sub_function(EX_VAR(opline->result.var), op_1, op_2);
480 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
481 		zval_ptr_dtor_nogc(op_1);
482 	}
483 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
484 		zval_ptr_dtor_nogc(op_2);
485 	}
486 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
487 }
488 
zend_mul_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)489 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)
490 {
491 	USE_OPLINE
492 
493 	SAVE_OPLINE();
494 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
495 		op_1 = ZVAL_UNDEFINED_OP1();
496 	}
497 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
498 		op_2 = ZVAL_UNDEFINED_OP2();
499 	}
500 	mul_function(EX_VAR(opline->result.var), op_1, op_2);
501 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
502 		zval_ptr_dtor_nogc(op_1);
503 	}
504 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
505 		zval_ptr_dtor_nogc(op_2);
506 	}
507 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
508 }
509 
zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)510 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
511 {
512 	USE_OPLINE
513 
514 	SAVE_OPLINE();
515 	zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
516 	ZVAL_UNDEF(EX_VAR(opline->result.var));
517 	HANDLE_EXCEPTION();
518 }
519 
zend_mod_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)520 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)
521 {
522 	USE_OPLINE
523 
524 	SAVE_OPLINE();
525 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
526 		op_1 = ZVAL_UNDEFINED_OP1();
527 	}
528 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
529 		op_2 = ZVAL_UNDEFINED_OP2();
530 	}
531 	mod_function(EX_VAR(opline->result.var), op_1, op_2);
532 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
533 		zval_ptr_dtor_nogc(op_1);
534 	}
535 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
536 		zval_ptr_dtor_nogc(op_2);
537 	}
538 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
539 }
540 
zend_shift_left_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)541 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)
542 {
543 	USE_OPLINE
544 
545 	SAVE_OPLINE();
546 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
547 		op_1 = ZVAL_UNDEFINED_OP1();
548 	}
549 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
550 		op_2 = ZVAL_UNDEFINED_OP2();
551 	}
552 	shift_left_function(EX_VAR(opline->result.var), op_1, op_2);
553 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
554 		zval_ptr_dtor_nogc(op_1);
555 	}
556 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
557 		zval_ptr_dtor_nogc(op_2);
558 	}
559 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
560 }
561 
zend_shift_right_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)562 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)
563 {
564 	USE_OPLINE
565 
566 	SAVE_OPLINE();
567 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
568 		op_1 = ZVAL_UNDEFINED_OP1();
569 	}
570 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
571 		op_2 = ZVAL_UNDEFINED_OP2();
572 	}
573 	shift_right_function(EX_VAR(opline->result.var), op_1, op_2);
574 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
575 		zval_ptr_dtor_nogc(op_1);
576 	}
577 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
578 		zval_ptr_dtor_nogc(op_2);
579 	}
580 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
581 }
582 
zend_is_equal_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)583 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)
584 {
585 	int ret;
586 	USE_OPLINE
587 
588 	SAVE_OPLINE();
589 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
590 		op_1 = ZVAL_UNDEFINED_OP1();
591 	}
592 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
593 		op_2 = ZVAL_UNDEFINED_OP2();
594 	}
595 	ret = zend_compare(op_1, op_2);
596 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
597 		zval_ptr_dtor_nogc(op_1);
598 	}
599 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
600 		zval_ptr_dtor_nogc(op_2);
601 	}
602 	ZEND_VM_SMART_BRANCH(ret == 0, 1);
603 }
604 
zend_is_not_equal_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)605 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)
606 {
607 	int ret;
608 	USE_OPLINE
609 
610 	SAVE_OPLINE();
611 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
612 		op_1 = ZVAL_UNDEFINED_OP1();
613 	}
614 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
615 		op_2 = ZVAL_UNDEFINED_OP2();
616 	}
617 	ret = zend_compare(op_1, op_2);
618 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
619 		zval_ptr_dtor_nogc(op_1);
620 	}
621 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
622 		zval_ptr_dtor_nogc(op_2);
623 	}
624 	ZEND_VM_SMART_BRANCH(ret != 0, 1);
625 }
626 
zend_is_smaller_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)627 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)
628 {
629 	int ret;
630 	USE_OPLINE
631 
632 	SAVE_OPLINE();
633 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
634 		op_1 = ZVAL_UNDEFINED_OP1();
635 	}
636 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
637 		op_2 = ZVAL_UNDEFINED_OP2();
638 	}
639 	ret = zend_compare(op_1, op_2);
640 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
641 		zval_ptr_dtor_nogc(op_1);
642 	}
643 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
644 		zval_ptr_dtor_nogc(op_2);
645 	}
646 	ZEND_VM_SMART_BRANCH(ret < 0, 1);
647 }
648 
zend_is_smaller_or_equal_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)649 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)
650 {
651 	int ret;
652 	USE_OPLINE
653 
654 	SAVE_OPLINE();
655 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
656 		op_1 = ZVAL_UNDEFINED_OP1();
657 	}
658 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
659 		op_2 = ZVAL_UNDEFINED_OP2();
660 	}
661 	ret = zend_compare(op_1, op_2);
662 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
663 		zval_ptr_dtor_nogc(op_1);
664 	}
665 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
666 		zval_ptr_dtor_nogc(op_2);
667 	}
668 	ZEND_VM_SMART_BRANCH(ret <= 0, 1);
669 }
670 
zend_bw_or_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)671 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)
672 {
673 	USE_OPLINE
674 
675 	SAVE_OPLINE();
676 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
677 		op_1 = ZVAL_UNDEFINED_OP1();
678 	}
679 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
680 		op_2 = ZVAL_UNDEFINED_OP2();
681 	}
682 	bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2);
683 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
684 		zval_ptr_dtor_nogc(op_1);
685 	}
686 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
687 		zval_ptr_dtor_nogc(op_2);
688 	}
689 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
690 }
691 
zend_bw_and_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)692 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)
693 {
694 	USE_OPLINE
695 
696 	SAVE_OPLINE();
697 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
698 		op_1 = ZVAL_UNDEFINED_OP1();
699 	}
700 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
701 		op_2 = ZVAL_UNDEFINED_OP2();
702 	}
703 	bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2);
704 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
705 		zval_ptr_dtor_nogc(op_1);
706 	}
707 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
708 		zval_ptr_dtor_nogc(op_2);
709 	}
710 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
711 }
712 
zend_bw_xor_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)713 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)
714 {
715 	USE_OPLINE
716 
717 	SAVE_OPLINE();
718 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
719 		op_1 = ZVAL_UNDEFINED_OP1();
720 	}
721 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
722 		op_2 = ZVAL_UNDEFINED_OP2();
723 	}
724 	bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2);
725 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
726 		zval_ptr_dtor_nogc(op_1);
727 	}
728 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
729 		zval_ptr_dtor_nogc(op_2);
730 	}
731 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
732 }
733 
zend_bw_not_helper_SPEC(zval * op_1 ZEND_OPCODE_HANDLER_ARGS_DC)734 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_not_helper_SPEC(zval *op_1 ZEND_OPCODE_HANDLER_ARGS_DC)
735 {
736 	USE_OPLINE
737 
738 	SAVE_OPLINE();
739 	if (UNEXPECTED(Z_TYPE_P(op_1) == IS_UNDEF)) {
740 		op_1 = ZVAL_UNDEFINED_OP1();
741 	}
742 	bitwise_not_function(EX_VAR(opline->result.var), op_1);
743 	FREE_OP(opline->op1_type, opline->op1.var);
744 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
745 }
746 
zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)747 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
748 {
749 	USE_OPLINE
750 
751 	SAVE_OPLINE();
752 	zend_throw_error(NULL, "Using $this when not in object context");
753 	UNDEF_RESULT();
754 	HANDLE_EXCEPTION();
755 }
756 
zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)757 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
758 {
759 	USE_OPLINE
760 	zval *function_name;
761 
762 	SAVE_OPLINE();
763 	function_name = RT_CONSTANT(opline, opline->op2);
764 	zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
765 	HANDLE_EXCEPTION();
766 }
767 
ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)768 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
769 {
770 	/* 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 */
771 
772 	USE_OPLINE
773 	zval *prop, *value;
774 	zend_property_info *prop_info;
775 	zend_reference *ref;
776 
777 	SAVE_OPLINE();
778 
779 	if (UNEXPECTED(zend_fetch_static_property_address(&prop, &prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
780 		UNDEF_RESULT();
781 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
782 		HANDLE_EXCEPTION();
783 	}
784 
785 	value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
786 
787 	do {
788 		if (UNEXPECTED(Z_ISREF_P(prop))) {
789 			ref = Z_REF_P(prop);
790 			prop = Z_REFVAL_P(prop);
791 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
792 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
793 				break;
794 			}
795 		}
796 
797 		if (ZEND_TYPE_IS_SET(prop_info->type)) {
798 			/* special case for typed properties */
799 			zend_binary_assign_op_typed_prop(prop_info, prop, value OPLINE_CC EXECUTE_DATA_CC);
800 		} else {
801 			zend_binary_op(prop, prop, value OPLINE_CC);
802 		}
803 	} while (0);
804 
805 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
806 		ZVAL_COPY(EX_VAR(opline->result.var), prop);
807 	}
808 
809 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
810 	/* assign_static_prop has two opcodes! */
811 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
812 }
813 
ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)814 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
815 {
816 	USE_OPLINE
817 	zval *prop;
818 	zend_property_info *prop_info;
819 
820 	SAVE_OPLINE();
821 
822 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
823 		UNDEF_RESULT();
824 		HANDLE_EXCEPTION();
825 	}
826 
827 	zend_pre_incdec_property_zval(prop,
828 		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
829 
830 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
831 }
832 
833 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)834 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
835 {
836 	USE_OPLINE
837 	zval *prop;
838 	zend_property_info *prop_info;
839 
840 	SAVE_OPLINE();
841 
842 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
843 		UNDEF_RESULT();
844 		HANDLE_EXCEPTION();
845 	}
846 
847 	zend_post_incdec_property_zval(prop,
848 		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
849 
850 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
851 }
852 
853 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
zend_fetch_static_prop_helper_SPEC(int type ZEND_OPCODE_HANDLER_ARGS_DC)854 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC(int type ZEND_OPCODE_HANDLER_ARGS_DC)
855 {
856 	USE_OPLINE
857 	zval *prop;
858 
859 	SAVE_OPLINE();
860 
861 	if (UNEXPECTED(zend_fetch_static_property_address(&prop, NULL, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type, opline->extended_value OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
862 		ZEND_ASSERT(EG(exception) || (type == BP_VAR_IS));
863 		prop = &EG(uninitialized_zval);
864 	}
865 
866 	if (type == BP_VAR_R || type == BP_VAR_IS) {
867 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), prop);
868 	} else {
869 		ZVAL_INDIRECT(EX_VAR(opline->result.var), prop);
870 	}
871 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
872 }
873 
874 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)875 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
876 {
877 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
878 }
879 
880 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)881 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
882 {
883 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
884 }
885 
886 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)887 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
888 {
889 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
890 }
891 
892 /* 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)893 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
894 {
895 	int fetch_type =
896 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
897 			BP_VAR_W : BP_VAR_R;
898 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
899 }
900 
901 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
903 {
904 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_UNSET 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_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)908 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
909 {
910 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
911 }
912 
zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)913 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
914 {
915 	USE_OPLINE
916 
917 	SAVE_OPLINE();
918 	zend_throw_error(NULL, "Cannot use temporary expression in write context");
919 	FREE_OP(opline->op2_type, opline->op2.var);
920 	FREE_OP(opline->op1_type, opline->op1.var);
921 	ZVAL_UNDEF(EX_VAR(opline->result.var));
922 	HANDLE_EXCEPTION();
923 }
924 
zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)925 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
926 {
927 	USE_OPLINE
928 
929 	SAVE_OPLINE();
930 	zend_throw_error(NULL, "Cannot use [] for reading");
931 	FREE_OP(opline->op2_type, opline->op2.var);
932 	FREE_OP(opline->op1_type, opline->op1.var);
933 	ZVAL_UNDEF(EX_VAR(opline->result.var));
934 	HANDLE_EXCEPTION();
935 }
936 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)937 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
938 {
939 	USE_OPLINE
940 	zval *prop, *value;
941 	zend_property_info *prop_info;
942 	zend_refcounted *garbage = NULL;
943 
944 	SAVE_OPLINE();
945 
946 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
947 
948 		UNDEF_RESULT();
949 		HANDLE_EXCEPTION();
950 	}
951 
952 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
953 
954 	if (ZEND_TYPE_IS_SET(prop_info->type)) {
955 		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
956 
957 	} else {
958 		value = zend_assign_to_variable_ex(prop, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
959 	}
960 
961 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
962 		ZVAL_COPY(EX_VAR(opline->result.var), value);
963 	}
964 
965 	if (garbage) {
966 		GC_DTOR_NO_REF(garbage);
967 	}
968 
969 	/* assign_static_prop has two opcodes! */
970 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
971 }
972 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)973 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
974 {
975 	USE_OPLINE
976 	zval *prop, *value;
977 	zend_property_info *prop_info;
978 	zend_refcounted *garbage = NULL;
979 
980 	SAVE_OPLINE();
981 
982 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
983 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
984 		UNDEF_RESULT();
985 		HANDLE_EXCEPTION();
986 	}
987 
988 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
989 
990 	if (ZEND_TYPE_IS_SET(prop_info->type)) {
991 		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
992 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
993 	} else {
994 		value = zend_assign_to_variable_ex(prop, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
995 	}
996 
997 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
998 		ZVAL_COPY(EX_VAR(opline->result.var), value);
999 	}
1000 
1001 	if (garbage) {
1002 		GC_DTOR_NO_REF(garbage);
1003 	}
1004 
1005 	/* assign_static_prop has two opcodes! */
1006 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1007 }
1008 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1009 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1010 {
1011 	USE_OPLINE
1012 	zval *prop, *value;
1013 	zend_property_info *prop_info;
1014 	zend_refcounted *garbage = NULL;
1015 
1016 	SAVE_OPLINE();
1017 
1018 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1019 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
1020 		UNDEF_RESULT();
1021 		HANDLE_EXCEPTION();
1022 	}
1023 
1024 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
1025 
1026 	if (ZEND_TYPE_IS_SET(prop_info->type)) {
1027 		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
1028 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
1029 	} else {
1030 		value = zend_assign_to_variable_ex(prop, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
1031 	}
1032 
1033 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1034 		ZVAL_COPY(EX_VAR(opline->result.var), value);
1035 	}
1036 
1037 	if (garbage) {
1038 		GC_DTOR_NO_REF(garbage);
1039 	}
1040 
1041 	/* assign_static_prop has two opcodes! */
1042 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1043 }
1044 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1046 {
1047 	USE_OPLINE
1048 	zval *prop, *value;
1049 	zend_property_info *prop_info;
1050 	zend_refcounted *garbage = NULL;
1051 
1052 	SAVE_OPLINE();
1053 
1054 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1055 
1056 		UNDEF_RESULT();
1057 		HANDLE_EXCEPTION();
1058 	}
1059 
1060 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
1061 
1062 	if (ZEND_TYPE_IS_SET(prop_info->type)) {
1063 		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
1064 
1065 	} else {
1066 		value = zend_assign_to_variable_ex(prop, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
1067 	}
1068 
1069 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1070 		ZVAL_COPY(EX_VAR(opline->result.var), value);
1071 	}
1072 
1073 	if (garbage) {
1074 		GC_DTOR_NO_REF(garbage);
1075 	}
1076 
1077 	/* assign_static_prop has two opcodes! */
1078 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1079 }
1080 
ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1081 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1082 {
1083 	USE_OPLINE
1084 	zval *prop, *value_ptr;
1085 	zend_property_info *prop_info;
1086 	zend_refcounted *garbage = NULL;
1087 
1088 	SAVE_OPLINE();
1089 
1090 	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) {
1091 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
1092 		UNDEF_RESULT();
1093 		HANDLE_EXCEPTION();
1094 	}
1095 
1096 	value_ptr = get_zval_ptr_ptr((opline+1)->op1_type, (opline+1)->op1, BP_VAR_W);
1097 
1098 	if ((opline+1)->op1_type == IS_VAR && (opline->extended_value & ZEND_RETURNS_FUNCTION) && UNEXPECTED(!Z_ISREF_P(value_ptr))) {
1099 		if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(prop, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC))) {
1100 			prop = &EG(uninitialized_zval);
1101 		}
1102 	} else if (ZEND_TYPE_IS_SET(prop_info->type)) {
1103 		prop = zend_assign_to_typed_property_reference(prop_info, prop, value_ptr, &garbage EXECUTE_DATA_CC);
1104 	} else {
1105 		zend_assign_to_variable_reference(prop, value_ptr, &garbage);
1106 	}
1107 
1108 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1109 		ZVAL_COPY(EX_VAR(opline->result.var), prop);
1110 	}
1111 
1112 	if (garbage) {
1113 		GC_DTOR(garbage);
1114 	}
1115 
1116 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
1117 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1118 }
1119 
zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)1120 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
1121 {
1122 	zend_execute_data *old_execute_data;
1123 	uint32_t call_info = EX_CALL_INFO();
1124 	SAVE_OPLINE();
1125 
1126 	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) == 0)) {
1127 		EG(current_execute_data) = EX(prev_execute_data);
1128 		i_free_compiled_variables(execute_data);
1129 
1130 #ifdef ZEND_PREFER_RELOAD
1131 		call_info = EX_CALL_INFO();
1132 #endif
1133 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
1134 			OBJ_RELEASE(Z_OBJ(execute_data->This));
1135 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1136 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1137 		}
1138 		EG(vm_stack_top) = (zval*)execute_data;
1139 		execute_data = EX(prev_execute_data);
1140 
1141 		if (UNEXPECTED(EG(exception) != NULL)) {
1142 			zend_rethrow_exception(execute_data);
1143 			HANDLE_EXCEPTION_LEAVE();
1144 		}
1145 
1146 		LOAD_NEXT_OPLINE();
1147 		ZEND_VM_LEAVE();
1148 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
1149 		EG(current_execute_data) = EX(prev_execute_data);
1150 		i_free_compiled_variables(execute_data);
1151 
1152 #ifdef ZEND_PREFER_RELOAD
1153 		call_info = EX_CALL_INFO();
1154 #endif
1155 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1156 			zend_clean_and_cache_symbol_table(EX(symbol_table));
1157 		}
1158 
1159 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1160 			zend_free_extra_named_params(EX(extra_named_params));
1161 		}
1162 
1163 		/* Free extra args before releasing the closure,
1164 		 * as that may free the op_array. */
1165 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
1166 
1167 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
1168 			OBJ_RELEASE(Z_OBJ(execute_data->This));
1169 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1170 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1171 		}
1172 
1173 		old_execute_data = execute_data;
1174 		execute_data = EX(prev_execute_data);
1175 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1176 
1177 		if (UNEXPECTED(EG(exception) != NULL)) {
1178 			zend_rethrow_exception(execute_data);
1179 			HANDLE_EXCEPTION_LEAVE();
1180 		}
1181 
1182 		LOAD_NEXT_OPLINE();
1183 		ZEND_VM_LEAVE();
1184 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
1185 		if (EX(func)->op_array.last_var > 0) {
1186 			zend_detach_symbol_table(execute_data);
1187 			call_info |= ZEND_CALL_NEEDS_REATTACH;
1188 		}
1189 		zend_destroy_static_vars(&EX(func)->op_array);
1190 		destroy_op_array(&EX(func)->op_array);
1191 		efree_size(EX(func), sizeof(zend_op_array));
1192 		old_execute_data = execute_data;
1193 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
1194 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1195 
1196 		if (call_info & ZEND_CALL_NEEDS_REATTACH) {
1197 			if (EX(func)->op_array.last_var > 0) {
1198 				zend_attach_symbol_table(execute_data);
1199 			} else {
1200 				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
1201 			}
1202 		}
1203 		if (UNEXPECTED(EG(exception) != NULL)) {
1204 			zend_rethrow_exception(execute_data);
1205 			HANDLE_EXCEPTION_LEAVE();
1206 		}
1207 
1208 		LOAD_NEXT_OPLINE();
1209 		ZEND_VM_LEAVE();
1210 	} else {
1211 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
1212 			EG(current_execute_data) = EX(prev_execute_data);
1213 			i_free_compiled_variables(execute_data);
1214 #ifdef ZEND_PREFER_RELOAD
1215 			call_info = EX_CALL_INFO();
1216 #endif
1217 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
1218 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1219 					zend_clean_and_cache_symbol_table(EX(symbol_table));
1220 				}
1221 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
1222 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1223 					zend_free_extra_named_params(EX(extra_named_params));
1224 				}
1225 			}
1226 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1227 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1228 			}
1229 			ZEND_VM_RETURN();
1230 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
1231 			zend_array *symbol_table = EX(symbol_table);
1232 
1233 			if (EX(func)->op_array.last_var > 0) {
1234 				zend_detach_symbol_table(execute_data);
1235 				call_info |= ZEND_CALL_NEEDS_REATTACH;
1236 			}
1237 			if (call_info & ZEND_CALL_NEEDS_REATTACH) {
1238 				old_execute_data = EX(prev_execute_data);
1239 				while (old_execute_data) {
1240 					if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1241 						if (old_execute_data->symbol_table == symbol_table) {
1242 							if (old_execute_data->func->op_array.last_var > 0) {
1243 								zend_attach_symbol_table(old_execute_data);
1244 							} else {
1245 								ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
1246 							}
1247 						}
1248 						break;
1249 					}
1250 					old_execute_data = old_execute_data->prev_execute_data;
1251 				}
1252 			}
1253 			EG(current_execute_data) = EX(prev_execute_data);
1254 			ZEND_VM_RETURN();
1255 		}
1256 	}
1257 }
1258 
ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1259 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1260 {
1261 	USE_OPLINE
1262 
1263 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
1264 }
1265 
ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1266 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1267 {
1268 	USE_OPLINE
1269 	zend_execute_data *call = EX(call);
1270 	zend_function *fbc = call->func;
1271 	zval *ret;
1272 	zval retval;
1273 
1274 	SAVE_OPLINE();
1275 	EX(call) = call->prev_execute_data;
1276 
1277 	call->prev_execute_data = execute_data;
1278 	EG(current_execute_data) = call;
1279 
1280 #if ZEND_DEBUG
1281 	bool should_throw = zend_internal_call_should_throw(fbc, call);
1282 #endif
1283 
1284 	ret = 0 ? EX_VAR(opline->result.var) : &retval;
1285 	ZVAL_NULL(ret);
1286 
1287 	fbc->internal_function.handler(call, ret);
1288 
1289 #if ZEND_DEBUG
1290 	if (!EG(exception) && call->func) {
1291 		if (should_throw) {
1292 			zend_internal_call_arginfo_violation(call->func);
1293 		}
1294 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1295 			zend_verify_internal_return_type(call->func, ret));
1296 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1297 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1298 		zend_verify_internal_func_info(call->func, ret);
1299 	}
1300 #endif
1301 
1302 	EG(current_execute_data) = execute_data;
1303 	zend_vm_stack_free_args(call);
1304 
1305 	uint32_t call_info = ZEND_CALL_INFO(call);
1306 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1307 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1308 			zend_free_extra_named_params(call->extra_named_params);
1309 		}
1310 		zend_vm_stack_free_call_frame_ex(call_info, call);
1311 	} else {
1312 		EG(vm_stack_top) = (zval*)call;
1313 	}
1314 
1315 	if (!0) {
1316 		i_zval_ptr_dtor(ret);
1317 	}
1318 
1319 	if (UNEXPECTED(EG(exception) != NULL)) {
1320 		zend_rethrow_exception(execute_data);
1321 		HANDLE_EXCEPTION();
1322 	}
1323 
1324 	ZEND_VM_SET_OPCODE(opline + 1);
1325 	ZEND_VM_CONTINUE();
1326 }
1327 
ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1328 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1329 {
1330 	USE_OPLINE
1331 	zend_execute_data *call = EX(call);
1332 	zend_function *fbc = call->func;
1333 	zval *ret;
1334 	zval retval;
1335 
1336 	SAVE_OPLINE();
1337 	EX(call) = call->prev_execute_data;
1338 
1339 	call->prev_execute_data = execute_data;
1340 	EG(current_execute_data) = call;
1341 
1342 #if ZEND_DEBUG
1343 	bool should_throw = zend_internal_call_should_throw(fbc, call);
1344 #endif
1345 
1346 	ret = 1 ? EX_VAR(opline->result.var) : &retval;
1347 	ZVAL_NULL(ret);
1348 
1349 	fbc->internal_function.handler(call, ret);
1350 
1351 #if ZEND_DEBUG
1352 	if (!EG(exception) && call->func) {
1353 		if (should_throw) {
1354 			zend_internal_call_arginfo_violation(call->func);
1355 		}
1356 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1357 			zend_verify_internal_return_type(call->func, ret));
1358 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1359 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1360 		zend_verify_internal_func_info(call->func, ret);
1361 	}
1362 #endif
1363 
1364 	EG(current_execute_data) = execute_data;
1365 	zend_vm_stack_free_args(call);
1366 
1367 	uint32_t call_info = ZEND_CALL_INFO(call);
1368 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1369 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1370 			zend_free_extra_named_params(call->extra_named_params);
1371 		}
1372 		zend_vm_stack_free_call_frame_ex(call_info, call);
1373 	} else {
1374 		EG(vm_stack_top) = (zval*)call;
1375 	}
1376 
1377 	if (!1) {
1378 		i_zval_ptr_dtor(ret);
1379 	}
1380 
1381 	if (UNEXPECTED(EG(exception) != NULL)) {
1382 		zend_rethrow_exception(execute_data);
1383 		HANDLE_EXCEPTION();
1384 	}
1385 
1386 	ZEND_VM_SET_OPCODE(opline + 1);
1387 	ZEND_VM_CONTINUE();
1388 }
1389 
ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1390 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1391 {
1392 	USE_OPLINE
1393 	zend_execute_data *call = EX(call);
1394 	zend_function *fbc = call->func;
1395 	zval *ret;
1396 	zval retval;
1397 
1398 	SAVE_OPLINE();
1399 	EX(call) = call->prev_execute_data;
1400 
1401 	call->prev_execute_data = execute_data;
1402 	EG(current_execute_data) = call;
1403 
1404 #if ZEND_DEBUG
1405 	bool should_throw = zend_internal_call_should_throw(fbc, call);
1406 #endif
1407 
1408 	ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
1409 	ZVAL_NULL(ret);
1410 
1411 	zend_observer_fcall_begin_specialized(call, false);
1412 	fbc->internal_function.handler(call, ret);
1413 
1414 #if ZEND_DEBUG
1415 	if (!EG(exception) && call->func) {
1416 		if (should_throw) {
1417 			zend_internal_call_arginfo_violation(call->func);
1418 		}
1419 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1420 			zend_verify_internal_return_type(call->func, ret));
1421 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1422 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1423 		zend_verify_internal_func_info(call->func, ret);
1424 	}
1425 #endif
1426 	zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
1427 
1428 	EG(current_execute_data) = execute_data;
1429 	zend_vm_stack_free_args(call);
1430 
1431 	uint32_t call_info = ZEND_CALL_INFO(call);
1432 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1433 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1434 			zend_free_extra_named_params(call->extra_named_params);
1435 		}
1436 		zend_vm_stack_free_call_frame_ex(call_info, call);
1437 	} else {
1438 		EG(vm_stack_top) = (zval*)call;
1439 	}
1440 
1441 	if (!RETURN_VALUE_USED(opline)) {
1442 		i_zval_ptr_dtor(ret);
1443 	}
1444 
1445 	if (UNEXPECTED(EG(exception) != NULL)) {
1446 		zend_rethrow_exception(execute_data);
1447 		HANDLE_EXCEPTION();
1448 	}
1449 
1450 	ZEND_VM_SET_OPCODE(opline + 1);
1451 	ZEND_VM_CONTINUE();
1452 }
1453 
ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1454 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1455 {
1456 	USE_OPLINE
1457 	zend_execute_data *call = EX(call);
1458 	zend_function *fbc = call->func;
1459 	zval *ret;
1460 
1461 	SAVE_OPLINE();
1462 	EX(call) = call->prev_execute_data;
1463 
1464 	ret = NULL;
1465 	if (0) {
1466 		ret = EX_VAR(opline->result.var);
1467 	}
1468 
1469 	call->prev_execute_data = execute_data;
1470 	execute_data = call;
1471 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1472 	LOAD_OPLINE_EX();
1473 
1474 
1475 	ZEND_VM_ENTER_EX();
1476 }
1477 
ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1478 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1479 {
1480 	USE_OPLINE
1481 	zend_execute_data *call = EX(call);
1482 	zend_function *fbc = call->func;
1483 	zval *ret;
1484 
1485 	SAVE_OPLINE();
1486 	EX(call) = call->prev_execute_data;
1487 
1488 	ret = NULL;
1489 	if (1) {
1490 		ret = EX_VAR(opline->result.var);
1491 	}
1492 
1493 	call->prev_execute_data = execute_data;
1494 	execute_data = call;
1495 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1496 	LOAD_OPLINE_EX();
1497 
1498 
1499 	ZEND_VM_ENTER_EX();
1500 }
1501 
ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1502 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1503 {
1504 	USE_OPLINE
1505 	zend_execute_data *call = EX(call);
1506 	zend_function *fbc = call->func;
1507 	zval *ret;
1508 
1509 	SAVE_OPLINE();
1510 	EX(call) = call->prev_execute_data;
1511 
1512 	ret = NULL;
1513 	if (RETURN_VALUE_USED(opline)) {
1514 		ret = EX_VAR(opline->result.var);
1515 	}
1516 
1517 	call->prev_execute_data = execute_data;
1518 	execute_data = call;
1519 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1520 	LOAD_OPLINE_EX();
1521 	SAVE_OPLINE();
1522 	zend_observer_fcall_begin_specialized(execute_data, false);
1523 
1524 	ZEND_VM_ENTER_EX();
1525 }
1526 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1527 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1528 {
1529 	USE_OPLINE
1530 	zend_execute_data *call = EX(call);
1531 	zend_function *fbc = call->func;
1532 	zval *ret;
1533 
1534 	SAVE_OPLINE();
1535 	EX(call) = call->prev_execute_data;
1536 
1537 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1538 		ret = NULL;
1539 		if (0) {
1540 			ret = EX_VAR(opline->result.var);
1541 		}
1542 
1543 		call->prev_execute_data = execute_data;
1544 		execute_data = call;
1545 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1546 		LOAD_OPLINE_EX();
1547 
1548 
1549 		ZEND_VM_ENTER_EX();
1550 	} else {
1551 		zval retval;
1552 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1553 		if (0) {
1554 			ret = NULL;
1555 		}
1556 
1557 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1558 			zend_deprecated_function(fbc);
1559 			if (UNEXPECTED(EG(exception) != NULL)) {
1560 				UNDEF_RESULT();
1561 				if (!0) {
1562 					ret = &retval;
1563 					ZVAL_UNDEF(ret);
1564 				}
1565 				goto fcall_by_name_end;
1566 			}
1567 		}
1568 
1569 		call->prev_execute_data = execute_data;
1570 		EG(current_execute_data) = call;
1571 
1572 #if ZEND_DEBUG
1573 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1574 #endif
1575 
1576 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1577 		ZVAL_NULL(ret);
1578 
1579 		fbc->internal_function.handler(call, ret);
1580 
1581 #if ZEND_DEBUG
1582 		if (!EG(exception) && call->func) {
1583 			if (should_throw) {
1584 				zend_internal_call_arginfo_violation(call->func);
1585 			}
1586 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1587 				zend_verify_internal_return_type(call->func, ret));
1588 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1589 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1590 			zend_verify_internal_func_info(call->func, ret);
1591 		}
1592 #endif
1593 
1594 		EG(current_execute_data) = execute_data;
1595 
1596 fcall_by_name_end:
1597 		zend_vm_stack_free_args(call);
1598 
1599 		uint32_t call_info = ZEND_CALL_INFO(call);
1600 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1601 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1602 				zend_free_extra_named_params(call->extra_named_params);
1603 			}
1604 			zend_vm_stack_free_call_frame_ex(call_info, call);
1605 		} else {
1606 			EG(vm_stack_top) = (zval*)call;
1607 		}
1608 
1609 		if (!0) {
1610 			i_zval_ptr_dtor(ret);
1611 		}
1612 	}
1613 
1614 	if (UNEXPECTED(EG(exception) != NULL)) {
1615 		zend_rethrow_exception(execute_data);
1616 		HANDLE_EXCEPTION();
1617 	}
1618 	ZEND_VM_SET_OPCODE(opline + 1);
1619 	ZEND_VM_CONTINUE();
1620 }
1621 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1622 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1623 {
1624 	USE_OPLINE
1625 	zend_execute_data *call = EX(call);
1626 	zend_function *fbc = call->func;
1627 	zval *ret;
1628 
1629 	SAVE_OPLINE();
1630 	EX(call) = call->prev_execute_data;
1631 
1632 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1633 		ret = NULL;
1634 		if (1) {
1635 			ret = EX_VAR(opline->result.var);
1636 		}
1637 
1638 		call->prev_execute_data = execute_data;
1639 		execute_data = call;
1640 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1641 		LOAD_OPLINE_EX();
1642 
1643 
1644 		ZEND_VM_ENTER_EX();
1645 	} else {
1646 		zval retval;
1647 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1648 		if (0) {
1649 			ret = NULL;
1650 		}
1651 
1652 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1653 			zend_deprecated_function(fbc);
1654 			if (UNEXPECTED(EG(exception) != NULL)) {
1655 				UNDEF_RESULT();
1656 				if (!1) {
1657 					ret = &retval;
1658 					ZVAL_UNDEF(ret);
1659 				}
1660 				goto fcall_by_name_end;
1661 			}
1662 		}
1663 
1664 		call->prev_execute_data = execute_data;
1665 		EG(current_execute_data) = call;
1666 
1667 #if ZEND_DEBUG
1668 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1669 #endif
1670 
1671 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1672 		ZVAL_NULL(ret);
1673 
1674 		fbc->internal_function.handler(call, ret);
1675 
1676 #if ZEND_DEBUG
1677 		if (!EG(exception) && call->func) {
1678 			if (should_throw) {
1679 				zend_internal_call_arginfo_violation(call->func);
1680 			}
1681 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1682 				zend_verify_internal_return_type(call->func, ret));
1683 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1684 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1685 			zend_verify_internal_func_info(call->func, ret);
1686 		}
1687 #endif
1688 
1689 		EG(current_execute_data) = execute_data;
1690 
1691 fcall_by_name_end:
1692 		zend_vm_stack_free_args(call);
1693 
1694 		uint32_t call_info = ZEND_CALL_INFO(call);
1695 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1696 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1697 				zend_free_extra_named_params(call->extra_named_params);
1698 			}
1699 			zend_vm_stack_free_call_frame_ex(call_info, call);
1700 		} else {
1701 			EG(vm_stack_top) = (zval*)call;
1702 		}
1703 
1704 		if (!1) {
1705 			i_zval_ptr_dtor(ret);
1706 		}
1707 	}
1708 
1709 	if (UNEXPECTED(EG(exception) != NULL)) {
1710 		zend_rethrow_exception(execute_data);
1711 		HANDLE_EXCEPTION();
1712 	}
1713 	ZEND_VM_SET_OPCODE(opline + 1);
1714 	ZEND_VM_CONTINUE();
1715 }
1716 
ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1717 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1718 {
1719 	USE_OPLINE
1720 	zend_execute_data *call = EX(call);
1721 	zend_function *fbc = call->func;
1722 	zval *ret;
1723 
1724 	SAVE_OPLINE();
1725 	EX(call) = call->prev_execute_data;
1726 
1727 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1728 		ret = NULL;
1729 		if (RETURN_VALUE_USED(opline)) {
1730 			ret = EX_VAR(opline->result.var);
1731 		}
1732 
1733 		call->prev_execute_data = execute_data;
1734 		execute_data = call;
1735 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1736 		LOAD_OPLINE_EX();
1737 		SAVE_OPLINE();
1738 		zend_observer_fcall_begin_specialized(execute_data, false);
1739 
1740 		ZEND_VM_ENTER_EX();
1741 	} else {
1742 		zval retval;
1743 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1744 		if (1) {
1745 			ret = NULL;
1746 		}
1747 
1748 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1749 			zend_deprecated_function(fbc);
1750 			if (UNEXPECTED(EG(exception) != NULL)) {
1751 				UNDEF_RESULT();
1752 				if (!RETURN_VALUE_USED(opline)) {
1753 					ret = &retval;
1754 					ZVAL_UNDEF(ret);
1755 				}
1756 				goto fcall_by_name_end;
1757 			}
1758 		}
1759 
1760 		call->prev_execute_data = execute_data;
1761 		EG(current_execute_data) = call;
1762 
1763 #if ZEND_DEBUG
1764 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1765 #endif
1766 
1767 		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
1768 		ZVAL_NULL(ret);
1769 
1770 		zend_observer_fcall_begin_specialized(call, false);
1771 		fbc->internal_function.handler(call, ret);
1772 
1773 #if ZEND_DEBUG
1774 		if (!EG(exception) && call->func) {
1775 			if (should_throw) {
1776 				zend_internal_call_arginfo_violation(call->func);
1777 			}
1778 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1779 				zend_verify_internal_return_type(call->func, ret));
1780 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1781 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1782 			zend_verify_internal_func_info(call->func, ret);
1783 		}
1784 #endif
1785 		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
1786 
1787 		EG(current_execute_data) = execute_data;
1788 
1789 fcall_by_name_end:
1790 		zend_vm_stack_free_args(call);
1791 
1792 		uint32_t call_info = ZEND_CALL_INFO(call);
1793 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1794 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1795 				zend_free_extra_named_params(call->extra_named_params);
1796 			}
1797 			zend_vm_stack_free_call_frame_ex(call_info, call);
1798 		} else {
1799 			EG(vm_stack_top) = (zval*)call;
1800 		}
1801 
1802 		if (!RETURN_VALUE_USED(opline)) {
1803 			i_zval_ptr_dtor(ret);
1804 		}
1805 	}
1806 
1807 	if (UNEXPECTED(EG(exception) != NULL)) {
1808 		zend_rethrow_exception(execute_data);
1809 		HANDLE_EXCEPTION();
1810 	}
1811 	ZEND_VM_SET_OPCODE(opline + 1);
1812 	ZEND_VM_CONTINUE();
1813 }
1814 
ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1815 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1816 {
1817 	USE_OPLINE
1818 	zend_execute_data *call = EX(call);
1819 	zend_function *fbc = call->func;
1820 	zval *ret;
1821 
1822 	SAVE_OPLINE();
1823 	EX(call) = call->prev_execute_data;
1824 
1825 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1826 		ret = NULL;
1827 		if (0) {
1828 			ret = EX_VAR(opline->result.var);
1829 		}
1830 
1831 		call->prev_execute_data = execute_data;
1832 		execute_data = call;
1833 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1834 
1835 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1836 			LOAD_OPLINE_EX();
1837 
1838 
1839 			ZEND_VM_ENTER_EX();
1840 		} else {
1841 			SAVE_OPLINE_EX();
1842 
1843 			execute_data = EX(prev_execute_data);
1844 			LOAD_OPLINE();
1845 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1846 			zend_execute_ex(call);
1847 		}
1848 	} else {
1849 		zval retval;
1850 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1851 		if (0) {
1852 			ret = NULL;
1853 		}
1854 
1855 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1856 			zend_deprecated_function(fbc);
1857 			if (UNEXPECTED(EG(exception) != NULL)) {
1858 				UNDEF_RESULT();
1859 				if (!0) {
1860 					ret = &retval;
1861 					ZVAL_UNDEF(ret);
1862 				}
1863 				goto fcall_end;
1864 			}
1865 		}
1866 
1867 		call->prev_execute_data = execute_data;
1868 		EG(current_execute_data) = call;
1869 
1870 #if ZEND_DEBUG
1871 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1872 #endif
1873 
1874 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1875 		ZVAL_NULL(ret);
1876 
1877 		if (!zend_execute_internal) {
1878 			/* saves one function call if zend_execute_internal is not used */
1879 			fbc->internal_function.handler(call, ret);
1880 		} else {
1881 			zend_execute_internal(call, ret);
1882 		}
1883 
1884 #if ZEND_DEBUG
1885 		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
1886 			if (should_throw) {
1887 				zend_internal_call_arginfo_violation(call->func);
1888 			}
1889 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1890 				zend_verify_internal_return_type(call->func, ret));
1891 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1892 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1893 			zend_verify_internal_func_info(call->func, ret);
1894 		}
1895 #endif
1896 
1897 		EG(current_execute_data) = execute_data;
1898 
1899 fcall_end:
1900 		zend_vm_stack_free_args(call);
1901 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1902 			zend_free_extra_named_params(call->extra_named_params);
1903 		}
1904 
1905 		if (!0) {
1906 			i_zval_ptr_dtor(ret);
1907 		}
1908 	}
1909 
1910 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1911 		OBJ_RELEASE(Z_OBJ(call->This));
1912 	}
1913 
1914 	zend_vm_stack_free_call_frame(call);
1915 	if (UNEXPECTED(EG(exception) != NULL)) {
1916 		zend_rethrow_exception(execute_data);
1917 		HANDLE_EXCEPTION();
1918 	}
1919 
1920 	ZEND_VM_SET_OPCODE(opline + 1);
1921 	ZEND_VM_CONTINUE();
1922 }
1923 
ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1924 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1925 {
1926 	USE_OPLINE
1927 	zend_execute_data *call = EX(call);
1928 	zend_function *fbc = call->func;
1929 	zval *ret;
1930 
1931 	SAVE_OPLINE();
1932 	EX(call) = call->prev_execute_data;
1933 
1934 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1935 		ret = NULL;
1936 		if (1) {
1937 			ret = EX_VAR(opline->result.var);
1938 		}
1939 
1940 		call->prev_execute_data = execute_data;
1941 		execute_data = call;
1942 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1943 
1944 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1945 			LOAD_OPLINE_EX();
1946 
1947 
1948 			ZEND_VM_ENTER_EX();
1949 		} else {
1950 			SAVE_OPLINE_EX();
1951 
1952 			execute_data = EX(prev_execute_data);
1953 			LOAD_OPLINE();
1954 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1955 			zend_execute_ex(call);
1956 		}
1957 	} else {
1958 		zval retval;
1959 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1960 		if (0) {
1961 			ret = NULL;
1962 		}
1963 
1964 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1965 			zend_deprecated_function(fbc);
1966 			if (UNEXPECTED(EG(exception) != NULL)) {
1967 				UNDEF_RESULT();
1968 				if (!1) {
1969 					ret = &retval;
1970 					ZVAL_UNDEF(ret);
1971 				}
1972 				goto fcall_end;
1973 			}
1974 		}
1975 
1976 		call->prev_execute_data = execute_data;
1977 		EG(current_execute_data) = call;
1978 
1979 #if ZEND_DEBUG
1980 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1981 #endif
1982 
1983 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1984 		ZVAL_NULL(ret);
1985 
1986 		if (!zend_execute_internal) {
1987 			/* saves one function call if zend_execute_internal is not used */
1988 			fbc->internal_function.handler(call, ret);
1989 		} else {
1990 			zend_execute_internal(call, ret);
1991 		}
1992 
1993 #if ZEND_DEBUG
1994 		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
1995 			if (should_throw) {
1996 				zend_internal_call_arginfo_violation(call->func);
1997 			}
1998 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1999 				zend_verify_internal_return_type(call->func, ret));
2000 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
2001 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
2002 			zend_verify_internal_func_info(call->func, ret);
2003 		}
2004 #endif
2005 
2006 		EG(current_execute_data) = execute_data;
2007 
2008 fcall_end:
2009 		zend_vm_stack_free_args(call);
2010 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
2011 			zend_free_extra_named_params(call->extra_named_params);
2012 		}
2013 
2014 		if (!1) {
2015 			i_zval_ptr_dtor(ret);
2016 		}
2017 	}
2018 
2019 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
2020 		OBJ_RELEASE(Z_OBJ(call->This));
2021 	}
2022 
2023 	zend_vm_stack_free_call_frame(call);
2024 	if (UNEXPECTED(EG(exception) != NULL)) {
2025 		zend_rethrow_exception(execute_data);
2026 		HANDLE_EXCEPTION();
2027 	}
2028 
2029 	ZEND_VM_SET_OPCODE(opline + 1);
2030 	ZEND_VM_CONTINUE();
2031 }
2032 
ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2033 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2034 {
2035 	USE_OPLINE
2036 	zend_execute_data *call = EX(call);
2037 	zend_function *fbc = call->func;
2038 	zval *ret;
2039 
2040 	SAVE_OPLINE();
2041 	EX(call) = call->prev_execute_data;
2042 
2043 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
2044 		ret = NULL;
2045 		if (RETURN_VALUE_USED(opline)) {
2046 			ret = EX_VAR(opline->result.var);
2047 		}
2048 
2049 		call->prev_execute_data = execute_data;
2050 		execute_data = call;
2051 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
2052 
2053 		if (EXPECTED(zend_execute_ex == execute_ex)) {
2054 			LOAD_OPLINE_EX();
2055 			SAVE_OPLINE();
2056 			zend_observer_fcall_begin_specialized(execute_data, false);
2057 			ZEND_VM_ENTER_EX();
2058 		} else {
2059 			SAVE_OPLINE_EX();
2060 			zend_observer_fcall_begin_specialized(execute_data, false);
2061 			execute_data = EX(prev_execute_data);
2062 			LOAD_OPLINE();
2063 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
2064 			zend_execute_ex(call);
2065 		}
2066 	} else {
2067 		zval retval;
2068 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
2069 		if (1) {
2070 			ret = NULL;
2071 		}
2072 
2073 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
2074 			zend_deprecated_function(fbc);
2075 			if (UNEXPECTED(EG(exception) != NULL)) {
2076 				UNDEF_RESULT();
2077 				if (!RETURN_VALUE_USED(opline)) {
2078 					ret = &retval;
2079 					ZVAL_UNDEF(ret);
2080 				}
2081 				goto fcall_end;
2082 			}
2083 		}
2084 
2085 		call->prev_execute_data = execute_data;
2086 		EG(current_execute_data) = call;
2087 
2088 #if ZEND_DEBUG
2089 		bool should_throw = zend_internal_call_should_throw(fbc, call);
2090 #endif
2091 
2092 		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
2093 		ZVAL_NULL(ret);
2094 
2095 		zend_observer_fcall_begin_specialized(call, false);
2096 		if (!zend_execute_internal) {
2097 			/* saves one function call if zend_execute_internal is not used */
2098 			fbc->internal_function.handler(call, ret);
2099 		} else {
2100 			zend_execute_internal(call, ret);
2101 		}
2102 
2103 #if ZEND_DEBUG
2104 		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
2105 			if (should_throw) {
2106 				zend_internal_call_arginfo_violation(call->func);
2107 			}
2108 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
2109 				zend_verify_internal_return_type(call->func, ret));
2110 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
2111 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
2112 			zend_verify_internal_func_info(call->func, ret);
2113 		}
2114 #endif
2115 		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
2116 
2117 		EG(current_execute_data) = execute_data;
2118 
2119 fcall_end:
2120 		zend_vm_stack_free_args(call);
2121 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
2122 			zend_free_extra_named_params(call->extra_named_params);
2123 		}
2124 
2125 		if (!RETURN_VALUE_USED(opline)) {
2126 			i_zval_ptr_dtor(ret);
2127 		}
2128 	}
2129 
2130 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
2131 		OBJ_RELEASE(Z_OBJ(call->This));
2132 	}
2133 
2134 	zend_vm_stack_free_call_frame(call);
2135 	if (UNEXPECTED(EG(exception) != NULL)) {
2136 		zend_rethrow_exception(execute_data);
2137 		HANDLE_EXCEPTION();
2138 	}
2139 
2140 	ZEND_VM_SET_OPCODE(opline + 1);
2141 	ZEND_VM_CONTINUE();
2142 }
2143 
ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2144 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2145 {
2146 	zval *return_value = EX(return_value);
2147 
2148 	if (EXPECTED(return_value)) {
2149 		USE_OPLINE
2150 		zend_generator *generator;
2151 		zend_execute_data *gen_execute_data;
2152 		uint32_t num_args, used_stack, call_info;
2153 
2154 		SAVE_OPLINE();
2155 		object_init_ex(return_value, zend_ce_generator);
2156 
2157 		/*
2158 		 * Normally the execute_data is allocated on the VM stack (because it does
2159 		 * not actually do any allocation and thus is faster). For generators
2160 		 * though this behavior would be suboptimal, because the (rather large)
2161 		 * structure would have to be copied back and forth every time execution is
2162 		 * suspended or resumed. That's why for generators the execution context
2163 		 * is allocated on heap.
2164 		 */
2165 		num_args = EX_NUM_ARGS();
2166 		if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
2167 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
2168 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
2169 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
2170 		} else {
2171 			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);
2172 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
2173 		}
2174 		memcpy(gen_execute_data, execute_data, used_stack);
2175 
2176 		/* Save execution context in generator object. */
2177 		generator = (zend_generator *) Z_OBJ_P(EX(return_value));
2178 		generator->func = gen_execute_data->func;
2179 		generator->execute_data = gen_execute_data;
2180 		generator->frozen_call_stack = NULL;
2181 		generator->execute_fake.opline = NULL;
2182 		generator->execute_fake.func = NULL;
2183 		generator->execute_fake.prev_execute_data = NULL;
2184 		ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);
2185 
2186 		gen_execute_data->opline = opline + 1;
2187 		/* EX(return_value) keeps pointer to zend_object (not a real zval) */
2188 		gen_execute_data->return_value = (zval*)generator;
2189 		call_info = Z_TYPE_INFO(EX(This));
2190 		if ((call_info & Z_TYPE_MASK) == IS_OBJECT
2191 		 && (!(call_info & (ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS))
2192 			 /* Bug #72523 */
2193 			|| UNEXPECTED(zend_execute_ex != execute_ex))) {
2194 			ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
2195 			Z_ADDREF(gen_execute_data->This);
2196 		}
2197 		ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
2198 		Z_TYPE_INFO(gen_execute_data->This) = call_info;
2199 		gen_execute_data->prev_execute_data = NULL;
2200 
2201 		call_info = EX_CALL_INFO();
2202 		EG(current_execute_data) = EX(prev_execute_data);
2203 		if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
2204 			EG(vm_stack_top) = (zval*)execute_data;
2205 			execute_data = EX(prev_execute_data);
2206 			LOAD_NEXT_OPLINE();
2207 			ZEND_VM_LEAVE();
2208 		} else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
2209 			zend_execute_data *old_execute_data = execute_data;
2210 			execute_data = EX(prev_execute_data);
2211 			zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
2212 			LOAD_NEXT_OPLINE();
2213 			ZEND_VM_LEAVE();
2214 		} else {
2215 			ZEND_VM_RETURN();
2216 		}
2217 	} else {
2218 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2219 	}
2220 }
2221 
zend_cannot_pass_by_ref_helper_SPEC(uint32_t _arg_num,zval * _arg ZEND_OPCODE_HANDLER_ARGS_DC)2222 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_cannot_pass_by_ref_helper_SPEC(uint32_t _arg_num, zval *_arg ZEND_OPCODE_HANDLER_ARGS_DC)
2223 {
2224 	USE_OPLINE
2225 
2226 	SAVE_OPLINE();
2227 
2228 	zend_cannot_pass_by_reference(_arg_num);
2229 	FREE_OP(opline->op1_type, opline->op1.var);
2230 	ZVAL_UNDEF(_arg);
2231 	HANDLE_EXCEPTION();
2232 }
2233 
ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2234 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2235 {
2236 	USE_OPLINE
2237 	zval *args;
2238 	uint32_t arg_num;
2239 
2240 	SAVE_OPLINE();
2241 	args = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
2242 	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
2243 
2244 send_again:
2245 	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
2246 		HashTable *ht = Z_ARRVAL_P(args);
2247 		zval *arg, *top;
2248 		zend_string *name;
2249 		bool have_named_params = 0;
2250 
2251 		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));
2252 
2253 		// TODO: Speed this up using a flag that specifies whether there are any ref parameters.
2254 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
2255 			uint32_t tmp_arg_num = arg_num;
2256 			bool separate = 0;
2257 
2258 			/* check if any of arguments are going to be passed by reference */
2259 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2260 				if (UNEXPECTED(name)) {
2261 					void *cache_slot[2] = {NULL, NULL};
2262 					tmp_arg_num = zend_get_arg_offset_by_name(
2263 						EX(call)->func, name, cache_slot) + 1;
2264 				}
2265 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, tmp_arg_num)) {
2266 					separate = 1;
2267 					break;
2268 				}
2269 				tmp_arg_num++;
2270 			} ZEND_HASH_FOREACH_END();
2271 			if (separate) {
2272 				SEPARATE_ARRAY(args);
2273 				ht = Z_ARRVAL_P(args);
2274 			}
2275 		}
2276 
2277 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2278 			if (UNEXPECTED(name)) {
2279 				void *cache_slot[2] = {NULL, NULL};
2280 				have_named_params = 1;
2281 				top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2282 				if (UNEXPECTED(!top)) {
2283 					FREE_OP(opline->op1_type, opline->op1.var);
2284 					HANDLE_EXCEPTION();
2285 				}
2286 			} else {
2287 				if (have_named_params) {
2288 					zend_throw_error(NULL,
2289 						"Cannot use positional argument after named argument during unpacking");
2290 					FREE_OP(opline->op1_type, opline->op1.var);
2291 					HANDLE_EXCEPTION();
2292 				}
2293 
2294 				top = ZEND_CALL_ARG(EX(call), arg_num);
2295 				ZEND_CALL_NUM_ARGS(EX(call))++;
2296 			}
2297 
2298 			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2299 				if (Z_ISREF_P(arg)) {
2300 					Z_ADDREF_P(arg);
2301 					ZVAL_REF(top, Z_REF_P(arg));
2302 				} else if (opline->op1_type & (IS_VAR|IS_CV)) {
2303 					/* array is already separated above */
2304 					ZVAL_MAKE_REF_EX(arg, 2);
2305 					ZVAL_REF(top, Z_REF_P(arg));
2306 				} else {
2307 					Z_TRY_ADDREF_P(arg);
2308 					ZVAL_NEW_REF(top, arg);
2309 				}
2310 			} else {
2311 				ZVAL_COPY_DEREF(top, arg);
2312 			}
2313 
2314 			arg_num++;
2315 		} ZEND_HASH_FOREACH_END();
2316 
2317 	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
2318 		zend_class_entry *ce = Z_OBJCE_P(args);
2319 		zend_object_iterator *iter;
2320 		bool have_named_params = 0;
2321 
2322 		if (!ce || !ce->get_iterator) {
2323 			zend_type_error("Only arrays and Traversables can be unpacked");
2324 		} else {
2325 
2326 			iter = ce->get_iterator(ce, args, 0);
2327 			if (UNEXPECTED(!iter)) {
2328 				FREE_OP(opline->op1_type, opline->op1.var);
2329 				if (!EG(exception)) {
2330 					zend_throw_exception_ex(
2331 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
2332 					);
2333 				}
2334 				HANDLE_EXCEPTION();
2335 			}
2336 
2337 			const zend_object_iterator_funcs *funcs = iter->funcs;
2338 			if (funcs->rewind) {
2339 				funcs->rewind(iter);
2340 			}
2341 
2342 			for (; funcs->valid(iter) == SUCCESS; ++arg_num) {
2343 				zval *arg, *top;
2344 
2345 				if (UNEXPECTED(EG(exception) != NULL)) {
2346 					break;
2347 				}
2348 
2349 				arg = funcs->get_current_data(iter);
2350 				if (UNEXPECTED(EG(exception) != NULL)) {
2351 					break;
2352 				}
2353 
2354 				zend_string *name = NULL;
2355 				if (funcs->get_current_key) {
2356 					zval key;
2357 					funcs->get_current_key(iter, &key);
2358 					if (UNEXPECTED(EG(exception) != NULL)) {
2359 						break;
2360 					}
2361 
2362 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
2363 						if (UNEXPECTED(Z_TYPE(key) != IS_STRING)) {
2364 							zend_throw_error(NULL,
2365 								"Keys must be of type int|string during argument unpacking");
2366 							zval_ptr_dtor(&key);
2367 							break;
2368 						}
2369 
2370 						name = Z_STR_P(&key);
2371 					}
2372 				}
2373 
2374 				if (UNEXPECTED(name)) {
2375 					void *cache_slot[2] = {NULL, NULL};
2376 					have_named_params = 1;
2377 					top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2378 					if (UNEXPECTED(!top)) {
2379 						zend_string_release(name);
2380 						break;
2381 					}
2382 
2383 					ZVAL_DEREF(arg);
2384 					Z_TRY_ADDREF_P(arg);
2385 
2386 					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2387 						zend_error(
2388 							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
2389 							" by unpacking a Traversable, passing by-value instead", arg_num,
2390 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
2391 							EX(call)->func->common.scope ? "::" : "",
2392 							ZSTR_VAL(EX(call)->func->common.function_name)
2393 						);
2394 						ZVAL_NEW_REF(top, arg);
2395 					} else {
2396 						ZVAL_COPY_VALUE(top, arg);
2397 					}
2398 
2399 					zend_string_release(name);
2400 				} else {
2401 					if (have_named_params) {
2402 						zend_throw_error(NULL,
2403 							"Cannot use positional argument after named argument during unpacking");
2404 						break;
2405 					}
2406 
2407 					zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
2408 					top = ZEND_CALL_ARG(EX(call), arg_num);
2409 					ZVAL_DEREF(arg);
2410 					Z_TRY_ADDREF_P(arg);
2411 
2412 					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2413 						zend_error(
2414 							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
2415 							" by unpacking a Traversable, passing by-value instead", arg_num,
2416 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
2417 							EX(call)->func->common.scope ? "::" : "",
2418 							ZSTR_VAL(EX(call)->func->common.function_name)
2419 						);
2420 						ZVAL_NEW_REF(top, arg);
2421 					} else {
2422 						ZVAL_COPY_VALUE(top, arg);
2423 					}
2424 
2425 					ZEND_CALL_NUM_ARGS(EX(call))++;
2426 				}
2427 
2428 				funcs->move_forward(iter);
2429 			}
2430 
2431 			zend_iterator_dtor(iter);
2432 		}
2433 	} else if (EXPECTED(Z_ISREF_P(args))) {
2434 		args = Z_REFVAL_P(args);
2435 		goto send_again;
2436 	} else {
2437 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
2438 			ZVAL_UNDEFINED_OP1();
2439 		}
2440 		zend_type_error("Only arrays and Traversables can be unpacked");
2441 	}
2442 
2443 	FREE_OP(opline->op1_type, opline->op1.var);
2444 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2445 }
2446 
ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2447 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2448 {
2449 	USE_OPLINE
2450 	zval *args;
2451 
2452 	SAVE_OPLINE();
2453 	args = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2454 
2455 	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
2456 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
2457 			args = Z_REFVAL_P(args);
2458 			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
2459 				goto send_array;
2460 			}
2461 		}
2462 		zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_value_name(args));
2463 		FREE_OP(opline->op2_type, opline->op2.var);
2464 		FREE_OP(opline->op1_type, opline->op1.var);
2465 		HANDLE_EXCEPTION();
2466 	} else {
2467 		uint32_t arg_num;
2468 		HashTable *ht;
2469 		zval *arg, *param;
2470 
2471 send_array:
2472 		ht = Z_ARRVAL_P(args);
2473 		if (opline->op2_type != IS_UNUSED) {
2474 			/* We don't need to handle named params in this case,
2475 			 * because array_slice() is called with $preserve_keys == false. */
2476 			zval *op2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
2477 			uint32_t skip = opline->extended_value;
2478 			uint32_t count = zend_hash_num_elements(ht);
2479 			zend_long len;
2480 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
2481 				len = Z_LVAL_P(op2);
2482 			} else if (Z_TYPE_P(op2) == IS_NULL) {
2483 				len = count - skip;
2484 			} else if (EX_USES_STRICT_TYPES()
2485 					|| !zend_parse_arg_long_weak(op2, &len, /* arg_num */ 3)) {
2486 				zend_type_error(
2487 					"array_slice(): Argument #3 ($length) must be of type ?int, %s given",
2488 					zend_zval_value_name(op2));
2489 				FREE_OP(opline->op2_type, opline->op2.var);
2490 				FREE_OP(opline->op1_type, opline->op1.var);
2491 				HANDLE_EXCEPTION();
2492 			}
2493 
2494 			if (len < 0) {
2495 				len += (zend_long)(count - skip);
2496 			}
2497 			if (skip < count && len > 0) {
2498 				if (len > (zend_long)(count - skip)) {
2499 					len = (zend_long)(count - skip);
2500 				}
2501 				zend_vm_stack_extend_call_frame(&EX(call), 0, len);
2502 				arg_num = 1;
2503 				param = ZEND_CALL_ARG(EX(call), 1);
2504 				ZEND_HASH_FOREACH_VAL(ht, arg) {
2505 					bool must_wrap = 0;
2506 					if (skip > 0) {
2507 						skip--;
2508 						continue;
2509 					} else if ((zend_long)(arg_num - 1) >= len) {
2510 						break;
2511 					} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2512 						if (UNEXPECTED(!Z_ISREF_P(arg))) {
2513 							if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2514 								/* By-value send is not allowed -- emit a warning,
2515 								 * but still perform the call. */
2516 								zend_param_must_be_ref(EX(call)->func, arg_num);
2517 								must_wrap = 1;
2518 							}
2519 						}
2520 					} else {
2521 						if (Z_ISREF_P(arg) &&
2522 						    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2523 							/* don't separate references for __call */
2524 							arg = Z_REFVAL_P(arg);
2525 						}
2526 					}
2527 					if (EXPECTED(!must_wrap)) {
2528 						ZVAL_COPY(param, arg);
2529 					} else {
2530 						Z_TRY_ADDREF_P(arg);
2531 						ZVAL_NEW_REF(param, arg);
2532 					}
2533 					ZEND_CALL_NUM_ARGS(EX(call))++;
2534 					arg_num++;
2535 					param++;
2536 				} ZEND_HASH_FOREACH_END();
2537 			}
2538 			FREE_OP(opline->op2_type, opline->op2.var);
2539 		} else {
2540 			zend_string *name;
2541 			bool have_named_params;
2542 			zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
2543 			arg_num = 1;
2544 			param = ZEND_CALL_ARG(EX(call), 1);
2545 			have_named_params = 0;
2546 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2547 				if (name) {
2548 					void *cache_slot[2] = {NULL, NULL};
2549 					have_named_params = 1;
2550 					param = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2551 					if (!param) {
2552 						FREE_OP(opline->op1_type, opline->op1.var);
2553 						HANDLE_EXCEPTION();
2554 					}
2555 				} else if (have_named_params) {
2556 					zend_throw_error(NULL,
2557 						"Cannot use positional argument after named argument");
2558 					FREE_OP(opline->op1_type, opline->op1.var);
2559 					HANDLE_EXCEPTION();
2560 				}
2561 
2562 				bool must_wrap = 0;
2563 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2564 					if (UNEXPECTED(!Z_ISREF_P(arg))) {
2565 						if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2566 							/* By-value send is not allowed -- emit a warning,
2567 							 * but still perform the call. */
2568 							zend_param_must_be_ref(EX(call)->func, arg_num);
2569 							must_wrap = 1;
2570 						}
2571 					}
2572 				} else {
2573 					if (Z_ISREF_P(arg) &&
2574 					    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2575 						/* don't separate references for __call */
2576 						arg = Z_REFVAL_P(arg);
2577 					}
2578 				}
2579 
2580 				if (EXPECTED(!must_wrap)) {
2581 					ZVAL_COPY(param, arg);
2582 				} else {
2583 					Z_TRY_ADDREF_P(arg);
2584 					ZVAL_NEW_REF(param, arg);
2585 				}
2586 				if (!name) {
2587 					ZEND_CALL_NUM_ARGS(EX(call))++;
2588 					arg_num++;
2589 					param++;
2590 				}
2591 			} ZEND_HASH_FOREACH_END();
2592 		}
2593 	}
2594 	FREE_OP(opline->op1_type, opline->op1.var);
2595 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2596 }
2597 
zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)2598 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2599 {
2600 #ifdef ZEND_VM_IP_GLOBAL_REG
2601 	USE_OPLINE
2602 
2603 	SAVE_OPLINE();
2604 #endif
2605 	zend_missing_arg_error(execute_data);
2606 	HANDLE_EXCEPTION();
2607 }
2608 
zend_verify_recv_arg_type_helper_SPEC(zval * op_1 ZEND_OPCODE_HANDLER_ARGS_DC)2609 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_verify_recv_arg_type_helper_SPEC(zval *op_1 ZEND_OPCODE_HANDLER_ARGS_DC)
2610 {
2611 	USE_OPLINE
2612 
2613 	SAVE_OPLINE();
2614 	if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), opline->op1.num, op_1, CACHE_ADDR(opline->extended_value)))) {
2615 		HANDLE_EXCEPTION();
2616 	}
2617 
2618 	ZEND_VM_NEXT_OPCODE();
2619 }
2620 
ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2621 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2622 {
2623 	USE_OPLINE
2624 	uint32_t arg_num = opline->op1.num;
2625 
2626 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
2627 		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2628 	}
2629 
2630 	ZEND_VM_NEXT_OPCODE();
2631 }
2632 
zend_case_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)2633 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)
2634 {
2635 	int ret;
2636 	USE_OPLINE
2637 
2638 	SAVE_OPLINE();
2639 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
2640 		op_1 = ZVAL_UNDEFINED_OP1();
2641 	}
2642 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
2643 		op_2 = ZVAL_UNDEFINED_OP2();
2644 	}
2645 	ret = zend_compare(op_1, op_2);
2646 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
2647 		zval_ptr_dtor_nogc(op_2);
2648 	}
2649 	ZEND_VM_SMART_BRANCH(ret == 0, 1);
2650 }
2651 
ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2652 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2653 {
2654 	USE_OPLINE
2655 	zval *op1;
2656 	HashTable *result_ht;
2657 
2658 	SAVE_OPLINE();
2659 	op1 = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2660 	result_ht = Z_ARRVAL_P(EX_VAR(opline->result.var));
2661 
2662 add_unpack_again:
2663 	if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
2664 		HashTable *ht = Z_ARRVAL_P(op1);
2665 		zval *val;
2666 
2667 		if (HT_IS_PACKED(ht) && (zend_hash_num_elements(result_ht) == 0 || HT_IS_PACKED(result_ht))) {
2668 			zend_hash_extend(result_ht, result_ht->nNumUsed + zend_hash_num_elements(ht), 1);
2669 			ZEND_HASH_FILL_PACKED(result_ht) {
2670 				ZEND_HASH_PACKED_FOREACH_VAL(ht, val) {
2671 					if (UNEXPECTED(Z_ISREF_P(val)) &&
2672 						UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
2673 						val = Z_REFVAL_P(val);
2674 					}
2675 					Z_TRY_ADDREF_P(val);
2676 					ZEND_HASH_FILL_ADD(val);
2677 				} ZEND_HASH_FOREACH_END();
2678 			} ZEND_HASH_FILL_END();
2679 		} else {
2680 			zend_string *key;
2681 
2682 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
2683 				if (UNEXPECTED(Z_ISREF_P(val)) &&
2684 					UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
2685 					val = Z_REFVAL_P(val);
2686 				}
2687 				Z_TRY_ADDREF_P(val);
2688 				if (key) {
2689 					zend_hash_update(result_ht, key, val);
2690 				} else {
2691 					if (!zend_hash_next_index_insert(result_ht, val)) {
2692 						zend_cannot_add_element();
2693 						zval_ptr_dtor_nogc(val);
2694 						break;
2695 					}
2696 				}
2697 			} ZEND_HASH_FOREACH_END();
2698 		}
2699 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
2700 		zend_class_entry *ce = Z_OBJCE_P(op1);
2701 		zend_object_iterator *iter;
2702 
2703 		if (!ce || !ce->get_iterator) {
2704 			zend_type_error("Only arrays and Traversables can be unpacked");
2705 		} else {
2706 			iter = ce->get_iterator(ce, op1, 0);
2707 			if (UNEXPECTED(!iter)) {
2708 				FREE_OP(opline->op1_type, opline->op1.var);
2709 				if (!EG(exception)) {
2710 					zend_throw_exception_ex(
2711 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
2712 					);
2713 				}
2714 				HANDLE_EXCEPTION();
2715 			}
2716 
2717 			const zend_object_iterator_funcs *funcs = iter->funcs;
2718 			if (funcs->rewind) {
2719 				funcs->rewind(iter);
2720 			}
2721 
2722 			for (; funcs->valid(iter) == SUCCESS; ) {
2723 				zval *val;
2724 
2725 				if (UNEXPECTED(EG(exception) != NULL)) {
2726 					break;
2727 				}
2728 
2729 				val = funcs->get_current_data(iter);
2730 				if (UNEXPECTED(EG(exception) != NULL)) {
2731 					break;
2732 				}
2733 
2734 				zval key;
2735 				if (funcs->get_current_key) {
2736 					funcs->get_current_key(iter, &key);
2737 					if (UNEXPECTED(EG(exception) != NULL)) {
2738 						break;
2739 					}
2740 
2741 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG && Z_TYPE(key) != IS_STRING)) {
2742 						zend_throw_error(NULL,
2743 							"Keys must be of type int|string during array unpacking");
2744 						zval_ptr_dtor(&key);
2745 						break;
2746 					}
2747 				} else {
2748 					ZVAL_UNDEF(&key);
2749 				}
2750 
2751 				ZVAL_DEREF(val);
2752 				Z_TRY_ADDREF_P(val);
2753 
2754 				zend_ulong num_key;
2755 				if (Z_TYPE(key) == IS_STRING && !ZEND_HANDLE_NUMERIC(Z_STR(key), num_key)) {
2756 					zend_hash_update(result_ht, Z_STR(key), val);
2757 					zval_ptr_dtor_str(&key);
2758 				} else {
2759 					zval_ptr_dtor(&key);
2760 					if (!zend_hash_next_index_insert(result_ht, val)) {
2761 						zend_cannot_add_element();
2762 						zval_ptr_dtor_nogc(val);
2763 						break;
2764 					}
2765 				}
2766 
2767 				funcs->move_forward(iter);
2768 				if (UNEXPECTED(EG(exception))) {
2769 					break;
2770 				}
2771 			}
2772 
2773 			zend_iterator_dtor(iter);
2774 		}
2775 	} else if (EXPECTED(Z_ISREF_P(op1))) {
2776 		op1 = Z_REFVAL_P(op1);
2777 		goto add_unpack_again;
2778 	} else {
2779 		zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
2780 	}
2781 
2782 	FREE_OP(opline->op1_type, opline->op1.var);
2783 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2784 }
2785 
ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2786 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2787 {
2788 	USE_OPLINE
2789 	zval *varname;
2790 	zend_string *name, *tmp_name = NULL;
2791 	zend_class_entry *ce;
2792 
2793 	SAVE_OPLINE();
2794 
2795 	if (opline->op2_type == IS_CONST) {
2796 		ce = CACHED_PTR(opline->extended_value);
2797 		if (UNEXPECTED(ce == NULL)) {
2798 			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);
2799 			if (UNEXPECTED(ce == NULL)) {
2800 				FREE_OP(opline->op1_type, opline->op1.var);
2801 				HANDLE_EXCEPTION();
2802 			}
2803 			/*CACHE_PTR(opline->extended_value, ce);*/
2804 		}
2805 	} else if (opline->op2_type == IS_UNUSED) {
2806 		ce = zend_fetch_class(NULL, opline->op2.num);
2807 		if (UNEXPECTED(ce == NULL)) {
2808 			FREE_OP(opline->op1_type, opline->op1.var);
2809 			HANDLE_EXCEPTION();
2810 		}
2811 	} else {
2812 		ce = Z_CE_P(EX_VAR(opline->op2.var));
2813 	}
2814 
2815 	varname = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
2816 	if (opline->op1_type == IS_CONST) {
2817 		name = Z_STR_P(varname);
2818 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
2819 		name = Z_STR_P(varname);
2820 	} else {
2821 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
2822 			varname = ZVAL_UNDEFINED_OP1();
2823 		}
2824 		name = zval_try_get_tmp_string(varname, &tmp_name);
2825 		if (UNEXPECTED(!name)) {
2826 			FREE_OP(opline->op1_type, opline->op1.var);
2827 			HANDLE_EXCEPTION();
2828 		}
2829 	}
2830 
2831 	zend_std_unset_static_property(ce, name);
2832 
2833 	zend_tmp_string_release(tmp_name);
2834 	FREE_OP(opline->op1_type, opline->op1.var);
2835 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2836 }
2837 
zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)2838 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2839 {
2840 	USE_OPLINE
2841 	zval *array;
2842 	zval *value;
2843 	uint32_t value_type;
2844 	HashTable *fe_ht;
2845 	HashPosition pos;
2846 	Bucket *p;
2847 	zend_object_iterator *iter;
2848 
2849 	array = EX_VAR(opline->op1.var);
2850 	SAVE_OPLINE();
2851 
2852 	ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
2853 	if ((iter = zend_iterator_unwrap(array)) == NULL) {
2854 		/* plain object */
2855 
2856 		fe_ht = Z_OBJPROP_P(array);
2857 		pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
2858 		p = fe_ht->arData + pos;
2859 		while (1) {
2860 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
2861 				/* reached end of iteration */
2862 				goto fe_fetch_r_exit;
2863 			}
2864 			pos++;
2865 			value = &p->val;
2866 			value_type = Z_TYPE_INFO_P(value);
2867 			if (EXPECTED(value_type != IS_UNDEF)) {
2868 				if (UNEXPECTED(value_type == IS_INDIRECT)) {
2869 					value = Z_INDIRECT_P(value);
2870 					value_type = Z_TYPE_INFO_P(value);
2871 					if (EXPECTED(value_type != IS_UNDEF)
2872 					 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
2873 						break;
2874 					}
2875 				} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
2876 						|| !p->key
2877 						|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
2878 					break;
2879 				}
2880 			}
2881 			p++;
2882 		}
2883 		EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
2884 		if (RETURN_VALUE_USED(opline)) {
2885 			if (UNEXPECTED(!p->key)) {
2886 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
2887 			} else if (ZSTR_VAL(p->key)[0]) {
2888 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
2889 			} else {
2890 				const char *class_name, *prop_name;
2891 				size_t prop_name_len;
2892 				zend_unmangle_property_name_ex(
2893 					p->key, &class_name, &prop_name, &prop_name_len);
2894 				ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
2895 			}
2896 		}
2897 	} else {
2898 		const zend_object_iterator_funcs *funcs = iter->funcs;
2899 		if (EXPECTED(++iter->index > 0)) {
2900 			/* This could cause an endless loop if index becomes zero again.
2901 			 * In case that ever happens we need an additional flag. */
2902 			funcs->move_forward(iter);
2903 			if (UNEXPECTED(EG(exception) != NULL)) {
2904 				UNDEF_RESULT();
2905 				HANDLE_EXCEPTION();
2906 			}
2907 			if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
2908 				/* reached end of iteration */
2909 				if (UNEXPECTED(EG(exception) != NULL)) {
2910 					UNDEF_RESULT();
2911 					HANDLE_EXCEPTION();
2912 				}
2913 fe_fetch_r_exit:
2914 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
2915 				ZEND_VM_CONTINUE();
2916 			}
2917 		}
2918 		value = funcs->get_current_data(iter);
2919 		if (UNEXPECTED(EG(exception) != NULL)) {
2920 			UNDEF_RESULT();
2921 			HANDLE_EXCEPTION();
2922 		}
2923 		if (!value) {
2924 			/* failure in get_current_data */
2925 			goto fe_fetch_r_exit;
2926 		}
2927 		if (RETURN_VALUE_USED(opline)) {
2928 			if (funcs->get_current_key) {
2929 				funcs->get_current_key(iter, EX_VAR(opline->result.var));
2930 				if (UNEXPECTED(EG(exception) != NULL)) {
2931 					UNDEF_RESULT();
2932 					HANDLE_EXCEPTION();
2933 				}
2934 			} else {
2935 				ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
2936 			}
2937 		}
2938 		value_type = Z_TYPE_INFO_P(value);
2939 	}
2940 
2941 	if (EXPECTED(opline->op2_type == IS_CV)) {
2942 		zval *variable_ptr = EX_VAR(opline->op2.var);
2943 		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
2944 	} else {
2945 		zval *res = EX_VAR(opline->op2.var);
2946 		zend_refcounted *gc = Z_COUNTED_P(value);
2947 
2948 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
2949 		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
2950 			GC_ADDREF(gc);
2951 		}
2952 	}
2953 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2954 }
2955 
ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2956 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2957 {
2958 	USE_OPLINE
2959 	zval *value;
2960 	zend_result fetch_result;
2961 	bool result;
2962 
2963 	SAVE_OPLINE();
2964 
2965 	fetch_result = zend_fetch_static_property_address(&value, NULL, opline->extended_value & ~ZEND_ISEMPTY, BP_VAR_IS, 0 OPLINE_CC EXECUTE_DATA_CC);
2966 
2967 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
2968 		result = fetch_result == SUCCESS && Z_TYPE_P(value) > IS_NULL &&
2969 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2970 	} else {
2971 		result = fetch_result != SUCCESS || !i_zend_is_true(value);
2972 	}
2973 
2974 	ZEND_VM_SMART_BRANCH(result, 1);
2975 }
2976 
ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2977 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2978 {
2979 	USE_OPLINE
2980 
2981 	SAVE_OPLINE();
2982 	if (opline->op1_type != IS_UNUSED) {
2983 		zval *ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2984 
2985 		do {
2986 			if (Z_TYPE_P(ptr) == IS_LONG) {
2987 				EG(exit_status) = Z_LVAL_P(ptr);
2988 			} else {
2989 				if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
2990 					ptr = Z_REFVAL_P(ptr);
2991 					if (Z_TYPE_P(ptr) == IS_LONG) {
2992 						EG(exit_status) = Z_LVAL_P(ptr);
2993 						break;
2994 					}
2995 				}
2996 				zend_print_zval(ptr, 0);
2997 			}
2998 		} while (0);
2999 		FREE_OP(opline->op1_type, opline->op1.var);
3000 	}
3001 
3002 	if (!EG(exception)) {
3003 		zend_throw_unwind_exit();
3004 	}
3005 	HANDLE_EXCEPTION();
3006 }
3007 
ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3008 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3009 {
3010 	USE_OPLINE
3011 
3012 	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));
3013 
3014 	if (!E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))) {
3015 		do {
3016 			/* Do not silence fatal errors */
3017 			EG(error_reporting) &= E_FATAL_ERRORS;
3018 			if (!EG(error_reporting_ini_entry)) {
3019 				zval *zv = zend_hash_find_known_hash(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
3020 				if (zv) {
3021 					EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
3022 				} else {
3023 					break;
3024 				}
3025 			}
3026 			if (!EG(error_reporting_ini_entry)->modified) {
3027 				if (!EG(modified_ini_directives)) {
3028 					ALLOC_HASHTABLE(EG(modified_ini_directives));
3029 					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
3030 				}
3031 				if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
3032 					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
3033 					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
3034 					EG(error_reporting_ini_entry)->modified = 1;
3035 				}
3036 			}
3037 		} while (0);
3038 	}
3039 	ZEND_VM_NEXT_OPCODE();
3040 }
3041 
ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3042 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3043 {
3044 	USE_OPLINE
3045 
3046 	if (!EG(no_extensions)) {
3047 		SAVE_OPLINE();
3048 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
3049 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3050 	}
3051 	ZEND_VM_NEXT_OPCODE();
3052 }
3053 
ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3054 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3055 {
3056 	USE_OPLINE
3057 
3058 	if (!EG(no_extensions)) {
3059 		SAVE_OPLINE();
3060 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
3061 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3062 	}
3063 	ZEND_VM_NEXT_OPCODE();
3064 }
3065 
ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3066 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3067 {
3068 	USE_OPLINE
3069 
3070 	if (!EG(no_extensions)) {
3071 		SAVE_OPLINE();
3072 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
3073 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3074 	}
3075 	ZEND_VM_NEXT_OPCODE();
3076 }
3077 
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3078 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3079 {
3080 	zval *zv;
3081 	zend_class_entry *ce;
3082 	USE_OPLINE
3083 
3084 	ce = CACHED_PTR(opline->extended_value);
3085 	if (UNEXPECTED(ce == NULL)) {
3086 		zend_string *rtd_key = Z_STR_P(RT_CONSTANT(opline, opline->op1));
3087 		zv = zend_hash_find_known_hash(EG(class_table), rtd_key);
3088 		ZEND_ASSERT(zv != NULL);
3089 		ce = Z_CE_P(zv);
3090 		if (!(ce->ce_flags & ZEND_ACC_LINKED)) {
3091 			SAVE_OPLINE();
3092 			ce = zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL, rtd_key);
3093 			if (!ce) {
3094 				HANDLE_EXCEPTION();
3095 			}
3096 		}
3097 		CACHE_PTR(opline->extended_value, ce);
3098 	}
3099 	Z_CE_P(EX_VAR(opline->result.var)) = ce;
3100 	ZEND_VM_NEXT_OPCODE();
3101 }
3102 
ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3103 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3104 {
3105 	zend_function *func;
3106 	USE_OPLINE
3107 
3108 	SAVE_OPLINE();
3109 	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
3110 	do_bind_function(func, RT_CONSTANT(opline, opline->op1));
3111 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3112 }
3113 
ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3114 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3115 {
3116 	USE_OPLINE
3117 
3118 	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
3119 		EG(ticks_count) = 0;
3120 		if (zend_ticks_function) {
3121 			SAVE_OPLINE();
3122 			zend_fiber_switch_block();
3123 			zend_ticks_function(opline->extended_value);
3124 			zend_fiber_switch_unblock();
3125 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3126 		}
3127 	}
3128 	ZEND_VM_NEXT_OPCODE();
3129 }
3130 
ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3131 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3132 {
3133 	USE_OPLINE
3134 
3135 	ZEND_VM_NEXT_OPCODE();
3136 }
3137 
ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3138 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3139 {
3140 	USE_OPLINE
3141 
3142 	ZEND_VM_NEXT_OPCODE();
3143 }
3144 
zend_dispatch_try_catch_finally_helper_SPEC(uint32_t try_catch_offset,uint32_t op_num ZEND_OPCODE_HANDLER_ARGS_DC)3145 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)
3146 {
3147 	/* May be NULL during generator closing (only finally blocks are executed) */
3148 	zend_object *ex = EG(exception);
3149 
3150 	/* Walk try/catch/finally structures upwards, performing the necessary actions */
3151 	for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
3152 		zend_try_catch_element *try_catch =
3153 			&EX(func)->op_array.try_catch_array[try_catch_offset];
3154 
3155 		if (op_num < try_catch->catch_op && ex) {
3156 			/* Go to catch block */
3157 			cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
3158 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);
3159 
3160 		} else if (op_num < try_catch->finally_op) {
3161 			if (ex && zend_is_unwind_exit(ex)) {
3162 				/* Don't execute finally blocks on exit (for now) */
3163 				continue;
3164 			}
3165 
3166 			/* Go to finally block */
3167 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
3168 			cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
3169 			Z_OBJ_P(fast_call) = EG(exception);
3170 			EG(exception) = NULL;
3171 			Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
3172 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);
3173 
3174 		} else if (op_num < try_catch->finally_end) {
3175 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
3176 
3177 			/* cleanup incomplete RETURN statement */
3178 			if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
3179 			 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
3180 				zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
3181 
3182 				zval_ptr_dtor(return_value);
3183 			}
3184 
3185 			/* Chain potential exception from wrapping finally block */
3186 			if (Z_OBJ_P(fast_call)) {
3187 				if (ex) {
3188 					if (zend_is_unwind_exit(ex) || zend_is_graceful_exit(ex)) {
3189 						/* discard the previously thrown exception */
3190 						OBJ_RELEASE(Z_OBJ_P(fast_call));
3191 					} else {
3192 						zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
3193 					}
3194 				} else {
3195 					ex = EG(exception) = Z_OBJ_P(fast_call);
3196 				}
3197 			}
3198 		}
3199 	}
3200 
3201 	/* Uncaught exception */
3202 
3203 	/* Don't use 0 because it gets replaced by zend_vm_gen.php. */
3204 	if (zend_observer_fcall_op_array_extension != -1) {
3205 		zend_observer_fcall_end(execute_data, NULL);
3206 	}
3207 	cleanup_live_vars(execute_data, op_num, 0);
3208 	if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
3209 		zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3210 		EG(current_execute_data) = EX(prev_execute_data);
3211 		zend_generator_close(generator, 1);
3212 		ZEND_VM_RETURN();
3213 	} else {
3214 		/* We didn't execute RETURN, and have to initialize return_value */
3215 		if (EX(return_value)) {
3216 			ZVAL_UNDEF(EX(return_value));
3217 		}
3218 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3219 	}
3220 }
3221 
ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3223 {
3224 	const zend_op *throw_op = EG(opline_before_exception);
3225 
3226 	/* Exception was thrown before executing any op */
3227 	if (UNEXPECTED(!throw_op)) {
3228 		ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(-1, 0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3229 	}
3230 
3231 	uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
3232 	int i, current_try_catch_offset = -1;
3233 
3234 	if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
3235 		&& throw_op->extended_value & ZEND_FREE_ON_RETURN) {
3236 		/* exceptions thrown because of loop var destruction on return/break/...
3237 		 * are logically thrown at the end of the foreach loop, so adjust the
3238 		 * throw_op_num.
3239 		 */
3240 		const zend_live_range *range = find_live_range(
3241 			&EX(func)->op_array, throw_op_num, throw_op->op1.var);
3242 		/* free op1 of the corresponding RETURN */
3243 		for (i = throw_op_num; i < range->end; i++) {
3244 			if (EX(func)->op_array.opcodes[i].opcode == ZEND_FREE
3245 			 || EX(func)->op_array.opcodes[i].opcode == ZEND_FE_FREE) {
3246 				/* pass */
3247 			} else {
3248 				if (EX(func)->op_array.opcodes[i].opcode == ZEND_RETURN
3249 				 && (EX(func)->op_array.opcodes[i].op1_type & (IS_VAR|IS_TMP_VAR))) {
3250 					zval_ptr_dtor(EX_VAR(EX(func)->op_array.opcodes[i].op1.var));
3251 				}
3252 				break;
3253 			}
3254 		}
3255 		throw_op_num = range->end;
3256 	}
3257 
3258 	/* Find the innermost try/catch/finally the exception was thrown in */
3259 	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
3260 		zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
3261 		if (try_catch->try_op > throw_op_num) {
3262 			/* further blocks will not be relevant... */
3263 			break;
3264 		}
3265 		if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
3266 			current_try_catch_offset = i;
3267 		}
3268 	}
3269 
3270 	cleanup_unfinished_calls(execute_data, throw_op_num);
3271 
3272 	if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
3273 		switch (throw_op->opcode) {
3274 			case ZEND_ADD_ARRAY_ELEMENT:
3275 			case ZEND_ADD_ARRAY_UNPACK:
3276 			case ZEND_ROPE_INIT:
3277 			case ZEND_ROPE_ADD:
3278 				break; /* exception while building structures, live range handling will free those */
3279 
3280 			case ZEND_FETCH_CLASS:
3281 			case ZEND_DECLARE_ANON_CLASS:
3282 				break; /* return value is zend_class_entry pointer */
3283 
3284 			default:
3285 				/* smart branch opcodes may not initialize result */
3286 				if (!zend_is_smart_branch(throw_op)) {
3287 					zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
3288 				}
3289 		}
3290 	}
3291 
3292 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3293 }
3294 
ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3295 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3296 {
3297 	USE_OPLINE
3298 	int ret;
3299 
3300 	SAVE_OPLINE();
3301 	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
3302 	opline = EX(opline);
3303 
3304 	switch (ret) {
3305 		case ZEND_USER_OPCODE_CONTINUE:
3306 			ZEND_VM_CONTINUE();
3307 		case ZEND_USER_OPCODE_RETURN:
3308 			if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
3309 				zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3310 				EG(current_execute_data) = EX(prev_execute_data);
3311 				zend_generator_close(generator, 1);
3312 				ZEND_VM_RETURN();
3313 			} else {
3314 				ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3315 			}
3316 		case ZEND_USER_OPCODE_ENTER:
3317 			ZEND_VM_ENTER();
3318 		case ZEND_USER_OPCODE_LEAVE:
3319 			ZEND_VM_LEAVE();
3320 		case ZEND_USER_OPCODE_DISPATCH:
3321 			ZEND_VM_DISPATCH(opline->opcode, opline);
3322 		default:
3323 			ZEND_VM_DISPATCH((uint8_t)(ret & 0xff), opline);
3324 	}
3325 }
3326 
zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)3327 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
3328 {
3329 	USE_OPLINE
3330 
3331 	SAVE_OPLINE();
3332 	zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
3333 	FREE_OP(opline->op2_type, opline->op2.var);
3334 	FREE_OP(opline->op1_type, opline->op1.var);
3335 	UNDEF_RESULT();
3336 	HANDLE_EXCEPTION();
3337 }
3338 
ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3339 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3340 {
3341 	USE_OPLINE
3342 	zval *fast_call = EX_VAR(opline->op1.var);
3343 	SAVE_OPLINE();
3344 
3345 	/* cleanup incomplete RETURN statement */
3346 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
3347 	 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
3348 		zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
3349 
3350 		zval_ptr_dtor(return_value);
3351 	}
3352 
3353 	/* cleanup delayed exception */
3354 	if (Z_OBJ_P(fast_call) != NULL) {
3355 		/* discard the previously thrown exception */
3356 		OBJ_RELEASE(Z_OBJ_P(fast_call));
3357 		Z_OBJ_P(fast_call) = NULL;
3358 	}
3359 
3360 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3361 }
3362 
ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3363 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3364 {
3365 	USE_OPLINE
3366 	zval *fast_call = EX_VAR(opline->result.var);
3367 
3368 	Z_OBJ_P(fast_call) = NULL;
3369 	/* set return address */
3370 	Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
3371 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
3372 }
3373 
ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3374 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3375 {
3376 	USE_OPLINE
3377 	zval *fast_call = EX_VAR(opline->op1.var);
3378 	uint32_t current_try_catch_offset, current_op_num;
3379 
3380 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
3381 		const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);
3382 
3383 		ZEND_VM_JMP_EX(fast_ret + 1, 0);
3384 	}
3385 
3386 	/* special case for unhandled exceptions */
3387 	EG(exception) = Z_OBJ_P(fast_call);
3388 	Z_OBJ_P(fast_call) = NULL;
3389 	current_try_catch_offset = opline->op2.num;
3390 	current_op_num = opline - EX(func)->op_array.opcodes;
3391 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3392 }
3393 
ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3395 {
3396 	USE_OPLINE
3397 
3398 	if (EG(assertions) <= 0) {
3399 		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
3400 		if (RETURN_VALUE_USED(opline)) {
3401 			ZVAL_TRUE(EX_VAR(opline->result.var));
3402 		}
3403 		ZEND_VM_JMP_EX(target, 0);
3404 	} else {
3405 		ZEND_VM_NEXT_OPCODE();
3406 	}
3407 }
3408 
ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3410 {
3411 	zend_array *args = NULL;
3412 	zend_function *fbc = EX(func);
3413 	zval *ret = EX(return_value);
3414 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
3415 	uint32_t num_args = EX_NUM_ARGS();
3416 	zend_execute_data *call;
3417 
3418 	SAVE_OPLINE();
3419 
3420 	if (num_args) {
3421 		zval *p = ZEND_CALL_ARG(execute_data, 1);
3422 		zval *end = p + num_args;
3423 
3424 		args = zend_new_array(num_args);
3425 		zend_hash_real_init_packed(args);
3426 		ZEND_HASH_FILL_PACKED(args) {
3427 			do {
3428 				ZEND_HASH_FILL_ADD(p);
3429 				p++;
3430 			} while (p != end);
3431 		} ZEND_HASH_FILL_END();
3432 	}
3433 
3434 	call = execute_data;
3435 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
3436 
3437 	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
3438 	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
3439 	ZEND_CALL_NUM_ARGS(call) = 2;
3440 
3441 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
3442 
3443 	zval *call_args = ZEND_CALL_ARG(call, 2);
3444 	if (args) {
3445 		ZVAL_ARR(call_args, args);
3446 	} else {
3447 		ZVAL_EMPTY_ARRAY(call_args);
3448 	}
3449 	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3450 		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
3451 			GC_ADDREF(call->extra_named_params);
3452 			ZVAL_ARR(call_args, call->extra_named_params);
3453 		} else {
3454 			SEPARATE_ARRAY(call_args);
3455 			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
3456 		}
3457 	}
3458 	zend_free_trampoline(fbc);
3459 	fbc = call->func;
3460 
3461 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
3462 		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3463 			init_func_run_time_cache(&fbc->op_array);
3464 		}
3465 		execute_data = call;
3466 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3467 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3468 			LOAD_OPLINE_EX();
3469 
3470 
3471 			ZEND_VM_ENTER_EX();
3472 		} else {
3473 			SAVE_OPLINE_EX();
3474 
3475 			execute_data = EX(prev_execute_data);
3476 			if (execute_data) {
3477 				LOAD_OPLINE();
3478 			}
3479 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3480 			zend_execute_ex(call);
3481 		}
3482 	} else {
3483 		zval retval;
3484 
3485 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
3486 
3487 		EG(current_execute_data) = call;
3488 
3489 #if ZEND_DEBUG
3490 		bool should_throw = zend_internal_call_should_throw(fbc, call);
3491 #endif
3492 
3493 		if (ret == NULL) {
3494 			ret = &retval;
3495 		}
3496 
3497 		ZVAL_NULL(ret);
3498 
3499 		if (!zend_execute_internal) {
3500 			/* saves one function call if zend_execute_internal is not used */
3501 			fbc->internal_function.handler(call, ret);
3502 		} else {
3503 			zend_execute_internal(call, ret);
3504 		}
3505 
3506 #if ZEND_DEBUG
3507 		if (!EG(exception) && call->func) {
3508 			if (should_throw) {
3509 				zend_internal_call_arginfo_violation(call->func);
3510 			}
3511 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
3512 				zend_verify_internal_return_type(call->func, ret));
3513 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
3514 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
3515 			zend_verify_internal_func_info(call->func, ret);
3516 		}
3517 #endif
3518 
3519 		EG(current_execute_data) = call->prev_execute_data;
3520 
3521 		zend_vm_stack_free_args(call);
3522 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3523 			zend_free_extra_named_params(call->extra_named_params);
3524 		}
3525 		if (ret == &retval) {
3526 			zval_ptr_dtor(ret);
3527 		}
3528 	}
3529 
3530 	execute_data = EG(current_execute_data);
3531 
3532 	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
3533 		ZEND_VM_RETURN();
3534 	}
3535 
3536 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
3537 		zend_object *object = Z_OBJ(call->This);
3538 		OBJ_RELEASE(object);
3539 	}
3540 	zend_vm_stack_free_call_frame(call);
3541 
3542 	if (UNEXPECTED(EG(exception) != NULL)) {
3543 		zend_rethrow_exception(execute_data);
3544 		HANDLE_EXCEPTION_LEAVE();
3545 	}
3546 
3547 	LOAD_OPLINE();
3548 	ZEND_VM_INC_OPCODE();
3549 	ZEND_VM_LEAVE();
3550 }
3551 
ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3552 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3553 {
3554 	zend_array *args = NULL;
3555 	zend_function *fbc = EX(func);
3556 	zval *ret = EX(return_value);
3557 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
3558 	uint32_t num_args = EX_NUM_ARGS();
3559 	zend_execute_data *call;
3560 
3561 	SAVE_OPLINE();
3562 
3563 	if (num_args) {
3564 		zval *p = ZEND_CALL_ARG(execute_data, 1);
3565 		zval *end = p + num_args;
3566 
3567 		args = zend_new_array(num_args);
3568 		zend_hash_real_init_packed(args);
3569 		ZEND_HASH_FILL_PACKED(args) {
3570 			do {
3571 				ZEND_HASH_FILL_ADD(p);
3572 				p++;
3573 			} while (p != end);
3574 		} ZEND_HASH_FILL_END();
3575 	}
3576 
3577 	call = execute_data;
3578 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
3579 
3580 	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
3581 	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
3582 	ZEND_CALL_NUM_ARGS(call) = 2;
3583 
3584 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
3585 
3586 	zval *call_args = ZEND_CALL_ARG(call, 2);
3587 	if (args) {
3588 		ZVAL_ARR(call_args, args);
3589 	} else {
3590 		ZVAL_EMPTY_ARRAY(call_args);
3591 	}
3592 	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3593 		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
3594 			GC_ADDREF(call->extra_named_params);
3595 			ZVAL_ARR(call_args, call->extra_named_params);
3596 		} else {
3597 			SEPARATE_ARRAY(call_args);
3598 			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
3599 		}
3600 	}
3601 	zend_free_trampoline(fbc);
3602 	fbc = call->func;
3603 
3604 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
3605 		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3606 			init_func_run_time_cache(&fbc->op_array);
3607 		}
3608 		execute_data = call;
3609 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3610 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3611 			LOAD_OPLINE_EX();
3612 			SAVE_OPLINE();
3613 			zend_observer_fcall_begin_specialized(execute_data, false);
3614 			ZEND_VM_ENTER_EX();
3615 		} else {
3616 			SAVE_OPLINE_EX();
3617 			zend_observer_fcall_begin_specialized(execute_data, false);
3618 			execute_data = EX(prev_execute_data);
3619 			if (execute_data) {
3620 				LOAD_OPLINE();
3621 			}
3622 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3623 			zend_execute_ex(call);
3624 		}
3625 	} else {
3626 		zval retval;
3627 
3628 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
3629 
3630 		EG(current_execute_data) = call;
3631 
3632 #if ZEND_DEBUG
3633 		bool should_throw = zend_internal_call_should_throw(fbc, call);
3634 #endif
3635 
3636 		if (ret == NULL) {
3637 			ret = &retval;
3638 		}
3639 
3640 		ZVAL_NULL(ret);
3641 		zend_observer_fcall_begin_specialized(call, false);
3642 		if (!zend_execute_internal) {
3643 			/* saves one function call if zend_execute_internal is not used */
3644 			fbc->internal_function.handler(call, ret);
3645 		} else {
3646 			zend_execute_internal(call, ret);
3647 		}
3648 
3649 #if ZEND_DEBUG
3650 		if (!EG(exception) && call->func) {
3651 			if (should_throw) {
3652 				zend_internal_call_arginfo_violation(call->func);
3653 			}
3654 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
3655 				zend_verify_internal_return_type(call->func, ret));
3656 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
3657 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
3658 			zend_verify_internal_func_info(call->func, ret);
3659 		}
3660 #endif
3661 		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
3662 
3663 		EG(current_execute_data) = call->prev_execute_data;
3664 
3665 		zend_vm_stack_free_args(call);
3666 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3667 			zend_free_extra_named_params(call->extra_named_params);
3668 		}
3669 		if (ret == &retval) {
3670 			zval_ptr_dtor(ret);
3671 		}
3672 	}
3673 
3674 	execute_data = EG(current_execute_data);
3675 
3676 	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
3677 		ZEND_VM_RETURN();
3678 	}
3679 
3680 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
3681 		zend_object *object = Z_OBJ(call->This);
3682 		OBJ_RELEASE(object);
3683 	}
3684 	zend_vm_stack_free_call_frame(call);
3685 
3686 	if (UNEXPECTED(EG(exception) != NULL)) {
3687 		zend_rethrow_exception(execute_data);
3688 		HANDLE_EXCEPTION_LEAVE();
3689 	}
3690 
3691 	LOAD_OPLINE();
3692 	ZEND_VM_INC_OPCODE();
3693 	ZEND_VM_LEAVE();
3694 }
3695 
ZEND_FRAMELESS_ICALL_2_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3696 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FRAMELESS_ICALL_2_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3697 {
3698 	USE_OPLINE
3699 	SAVE_OPLINE();
3700 
3701 	zval *result = EX_VAR(opline->result.var);
3702 	ZVAL_NULL(result);
3703 	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
3704 	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
3705 	if (EG(exception)) {
3706 		FREE_OP(opline->op1_type, opline->op1.var);
3707 		FREE_OP(opline->op2_type, opline->op2.var);
3708 		HANDLE_EXCEPTION();
3709 	}
3710 
3711 #if 0 || 0
3712 	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
3713 		zend_frameless_observed_call(execute_data);
3714 	} else
3715 #endif
3716 	{
3717 		zend_frameless_function_2 function = (zend_frameless_function_2)ZEND_FLF_HANDLER(opline);
3718 		function(result, arg1, arg2);
3719 	}
3720 
3721 	FREE_OP(opline->op1_type, opline->op1.var);
3722 	/* Set OP1 to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
3723 	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
3724 		ZVAL_UNDEF(EX_VAR(opline->op1.var));
3725 	}
3726 	FREE_OP(opline->op2_type, opline->op2.var);
3727 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3728 }
3729 
ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3730 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3731 {
3732 	USE_OPLINE
3733 	SAVE_OPLINE();
3734 
3735 	zval *result = EX_VAR(opline->result.var);
3736 	ZVAL_NULL(result);
3737 	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
3738 	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
3739 	if (EG(exception)) {
3740 		FREE_OP(opline->op1_type, opline->op1.var);
3741 		FREE_OP(opline->op2_type, opline->op2.var);
3742 		HANDLE_EXCEPTION();
3743 	}
3744 
3745 #if 0 || 1
3746 	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
3747 		zend_frameless_observed_call(execute_data);
3748 	} else
3749 #endif
3750 	{
3751 		zend_frameless_function_2 function = (zend_frameless_function_2)ZEND_FLF_HANDLER(opline);
3752 		function(result, arg1, arg2);
3753 	}
3754 
3755 	FREE_OP(opline->op1_type, opline->op1.var);
3756 	/* Set OP1 to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
3757 	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
3758 		ZVAL_UNDEF(EX_VAR(opline->op1.var));
3759 	}
3760 	FREE_OP(opline->op2_type, opline->op2.var);
3761 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3762 }
3763 
ZEND_FRAMELESS_ICALL_3_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3764 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FRAMELESS_ICALL_3_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3765 {
3766 	USE_OPLINE
3767 	SAVE_OPLINE();
3768 
3769 	zval *result = EX_VAR(opline->result.var);
3770 	ZVAL_NULL(result);
3771 	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
3772 	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
3773 	zval *arg3 = get_op_data_zval_ptr_deref_r((opline+1)->op1_type, (opline+1)->op1);
3774 	if (EG(exception)) {
3775 		FREE_OP(opline->op1_type, opline->op1.var);
3776 		FREE_OP(opline->op2_type, opline->op2.var);
3777 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
3778 		HANDLE_EXCEPTION();
3779 	}
3780 
3781 #if 0 || 0
3782 	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
3783 		zend_frameless_observed_call(execute_data);
3784 	} else
3785 #endif
3786 	{
3787 		zend_frameless_function_3 function = (zend_frameless_function_3)ZEND_FLF_HANDLER(opline);
3788 		function(result, arg1, arg2, arg3);
3789 	}
3790 
3791 	FREE_OP(opline->op1_type, opline->op1.var);
3792 	/* Set to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
3793 	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
3794 		ZVAL_UNDEF(EX_VAR(opline->op1.var));
3795 	}
3796 	FREE_OP(opline->op2_type, opline->op2.var);
3797 	if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) {
3798 		ZVAL_UNDEF(EX_VAR(opline->op2.var));
3799 	}
3800 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
3801 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
3802 }
3803 
ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3804 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3805 {
3806 	USE_OPLINE
3807 	SAVE_OPLINE();
3808 
3809 	zval *result = EX_VAR(opline->result.var);
3810 	ZVAL_NULL(result);
3811 	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
3812 	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
3813 	zval *arg3 = get_op_data_zval_ptr_deref_r((opline+1)->op1_type, (opline+1)->op1);
3814 	if (EG(exception)) {
3815 		FREE_OP(opline->op1_type, opline->op1.var);
3816 		FREE_OP(opline->op2_type, opline->op2.var);
3817 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
3818 		HANDLE_EXCEPTION();
3819 	}
3820 
3821 #if 0 || 1
3822 	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
3823 		zend_frameless_observed_call(execute_data);
3824 	} else
3825 #endif
3826 	{
3827 		zend_frameless_function_3 function = (zend_frameless_function_3)ZEND_FLF_HANDLER(opline);
3828 		function(result, arg1, arg2, arg3);
3829 	}
3830 
3831 	FREE_OP(opline->op1_type, opline->op1.var);
3832 	/* Set to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
3833 	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
3834 		ZVAL_UNDEF(EX_VAR(opline->op1.var));
3835 	}
3836 	FREE_OP(opline->op2_type, opline->op2.var);
3837 	if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) {
3838 		ZVAL_UNDEF(EX_VAR(opline->op2.var));
3839 	}
3840 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
3841 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
3842 }
3843 
ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3844 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3845 {
3846 	USE_OPLINE
3847 
3848 	OPLINE = OP_JMP_ADDR(opline, opline->op1);
3849 	ZEND_VM_CONTINUE();
3850 }
3851 
zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)3852 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
3853 {
3854 	zend_atomic_bool_store_ex(&EG(vm_interrupt), false);
3855 	SAVE_OPLINE();
3856 	if (zend_atomic_bool_load_ex(&EG(timed_out))) {
3857 		zend_timeout();
3858 	} else if (zend_interrupt_function) {
3859 		zend_interrupt_function(execute_data);
3860 		if (EG(exception)) {
3861 			/* We have to UNDEF result, because ZEND_HANDLE_EXCEPTION is going to free it */
3862 			const zend_op *throw_op = EG(opline_before_exception);
3863 
3864 			if (throw_op
3865 			 && throw_op->result_type & (IS_TMP_VAR|IS_VAR)
3866 			 && throw_op->opcode != ZEND_ADD_ARRAY_ELEMENT
3867 			 && throw_op->opcode != ZEND_ADD_ARRAY_UNPACK
3868 			 && throw_op->opcode != ZEND_ROPE_INIT
3869 			 && throw_op->opcode != ZEND_ROPE_ADD) {
3870 				ZVAL_UNDEF(ZEND_CALL_VAR(EG(current_execute_data), throw_op->result.var));
3871 
3872 			}
3873 		}
3874 		ZEND_VM_ENTER();
3875 	}
3876 	ZEND_VM_CONTINUE();
3877 }
ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3878 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3879 {
3880 	USE_OPLINE
3881 	zend_function *fbc;
3882 	zval *function_name, *func;
3883 	zend_execute_data *call;
3884 
3885 	fbc = CACHED_PTR(opline->result.num);
3886 	if (UNEXPECTED(fbc == NULL)) {
3887 		function_name = (zval*)RT_CONSTANT(opline, opline->op2);
3888 		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(function_name+1));
3889 		if (UNEXPECTED(func == NULL)) {
3890 			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3891 		}
3892 		fbc = Z_FUNC_P(func);
3893 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3894 			init_func_run_time_cache(&fbc->op_array);
3895 		}
3896 		CACHE_PTR(opline->result.num, fbc);
3897 	}
3898 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
3899 		fbc, opline->extended_value, NULL);
3900 	call->prev_execute_data = EX(call);
3901 	EX(call) = call;
3902 
3903 	ZEND_VM_NEXT_OPCODE();
3904 }
3905 
ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3906 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3907 {
3908 	USE_OPLINE
3909 	zval *function_name;
3910 	zend_execute_data *call;
3911 
3912 	SAVE_OPLINE();
3913 	function_name = RT_CONSTANT(opline, opline->op2);
3914 
3915 try_function_name:
3916 	if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3917 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3918 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3919 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
3920 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3921 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3922 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3923 		function_name = Z_REFVAL_P(function_name);
3924 		goto try_function_name;
3925 	} else {
3926 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3927 			function_name = ZVAL_UNDEFINED_OP2();
3928 			if (UNEXPECTED(EG(exception) != NULL)) {
3929 				HANDLE_EXCEPTION();
3930 			}
3931 		}
3932 		zend_throw_error(NULL, "Value of type %s is not callable",
3933 			zend_zval_type_name(function_name));
3934 		call = NULL;
3935 	}
3936 
3937 	if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
3938 
3939 		if (UNEXPECTED(EG(exception))) {
3940 			if (call) {
3941 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3942 					zend_string_release_ex(call->func->common.function_name, 0);
3943 					zend_free_trampoline(call->func);
3944 				}
3945 				zend_vm_stack_free_call_frame(call);
3946 			}
3947 			HANDLE_EXCEPTION();
3948 		}
3949 	} else if (!call) {
3950 		HANDLE_EXCEPTION();
3951 	}
3952 
3953 	call->prev_execute_data = EX(call);
3954 	EX(call) = call;
3955 
3956 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3957 }
3958 
ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3959 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3960 {
3961 	USE_OPLINE
3962 	zval *func_name;
3963 	zval *func;
3964 	zend_function *fbc;
3965 	zend_execute_data *call;
3966 
3967 	fbc = CACHED_PTR(opline->result.num);
3968 	if (UNEXPECTED(fbc == NULL)) {
3969 		func_name = (zval *)RT_CONSTANT(opline, opline->op2);
3970 		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 1));
3971 		if (func == NULL) {
3972 			func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 2));
3973 			if (UNEXPECTED(func == NULL)) {
3974 				ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3975 			}
3976 		}
3977 		fbc = Z_FUNC_P(func);
3978 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3979 			init_func_run_time_cache(&fbc->op_array);
3980 		}
3981 		CACHE_PTR(opline->result.num, fbc);
3982 	}
3983 
3984 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
3985 		fbc, opline->extended_value, NULL);
3986 	call->prev_execute_data = EX(call);
3987 	EX(call) = call;
3988 
3989 	ZEND_VM_NEXT_OPCODE();
3990 }
3991 
ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3992 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3993 {
3994 	USE_OPLINE
3995 	zval *fname;
3996 	zval *func;
3997 	zend_function *fbc;
3998 	zend_execute_data *call;
3999 
4000 	fbc = CACHED_PTR(opline->result.num);
4001 	if (UNEXPECTED(fbc == NULL)) {
4002 		fname = (zval*)RT_CONSTANT(opline, opline->op2);
4003 		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
4004 		ZEND_ASSERT(func != NULL && "Function existence must be checked at compile time");
4005 		fbc = Z_FUNC_P(func);
4006 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
4007 			init_func_run_time_cache(&fbc->op_array);
4008 		}
4009 		CACHE_PTR(opline->result.num, fbc);
4010 	}
4011 
4012 	call = _zend_vm_stack_push_call_frame_ex(
4013 		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
4014 		fbc, opline->extended_value, NULL);
4015 	call->prev_execute_data = EX(call);
4016 	EX(call) = call;
4017 
4018 	ZEND_VM_NEXT_OPCODE();
4019 }
4020 
ZEND_INIT_FCALL_OFFSET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4021 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_OFFSET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4022 {
4023 	USE_OPLINE
4024 	zend_function *fbc;
4025 	zend_execute_data *call;
4026 	fbc = CACHED_PTR(opline->result.num);
4027 	if (UNEXPECTED(fbc == NULL)) {
4028 		fbc = Z_PTR(EG(function_table)->arData[Z_EXTRA_P(RT_CONSTANT(opline, opline->op2))].val);
4029 		CACHE_PTR(opline->result.num, fbc);
4030 	}
4031 	call = _zend_vm_stack_push_call_frame_ex(
4032 		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
4033 		fbc, opline->extended_value, NULL);
4034 	call->prev_execute_data = EX(call);
4035 	EX(call) = call;
4036 	ZEND_VM_NEXT_OPCODE();
4037 }
4038 
ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4039 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4040 {
4041 	USE_OPLINE
4042 	uint32_t arg_num;
4043 	zval *param;
4044 
4045 	ZEND_VM_REPEATABLE_OPCODE
4046 
4047 	arg_num = opline->op1.num;
4048 	param = EX_VAR(opline->result.var);
4049 	if (arg_num > EX_NUM_ARGS()) {
4050 		zval *default_value = RT_CONSTANT(opline, opline->op2);
4051 
4052 		if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
4053 			zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));
4054 
4055 			/* we keep in cache only not refcounted values */
4056 			if (Z_TYPE_P(cache_val) != IS_UNDEF) {
4057 				ZVAL_COPY_VALUE(param, cache_val);
4058 			} else {
4059 				SAVE_OPLINE();
4060 				ZVAL_COPY(param, default_value);
4061 				zend_ast_evaluate_ctx ctx = {0};
4062 				if (UNEXPECTED(zval_update_constant_with_ctx(param, EX(func)->op_array.scope, &ctx) != SUCCESS)) {
4063 					zval_ptr_dtor_nogc(param);
4064 					ZVAL_UNDEF(param);
4065 					HANDLE_EXCEPTION();
4066 				}
4067 				if (!Z_REFCOUNTED_P(param) && !ctx.had_side_effects) {
4068 					ZVAL_COPY_VALUE(cache_val, param);
4069 				}
4070 			}
4071 			goto recv_init_check_type;
4072 		} else {
4073 			ZVAL_COPY(param, default_value);
4074 		}
4075 	} else {
4076 recv_init_check_type:
4077 		if ((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0) {
4078 			SAVE_OPLINE();
4079 			if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
4080 				HANDLE_EXCEPTION();
4081 			}
4082 		}
4083 	}
4084 
4085 	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
4086 	ZEND_VM_NEXT_OPCODE();
4087 }
4088 
ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4089 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4090 {
4091 	USE_OPLINE
4092 	zval *function_name;
4093 	zend_execute_data *call;
4094 
4095 	SAVE_OPLINE();
4096 	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
4097 
4098 try_function_name:
4099 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
4100 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
4101 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
4102 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
4103 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
4104 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
4105 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
4106 		function_name = Z_REFVAL_P(function_name);
4107 		goto try_function_name;
4108 	} else {
4109 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
4110 			function_name = ZVAL_UNDEFINED_OP2();
4111 			if (UNEXPECTED(EG(exception) != NULL)) {
4112 				HANDLE_EXCEPTION();
4113 			}
4114 		}
4115 		zend_throw_error(NULL, "Value of type %s is not callable",
4116 			zend_zval_type_name(function_name));
4117 		call = NULL;
4118 	}
4119 
4120 	if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
4121 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
4122 		if (UNEXPECTED(EG(exception))) {
4123 			if (call) {
4124 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
4125 					zend_string_release_ex(call->func->common.function_name, 0);
4126 					zend_free_trampoline(call->func);
4127 				}
4128 				zend_vm_stack_free_call_frame(call);
4129 			}
4130 			HANDLE_EXCEPTION();
4131 		}
4132 	} else if (!call) {
4133 		HANDLE_EXCEPTION();
4134 	}
4135 
4136 	call->prev_execute_data = EX(call);
4137 	EX(call) = call;
4138 
4139 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4140 }
4141 
ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4142 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4143 {
4144 	USE_OPLINE
4145 	uint32_t arg_num = opline->op1.num;
4146 	zval *param;
4147 
4148 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
4149 		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4150 	}
4151 
4152 	param = EX_VAR(opline->result.var);
4153 
4154 	if (UNEXPECTED(!(opline->op2.num & (1u << Z_TYPE_P(param))))) {
4155 		ZEND_VM_TAIL_CALL(zend_verify_recv_arg_type_helper_SPEC(param ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4156 	}
4157 
4158 	ZEND_VM_NEXT_OPCODE();
4159 }
4160 
ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4162 {
4163 	USE_OPLINE
4164 	uint32_t arg_num = opline->op1.num;
4165 	uint32_t arg_count = EX_NUM_ARGS();
4166 	zval *params;
4167 
4168 	SAVE_OPLINE();
4169 
4170 	params = EX_VAR(opline->result.var);
4171 
4172 	if (arg_num <= arg_count) {
4173 		ZEND_ASSERT(EX(func)->common.fn_flags & ZEND_ACC_VARIADIC);
4174 		ZEND_ASSERT(EX(func)->common.num_args == arg_num - 1);
4175 		zend_arg_info *arg_info = &EX(func)->common.arg_info[arg_num - 1];
4176 
4177 		array_init_size(params, arg_count - arg_num + 1);
4178 		zend_hash_real_init_packed(Z_ARRVAL_P(params));
4179 		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
4180 			zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
4181 			if (ZEND_TYPE_IS_SET(arg_info->type)) {
4182 				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
4183 				do {
4184 					if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
4185 						ZEND_HASH_FILL_FINISH();
4186 						HANDLE_EXCEPTION();
4187 					}
4188 
4189 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
4190 					ZEND_HASH_FILL_ADD(param);
4191 					param++;
4192 				} while (++arg_num <= arg_count);
4193 			} else {
4194 				do {
4195 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
4196 					ZEND_HASH_FILL_ADD(param);
4197 					param++;
4198 				} while (++arg_num <= arg_count);
4199 			}
4200 		} ZEND_HASH_FILL_END();
4201 	} else {
4202 		ZVAL_EMPTY_ARRAY(params);
4203 	}
4204 
4205 	if (EX_CALL_INFO() & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
4206 		zend_string *name;
4207 		zval *param;
4208 		zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
4209 		if (ZEND_TYPE_IS_SET(arg_info->type)) {
4210 			SEPARATE_ARRAY(params);
4211 			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
4212 				if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
4213 					HANDLE_EXCEPTION();
4214 				}
4215 				Z_TRY_ADDREF_P(param);
4216 				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
4217 			} ZEND_HASH_FOREACH_END();
4218 		} else if (zend_hash_num_elements(Z_ARRVAL_P(params)) == 0) {
4219 			GC_ADDREF(EX(extra_named_params));
4220 			ZVAL_ARR(params, EX(extra_named_params));
4221 		} else {
4222 			SEPARATE_ARRAY(params);
4223 			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
4224 				Z_TRY_ADDREF_P(param);
4225 				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
4226 			} ZEND_HASH_FOREACH_END();
4227 		}
4228 	}
4229 
4230 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4231 }
4232 
ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4234 {
4235 	USE_OPLINE
4236 	SAVE_OPLINE();
4237 
4238 	zval *result = EX_VAR(opline->result.var);
4239 	ZVAL_NULL(result);
4240 	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
4241 	if (EG(exception)) {
4242 		FREE_OP(opline->op1_type, opline->op1.var);
4243 		HANDLE_EXCEPTION();
4244 	}
4245 
4246 #if 0 || 0
4247 	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
4248 		zend_frameless_observed_call(execute_data);
4249 	} else
4250 #endif
4251 	{
4252 		zend_frameless_function_1 function = (zend_frameless_function_1)ZEND_FLF_HANDLER(opline);
4253 		function(result, arg1);
4254 	}
4255 	FREE_OP(opline->op1_type, opline->op1.var);
4256 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4257 }
4258 
ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4259 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4260 {
4261 	USE_OPLINE
4262 	SAVE_OPLINE();
4263 
4264 	zval *result = EX_VAR(opline->result.var);
4265 	ZVAL_NULL(result);
4266 	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
4267 	if (EG(exception)) {
4268 		FREE_OP(opline->op1_type, opline->op1.var);
4269 		HANDLE_EXCEPTION();
4270 	}
4271 
4272 #if 0 || 1
4273 	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
4274 		zend_frameless_observed_call(execute_data);
4275 	} else
4276 #endif
4277 	{
4278 		zend_frameless_function_1 function = (zend_frameless_function_1)ZEND_FLF_HANDLER(opline);
4279 		function(result, arg1);
4280 	}
4281 	FREE_OP(opline->op1_type, opline->op1.var);
4282 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4283 }
4284 
ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4285 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4286 {
4287 	USE_OPLINE
4288 	zval *function_name;
4289 	zend_execute_data *call;
4290 
4291 	SAVE_OPLINE();
4292 	function_name = EX_VAR(opline->op2.var);
4293 
4294 try_function_name:
4295 	if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
4296 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
4297 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
4298 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
4299 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
4300 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
4301 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
4302 		function_name = Z_REFVAL_P(function_name);
4303 		goto try_function_name;
4304 	} else {
4305 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
4306 			function_name = ZVAL_UNDEFINED_OP2();
4307 			if (UNEXPECTED(EG(exception) != NULL)) {
4308 				HANDLE_EXCEPTION();
4309 			}
4310 		}
4311 		zend_throw_error(NULL, "Value of type %s is not callable",
4312 			zend_zval_type_name(function_name));
4313 		call = NULL;
4314 	}
4315 
4316 	if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
4317 
4318 		if (UNEXPECTED(EG(exception))) {
4319 			if (call) {
4320 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
4321 					zend_string_release_ex(call->func->common.function_name, 0);
4322 					zend_free_trampoline(call->func);
4323 				}
4324 				zend_vm_stack_free_call_frame(call);
4325 			}
4326 			HANDLE_EXCEPTION();
4327 		}
4328 	} else if (!call) {
4329 		HANDLE_EXCEPTION();
4330 	}
4331 
4332 	call->prev_execute_data = EX(call);
4333 	EX(call) = call;
4334 
4335 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4336 }
4337 
ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4338 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4339 {
4340 	USE_OPLINE
4341 	zval *op1;
4342 
4343 	op1 = RT_CONSTANT(opline, opline->op1);
4344 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4345 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
4346 		ZEND_VM_NEXT_OPCODE();
4347 	}
4348 
4349 	ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4350 }
4351 
ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4352 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4353 {
4354 	USE_OPLINE
4355 	zval *val;
4356 
4357 	val = RT_CONSTANT(opline, opline->op1);
4358 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4359 		ZVAL_FALSE(EX_VAR(opline->result.var));
4360 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4361 		/* The result and op1 can be the same cv zval */
4362 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
4363 		ZVAL_TRUE(EX_VAR(opline->result.var));
4364 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
4365 			SAVE_OPLINE();
4366 			ZVAL_UNDEFINED_OP1();
4367 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4368 		}
4369 	} else {
4370 		SAVE_OPLINE();
4371 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
4372 
4373 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4374 	}
4375 	ZEND_VM_NEXT_OPCODE();
4376 }
4377 
ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4378 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4379 {
4380 	USE_OPLINE
4381 	zval *z;
4382 
4383 	SAVE_OPLINE();
4384 	z = RT_CONSTANT(opline, opline->op1);
4385 
4386 	if (Z_TYPE_P(z) == IS_STRING) {
4387 		zend_string *str = Z_STR_P(z);
4388 
4389 		if (ZSTR_LEN(str) != 0) {
4390 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
4391 		}
4392 	} else {
4393 		zend_string *str = zval_get_string_func(z);
4394 
4395 		if (ZSTR_LEN(str) != 0) {
4396 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
4397 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
4398 			ZVAL_UNDEFINED_OP1();
4399 		}
4400 		zend_string_release_ex(str, 0);
4401 	}
4402 
4403 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4404 }
4405 
ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4406 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4407 {
4408 	USE_OPLINE
4409 	zval *val;
4410 	uint8_t op1_type;
4411 
4412 	val = RT_CONSTANT(opline, opline->op1);
4413 
4414 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4415 		ZEND_VM_NEXT_OPCODE();
4416 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4417 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4418 			SAVE_OPLINE();
4419 			ZVAL_UNDEFINED_OP1();
4420 			if (UNEXPECTED(EG(exception))) {
4421 				HANDLE_EXCEPTION();
4422 			}
4423 		}
4424 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4425 	}
4426 
4427 	SAVE_OPLINE();
4428 	op1_type = IS_CONST;
4429 	if (i_zend_is_true(val)) {
4430 		opline++;
4431 	} else {
4432 		opline = OP_JMP_ADDR(opline, opline->op2);
4433 	}
4434 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
4435 		zval_ptr_dtor_nogc(val);
4436 	}
4437 	ZEND_VM_JMP(opline);
4438 }
4439 
ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4440 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4441 {
4442 	USE_OPLINE
4443 	zval *val;
4444 	uint8_t op1_type;
4445 
4446 	val = RT_CONSTANT(opline, opline->op1);
4447 
4448 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4449 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4450 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4451 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4452 			SAVE_OPLINE();
4453 			ZVAL_UNDEFINED_OP1();
4454 			if (UNEXPECTED(EG(exception))) {
4455 				HANDLE_EXCEPTION();
4456 			}
4457 		}
4458 		ZEND_VM_NEXT_OPCODE();
4459 	}
4460 
4461 	SAVE_OPLINE();
4462 	op1_type = IS_CONST;
4463 	if (i_zend_is_true(val)) {
4464 		opline = OP_JMP_ADDR(opline, opline->op2);
4465 	} else {
4466 		opline++;
4467 	}
4468 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
4469 		zval_ptr_dtor_nogc(val);
4470 	}
4471 	ZEND_VM_JMP(opline);
4472 }
4473 
ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4474 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4475 {
4476 	USE_OPLINE
4477 	zval *val;
4478 	bool ret;
4479 
4480 	val = RT_CONSTANT(opline, opline->op1);
4481 
4482 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4483 		ZVAL_TRUE(EX_VAR(opline->result.var));
4484 		ZEND_VM_NEXT_OPCODE();
4485 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4486 		ZVAL_FALSE(EX_VAR(opline->result.var));
4487 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4488 			SAVE_OPLINE();
4489 			ZVAL_UNDEFINED_OP1();
4490 			if (UNEXPECTED(EG(exception))) {
4491 				HANDLE_EXCEPTION();
4492 			}
4493 		}
4494 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4495 	}
4496 
4497 	SAVE_OPLINE();
4498 	ret = i_zend_is_true(val);
4499 
4500 	if (ret) {
4501 		ZVAL_TRUE(EX_VAR(opline->result.var));
4502 		opline++;
4503 	} else {
4504 		ZVAL_FALSE(EX_VAR(opline->result.var));
4505 		opline = OP_JMP_ADDR(opline, opline->op2);
4506 	}
4507 	ZEND_VM_JMP(opline);
4508 }
4509 
ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4510 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4511 {
4512 	USE_OPLINE
4513 	zval *val;
4514 	bool ret;
4515 
4516 	val = RT_CONSTANT(opline, opline->op1);
4517 
4518 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4519 		ZVAL_TRUE(EX_VAR(opline->result.var));
4520 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4521 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4522 		ZVAL_FALSE(EX_VAR(opline->result.var));
4523 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4524 			SAVE_OPLINE();
4525 			ZVAL_UNDEFINED_OP1();
4526 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4527 		} else {
4528 			ZEND_VM_NEXT_OPCODE();
4529 		}
4530 	}
4531 
4532 	SAVE_OPLINE();
4533 	ret = i_zend_is_true(val);
4534 
4535 	if (ret) {
4536 		ZVAL_TRUE(EX_VAR(opline->result.var));
4537 		opline = OP_JMP_ADDR(opline, opline->op2);
4538 	} else {
4539 		ZVAL_FALSE(EX_VAR(opline->result.var));
4540 		opline++;
4541 	}
4542 	ZEND_VM_JMP(opline);
4543 }
4544 
ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4545 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4546 {
4547 	USE_OPLINE
4548 	zval *retval_ptr;
4549 	zval *return_value;
4550 
4551 	retval_ptr = RT_CONSTANT(opline, opline->op1);
4552 	return_value = EX(return_value);
4553 
4554 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
4555 		SAVE_OPLINE();
4556 		retval_ptr = ZVAL_UNDEFINED_OP1();
4557 		if (return_value) {
4558 			ZVAL_NULL(return_value);
4559 		}
4560 	} else if (!return_value) {
4561 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
4562 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
4563 				SAVE_OPLINE();
4564 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
4565 			}
4566 		}
4567 	} else {
4568 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
4569 			ZVAL_COPY_VALUE(return_value, retval_ptr);
4570 			if (IS_CONST == IS_CONST) {
4571 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
4572 					Z_ADDREF_P(return_value);
4573 				}
4574 			}
4575 		} else if (IS_CONST == IS_CV) {
4576 			do {
4577 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4578 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
4579 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
4580 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4581 							ZVAL_COPY_VALUE(return_value, retval_ptr);
4582 							if (GC_MAY_LEAK(ref)) {
4583 								SAVE_OPLINE();
4584 								gc_possible_root(ref);
4585 							}
4586 							ZVAL_NULL(retval_ptr);
4587 							break;
4588 						} else {
4589 							Z_ADDREF_P(retval_ptr);
4590 						}
4591 					} else {
4592 						retval_ptr = Z_REFVAL_P(retval_ptr);
4593 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4594 							Z_ADDREF_P(retval_ptr);
4595 						}
4596 					}
4597 				}
4598 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4599 			} while (0);
4600 		} else /* if (IS_CONST == IS_VAR) */ {
4601 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4602 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4603 
4604 				retval_ptr = Z_REFVAL_P(retval_ptr);
4605 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4606 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4607 					efree_size(ref, sizeof(zend_reference));
4608 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4609 					Z_ADDREF_P(retval_ptr);
4610 				}
4611 			} else {
4612 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4613 			}
4614 		}
4615 	}
4616 
4617 
4618 
4619 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4620 }
4621 
ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4622 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4623 {
4624 	USE_OPLINE
4625 	zval *retval_ptr;
4626 	zval *return_value;
4627 	zval observer_retval;
4628 
4629 	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
4630 	return_value = EX(return_value);
4631 	if (!return_value) { return_value = &observer_retval; };
4632 	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
4633 		SAVE_OPLINE();
4634 		retval_ptr = ZVAL_UNDEFINED_OP1();
4635 		if (return_value) {
4636 			ZVAL_NULL(return_value);
4637 		}
4638 	} else if (!return_value) {
4639 		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
4640 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
4641 				SAVE_OPLINE();
4642 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
4643 			}
4644 		}
4645 	} else {
4646 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
4647 			ZVAL_COPY_VALUE(return_value, retval_ptr);
4648 			if (opline->op1_type == IS_CONST) {
4649 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
4650 					Z_ADDREF_P(return_value);
4651 				}
4652 			}
4653 		} else if (opline->op1_type == IS_CV) {
4654 			do {
4655 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4656 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
4657 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
4658 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4659 							ZVAL_COPY_VALUE(return_value, retval_ptr);
4660 							if (GC_MAY_LEAK(ref)) {
4661 								SAVE_OPLINE();
4662 								gc_possible_root(ref);
4663 							}
4664 							ZVAL_NULL(retval_ptr);
4665 							break;
4666 						} else {
4667 							Z_ADDREF_P(retval_ptr);
4668 						}
4669 					} else {
4670 						retval_ptr = Z_REFVAL_P(retval_ptr);
4671 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4672 							Z_ADDREF_P(retval_ptr);
4673 						}
4674 					}
4675 				}
4676 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4677 			} while (0);
4678 		} else /* if (opline->op1_type == IS_VAR) */ {
4679 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4680 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4681 
4682 				retval_ptr = Z_REFVAL_P(retval_ptr);
4683 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4684 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4685 					efree_size(ref, sizeof(zend_reference));
4686 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4687 					Z_ADDREF_P(retval_ptr);
4688 				}
4689 			} else {
4690 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4691 			}
4692 		}
4693 	}
4694 	SAVE_OPLINE();
4695 	zend_observer_fcall_end(execute_data, return_value);
4696 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
4697 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4698 }
4699 
ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4700 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4701 {
4702 	USE_OPLINE
4703 	zval *retval_ptr;
4704 	zval *return_value;
4705 
4706 	SAVE_OPLINE();
4707 
4708 	return_value = EX(return_value);
4709 
4710 	do {
4711 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
4712 		    (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
4713 			/* Not supposed to happen, but we'll allow it */
4714 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
4715 
4716 			retval_ptr = RT_CONSTANT(opline, opline->op1);
4717 			if (!return_value) {
4718 
4719 			} else {
4720 				if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4721 					ZVAL_COPY_VALUE(return_value, retval_ptr);
4722 					break;
4723 				}
4724 
4725 				ZVAL_NEW_REF(return_value, retval_ptr);
4726 				if (IS_CONST == IS_CONST) {
4727 					Z_TRY_ADDREF_P(retval_ptr);
4728 				}
4729 			}
4730 			break;
4731 		}
4732 
4733 		retval_ptr = zend_get_bad_ptr();
4734 
4735 		if (IS_CONST == IS_VAR) {
4736 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
4737 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
4738 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
4739 				if (return_value) {
4740 					ZVAL_NEW_REF(return_value, retval_ptr);
4741 				} else {
4742 
4743 				}
4744 				break;
4745 			}
4746 		}
4747 
4748 		if (return_value) {
4749 			if (Z_ISREF_P(retval_ptr)) {
4750 				Z_ADDREF_P(retval_ptr);
4751 			} else {
4752 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
4753 			}
4754 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
4755 		}
4756 
4757 	} while (0);
4758 
4759 
4760 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4761 }
4762 
ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4763 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4764 {
4765 	USE_OPLINE
4766 	zval *retval_ptr;
4767 	zval *return_value;
4768 	zval observer_retval;
4769 
4770 	SAVE_OPLINE();
4771 
4772 	return_value = EX(return_value);
4773 	if (!return_value) { return_value = &observer_retval; };
4774 	do {
4775 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR)) ||
4776 		    (opline->op1_type == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
4777 			/* Not supposed to happen, but we'll allow it */
4778 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
4779 
4780 			retval_ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4781 			if (!return_value) {
4782 				FREE_OP(opline->op1_type, opline->op1.var);
4783 			} else {
4784 				if (opline->op1_type == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4785 					ZVAL_COPY_VALUE(return_value, retval_ptr);
4786 					break;
4787 				}
4788 
4789 				ZVAL_NEW_REF(return_value, retval_ptr);
4790 				if (opline->op1_type == IS_CONST) {
4791 					Z_TRY_ADDREF_P(retval_ptr);
4792 				}
4793 			}
4794 			break;
4795 		}
4796 
4797 		retval_ptr = get_zval_ptr_ptr(opline->op1_type, opline->op1, BP_VAR_W);
4798 
4799 		if (opline->op1_type == IS_VAR) {
4800 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
4801 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
4802 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
4803 				if (return_value) {
4804 					ZVAL_NEW_REF(return_value, retval_ptr);
4805 				} else {
4806 					FREE_OP(opline->op1_type, opline->op1.var);
4807 				}
4808 				break;
4809 			}
4810 		}
4811 
4812 		if (return_value) {
4813 			if (Z_ISREF_P(retval_ptr)) {
4814 				Z_ADDREF_P(retval_ptr);
4815 			} else {
4816 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
4817 			}
4818 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
4819 		}
4820 
4821 		FREE_OP(opline->op1_type, opline->op1.var);
4822 	} while (0);
4823 
4824 	zend_observer_fcall_end(execute_data, return_value);
4825 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
4826 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4827 }
4828 
ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4829 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4830 {
4831 	USE_OPLINE
4832 	zval *retval;
4833 
4834 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
4835 
4836 	SAVE_OPLINE();
4837 	retval = RT_CONSTANT(opline, opline->op1);
4838 
4839 	/* Copy return value into generator->retval */
4840 	if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
4841 		ZVAL_COPY_VALUE(&generator->retval, retval);
4842 		if (IS_CONST == IS_CONST) {
4843 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
4844 				Z_ADDREF(generator->retval);
4845 			}
4846 		}
4847 	} else if (IS_CONST == IS_CV) {
4848 		ZVAL_COPY_DEREF(&generator->retval, retval);
4849 	} else /* if (IS_CONST == IS_VAR) */ {
4850 		if (UNEXPECTED(Z_ISREF_P(retval))) {
4851 			zend_refcounted *ref = Z_COUNTED_P(retval);
4852 
4853 			retval = Z_REFVAL_P(retval);
4854 			ZVAL_COPY_VALUE(&generator->retval, retval);
4855 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4856 				efree_size(ref, sizeof(zend_reference));
4857 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
4858 				Z_ADDREF_P(retval);
4859 			}
4860 		} else {
4861 			ZVAL_COPY_VALUE(&generator->retval, retval);
4862 		}
4863 	}
4864 
4865 	EG(current_execute_data) = EX(prev_execute_data);
4866 
4867 	/* Close the generator to free up resources */
4868 	zend_generator_close(generator, 1);
4869 
4870 	/* Pass execution back to handling code */
4871 	ZEND_VM_RETURN();
4872 }
4873 
ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4874 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4875 {
4876 	USE_OPLINE
4877 	zval *retval;
4878 
4879 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
4880 
4881 	SAVE_OPLINE();
4882 	retval = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4883 
4884 	/* Copy return value into generator->retval */
4885 	if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
4886 		ZVAL_COPY_VALUE(&generator->retval, retval);
4887 		if (opline->op1_type == IS_CONST) {
4888 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
4889 				Z_ADDREF(generator->retval);
4890 			}
4891 		}
4892 	} else if (opline->op1_type == IS_CV) {
4893 		ZVAL_COPY_DEREF(&generator->retval, retval);
4894 	} else /* if (opline->op1_type == IS_VAR) */ {
4895 		if (UNEXPECTED(Z_ISREF_P(retval))) {
4896 			zend_refcounted *ref = Z_COUNTED_P(retval);
4897 
4898 			retval = Z_REFVAL_P(retval);
4899 			ZVAL_COPY_VALUE(&generator->retval, retval);
4900 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4901 				efree_size(ref, sizeof(zend_reference));
4902 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
4903 				Z_ADDREF_P(retval);
4904 			}
4905 		} else {
4906 			ZVAL_COPY_VALUE(&generator->retval, retval);
4907 		}
4908 	}
4909 
4910 	zend_observer_fcall_end(generator->execute_data, &generator->retval);
4911 
4912 	EG(current_execute_data) = EX(prev_execute_data);
4913 
4914 	/* Close the generator to free up resources */
4915 	zend_generator_close(generator, 1);
4916 
4917 	/* Pass execution back to handling code */
4918 	ZEND_VM_RETURN();
4919 }
4920 
ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4921 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4922 {
4923 	USE_OPLINE
4924 	zval *value;
4925 
4926 	SAVE_OPLINE();
4927 	value = RT_CONSTANT(opline, opline->op1);
4928 
4929 	do {
4930 		if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
4931 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
4932 				value = Z_REFVAL_P(value);
4933 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
4934 					break;
4935 				}
4936 			}
4937 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4938 				ZVAL_UNDEFINED_OP1();
4939 				if (UNEXPECTED(EG(exception) != NULL)) {
4940 					HANDLE_EXCEPTION();
4941 				}
4942 			}
4943 			zend_throw_error(NULL, "Can only throw objects");
4944 
4945 			HANDLE_EXCEPTION();
4946 		}
4947 	} while (0);
4948 
4949 	zend_exception_save();
4950 	Z_TRY_ADDREF_P(value);
4951 	zend_throw_exception_object(value);
4952 	zend_exception_restore();
4953 
4954 	HANDLE_EXCEPTION();
4955 }
4956 
ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4957 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4958 {
4959 	USE_OPLINE
4960 	zend_class_entry *ce, *catch_ce;
4961 	zend_object *exception;
4962 
4963 	SAVE_OPLINE();
4964 	/* Check whether an exception has been thrown, if not, jump over code */
4965 	zend_exception_restore();
4966 	if (EG(exception) == NULL) {
4967 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4968 	}
4969 	catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
4970 	if (UNEXPECTED(catch_ce == NULL)) {
4971 		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 | ZEND_FETCH_CLASS_SILENT);
4972 
4973 		CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
4974 	}
4975 	ce = EG(exception)->ce;
4976 
4977 #ifdef HAVE_DTRACE
4978 	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
4979 		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
4980 	}
4981 #endif /* HAVE_DTRACE */
4982 
4983 	if (ce != catch_ce) {
4984 		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
4985 			if (opline->extended_value & ZEND_LAST_CATCH) {
4986 				zend_rethrow_exception(execute_data);
4987 				HANDLE_EXCEPTION();
4988 			}
4989 			ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4990 		}
4991 	}
4992 
4993 	exception = EG(exception);
4994 	EG(exception) = NULL;
4995 	if (RETURN_VALUE_USED(opline)) {
4996 		/* Always perform a strict assignment. There is a reasonable expectation that if you
4997 		 * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
4998 		 * we should not permit coercion to string here. */
4999 		zval tmp;
5000 		ZVAL_OBJ(&tmp, exception);
5001 		zend_assign_to_variable(EX_VAR(opline->result.var), &tmp, IS_TMP_VAR, /* strict */ 1);
5002 	} else {
5003 		OBJ_RELEASE(exception);
5004 	}
5005 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5006 }
5007 
ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5008 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5009 {
5010 	USE_OPLINE
5011 	zval *arg, *param;
5012 
5013 	SAVE_OPLINE();
5014 
5015 	arg = RT_CONSTANT(opline, opline->op1);
5016 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
5017 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
5018 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
5019 		Z_TRY_ADDREF_P(arg);
5020 		ZVAL_NEW_REF(param, arg);
5021 	} else {
5022 		ZVAL_COPY(param, arg);
5023 	}
5024 
5025 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5026 }
5027 
ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5028 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5029 {
5030 	USE_OPLINE
5031 	zval *val;
5032 
5033 	val = RT_CONSTANT(opline, opline->op1);
5034 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
5035 		ZVAL_TRUE(EX_VAR(opline->result.var));
5036 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
5037 		/* The result and op1 can be the same cv zval */
5038 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
5039 		ZVAL_FALSE(EX_VAR(opline->result.var));
5040 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
5041 			SAVE_OPLINE();
5042 			ZVAL_UNDEFINED_OP1();
5043 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5044 		}
5045 	} else {
5046 		SAVE_OPLINE();
5047 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
5048 
5049 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5050 	}
5051 	ZEND_VM_NEXT_OPCODE();
5052 }
5053 
ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5054 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5055 {
5056 	USE_OPLINE
5057 	zval *obj;
5058 	zend_object *zobj;
5059 	zend_class_entry *ce, *scope;
5060 	zend_function *clone;
5061 	zend_object_clone_obj_t clone_call;
5062 
5063 	SAVE_OPLINE();
5064 	obj = RT_CONSTANT(opline, opline->op1);
5065 
5066 	do {
5067 		if (IS_CONST == IS_CONST ||
5068 		    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
5069 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
5070 				obj = Z_REFVAL_P(obj);
5071 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
5072 					break;
5073 				}
5074 			}
5075 			ZVAL_UNDEF(EX_VAR(opline->result.var));
5076 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
5077 				ZVAL_UNDEFINED_OP1();
5078 				if (UNEXPECTED(EG(exception) != NULL)) {
5079 					HANDLE_EXCEPTION();
5080 				}
5081 			}
5082 			zend_throw_error(NULL, "__clone method called on non-object");
5083 
5084 			HANDLE_EXCEPTION();
5085 		}
5086 	} while (0);
5087 
5088 	zobj = Z_OBJ_P(obj);
5089 	ce = zobj->ce;
5090 	clone = ce->clone;
5091 	clone_call = zobj->handlers->clone_obj;
5092 	if (UNEXPECTED(clone_call == NULL)) {
5093 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
5094 
5095 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5096 		HANDLE_EXCEPTION();
5097 	}
5098 
5099 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
5100 		scope = EX(func)->op_array.scope;
5101 		if (clone->common.scope != scope) {
5102 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
5103 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
5104 				zend_wrong_clone_call(clone, scope);
5105 
5106 				ZVAL_UNDEF(EX_VAR(opline->result.var));
5107 				HANDLE_EXCEPTION();
5108 			}
5109 		}
5110 	}
5111 
5112 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
5113 
5114 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5115 }
5116 
ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5117 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5118 {
5119 	USE_OPLINE
5120 	zval *expr;
5121 	zval *result = EX_VAR(opline->result.var);
5122 	HashTable *ht;
5123 
5124 	SAVE_OPLINE();
5125 	expr = RT_CONSTANT(opline, opline->op1);
5126 
5127 	switch (opline->extended_value) {
5128 		case IS_LONG:
5129 			ZVAL_LONG(result, zval_get_long(expr));
5130 			break;
5131 		case IS_DOUBLE:
5132 			ZVAL_DOUBLE(result, zval_get_double(expr));
5133 			break;
5134 		case IS_STRING:
5135 			ZVAL_STR(result, zval_get_string(expr));
5136 			break;
5137 		default:
5138 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
5139 			if (IS_CONST & (IS_VAR|IS_CV)) {
5140 				ZVAL_DEREF(expr);
5141 			}
5142 			/* If value is already of correct type, return it directly */
5143 			if (Z_TYPE_P(expr) == opline->extended_value) {
5144 				ZVAL_COPY_VALUE(result, expr);
5145 				if (IS_CONST == IS_CONST) {
5146 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
5147 				} else if (IS_CONST != IS_TMP_VAR) {
5148 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
5149 				}
5150 
5151 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5152 			}
5153 
5154 			if (opline->extended_value == IS_ARRAY) {
5155 				if (IS_CONST == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
5156 					if (Z_TYPE_P(expr) != IS_NULL) {
5157 						ZVAL_ARR(result, zend_new_array(1));
5158 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
5159 						if (IS_CONST == IS_CONST) {
5160 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
5161 						} else {
5162 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
5163 						}
5164 					} else {
5165 						ZVAL_EMPTY_ARRAY(result);
5166 					}
5167 				} else if (Z_OBJ_P(expr)->properties == NULL
5168 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
5169 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
5170 					/* Optimized version without rebuilding properties HashTable */
5171 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
5172 				} else {
5173 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
5174 					if (obj_ht) {
5175 						/* fast copy */
5176 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
5177 							(Z_OBJCE_P(expr)->default_properties_count ||
5178 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
5179 							 GC_IS_RECURSIVE(obj_ht))));
5180 						zend_release_properties(obj_ht);
5181 					} else {
5182 						ZVAL_EMPTY_ARRAY(result);
5183 					}
5184 				}
5185 			} else {
5186 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
5187 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
5188 				if (Z_TYPE_P(expr) == IS_ARRAY) {
5189 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
5190 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
5191 						/* TODO: try not to duplicate immutable arrays as well ??? */
5192 						ht = zend_array_dup(ht);
5193 					}
5194 					Z_OBJ_P(result)->properties = ht;
5195 				} else if (Z_TYPE_P(expr) != IS_NULL) {
5196 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
5197 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
5198 					if (IS_CONST == IS_CONST) {
5199 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
5200 					} else {
5201 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
5202 					}
5203 				}
5204 			}
5205 	}
5206 
5207 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5208 }
5209 
ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5210 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5211 {
5212 	USE_OPLINE
5213 	zend_op_array *new_op_array;
5214 	zval *inc_filename;
5215 
5216 	SAVE_OPLINE();
5217 	inc_filename = RT_CONSTANT(opline, opline->op1);
5218 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
5219 	if (UNEXPECTED(EG(exception) != NULL)) {
5220 
5221 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
5222 			destroy_op_array(new_op_array);
5223 			efree_size(new_op_array, sizeof(zend_op_array));
5224 		}
5225 		UNDEF_RESULT();
5226 		HANDLE_EXCEPTION();
5227 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
5228 		if (RETURN_VALUE_USED(opline)) {
5229 			ZVAL_TRUE(EX_VAR(opline->result.var));
5230 		}
5231 	} else if (UNEXPECTED(new_op_array == NULL)) {
5232 		if (RETURN_VALUE_USED(opline)) {
5233 			ZVAL_FALSE(EX_VAR(opline->result.var));
5234 		}
5235 	} else if (new_op_array->last == 1
5236 			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
5237 			&& new_op_array->opcodes[0].op1_type == IS_CONST
5238 			&& EXPECTED(zend_execute_ex == execute_ex)) {
5239 		if (RETURN_VALUE_USED(opline)) {
5240 			const zend_op *op = new_op_array->opcodes;
5241 
5242 			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
5243 		}
5244 		zend_destroy_static_vars(new_op_array);
5245 		destroy_op_array(new_op_array);
5246 		efree_size(new_op_array, sizeof(zend_op_array));
5247 	} else {
5248 		zval *return_value = NULL;
5249 		zend_execute_data *call;
5250 		if (RETURN_VALUE_USED(opline)) {
5251 			return_value = EX_VAR(opline->result.var);
5252 		}
5253 
5254 		new_op_array->scope = EX(func)->op_array.scope;
5255 
5256 		call = zend_vm_stack_push_call_frame(
5257 			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
5258 			(zend_function*)new_op_array, 0,
5259 			Z_PTR(EX(This)));
5260 
5261 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
5262 			call->symbol_table = EX(symbol_table);
5263 		} else {
5264 			call->symbol_table = zend_rebuild_symbol_table();
5265 		}
5266 
5267 		call->prev_execute_data = execute_data;
5268 		i_init_code_execute_data(call, new_op_array, return_value);
5269 
5270 		if (EXPECTED(zend_execute_ex == execute_ex)) {
5271 
5272 			ZEND_VM_ENTER();
5273 		} else {
5274 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
5275 			zend_execute_ex(call);
5276 			zend_vm_stack_free_call_frame(call);
5277 		}
5278 
5279 		zend_destroy_static_vars(new_op_array);
5280 		destroy_op_array(new_op_array);
5281 		efree_size(new_op_array, sizeof(zend_op_array));
5282 		if (UNEXPECTED(EG(exception) != NULL)) {
5283 			zend_rethrow_exception(execute_data);
5284 
5285 			UNDEF_RESULT();
5286 			HANDLE_EXCEPTION();
5287 		}
5288 	}
5289 
5290 	ZEND_VM_NEXT_OPCODE();
5291 }
5292 
ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5293 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5294 {
5295 	USE_OPLINE
5296 	zend_op_array *new_op_array;
5297 	zval *inc_filename;
5298 
5299 	SAVE_OPLINE();
5300 	inc_filename = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
5301 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
5302 	if (UNEXPECTED(EG(exception) != NULL)) {
5303 		FREE_OP(opline->op1_type, opline->op1.var);
5304 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
5305 			destroy_op_array(new_op_array);
5306 			efree_size(new_op_array, sizeof(zend_op_array));
5307 		}
5308 		UNDEF_RESULT();
5309 		HANDLE_EXCEPTION();
5310 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
5311 		if (RETURN_VALUE_USED(opline)) {
5312 			ZVAL_TRUE(EX_VAR(opline->result.var));
5313 		}
5314 	} else if (UNEXPECTED(new_op_array == NULL)) {
5315 		if (RETURN_VALUE_USED(opline)) {
5316 			ZVAL_FALSE(EX_VAR(opline->result.var));
5317 		}
5318 	} else if (new_op_array->last == 1
5319 			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
5320 			&& new_op_array->opcodes[0].op1_type == IS_CONST
5321 			&& EXPECTED(zend_execute_ex == execute_ex)) {
5322 		if (RETURN_VALUE_USED(opline)) {
5323 			const zend_op *op = new_op_array->opcodes;
5324 
5325 			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
5326 		}
5327 		zend_destroy_static_vars(new_op_array);
5328 		destroy_op_array(new_op_array);
5329 		efree_size(new_op_array, sizeof(zend_op_array));
5330 	} else {
5331 		zval *return_value = NULL;
5332 		zend_execute_data *call;
5333 		if (RETURN_VALUE_USED(opline)) {
5334 			return_value = EX_VAR(opline->result.var);
5335 		}
5336 
5337 		new_op_array->scope = EX(func)->op_array.scope;
5338 
5339 		call = zend_vm_stack_push_call_frame(
5340 			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
5341 			(zend_function*)new_op_array, 0,
5342 			Z_PTR(EX(This)));
5343 
5344 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
5345 			call->symbol_table = EX(symbol_table);
5346 		} else {
5347 			call->symbol_table = zend_rebuild_symbol_table();
5348 		}
5349 
5350 		call->prev_execute_data = execute_data;
5351 		i_init_code_execute_data(call, new_op_array, return_value);
5352 		zend_observer_fcall_begin_specialized(call, false);
5353 		if (EXPECTED(zend_execute_ex == execute_ex)) {
5354 			FREE_OP(opline->op1_type, opline->op1.var);
5355 			ZEND_VM_ENTER();
5356 		} else {
5357 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
5358 			zend_execute_ex(call);
5359 			zend_vm_stack_free_call_frame(call);
5360 		}
5361 
5362 		zend_destroy_static_vars(new_op_array);
5363 		destroy_op_array(new_op_array);
5364 		efree_size(new_op_array, sizeof(zend_op_array));
5365 		if (UNEXPECTED(EG(exception) != NULL)) {
5366 			zend_rethrow_exception(execute_data);
5367 			FREE_OP(opline->op1_type, opline->op1.var);
5368 			UNDEF_RESULT();
5369 			HANDLE_EXCEPTION();
5370 		}
5371 	}
5372 	FREE_OP(opline->op1_type, opline->op1.var);
5373 	ZEND_VM_NEXT_OPCODE();
5374 }
5375 
ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5376 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5377 {
5378 	USE_OPLINE
5379 	zval *array_ptr, *result;
5380 
5381 	SAVE_OPLINE();
5382 
5383 	array_ptr = RT_CONSTANT(opline, opline->op1);
5384 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
5385 		result = EX_VAR(opline->result.var);
5386 		ZVAL_COPY_VALUE(result, array_ptr);
5387 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
5388 			Z_ADDREF_P(array_ptr);
5389 		}
5390 		Z_FE_POS_P(result) = 0;
5391 
5392 		ZEND_VM_NEXT_OPCODE();
5393 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
5394 		zend_object *zobj = Z_OBJ_P(array_ptr);
5395 		if (!zobj->ce->get_iterator) {
5396 			HashTable *properties = zobj->properties;
5397 			if (properties) {
5398 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
5399 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
5400 						GC_DELREF(properties);
5401 					}
5402 					properties = zobj->properties = zend_array_dup(properties);
5403 				}
5404 			} else {
5405 				properties = zobj->handlers->get_properties(zobj);
5406 			}
5407 
5408 			result = EX_VAR(opline->result.var);
5409 			ZVAL_COPY_VALUE(result, array_ptr);
5410 			if (IS_CONST != IS_TMP_VAR) {
5411 				Z_ADDREF_P(array_ptr);
5412 			}
5413 
5414 			if (zend_hash_num_elements(properties) == 0) {
5415 				Z_FE_ITER_P(result) = (uint32_t) -1;
5416 
5417 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5418 			}
5419 
5420 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
5421 
5422 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5423 		} else {
5424 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
5425 
5426 			if (UNEXPECTED(EG(exception))) {
5427 				HANDLE_EXCEPTION();
5428 			} else if (is_empty) {
5429 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5430 			} else {
5431 				ZEND_VM_NEXT_OPCODE();
5432 			}
5433 		}
5434 	} else {
5435 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
5436 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5437 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
5438 
5439 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5440 	}
5441 }
5442 
ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5443 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5444 {
5445 	USE_OPLINE
5446 	zval *array_ptr, *array_ref;
5447 
5448 	SAVE_OPLINE();
5449 
5450 	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
5451 		array_ref = array_ptr = zend_get_bad_ptr();
5452 		if (Z_ISREF_P(array_ref)) {
5453 			array_ptr = Z_REFVAL_P(array_ref);
5454 		}
5455 	} else {
5456 		array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
5457 	}
5458 
5459 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
5460 		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
5461 			if (array_ptr == array_ref) {
5462 				ZVAL_NEW_REF(array_ref, array_ref);
5463 				array_ptr = Z_REFVAL_P(array_ref);
5464 			}
5465 			Z_ADDREF_P(array_ref);
5466 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
5467 		} else {
5468 			array_ref = EX_VAR(opline->result.var);
5469 			ZVAL_NEW_REF(array_ref, array_ptr);
5470 			array_ptr = Z_REFVAL_P(array_ref);
5471 		}
5472 		if (IS_CONST == IS_CONST) {
5473 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
5474 		} else {
5475 			SEPARATE_ARRAY(array_ptr);
5476 		}
5477 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
5478 
5479 		ZEND_VM_NEXT_OPCODE();
5480 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
5481 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
5482 			HashTable *properties;
5483 			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
5484 				if (array_ptr == array_ref) {
5485 					ZVAL_NEW_REF(array_ref, array_ref);
5486 					array_ptr = Z_REFVAL_P(array_ref);
5487 				}
5488 				Z_ADDREF_P(array_ref);
5489 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
5490 			} else {
5491 				array_ptr = EX_VAR(opline->result.var);
5492 				ZVAL_COPY_VALUE(array_ptr, array_ref);
5493 			}
5494 			if (Z_OBJ_P(array_ptr)->properties
5495 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
5496 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
5497 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
5498 				}
5499 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
5500 			}
5501 
5502 			properties = Z_OBJPROP_P(array_ptr);
5503 			if (zend_hash_num_elements(properties) == 0) {
5504 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
5505 
5506 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5507 			}
5508 
5509 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
5510 
5511 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5512 		} else {
5513 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
5514 
5515 			if (UNEXPECTED(EG(exception))) {
5516 				HANDLE_EXCEPTION();
5517 			} else if (is_empty) {
5518 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5519 			} else {
5520 				ZEND_VM_NEXT_OPCODE();
5521 			}
5522 		}
5523 	} else {
5524 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
5525 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5526 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
5527 
5528 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5529 	}
5530 }
5531 
ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5532 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5533 {
5534 	USE_OPLINE
5535 	zval *value;
5536 	zend_reference *ref = NULL;
5537 	bool ret;
5538 
5539 	SAVE_OPLINE();
5540 	value = RT_CONSTANT(opline, opline->op1);
5541 
5542 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
5543 		if (IS_CONST == IS_VAR) {
5544 			ref = Z_REF_P(value);
5545 		}
5546 		value = Z_REFVAL_P(value);
5547 	}
5548 
5549 	ret = i_zend_is_true(value);
5550 
5551 	if (UNEXPECTED(EG(exception))) {
5552 
5553 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5554 		HANDLE_EXCEPTION();
5555 	}
5556 
5557 	if (ret) {
5558 		zval *result = EX_VAR(opline->result.var);
5559 
5560 		ZVAL_COPY_VALUE(result, value);
5561 		if (IS_CONST == IS_CONST) {
5562 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
5563 		} else if (IS_CONST == IS_CV) {
5564 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
5565 		} else if (IS_CONST == IS_VAR && ref) {
5566 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5567 				efree_size(ref, sizeof(zend_reference));
5568 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5569 				Z_ADDREF_P(result);
5570 			}
5571 		}
5572 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5573 	}
5574 
5575 	ZEND_VM_NEXT_OPCODE();
5576 }
5577 
ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5578 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5579 {
5580 	USE_OPLINE
5581 	zval *value;
5582 	zend_reference *ref = NULL;
5583 
5584 	SAVE_OPLINE();
5585 	value = RT_CONSTANT(opline, opline->op1);
5586 
5587 	if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
5588 		if (IS_CONST & IS_VAR) {
5589 			ref = Z_REF_P(value);
5590 		}
5591 		value = Z_REFVAL_P(value);
5592 	}
5593 
5594 	if (Z_TYPE_P(value) > IS_NULL) {
5595 		zval *result = EX_VAR(opline->result.var);
5596 		ZVAL_COPY_VALUE(result, value);
5597 		if (IS_CONST == IS_CONST) {
5598 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
5599 		} else if (IS_CONST == IS_CV) {
5600 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
5601 		} else if ((IS_CONST & IS_VAR) && ref) {
5602 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5603 				efree_size(ref, sizeof(zend_reference));
5604 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5605 				Z_ADDREF_P(result);
5606 			}
5607 		}
5608 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5609 	}
5610 
5611 	if ((IS_CONST & IS_VAR) && ref) {
5612 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5613 			efree_size(ref, sizeof(zend_reference));
5614 		}
5615 	}
5616 	ZEND_VM_NEXT_OPCODE();
5617 }
5618 
ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5619 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5620 {
5621 	USE_OPLINE
5622 	zval *val, *result;
5623 
5624 	val = RT_CONSTANT(opline, opline->op1);
5625 
5626 	if (Z_TYPE_P(val) > IS_NULL) {
5627 		do {
5628 			if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
5629 				val = Z_REFVAL_P(val);
5630 				if (Z_TYPE_P(val) <= IS_NULL) {
5631 
5632 					break;
5633 				}
5634 			}
5635 			ZEND_VM_NEXT_OPCODE();
5636 		} while (0);
5637 	}
5638 
5639 	result = EX_VAR(opline->result.var);
5640 	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
5641 	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
5642 		ZVAL_NULL(result);
5643 		if (IS_CONST == IS_CV
5644 			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
5645 			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
5646 		) {
5647 			SAVE_OPLINE();
5648 			ZVAL_UNDEFINED_OP1();
5649 			if (UNEXPECTED(EG(exception) != NULL)) {
5650 				HANDLE_EXCEPTION();
5651 			}
5652 		}
5653 	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
5654 		ZVAL_FALSE(result);
5655 	} else {
5656 		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
5657 		ZVAL_TRUE(result);
5658 	}
5659 
5660 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5661 }
5662 
ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5663 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5664 {
5665 	USE_OPLINE
5666 	zval *value;
5667 	zval *result = EX_VAR(opline->result.var);
5668 
5669 	value = RT_CONSTANT(opline, opline->op1);
5670 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5671 		SAVE_OPLINE();
5672 		ZVAL_UNDEFINED_OP1();
5673 		ZVAL_NULL(result);
5674 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5675 	}
5676 
5677 	if (IS_CONST == IS_CV) {
5678 		ZVAL_COPY_DEREF(result, value);
5679 	} else if (IS_CONST == IS_VAR) {
5680 		if (UNEXPECTED(Z_ISREF_P(value))) {
5681 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
5682 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
5683 				efree_size(Z_REF_P(value), sizeof(zend_reference));
5684 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5685 				Z_ADDREF_P(result);
5686 			}
5687 		} else {
5688 			ZVAL_COPY_VALUE(result, value);
5689 		}
5690 	} else {
5691 		ZVAL_COPY_VALUE(result, value);
5692 		if (IS_CONST == IS_CONST) {
5693 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
5694 				Z_ADDREF_P(result);
5695 			}
5696 		}
5697 	}
5698 	ZEND_VM_NEXT_OPCODE();
5699 }
5700 
ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5701 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5702 {
5703 	USE_OPLINE
5704 
5705 	SAVE_OPLINE();
5706 	do_bind_class(RT_CONSTANT(opline, opline->op1), (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
5707 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5708 }
5709 
ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5710 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5711 {
5712 	USE_OPLINE
5713 	zend_function *func;
5714 	zval *object;
5715 	zend_class_entry *called_scope;
5716 
5717 	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
5718 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
5719 		called_scope = Z_OBJCE(EX(This));
5720 		if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
5721 				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
5722 			object = NULL;
5723 		} else {
5724 			object = &EX(This);
5725 		}
5726 	} else {
5727 		called_scope = Z_CE(EX(This));
5728 		object = NULL;
5729 	}
5730 	SAVE_OPLINE();
5731 	zend_create_closure(EX_VAR(opline->result.var), func,
5732 		EX(func)->op_array.scope, called_scope, object);
5733 
5734 	ZEND_VM_NEXT_OPCODE();
5735 }
5736 
ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5737 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5738 {
5739 	USE_OPLINE
5740 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
5741 	zval *val;
5742 
5743 	SAVE_OPLINE();
5744 	val = RT_CONSTANT(opline, opline->op1);
5745 
5746 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
5747 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
5748 
5749 		UNDEF_RESULT();
5750 		HANDLE_EXCEPTION();
5751 	}
5752 
5753 yield_from_try_again:
5754 	if (Z_TYPE_P(val) == IS_ARRAY) {
5755 		ZVAL_COPY_VALUE(&generator->values, val);
5756 		if (Z_OPT_REFCOUNTED_P(val)) {
5757 			Z_ADDREF_P(val);
5758 		}
5759 		Z_FE_POS(generator->values) = 0;
5760 
5761 	} else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
5762 		zend_class_entry *ce = Z_OBJCE_P(val);
5763 		if (ce == zend_ce_generator) {
5764 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
5765 
5766 			Z_ADDREF_P(val);
5767 
5768 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
5769 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
5770 				zval_ptr_dtor(val);
5771 				UNDEF_RESULT();
5772 				HANDLE_EXCEPTION();
5773 			} else if (Z_ISUNDEF(new_gen->retval)) {
5774 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
5775 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
5776 					zval_ptr_dtor(val);
5777 					UNDEF_RESULT();
5778 					HANDLE_EXCEPTION();
5779 				} else {
5780 					zend_generator_yield_from(generator, new_gen);
5781 				}
5782 			} else {
5783 				if (RETURN_VALUE_USED(opline)) {
5784 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
5785 				}
5786 				ZEND_VM_NEXT_OPCODE();
5787 			}
5788 		} else {
5789 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
5790 
5791 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
5792 				if (!EG(exception)) {
5793 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
5794 				}
5795 				UNDEF_RESULT();
5796 				HANDLE_EXCEPTION();
5797 			}
5798 
5799 			iter->index = 0;
5800 			if (iter->funcs->rewind) {
5801 				iter->funcs->rewind(iter);
5802 				if (UNEXPECTED(EG(exception) != NULL)) {
5803 					OBJ_RELEASE(&iter->std);
5804 					UNDEF_RESULT();
5805 					HANDLE_EXCEPTION();
5806 				}
5807 			}
5808 
5809 			ZVAL_OBJ(&generator->values, &iter->std);
5810 		}
5811 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
5812 		val = Z_REFVAL_P(val);
5813 		goto yield_from_try_again;
5814 	} else {
5815 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
5816 
5817 		UNDEF_RESULT();
5818 		HANDLE_EXCEPTION();
5819 	}
5820 
5821 	/* This is the default return value
5822 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
5823 	if (RETURN_VALUE_USED(opline)) {
5824 		ZVAL_NULL(EX_VAR(opline->result.var));
5825 	}
5826 
5827 	/* This generator has no send target (though the generator we delegate to might have one) */
5828 	generator->send_target = NULL;
5829 
5830 	/* We increment to the next op, so we are at the correct position when the
5831 	 * generator is resumed. */
5832 	ZEND_VM_INC_OPCODE();
5833 
5834 	/* The GOTO VM uses a local opline variable. We need to set the opline
5835 	 * variable in execute_data so we don't resume at an old position. */
5836 	SAVE_OPLINE();
5837 
5838 	ZEND_VM_RETURN();
5839 }
5840 
ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5841 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5842 {
5843 	USE_OPLINE
5844 	zval *value;
5845 
5846 	value = RT_CONSTANT(opline, opline->op1);
5847 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
5848 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
5849 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5850 			zval_ptr_dtor_str(value);
5851 		}
5852 		ZEND_VM_NEXT_OPCODE();
5853 	} else {
5854 		bool strict;
5855 
5856 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
5857 			value = Z_REFVAL_P(value);
5858 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
5859 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
5860 
5861 				ZEND_VM_NEXT_OPCODE();
5862 			}
5863 		}
5864 
5865 		SAVE_OPLINE();
5866 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5867 			value = ZVAL_UNDEFINED_OP1();
5868 		}
5869 		strict = EX_USES_STRICT_TYPES();
5870 		do {
5871 			if (EXPECTED(!strict)) {
5872 				zend_string *str;
5873 				zval tmp;
5874 
5875 				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
5876 					zend_error(E_DEPRECATED,
5877 						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
5878 					ZVAL_LONG(EX_VAR(opline->result.var), 0);
5879 					if (UNEXPECTED(EG(exception))) {
5880 						HANDLE_EXCEPTION();
5881 					}
5882 					break;
5883 				}
5884 
5885 				ZVAL_COPY(&tmp, value);
5886 				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
5887 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
5888 					zval_ptr_dtor(&tmp);
5889 					break;
5890 				}
5891 				zval_ptr_dtor(&tmp);
5892 			}
5893 			if (!EG(exception)) {
5894 				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
5895 			}
5896 			ZVAL_UNDEF(EX_VAR(opline->result.var));
5897 		} while (0);
5898 	}
5899 
5900 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5901 }
5902 
ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5903 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5904 {
5905 	USE_OPLINE
5906 	zval *value;
5907 	int result = 0;
5908 
5909 	value = RT_CONSTANT(opline, opline->op1);
5910 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
5911 type_check_resource:
5912 		if (opline->extended_value != MAY_BE_RESOURCE
5913 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
5914 			result = 1;
5915 		}
5916 	} else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
5917 		value = Z_REFVAL_P(value);
5918 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
5919 			goto type_check_resource;
5920 		}
5921 	} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5922 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
5923 		SAVE_OPLINE();
5924 		ZVAL_UNDEFINED_OP1();
5925 		if (UNEXPECTED(EG(exception))) {
5926 			ZVAL_UNDEF(EX_VAR(opline->result.var));
5927 			HANDLE_EXCEPTION();
5928 		}
5929 	}
5930 	if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5931 		SAVE_OPLINE();
5932 
5933 		ZEND_VM_SMART_BRANCH(result, 1);
5934 	} else {
5935 		ZEND_VM_SMART_BRANCH(result, 0);
5936 	}
5937 }
5938 
ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5939 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5940 {
5941 	USE_OPLINE
5942 	zend_constant *c;
5943 
5944 	c = CACHED_PTR(opline->extended_value);
5945 	if (EXPECTED(c != NULL)) {
5946 		if (!IS_SPECIAL_CACHE_VAL(c)) {
5947 defined_true:
5948 			ZEND_VM_SMART_BRANCH_TRUE();
5949 		} else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
5950 defined_false:
5951 			ZEND_VM_SMART_BRANCH_FALSE();
5952 		}
5953 	}
5954 	if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
5955 		CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
5956 		goto defined_false;
5957 	} else {
5958 		goto defined_true;
5959 	}
5960 }
5961 
ZEND_JMP_FRAMELESS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5962 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FRAMELESS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5963 {
5964 	USE_OPLINE
5965 	zend_jmp_fl_result result = (uintptr_t)CACHED_PTR(opline->extended_value);
5966 try_again:
5967 	if (EXPECTED(result == ZEND_JMP_FL_HIT)) {
5968 		OPLINE = OP_JMP_ADDR(opline, opline->op2);
5969 		ZEND_VM_CONTINUE();
5970 	} else if (EXPECTED(result == ZEND_JMP_FL_MISS)) {
5971 		ZEND_VM_NEXT_OPCODE();
5972 	} else {
5973 		ZEND_ASSERT(result == ZEND_JMP_FL_UNPRIMED);
5974 		/* func_name refers to the function in the local namespace, e.g. foo\substr. */
5975 		zval *func_name = (zval *)RT_CONSTANT(opline, opline->op1);
5976 		/* If it cannot be found locally, we must be referring to the global function. */
5977 		zval *func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name));
5978 		/* ZEND_JMP_FL_MISS = 1, ZEND_JMP_FL_HIT = 2 */
5979 		result = (func == NULL) + 1;
5980 		CACHE_PTR(opline->extended_value, (void *)result);
5981 		goto try_again;
5982 	}
5983 }
5984 
ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5985 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5986 {
5987 	USE_OPLINE
5988 	zval *value;
5989 
5990 	value = RT_CONSTANT(opline, opline->op1);
5991 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
5992 	ZEND_VM_NEXT_OPCODE();
5993 }
5994 
ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5995 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5996 {
5997 	USE_OPLINE
5998 	zval *value;
5999 
6000 	value = RT_CONSTANT(opline, opline->op1);
6001 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
6002 	ZEND_VM_NEXT_OPCODE();
6003 }
6004 
ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6005 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6006 {
6007 	USE_OPLINE
6008 	zval *value;
6009 
6010 	value = RT_CONSTANT(opline, opline->op1);
6011 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
6012 	ZEND_VM_NEXT_OPCODE();
6013 }
6014 
ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6015 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6016 {
6017 	USE_OPLINE
6018 	zval *value, *arg;
6019 
6020 	value = RT_CONSTANT(opline, opline->op1);
6021 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
6022 	ZVAL_COPY_VALUE(arg, value);
6023 	ZEND_VM_NEXT_OPCODE();
6024 }
6025 
ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6026 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6027 {
6028 	USE_OPLINE
6029 	zval *value, *arg;
6030 	uint32_t arg_num = opline->op2.num;
6031 
6032 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
6033 	if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
6034 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6035 	}
6036 	value = RT_CONSTANT(opline, opline->op1);
6037 	ZVAL_COPY_VALUE(arg, value);
6038 	ZEND_VM_NEXT_OPCODE();
6039 }
6040 
ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6041 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6042 {
6043 	USE_OPLINE
6044 	zval *op1, *op2, *result;
6045 	double d1, d2;
6046 
6047 	op1 = RT_CONSTANT(opline, opline->op1);
6048 	op2 = RT_CONSTANT(opline, opline->op2);
6049 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6050 		/* pass */
6051 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6052 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6053 			result = EX_VAR(opline->result.var);
6054 			fast_long_add_function(result, op1, op2);
6055 			ZEND_VM_NEXT_OPCODE();
6056 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6057 			d1 = (double)Z_LVAL_P(op1);
6058 			d2 = Z_DVAL_P(op2);
6059 			goto add_double;
6060 		}
6061 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6062 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6063 			d1 = Z_DVAL_P(op1);
6064 			d2 = Z_DVAL_P(op2);
6065 add_double:
6066 			result = EX_VAR(opline->result.var);
6067 			ZVAL_DOUBLE(result, d1 + d2);
6068 			ZEND_VM_NEXT_OPCODE();
6069 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6070 			d1 = Z_DVAL_P(op1);
6071 			d2 = (double)Z_LVAL_P(op2);
6072 			goto add_double;
6073 		}
6074 	}
6075 
6076 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6077 }
6078 
ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6079 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6080 {
6081 	USE_OPLINE
6082 	zval *op1, *op2, *result;
6083 	double d1, d2;
6084 
6085 	op1 = RT_CONSTANT(opline, opline->op1);
6086 	op2 = RT_CONSTANT(opline, opline->op2);
6087 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6088 		/* pass */
6089 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6090 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6091 			result = EX_VAR(opline->result.var);
6092 			fast_long_sub_function(result, op1, op2);
6093 			ZEND_VM_NEXT_OPCODE();
6094 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6095 			d1 = (double)Z_LVAL_P(op1);
6096 			d2 = Z_DVAL_P(op2);
6097 			goto sub_double;
6098 		}
6099 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6100 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6101 			d1 = Z_DVAL_P(op1);
6102 			d2 = Z_DVAL_P(op2);
6103 sub_double:
6104 			result = EX_VAR(opline->result.var);
6105 			ZVAL_DOUBLE(result, d1 - d2);
6106 			ZEND_VM_NEXT_OPCODE();
6107 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6108 			d1 = Z_DVAL_P(op1);
6109 			d2 = (double)Z_LVAL_P(op2);
6110 			goto sub_double;
6111 		}
6112 	}
6113 
6114 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6115 }
6116 
ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6117 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6118 {
6119 	USE_OPLINE
6120 	zval *op1, *op2, *result;
6121 	double d1, d2;
6122 
6123 	op1 = RT_CONSTANT(opline, opline->op1);
6124 	op2 = RT_CONSTANT(opline, opline->op2);
6125 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6126 		/* pass */
6127 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6128 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6129 			zend_long overflow;
6130 
6131 			result = EX_VAR(opline->result.var);
6132 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
6133 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
6134 			ZEND_VM_NEXT_OPCODE();
6135 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6136 			d1 = (double)Z_LVAL_P(op1);
6137 			d2 = Z_DVAL_P(op2);
6138 			goto mul_double;
6139 		}
6140 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6141 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6142 			d1 = Z_DVAL_P(op1);
6143 			d2 = Z_DVAL_P(op2);
6144 mul_double:
6145 			result = EX_VAR(opline->result.var);
6146 			ZVAL_DOUBLE(result, d1 * d2);
6147 			ZEND_VM_NEXT_OPCODE();
6148 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6149 			d1 = Z_DVAL_P(op1);
6150 			d2 = (double)Z_LVAL_P(op2);
6151 			goto mul_double;
6152 		}
6153 	}
6154 
6155 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6156 }
6157 
ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6158 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6159 {
6160 	USE_OPLINE
6161 	zval *op1, *op2;
6162 
6163 	SAVE_OPLINE();
6164 	op1 = RT_CONSTANT(opline, opline->op1);
6165 	op2 = RT_CONSTANT(opline, opline->op2);
6166 	div_function(EX_VAR(opline->result.var), op1, op2);
6167 
6168 
6169 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6170 }
6171 
ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6172 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6173 {
6174 	USE_OPLINE
6175 	zval *op1, *op2, *result;
6176 
6177 	op1 = RT_CONSTANT(opline, opline->op1);
6178 	op2 = RT_CONSTANT(opline, opline->op2);
6179 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6180 		/* pass */
6181 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6182 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6183 			result = EX_VAR(opline->result.var);
6184 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
6185 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6186 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
6187 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
6188 				ZVAL_LONG(result, 0);
6189 			} else {
6190 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
6191 			}
6192 			ZEND_VM_NEXT_OPCODE();
6193 		}
6194 	}
6195 
6196 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6197 }
6198 
ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6199 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6200 {
6201 	USE_OPLINE
6202 	zval *op1, *op2;
6203 
6204 	op1 = RT_CONSTANT(opline, opline->op1);
6205 	op2 = RT_CONSTANT(opline, opline->op2);
6206 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6207 		/* pass */
6208 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6209 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
6210 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
6211 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
6212 		ZVAL_LONG(EX_VAR(opline->result.var),
6213 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
6214 		ZEND_VM_NEXT_OPCODE();
6215 	}
6216 
6217 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6218 }
6219 
ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6220 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6221 {
6222 	USE_OPLINE
6223 	zval *op1, *op2;
6224 
6225 	op1 = RT_CONSTANT(opline, opline->op1);
6226 	op2 = RT_CONSTANT(opline, opline->op2);
6227 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6228 		/* pass */
6229 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6230 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
6231 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
6232 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
6233 		ZEND_VM_NEXT_OPCODE();
6234 	}
6235 
6236 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6237 }
6238 
ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6239 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6240 {
6241 	USE_OPLINE
6242 	zval *op1, *op2;
6243 
6244 	SAVE_OPLINE();
6245 	op1 = RT_CONSTANT(opline, opline->op1);
6246 	op2 = RT_CONSTANT(opline, opline->op2);
6247 	pow_function(EX_VAR(opline->result.var), op1, op2);
6248 
6249 
6250 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6251 }
6252 
ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6253 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6254 {
6255 	USE_OPLINE
6256 	zval *op1, *op2;
6257 	bool result;
6258 
6259 	SAVE_OPLINE();
6260 	op1 = RT_CONSTANT(opline, opline->op1);
6261 	op2 = RT_CONSTANT(opline, opline->op2);
6262 	result = fast_is_identical_function(op1, op2);
6263 
6264 
6265 	ZEND_VM_SMART_BRANCH(result, 1);
6266 }
6267 
ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6268 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6269 {
6270 	USE_OPLINE
6271 	zval *op1, *op2;
6272 	bool result;
6273 
6274 	SAVE_OPLINE();
6275 	op1 = RT_CONSTANT(opline, opline->op1);
6276 	op2 = RT_CONSTANT(opline, opline->op2);
6277 	result = fast_is_not_identical_function(op1, op2);
6278 
6279 
6280 	ZEND_VM_SMART_BRANCH(result, 1);
6281 }
6282 
ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6283 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6284 {
6285 	USE_OPLINE
6286 	zval *op1, *op2;
6287 	double d1, d2;
6288 
6289 	op1 = RT_CONSTANT(opline, opline->op1);
6290 	op2 = RT_CONSTANT(opline, opline->op2);
6291 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6292 		/* pass */
6293 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
6294 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
6295 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
6296 is_equal_true:
6297 				ZEND_VM_SMART_BRANCH_TRUE();
6298 			} else {
6299 is_equal_false:
6300 				ZEND_VM_SMART_BRANCH_FALSE();
6301 			}
6302 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
6303 			d1 = (double)Z_LVAL_P(op1);
6304 			d2 = Z_DVAL_P(op2);
6305 			goto is_equal_double;
6306 		}
6307 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
6308 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
6309 			d1 = Z_DVAL_P(op1);
6310 			d2 = Z_DVAL_P(op2);
6311 is_equal_double:
6312 			if (d1 == d2) {
6313 				goto is_equal_true;
6314 			} else {
6315 				goto is_equal_false;
6316 			}
6317 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
6318 			d1 = Z_DVAL_P(op1);
6319 			d2 = (double)Z_LVAL_P(op2);
6320 			goto is_equal_double;
6321 		}
6322 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
6323 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
6324 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
6325 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6326 				zval_ptr_dtor_str(op1);
6327 			}
6328 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6329 				zval_ptr_dtor_str(op2);
6330 			}
6331 			if (result) {
6332 				goto is_equal_true;
6333 			} else {
6334 				goto is_equal_false;
6335 			}
6336 		}
6337 	}
6338 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6339 }
6340 
ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6341 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6342 {
6343 	USE_OPLINE
6344 	zval *op1, *op2;
6345 	double d1, d2;
6346 
6347 	op1 = RT_CONSTANT(opline, opline->op1);
6348 	op2 = RT_CONSTANT(opline, opline->op2);
6349 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6350 		/* pass */
6351 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
6352 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
6353 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
6354 is_not_equal_true:
6355 				ZEND_VM_SMART_BRANCH_TRUE();
6356 			} else {
6357 is_not_equal_false:
6358 				ZEND_VM_SMART_BRANCH_FALSE();
6359 			}
6360 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
6361 			d1 = (double)Z_LVAL_P(op1);
6362 			d2 = Z_DVAL_P(op2);
6363 			goto is_not_equal_double;
6364 		}
6365 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
6366 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
6367 			d1 = Z_DVAL_P(op1);
6368 			d2 = Z_DVAL_P(op2);
6369 is_not_equal_double:
6370 			if (d1 != d2) {
6371 				goto is_not_equal_true;
6372 			} else {
6373 				goto is_not_equal_false;
6374 			}
6375 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
6376 			d1 = Z_DVAL_P(op1);
6377 			d2 = (double)Z_LVAL_P(op2);
6378 			goto is_not_equal_double;
6379 		}
6380 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
6381 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
6382 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
6383 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6384 				zval_ptr_dtor_str(op1);
6385 			}
6386 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6387 				zval_ptr_dtor_str(op2);
6388 			}
6389 			if (!result) {
6390 				goto is_not_equal_true;
6391 			} else {
6392 				goto is_not_equal_false;
6393 			}
6394 		}
6395 	}
6396 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6397 }
6398 
ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6399 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6400 {
6401 	USE_OPLINE
6402 	zval *op1, *op2;
6403 	double d1, d2;
6404 
6405 	op1 = RT_CONSTANT(opline, opline->op1);
6406 	op2 = RT_CONSTANT(opline, opline->op2);
6407 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6408 		/* pass */
6409 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6410 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6411 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
6412 is_smaller_true:
6413 				ZEND_VM_SMART_BRANCH_TRUE();
6414 			} else {
6415 is_smaller_false:
6416 				ZEND_VM_SMART_BRANCH_FALSE();
6417 			}
6418 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6419 			d1 = (double)Z_LVAL_P(op1);
6420 			d2 = Z_DVAL_P(op2);
6421 			goto is_smaller_double;
6422 		}
6423 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6424 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6425 			d1 = Z_DVAL_P(op1);
6426 			d2 = Z_DVAL_P(op2);
6427 is_smaller_double:
6428 			if (d1 < d2) {
6429 				goto is_smaller_true;
6430 			} else {
6431 				goto is_smaller_false;
6432 			}
6433 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6434 			d1 = Z_DVAL_P(op1);
6435 			d2 = (double)Z_LVAL_P(op2);
6436 			goto is_smaller_double;
6437 		}
6438 	}
6439 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6440 }
6441 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6442 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6443 {
6444 	USE_OPLINE
6445 	zval *op1, *op2;
6446 	double d1, d2;
6447 
6448 	op1 = RT_CONSTANT(opline, opline->op1);
6449 	op2 = RT_CONSTANT(opline, opline->op2);
6450 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6451 		/* pass */
6452 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6453 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6454 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
6455 is_smaller_or_equal_true:
6456 				ZEND_VM_SMART_BRANCH_TRUE();
6457 				ZVAL_TRUE(EX_VAR(opline->result.var));
6458 				ZEND_VM_NEXT_OPCODE();
6459 			} else {
6460 is_smaller_or_equal_false:
6461 				ZEND_VM_SMART_BRANCH_FALSE();
6462 				ZVAL_FALSE(EX_VAR(opline->result.var));
6463 				ZEND_VM_NEXT_OPCODE();
6464 			}
6465 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6466 			d1 = (double)Z_LVAL_P(op1);
6467 			d2 = Z_DVAL_P(op2);
6468 			goto is_smaller_or_equal_double;
6469 		}
6470 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6471 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6472 			d1 = Z_DVAL_P(op1);
6473 			d2 = Z_DVAL_P(op2);
6474 is_smaller_or_equal_double:
6475 			if (d1 <= d2) {
6476 				goto is_smaller_or_equal_true;
6477 			} else {
6478 				goto is_smaller_or_equal_false;
6479 			}
6480 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6481 			d1 = Z_DVAL_P(op1);
6482 			d2 = (double)Z_LVAL_P(op2);
6483 			goto is_smaller_or_equal_double;
6484 		}
6485 	}
6486 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6487 }
6488 
ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6489 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6490 {
6491 	USE_OPLINE
6492 	zval *op1, *op2;
6493 
6494 	SAVE_OPLINE();
6495 	op1 = RT_CONSTANT(opline, opline->op1);
6496 	op2 = RT_CONSTANT(opline, opline->op2);
6497 	compare_function(EX_VAR(opline->result.var), op1, op2);
6498 
6499 
6500 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6501 }
6502 
ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6503 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6504 {
6505 	USE_OPLINE
6506 	zval *op1, *op2;
6507 
6508 	op1 = RT_CONSTANT(opline, opline->op1);
6509 	op2 = RT_CONSTANT(opline, opline->op2);
6510 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6511 		/* pass */
6512 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6513 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6514 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
6515 		ZEND_VM_NEXT_OPCODE();
6516 	}
6517 
6518 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6519 }
6520 
ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6521 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6522 {
6523 	USE_OPLINE
6524 	zval *op1, *op2;
6525 
6526 	op1 = RT_CONSTANT(opline, opline->op1);
6527 	op2 = RT_CONSTANT(opline, opline->op2);
6528 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6529 		/* pass */
6530 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6531 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6532 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
6533 		ZEND_VM_NEXT_OPCODE();
6534 	}
6535 
6536 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6537 }
6538 
ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6539 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6540 {
6541 	USE_OPLINE
6542 	zval *op1, *op2;
6543 
6544 	op1 = RT_CONSTANT(opline, opline->op1);
6545 	op2 = RT_CONSTANT(opline, opline->op2);
6546 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6547 		/* pass */
6548 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6549 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6550 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
6551 		ZEND_VM_NEXT_OPCODE();
6552 	}
6553 
6554 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6555 }
6556 
ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6557 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6558 {
6559 	USE_OPLINE
6560 	zval *op1, *op2;
6561 
6562 	SAVE_OPLINE();
6563 	op1 = RT_CONSTANT(opline, opline->op1);
6564 	op2 = RT_CONSTANT(opline, opline->op2);
6565 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
6566 
6567 
6568 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6569 }
6570 
ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6571 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6572 {
6573 	USE_OPLINE
6574 	zval *container, *dim, *value;
6575 
6576 	SAVE_OPLINE();
6577 	container = RT_CONSTANT(opline, opline->op1);
6578 	dim = RT_CONSTANT(opline, opline->op2);
6579 	if (IS_CONST != IS_CONST) {
6580 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6581 fetch_dim_r_array:
6582 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
6583 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
6584 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
6585 			container = Z_REFVAL_P(container);
6586 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6587 				goto fetch_dim_r_array;
6588 			} else {
6589 				goto fetch_dim_r_slow;
6590 			}
6591 		} else {
6592 fetch_dim_r_slow:
6593 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
6594 				dim++;
6595 			}
6596 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
6597 		}
6598 	} else {
6599 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6600 	}
6601 
6602 
6603 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6604 }
6605 
ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6606 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6607 {
6608 	USE_OPLINE
6609 	zval *container;
6610 
6611 	SAVE_OPLINE();
6612 	container = RT_CONSTANT(opline, opline->op1);
6613 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6614 
6615 
6616 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6617 }
6618 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6619 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6620 {
6621 #if 0
6622 	USE_OPLINE
6623 #endif
6624 
6625 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
6626 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
6627 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6628 		}
6629 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6630 	} else {
6631 		if (IS_CONST == IS_UNUSED) {
6632 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6633 		}
6634 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6635 	}
6636 }
6637 
ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6638 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6639 {
6640 	USE_OPLINE
6641 	zval *container;
6642 	void **cache_slot = NULL;
6643 
6644 	SAVE_OPLINE();
6645 	container = RT_CONSTANT(opline, opline->op1);
6646 
6647 	if (IS_CONST == IS_CONST ||
6648 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6649 		do {
6650 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6651 				container = Z_REFVAL_P(container);
6652 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
6653 					break;
6654 				}
6655 			}
6656 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
6657 				ZVAL_UNDEFINED_OP1();
6658 			}
6659 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
6660 			ZVAL_NULL(EX_VAR(opline->result.var));
6661 			goto fetch_obj_r_finish;
6662 		} while (0);
6663 	}
6664 
6665 	/* here we are sure we are dealing with an object */
6666 	do {
6667 		zend_object *zobj = Z_OBJ_P(container);
6668 		zend_string *name, *tmp_name;
6669 		zval *retval;
6670 
6671 		if (IS_CONST == IS_CONST) {
6672 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
6673 
6674 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
6675 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
6676 
6677 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
6678 					retval = OBJ_PROP(zobj, prop_offset);
6679 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
6680 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6681 							goto fetch_obj_r_copy;
6682 						} else {
6683 fetch_obj_r_fast_copy:
6684 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6685 							ZEND_VM_NEXT_OPCODE();
6686 						}
6687 					}
6688 				} else if (EXPECTED(zobj->properties != NULL)) {
6689 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6690 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
6691 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
6692 
6693 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
6694 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
6695 
6696 							if (EXPECTED(p->key == name) ||
6697 							    (EXPECTED(p->h == ZSTR_H(name)) &&
6698 							     EXPECTED(p->key != NULL) &&
6699 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
6700 								retval = &p->val;
6701 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6702 									goto fetch_obj_r_copy;
6703 								} else {
6704 									goto fetch_obj_r_fast_copy;
6705 								}
6706 							}
6707 						}
6708 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
6709 					}
6710 					retval = zend_hash_find_known_hash(zobj->properties, name);
6711 					if (EXPECTED(retval)) {
6712 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
6713 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
6714 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6715 							goto fetch_obj_r_copy;
6716 						} else {
6717 							goto fetch_obj_r_fast_copy;
6718 						}
6719 					}
6720 				}
6721 			}
6722 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6723 		} else {
6724 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
6725 			if (UNEXPECTED(!name)) {
6726 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6727 				break;
6728 			}
6729 		}
6730 
6731 #if ZEND_DEBUG
6732 		/* For non-standard object handlers, verify a declared property type in debug builds.
6733 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
6734 		zend_property_info *prop_info = NULL;
6735 		if (zobj->handlers->read_property != zend_std_read_property) {
6736 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
6737 		}
6738 #endif
6739 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
6740 #if ZEND_DEBUG
6741 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
6742 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
6743 			ZVAL_OPT_DEREF(retval);
6744 			zend_verify_property_type(prop_info, retval, /* strict */ true);
6745 		}
6746 #endif
6747 
6748 		if (IS_CONST != IS_CONST) {
6749 			zend_tmp_string_release(tmp_name);
6750 		}
6751 
6752 		if (retval != EX_VAR(opline->result.var)) {
6753 fetch_obj_r_copy:
6754 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6755 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
6756 			zend_unwrap_reference(retval);
6757 		}
6758 	} while (0);
6759 
6760 fetch_obj_r_finish:
6761 
6762 
6763 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6764 }
6765 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6766 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6767 {
6768 	USE_OPLINE
6769 	zval *container;
6770 	void **cache_slot = NULL;
6771 
6772 	SAVE_OPLINE();
6773 	container = RT_CONSTANT(opline, opline->op1);
6774 
6775 	if (IS_CONST == IS_CONST ||
6776 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6777 		do {
6778 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6779 				container = Z_REFVAL_P(container);
6780 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
6781 					break;
6782 				}
6783 			}
6784 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
6785 				ZVAL_UNDEFINED_OP2();
6786 			}
6787 			ZVAL_NULL(EX_VAR(opline->result.var));
6788 			goto fetch_obj_is_finish;
6789 		} while (0);
6790 	}
6791 
6792 	/* here we are sure we are dealing with an object */
6793 	do {
6794 		zend_object *zobj = Z_OBJ_P(container);
6795 		zend_string *name, *tmp_name;
6796 		zval *retval;
6797 
6798 		if (IS_CONST == IS_CONST) {
6799 			cache_slot = CACHE_ADDR(opline->extended_value);
6800 
6801 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
6802 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
6803 
6804 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
6805 					retval = OBJ_PROP(zobj, prop_offset);
6806 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
6807 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6808 							goto fetch_obj_is_copy;
6809 						} else {
6810 fetch_obj_is_fast_copy:
6811 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6812 							ZEND_VM_NEXT_OPCODE();
6813 						}
6814 					}
6815 				} else if (EXPECTED(zobj->properties != NULL)) {
6816 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6817 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
6818 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
6819 
6820 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
6821 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
6822 
6823 							if (EXPECTED(p->key == name) ||
6824 							    (EXPECTED(p->h == ZSTR_H(name)) &&
6825 							     EXPECTED(p->key != NULL) &&
6826 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
6827 								retval = &p->val;
6828 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6829 									goto fetch_obj_is_copy;
6830 								} else {
6831 									goto fetch_obj_is_fast_copy;
6832 								}
6833 							}
6834 						}
6835 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
6836 					}
6837 					retval = zend_hash_find_known_hash(zobj->properties, name);
6838 					if (EXPECTED(retval)) {
6839 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
6840 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
6841 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6842 							goto fetch_obj_is_copy;
6843 						} else {
6844 							goto fetch_obj_is_fast_copy;
6845 						}
6846 					}
6847 				}
6848 			}
6849 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6850 		} else {
6851 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
6852 			if (UNEXPECTED(!name)) {
6853 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6854 				break;
6855 			}
6856 		}
6857 
6858 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
6859 
6860 		if (IS_CONST != IS_CONST) {
6861 			zend_tmp_string_release(tmp_name);
6862 		}
6863 
6864 		if (retval != EX_VAR(opline->result.var)) {
6865 fetch_obj_is_copy:
6866 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6867 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
6868 			zend_unwrap_reference(retval);
6869 		}
6870 	} while (0);
6871 
6872 fetch_obj_is_finish:
6873 
6874 
6875 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6876 }
6877 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6878 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6879 {
6880 #if 0
6881 	USE_OPLINE
6882 #endif
6883 
6884 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
6885 		/* Behave like FETCH_OBJ_W */
6886 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
6887 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6888 		}
6889 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6890 	} else {
6891 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6892 	}
6893 }
6894 
ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6895 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6896 {
6897 	USE_OPLINE
6898 	zval *container;
6899 
6900 	SAVE_OPLINE();
6901 	container = RT_CONSTANT(opline, opline->op1);
6902 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6903 
6904 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6905 }
6906 
ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6907 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6908 {
6909 	USE_OPLINE
6910 	zval *op1, *op2;
6911 	zend_string *op1_str, *op2_str, *str;
6912 
6913 
6914 	op1 = RT_CONSTANT(opline, opline->op1);
6915 	op2 = RT_CONSTANT(opline, opline->op2);
6916 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
6917 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
6918 		zend_string *op1_str = Z_STR_P(op1);
6919 		zend_string *op2_str = Z_STR_P(op2);
6920 		zend_string *str;
6921 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
6922 
6923 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
6924 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
6925 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
6926 			} else {
6927 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
6928 			}
6929 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6930 				zend_string_release_ex(op1_str, 0);
6931 			}
6932 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
6933 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
6934 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
6935 			} else {
6936 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
6937 			}
6938 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6939 				zend_string_release_ex(op2_str, 0);
6940 			}
6941 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
6942 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
6943 			size_t len = ZSTR_LEN(op1_str);
6944 
6945 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
6946 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6947 			GC_ADD_FLAGS(str, flags);
6948 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6949 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6950 				zend_string_release_ex(op2_str, 0);
6951 			}
6952 		} else {
6953 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
6954 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
6955 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6956 			GC_ADD_FLAGS(str, flags);
6957 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6958 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6959 				zend_string_release_ex(op1_str, 0);
6960 			}
6961 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6962 				zend_string_release_ex(op2_str, 0);
6963 			}
6964 		}
6965 		ZEND_VM_NEXT_OPCODE();
6966 	}
6967 
6968 	SAVE_OPLINE();
6969 	if (IS_CONST == IS_CONST) {
6970 		op1_str = Z_STR_P(op1);
6971 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
6972 		op1_str = zend_string_copy(Z_STR_P(op1));
6973 	} else {
6974 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
6975 			ZVAL_UNDEFINED_OP1();
6976 		}
6977 		op1_str = zval_get_string_func(op1);
6978 	}
6979 	if (IS_CONST == IS_CONST) {
6980 		op2_str = Z_STR_P(op2);
6981 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
6982 		op2_str = zend_string_copy(Z_STR_P(op2));
6983 	} else {
6984 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
6985 			ZVAL_UNDEFINED_OP2();
6986 		}
6987 		op2_str = zval_get_string_func(op2);
6988 	}
6989 	do {
6990 		if (IS_CONST != IS_CONST) {
6991 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
6992 				if (IS_CONST == IS_CONST) {
6993 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
6994 						GC_ADDREF(op2_str);
6995 					}
6996 				}
6997 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
6998 				zend_string_release_ex(op1_str, 0);
6999 				break;
7000 			}
7001 		}
7002 		if (IS_CONST != IS_CONST) {
7003 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
7004 				if (IS_CONST == IS_CONST) {
7005 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
7006 						GC_ADDREF(op1_str);
7007 					}
7008 				}
7009 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
7010 				zend_string_release_ex(op2_str, 0);
7011 				break;
7012 			}
7013 		}
7014 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
7015 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
7016 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
7017 
7018 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
7019 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
7020 		if (IS_CONST != IS_CONST) {
7021 			zend_string_release_ex(op1_str, 0);
7022 		}
7023 		if (IS_CONST != IS_CONST) {
7024 			zend_string_release_ex(op2_str, 0);
7025 		}
7026 	} while (0);
7027 
7028 
7029 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7030 }
7031 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7032 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7033 {
7034 	USE_OPLINE
7035 	zval *function_name;
7036 	zval *object;
7037 	zend_function *fbc;
7038 	zend_class_entry *called_scope;
7039 	zend_object *obj;
7040 	zend_execute_data *call;
7041 	uint32_t call_info;
7042 
7043 	SAVE_OPLINE();
7044 
7045 	object = RT_CONSTANT(opline, opline->op1);
7046 
7047 	if (IS_CONST != IS_CONST) {
7048 		function_name = RT_CONSTANT(opline, opline->op2);
7049 	}
7050 
7051 	if (IS_CONST != IS_CONST &&
7052 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
7053 		do {
7054 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
7055 				function_name = Z_REFVAL_P(function_name);
7056 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
7057 					break;
7058 				}
7059 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
7060 				ZVAL_UNDEFINED_OP2();
7061 				if (UNEXPECTED(EG(exception) != NULL)) {
7062 
7063 					HANDLE_EXCEPTION();
7064 				}
7065 			}
7066 			zend_throw_error(NULL, "Method name must be a string");
7067 
7068 
7069 			HANDLE_EXCEPTION();
7070 		} while (0);
7071 	}
7072 
7073 	if (IS_CONST == IS_UNUSED) {
7074 		obj = Z_OBJ_P(object);
7075 	} else {
7076 		do {
7077 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
7078 				obj = Z_OBJ_P(object);
7079 			} else {
7080 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
7081 					zend_reference *ref = Z_REF_P(object);
7082 
7083 					object = &ref->val;
7084 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
7085 						obj = Z_OBJ_P(object);
7086 						if (IS_CONST & IS_VAR) {
7087 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
7088 								efree_size(ref, sizeof(zend_reference));
7089 							} else {
7090 								Z_ADDREF_P(object);
7091 							}
7092 						}
7093 						break;
7094 					}
7095 				}
7096 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
7097 					object = ZVAL_UNDEFINED_OP1();
7098 					if (UNEXPECTED(EG(exception) != NULL)) {
7099 						if (IS_CONST != IS_CONST) {
7100 
7101 						}
7102 						HANDLE_EXCEPTION();
7103 					}
7104 				}
7105 				if (IS_CONST == IS_CONST) {
7106 					function_name = RT_CONSTANT(opline, opline->op2);
7107 				}
7108 				zend_invalid_method_call(object, function_name);
7109 
7110 
7111 				HANDLE_EXCEPTION();
7112 			}
7113 		} while (0);
7114 	}
7115 
7116 	called_scope = obj->ce;
7117 
7118 	if (IS_CONST == IS_CONST &&
7119 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
7120 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
7121 	} else {
7122 		zend_object *orig_obj = obj;
7123 
7124 		if (IS_CONST == IS_CONST) {
7125 			function_name = RT_CONSTANT(opline, opline->op2);
7126 		}
7127 
7128 		/* First, locate the function. */
7129 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
7130 		if (UNEXPECTED(fbc == NULL)) {
7131 			if (EXPECTED(!EG(exception))) {
7132 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
7133 			}
7134 
7135 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
7136 				zend_objects_store_del(orig_obj);
7137 			}
7138 			HANDLE_EXCEPTION();
7139 		}
7140 		if (IS_CONST == IS_CONST &&
7141 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
7142 		    EXPECTED(obj == orig_obj)) {
7143 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
7144 		}
7145 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
7146 			GC_ADDREF(obj); /* For $this pointer */
7147 			if (GC_DELREF(orig_obj) == 0) {
7148 				zend_objects_store_del(orig_obj);
7149 			}
7150 		}
7151 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
7152 			init_func_run_time_cache(&fbc->op_array);
7153 		}
7154 	}
7155 
7156 	if (IS_CONST != IS_CONST) {
7157 
7158 	}
7159 
7160 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
7161 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
7162 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
7163 			zend_objects_store_del(obj);
7164 			if (UNEXPECTED(EG(exception))) {
7165 				HANDLE_EXCEPTION();
7166 			}
7167 		}
7168 		/* call static method */
7169 		obj = (zend_object*)called_scope;
7170 		call_info = ZEND_CALL_NESTED_FUNCTION;
7171 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
7172 		if (IS_CONST == IS_CV) {
7173 			GC_ADDREF(obj); /* For $this pointer */
7174 		}
7175 		/* CV may be changed indirectly (e.g. when it's a reference) */
7176 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
7177 	}
7178 
7179 	call = zend_vm_stack_push_call_frame(call_info,
7180 		fbc, opline->extended_value, obj);
7181 	call->prev_execute_data = EX(call);
7182 	EX(call) = call;
7183 
7184 	ZEND_VM_NEXT_OPCODE();
7185 }
7186 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7187 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7188 {
7189 	USE_OPLINE
7190 	zval *function_name;
7191 	zend_class_entry *ce;
7192 	uint32_t call_info;
7193 	zend_function *fbc;
7194 	zend_execute_data *call;
7195 
7196 	SAVE_OPLINE();
7197 
7198 	if (IS_CONST == IS_CONST) {
7199 		/* no function found. try a static method in class */
7200 		ce = CACHED_PTR(opline->result.num);
7201 		if (UNEXPECTED(ce == NULL)) {
7202 			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);
7203 			if (UNEXPECTED(ce == NULL)) {
7204 
7205 				HANDLE_EXCEPTION();
7206 			}
7207 			if (IS_CONST != IS_CONST) {
7208 				CACHE_PTR(opline->result.num, ce);
7209 			}
7210 		}
7211 	} else if (IS_CONST == IS_UNUSED) {
7212 		ce = zend_fetch_class(NULL, opline->op1.num);
7213 		if (UNEXPECTED(ce == NULL)) {
7214 
7215 			HANDLE_EXCEPTION();
7216 		}
7217 	} else {
7218 		ce = Z_CE_P(EX_VAR(opline->op1.var));
7219 	}
7220 
7221 	if (IS_CONST == IS_CONST &&
7222 	    IS_CONST == IS_CONST &&
7223 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
7224 		/* nothing to do */
7225 	} else if (IS_CONST != IS_CONST &&
7226 	           IS_CONST == IS_CONST &&
7227 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
7228 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
7229 	} else if (IS_CONST != IS_UNUSED) {
7230 		function_name = RT_CONSTANT(opline, opline->op2);
7231 		if (IS_CONST != IS_CONST) {
7232 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
7233 				do {
7234 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
7235 						function_name = Z_REFVAL_P(function_name);
7236 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
7237 							break;
7238 						}
7239 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
7240 						ZVAL_UNDEFINED_OP2();
7241 						if (UNEXPECTED(EG(exception) != NULL)) {
7242 							HANDLE_EXCEPTION();
7243 						}
7244 					}
7245 					zend_throw_error(NULL, "Method name must be a string");
7246 
7247 					HANDLE_EXCEPTION();
7248 				} while (0);
7249 			}
7250 		}
7251 
7252 		if (ce->get_static_method) {
7253 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
7254 		} else {
7255 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
7256 		}
7257 		if (UNEXPECTED(fbc == NULL)) {
7258 			if (EXPECTED(!EG(exception))) {
7259 				zend_undefined_method(ce, Z_STR_P(function_name));
7260 			}
7261 
7262 			HANDLE_EXCEPTION();
7263 		}
7264 		if (IS_CONST == IS_CONST &&
7265 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
7266 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
7267 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
7268 		}
7269 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
7270 			init_func_run_time_cache(&fbc->op_array);
7271 		}
7272 		if (IS_CONST != IS_CONST) {
7273 
7274 		}
7275 	} else {
7276 		if (UNEXPECTED(ce->constructor == NULL)) {
7277 			zend_throw_error(NULL, "Cannot call constructor");
7278 			HANDLE_EXCEPTION();
7279 		}
7280 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
7281 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
7282 			HANDLE_EXCEPTION();
7283 		}
7284 		fbc = ce->constructor;
7285 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
7286 			init_func_run_time_cache(&fbc->op_array);
7287 		}
7288 	}
7289 
7290 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
7291 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
7292 			ce = (zend_class_entry*)Z_OBJ(EX(This));
7293 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
7294 		} else {
7295 			zend_non_static_method_call(fbc);
7296 			HANDLE_EXCEPTION();
7297 		}
7298 	} else {
7299 		/* previous opcode is ZEND_FETCH_CLASS */
7300 		if (IS_CONST == IS_UNUSED
7301 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
7302 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
7303 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
7304 				ce = Z_OBJCE(EX(This));
7305 			} else {
7306 				ce = Z_CE(EX(This));
7307 			}
7308 		}
7309 		call_info = ZEND_CALL_NESTED_FUNCTION;
7310 	}
7311 
7312 	call = zend_vm_stack_push_call_frame(call_info,
7313 		fbc, opline->extended_value, ce);
7314 	call->prev_execute_data = EX(call);
7315 	EX(call) = call;
7316 
7317 	ZEND_VM_NEXT_OPCODE();
7318 }
7319 
ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7320 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7321 {
7322 	USE_OPLINE
7323 	zval *function_name;
7324 	zend_fcall_info_cache fcc;
7325 	char *error = NULL;
7326 	zend_function *func;
7327 	void *object_or_called_scope;
7328 	zend_execute_data *call;
7329 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
7330 
7331 	SAVE_OPLINE();
7332 	function_name = RT_CONSTANT(opline, opline->op2);
7333 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
7334 		ZEND_ASSERT(!error);
7335 		func = fcc.function_handler;
7336 		object_or_called_scope = fcc.called_scope;
7337 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
7338 			/* Delay closure destruction until its invocation */
7339 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
7340 			call_info |= ZEND_CALL_CLOSURE;
7341 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
7342 				call_info |= ZEND_CALL_FAKE_CLOSURE;
7343 			}
7344 			if (fcc.object) {
7345 				object_or_called_scope = fcc.object;
7346 				call_info |= ZEND_CALL_HAS_THIS;
7347 			}
7348 		} else if (fcc.object) {
7349 			GC_ADDREF(fcc.object); /* For $this pointer */
7350 			object_or_called_scope = fcc.object;
7351 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
7352 		}
7353 
7354 		if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
7355 			if (call_info & ZEND_CALL_CLOSURE) {
7356 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
7357 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
7358 				zend_object_release(fcc.object);
7359 			}
7360 			HANDLE_EXCEPTION();
7361 		}
7362 
7363 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
7364 			init_func_run_time_cache(&func->op_array);
7365 		}
7366 	} else {
7367 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
7368 		efree(error);
7369 
7370 		HANDLE_EXCEPTION();
7371 	}
7372 
7373 	call = zend_vm_stack_push_call_frame(call_info,
7374 		func, opline->extended_value, object_or_called_scope);
7375 	call->prev_execute_data = EX(call);
7376 	EX(call) = call;
7377 
7378 	ZEND_VM_NEXT_OPCODE();
7379 }
7380 
ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7381 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7382 {
7383 	USE_OPLINE
7384 	zval *value, *arg;
7385 
7386 	if (IS_CONST == IS_CONST) {
7387 		SAVE_OPLINE();
7388 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
7389 		uint32_t arg_num;
7390 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
7391 		if (UNEXPECTED(!arg)) {
7392 
7393 			HANDLE_EXCEPTION();
7394 		}
7395 	} else {
7396 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
7397 	}
7398 
7399 	value = RT_CONSTANT(opline, opline->op1);
7400 	ZVAL_COPY_VALUE(arg, value);
7401 	if (IS_CONST == IS_CONST) {
7402 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
7403 			Z_ADDREF_P(arg);
7404 		}
7405 	}
7406 	ZEND_VM_NEXT_OPCODE();
7407 }
7408 
ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7410 {
7411 	USE_OPLINE
7412 	zval *value, *arg;
7413 	uint32_t arg_num;
7414 
7415 	if (IS_CONST == IS_CONST) {
7416 		SAVE_OPLINE();
7417 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
7418 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
7419 		if (UNEXPECTED(!arg)) {
7420 
7421 			HANDLE_EXCEPTION();
7422 		}
7423 	} else {
7424 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
7425 		arg_num = opline->op2.num;
7426 	}
7427 
7428 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
7429 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
7430 			goto send_val_by_ref;
7431 		}
7432 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
7433 send_val_by_ref:
7434 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7435 	}
7436 	value = RT_CONSTANT(opline, opline->op1);
7437 	ZVAL_COPY_VALUE(arg, value);
7438 	if (IS_CONST == IS_CONST) {
7439 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
7440 			Z_ADDREF_P(arg);
7441 		}
7442 	}
7443 	ZEND_VM_NEXT_OPCODE();
7444 }
7445 
ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7446 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7447 {
7448 	zend_class_entry *ce, *scope;
7449 	zend_class_constant *c;
7450 	zval *value, *zv, *constant_zv;
7451 	zend_string *constant_name;
7452 	USE_OPLINE
7453 
7454 	SAVE_OPLINE();
7455 
7456 	do {
7457 		if (IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
7458 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
7459 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
7460 				break;
7461 			}
7462 		}
7463 		if (IS_CONST == IS_CONST) {
7464 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
7465 				ce = CACHED_PTR(opline->extended_value);
7466 			} else {
7467 				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);
7468 				if (UNEXPECTED(ce == NULL)) {
7469 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7470 
7471 					HANDLE_EXCEPTION();
7472 				}
7473 				CACHE_PTR(opline->extended_value, ce);
7474 			}
7475 		} else if (IS_CONST == IS_UNUSED) {
7476 			ce = zend_fetch_class(NULL, opline->op1.num);
7477 			if (UNEXPECTED(ce == NULL)) {
7478 				ZVAL_UNDEF(EX_VAR(opline->result.var));
7479 
7480 				HANDLE_EXCEPTION();
7481 			}
7482 		} else {
7483 			ce = Z_CE_P(EX_VAR(opline->op1.var));
7484 		}
7485 		if (IS_CONST != IS_CONST
7486 			&& IS_CONST == IS_CONST
7487 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
7488 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
7489 			break;
7490 		}
7491 
7492 		constant_zv = RT_CONSTANT(opline, opline->op2);
7493 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
7494 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
7495 			ZVAL_UNDEF(EX_VAR(opline->result.var));
7496 
7497 			HANDLE_EXCEPTION();
7498 		}
7499 		constant_name = Z_STR_P(constant_zv);
7500 		/* Magic 'class' for constant OP2 is caught at compile-time */
7501 		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
7502 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
7503 
7504 			ZEND_VM_NEXT_OPCODE();
7505 		}
7506 		zv = IS_CONST == IS_CONST
7507 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
7508 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
7509 
7510 		if (EXPECTED(zv != NULL)) {
7511 			c = Z_PTR_P(zv);
7512 			scope = EX(func)->op_array.scope;
7513 			if (!zend_verify_const_access(c, scope)) {
7514 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
7515 				ZVAL_UNDEF(EX_VAR(opline->result.var));
7516 
7517 				HANDLE_EXCEPTION();
7518 			}
7519 
7520 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
7521 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
7522 				ZVAL_UNDEF(EX_VAR(opline->result.var));
7523 
7524 				HANDLE_EXCEPTION();
7525 			}
7526 
7527 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
7528 			if (UNEXPECTED(is_constant_deprecated)) {
7529 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
7530 
7531 				if (EG(exception)) {
7532 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7533 
7534 					HANDLE_EXCEPTION();
7535 				}
7536 			}
7537 
7538 			value = &c->value;
7539 			// Enums require loading of all class constants to build the backed enum table
7540 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
7541 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
7542 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7543 
7544 					HANDLE_EXCEPTION();
7545 				}
7546 			}
7547 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
7548 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
7549 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7550 
7551 					HANDLE_EXCEPTION();
7552 				}
7553 			}
7554 			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
7555 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
7556 			}
7557 		} else {
7558 			zend_throw_error(NULL, "Undefined constant %s::%s",
7559 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
7560 			ZVAL_UNDEF(EX_VAR(opline->result.var));
7561 
7562 			HANDLE_EXCEPTION();
7563 		}
7564 	} while (0);
7565 
7566 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
7567 
7568 	ZEND_VM_NEXT_OPCODE();
7569 }
7570 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7572 {
7573 	USE_OPLINE
7574 	zval *expr_ptr, new_expr;
7575 
7576 	SAVE_OPLINE();
7577 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
7578 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
7579 		expr_ptr = zend_get_bad_ptr();
7580 		if (Z_ISREF_P(expr_ptr)) {
7581 			Z_ADDREF_P(expr_ptr);
7582 		} else {
7583 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
7584 		}
7585 
7586 	} else {
7587 		expr_ptr = RT_CONSTANT(opline, opline->op1);
7588 		if (IS_CONST == IS_TMP_VAR) {
7589 			/* pass */
7590 		} else if (IS_CONST == IS_CONST) {
7591 			Z_TRY_ADDREF_P(expr_ptr);
7592 		} else if (IS_CONST == IS_CV) {
7593 			ZVAL_DEREF(expr_ptr);
7594 			Z_TRY_ADDREF_P(expr_ptr);
7595 		} else /* if (IS_CONST == IS_VAR) */ {
7596 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
7597 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
7598 
7599 				expr_ptr = Z_REFVAL_P(expr_ptr);
7600 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
7601 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
7602 					expr_ptr = &new_expr;
7603 					efree_size(ref, sizeof(zend_reference));
7604 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
7605 					Z_ADDREF_P(expr_ptr);
7606 				}
7607 			}
7608 		}
7609 	}
7610 
7611 	if (IS_CONST != IS_UNUSED) {
7612 		zval *offset = RT_CONSTANT(opline, opline->op2);
7613 		zend_string *str;
7614 		zend_ulong hval;
7615 
7616 add_again:
7617 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
7618 			str = Z_STR_P(offset);
7619 			if (IS_CONST != IS_CONST) {
7620 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
7621 					goto num_index;
7622 				}
7623 			}
7624 str_index:
7625 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
7626 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
7627 			hval = Z_LVAL_P(offset);
7628 num_index:
7629 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
7630 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
7631 			offset = Z_REFVAL_P(offset);
7632 			goto add_again;
7633 		} else if (Z_TYPE_P(offset) == IS_NULL) {
7634 			str = ZSTR_EMPTY_ALLOC();
7635 			goto str_index;
7636 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
7637 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
7638 			goto num_index;
7639 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
7640 			hval = 0;
7641 			goto num_index;
7642 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
7643 			hval = 1;
7644 			goto num_index;
7645 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
7646 			zend_use_resource_as_offset(offset);
7647 			hval = Z_RES_HANDLE_P(offset);
7648 			goto num_index;
7649 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
7650 			ZVAL_UNDEFINED_OP2();
7651 			str = ZSTR_EMPTY_ALLOC();
7652 			goto str_index;
7653 		} else {
7654 			zend_illegal_array_offset_access(offset);
7655 			zval_ptr_dtor_nogc(expr_ptr);
7656 		}
7657 
7658 	} else {
7659 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
7660 			zend_cannot_add_element();
7661 			zval_ptr_dtor_nogc(expr_ptr);
7662 		}
7663 	}
7664 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7665 }
7666 
ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7667 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7668 {
7669 	zval *array;
7670 	uint32_t size;
7671 	USE_OPLINE
7672 
7673 	array = EX_VAR(opline->result.var);
7674 	if (IS_CONST != IS_UNUSED) {
7675 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
7676 		ZVAL_ARR(array, zend_new_array(size));
7677 		/* Explicitly initialize array as not-packed if flag is set */
7678 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
7679 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
7680 		}
7681 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7682 	} else {
7683 		ZVAL_ARR(array, zend_new_array(0));
7684 		ZEND_VM_NEXT_OPCODE();
7685 	}
7686 }
7687 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7688 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7689 {
7690 	USE_OPLINE
7691 	zval *container;
7692 	bool result;
7693 	zend_ulong hval;
7694 	zval *offset;
7695 
7696 	SAVE_OPLINE();
7697 	container = RT_CONSTANT(opline, opline->op1);
7698 	offset = RT_CONSTANT(opline, opline->op2);
7699 
7700 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7701 		HashTable *ht;
7702 		zval *value;
7703 		zend_string *str;
7704 
7705 isset_dim_obj_array:
7706 		ht = Z_ARRVAL_P(container);
7707 isset_again:
7708 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
7709 			str = Z_STR_P(offset);
7710 			if (IS_CONST != IS_CONST) {
7711 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
7712 					goto num_index_prop;
7713 				}
7714 			}
7715 			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
7716 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
7717 			hval = Z_LVAL_P(offset);
7718 num_index_prop:
7719 			value = zend_hash_index_find(ht, hval);
7720 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
7721 			offset = Z_REFVAL_P(offset);
7722 			goto isset_again;
7723 		} else {
7724 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
7725 			if (UNEXPECTED(EG(exception))) {
7726 				result = 0;
7727 				goto isset_dim_obj_exit;
7728 			}
7729 		}
7730 
7731 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
7732 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
7733 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
7734 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
7735 
7736 			if (IS_CONST & (IS_CONST|IS_CV)) {
7737 				/* avoid exception check */
7738 
7739 				ZEND_VM_SMART_BRANCH(result, 0);
7740 			}
7741 		} else {
7742 			result = (value == NULL || !i_zend_is_true(value));
7743 		}
7744 		goto isset_dim_obj_exit;
7745 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
7746 		container = Z_REFVAL_P(container);
7747 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7748 			goto isset_dim_obj_array;
7749 		}
7750 	}
7751 
7752 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
7753 		offset++;
7754 	}
7755 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
7756 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
7757 	} else {
7758 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
7759 	}
7760 
7761 isset_dim_obj_exit:
7762 
7763 
7764 	ZEND_VM_SMART_BRANCH(result, 1);
7765 }
7766 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7767 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7768 {
7769 	USE_OPLINE
7770 	zval *container;
7771 	int result;
7772 	zval *offset;
7773 	zend_string *name, *tmp_name;
7774 
7775 	SAVE_OPLINE();
7776 	container = RT_CONSTANT(opline, opline->op1);
7777 	offset = RT_CONSTANT(opline, opline->op2);
7778 
7779 	if (IS_CONST == IS_CONST ||
7780 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
7781 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
7782 			container = Z_REFVAL_P(container);
7783 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
7784 				result = (opline->extended_value & ZEND_ISEMPTY);
7785 				goto isset_object_finish;
7786 			}
7787 		} else {
7788 			result = (opline->extended_value & ZEND_ISEMPTY);
7789 			goto isset_object_finish;
7790 		}
7791 	}
7792 
7793 	if (IS_CONST == IS_CONST) {
7794 		name = Z_STR_P(offset);
7795 	} else {
7796 		name = zval_try_get_tmp_string(offset, &tmp_name);
7797 		if (UNEXPECTED(!name)) {
7798 			result = 0;
7799 			goto isset_object_finish;
7800 		}
7801 	}
7802 
7803 	result =
7804 		(opline->extended_value & ZEND_ISEMPTY) ^
7805 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
7806 
7807 	if (IS_CONST != IS_CONST) {
7808 		zend_tmp_string_release(tmp_name);
7809 	}
7810 
7811 isset_object_finish:
7812 
7813 
7814 	ZEND_VM_SMART_BRANCH(result, 1);
7815 }
7816 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7817 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7818 {
7819 	USE_OPLINE
7820 
7821 	zval *key, *subject;
7822 	HashTable *ht;
7823 	bool result;
7824 
7825 	SAVE_OPLINE();
7826 
7827 	key = RT_CONSTANT(opline, opline->op1);
7828 	subject = RT_CONSTANT(opline, opline->op2);
7829 
7830 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
7831 array_key_exists_array:
7832 		ht = Z_ARRVAL_P(subject);
7833 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
7834 	} else {
7835 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
7836 			subject = Z_REFVAL_P(subject);
7837 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
7838 				goto array_key_exists_array;
7839 			}
7840 		}
7841 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
7842 		result = 0;
7843 	}
7844 
7845 
7846 	ZEND_VM_SMART_BRANCH(result, 1);
7847 }
7848 
7849 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7851 {
7852 	USE_OPLINE
7853 
7854 	zend_class_entry *ce = CACHED_PTR(opline->extended_value);
7855 	if (ce == NULL) {
7856 		zval *lcname = RT_CONSTANT(opline, opline->op1);
7857 		zval *zv = zend_hash_find_known_hash(EG(class_table), Z_STR_P(lcname + 1));
7858 		if (zv) {
7859 			SAVE_OPLINE();
7860 			ce = zend_bind_class_in_slot(zv, lcname, Z_STR_P(RT_CONSTANT(opline, opline->op2)));
7861 			if (!ce) {
7862 				HANDLE_EXCEPTION();
7863 			}
7864 		}
7865 		CACHE_PTR(opline->extended_value, ce);
7866 	}
7867 	ZEND_VM_NEXT_OPCODE();
7868 }
7869 
ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7871 {
7872 	USE_OPLINE
7873 	zval *name;
7874 	zval *val;
7875 	zend_constant c;
7876 
7877 	SAVE_OPLINE();
7878 	name  = RT_CONSTANT(opline, opline->op1);
7879 	val   = RT_CONSTANT(opline, opline->op2);
7880 
7881 	ZVAL_COPY(&c.value, val);
7882 	if (Z_OPT_CONSTANT(c.value)) {
7883 		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
7884 			zval_ptr_dtor_nogc(&c.value);
7885 
7886 
7887 			HANDLE_EXCEPTION();
7888 		}
7889 	}
7890 	/* non persistent, case sensitive */
7891 	ZEND_CONSTANT_SET_FLAGS(&c, 0, PHP_USER_CONSTANT);
7892 	c.name = zend_string_copy(Z_STR_P(name));
7893 
7894 	if (zend_register_constant(&c) == FAILURE) {
7895 	}
7896 
7897 
7898 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7899 }
7900 
ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7901 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7902 {
7903 	USE_OPLINE
7904 
7905 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
7906 
7907 	SAVE_OPLINE();
7908 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
7909 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7910 	}
7911 
7912 	/* Destroy the previously yielded value */
7913 	zval_ptr_dtor(&generator->value);
7914 
7915 	/* Destroy the previously yielded key */
7916 	zval_ptr_dtor(&generator->key);
7917 
7918 	/* Set the new yielded value */
7919 	if (IS_CONST != IS_UNUSED) {
7920 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
7921 			/* Constants and temporary variables aren't yieldable by reference,
7922 			 * but we still allow them with a notice. */
7923 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
7924 				zval *value;
7925 
7926 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7927 
7928 				value = RT_CONSTANT(opline, opline->op1);
7929 				ZVAL_COPY_VALUE(&generator->value, value);
7930 				if (IS_CONST == IS_CONST) {
7931 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7932 						Z_ADDREF(generator->value);
7933 					}
7934 				}
7935 			} else {
7936 				zval *value_ptr = zend_get_bad_ptr();
7937 
7938 				/* If a function call result is yielded and the function did
7939 				 * not return by reference we throw a notice. */
7940 				do {
7941 					if (IS_CONST == IS_VAR) {
7942 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
7943 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
7944 						 && !Z_ISREF_P(value_ptr)) {
7945 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7946 							ZVAL_COPY(&generator->value, value_ptr);
7947 							break;
7948 						}
7949 					}
7950 					if (Z_ISREF_P(value_ptr)) {
7951 						Z_ADDREF_P(value_ptr);
7952 					} else {
7953 						ZVAL_MAKE_REF_EX(value_ptr, 2);
7954 					}
7955 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
7956 				} while (0);
7957 
7958 			}
7959 		} else {
7960 			zval *value = RT_CONSTANT(opline, opline->op1);
7961 
7962 			/* Consts, temporary variables and references need copying */
7963 			if (IS_CONST == IS_CONST) {
7964 				ZVAL_COPY_VALUE(&generator->value, value);
7965 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7966 					Z_ADDREF(generator->value);
7967 				}
7968 			} else if (IS_CONST == IS_TMP_VAR) {
7969 				ZVAL_COPY_VALUE(&generator->value, value);
7970 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
7971 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
7972 
7973 			} else {
7974 				ZVAL_COPY_VALUE(&generator->value, value);
7975 				if (IS_CONST == IS_CV) {
7976 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
7977 				}
7978 			}
7979 		}
7980 	} else {
7981 		/* If no value was specified yield null */
7982 		ZVAL_NULL(&generator->value);
7983 	}
7984 
7985 	/* Set the new yielded key */
7986 	if (IS_CONST != IS_UNUSED) {
7987 		zval *key = RT_CONSTANT(opline, opline->op2);
7988 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
7989 			key = Z_REFVAL_P(key);
7990 		}
7991 		ZVAL_COPY(&generator->key, key);
7992 
7993 		if (Z_TYPE(generator->key) == IS_LONG
7994 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
7995 		) {
7996 			generator->largest_used_integer_key = Z_LVAL(generator->key);
7997 		}
7998 	} else {
7999 		/* If no key was specified we use auto-increment keys */
8000 		generator->largest_used_integer_key++;
8001 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
8002 	}
8003 
8004 	if (RETURN_VALUE_USED(opline)) {
8005 		/* If the return value of yield is used set the send
8006 		 * target and initialize it to NULL */
8007 		generator->send_target = EX_VAR(opline->result.var);
8008 		ZVAL_NULL(generator->send_target);
8009 	} else {
8010 		generator->send_target = NULL;
8011 	}
8012 
8013 	/* We increment to the next op, so we are at the correct position when the
8014 	 * generator is resumed. */
8015 	ZEND_VM_INC_OPCODE();
8016 
8017 	/* The GOTO VM uses a local opline variable. We need to set the opline
8018 	 * variable in execute_data so we don't resume at an old position. */
8019 	SAVE_OPLINE();
8020 
8021 	ZEND_VM_RETURN();
8022 }
8023 
ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8024 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8025 {
8026 	USE_OPLINE
8027 	zval *op, *jump_zv;
8028 	HashTable *jumptable;
8029 
8030 	op = RT_CONSTANT(opline, opline->op1);
8031 
8032 	if (Z_TYPE_P(op) != IS_LONG) {
8033 		ZVAL_DEREF(op);
8034 		if (Z_TYPE_P(op) != IS_LONG) {
8035 			/* Wrong type, fall back to ZEND_CASE chain */
8036 			ZEND_VM_NEXT_OPCODE();
8037 		}
8038 	}
8039 
8040 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
8041 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
8042 	if (jump_zv != NULL) {
8043 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
8044 		ZEND_VM_CONTINUE();
8045 	} else {
8046 		/* default */
8047 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
8048 		ZEND_VM_CONTINUE();
8049 	}
8050 }
8051 
ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8052 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8053 {
8054 	USE_OPLINE
8055 	zval *op, *jump_zv;
8056 	HashTable *jumptable;
8057 
8058 	op = RT_CONSTANT(opline, opline->op1);
8059 
8060 	if (Z_TYPE_P(op) != IS_STRING) {
8061 		if (IS_CONST == IS_CONST) {
8062 			/* Wrong type, fall back to ZEND_CASE chain */
8063 			ZEND_VM_NEXT_OPCODE();
8064 		} else {
8065 			ZVAL_DEREF(op);
8066 			if (Z_TYPE_P(op) != IS_STRING) {
8067 				/* Wrong type, fall back to ZEND_CASE chain */
8068 				ZEND_VM_NEXT_OPCODE();
8069 			}
8070 		}
8071 	}
8072 
8073 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
8074 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
8075 	if (jump_zv != NULL) {
8076 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
8077 		ZEND_VM_CONTINUE();
8078 	} else {
8079 		/* default */
8080 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
8081 		ZEND_VM_CONTINUE();
8082 	}
8083 }
8084 
ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8085 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8086 {
8087 	USE_OPLINE
8088 	zval *op, *jump_zv;
8089 	HashTable *jumptable;
8090 
8091 	op = RT_CONSTANT(opline, opline->op1);
8092 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
8093 
8094 match_try_again:
8095 	if (Z_TYPE_P(op) == IS_LONG) {
8096 		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
8097 	} else if (Z_TYPE_P(op) == IS_STRING) {
8098 		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
8099 	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
8100 		op = Z_REFVAL_P(op);
8101 		goto match_try_again;
8102 	} else {
8103 		if (UNEXPECTED((IS_CONST & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
8104 			SAVE_OPLINE();
8105 			op = ZVAL_UNDEFINED_OP1();
8106 			if (UNEXPECTED(EG(exception))) {
8107 				HANDLE_EXCEPTION();
8108 			}
8109 			goto match_try_again;
8110 		}
8111 
8112 		goto default_branch;
8113 	}
8114 
8115 	if (jump_zv != NULL) {
8116 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
8117 		ZEND_VM_CONTINUE();
8118 	} else {
8119 default_branch:
8120 		/* default */
8121 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
8122 		ZEND_VM_CONTINUE();
8123 	}
8124 }
8125 
ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8126 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8127 {
8128 	USE_OPLINE
8129 	zval *op1;
8130 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
8131 	zval *result;
8132 
8133 	op1 = RT_CONSTANT(opline, opline->op1);
8134 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
8135 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CONST == IS_CONST);
8136 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8137 			zval_ptr_dtor_str(op1);
8138 		}
8139 		ZEND_VM_SMART_BRANCH(result, 0);
8140 	}
8141 
8142 	if (opline->extended_value) {
8143 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
8144 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
8145 			ZEND_VM_SMART_BRANCH(result, 0);
8146 		}
8147 		SAVE_OPLINE();
8148 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
8149 			op1 = Z_REFVAL_P(op1);
8150 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
8151 				result = zend_hash_find(ht, Z_STR_P(op1));
8152 
8153 				ZEND_VM_SMART_BRANCH(result, 0);
8154 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
8155 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
8156 
8157 				ZEND_VM_SMART_BRANCH(result, 0);
8158 			}
8159 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8160 			ZVAL_UNDEFINED_OP1();
8161 		}
8162 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
8163 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8164 			SAVE_OPLINE();
8165 			ZVAL_UNDEFINED_OP1();
8166 			if (UNEXPECTED(EG(exception) != NULL)) {
8167 				HANDLE_EXCEPTION();
8168 			}
8169 		}
8170 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
8171 		ZEND_VM_SMART_BRANCH(result, 0);
8172 	} else {
8173 		zend_string *key;
8174 		zval key_tmp;
8175 
8176 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
8177 			op1 = Z_REFVAL_P(op1);
8178 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
8179 				result = zend_hash_find(ht, Z_STR_P(op1));
8180 
8181 				ZEND_VM_SMART_BRANCH(result, 0);
8182 			}
8183 		}
8184 
8185 		SAVE_OPLINE();
8186 		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
8187 			ZVAL_STR(&key_tmp, key);
8188 			if (zend_compare(op1, &key_tmp) == 0) {
8189 
8190 				ZEND_VM_SMART_BRANCH(1, 1);
8191 			}
8192 		} ZEND_HASH_FOREACH_END();
8193 	}
8194 
8195 	ZEND_VM_SMART_BRANCH(0, 1);
8196 }
8197 
ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8198 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8199 {
8200 	USE_OPLINE
8201 	zval *op1, *op2, *result;
8202 	double d1, d2;
8203 
8204 	op1 = RT_CONSTANT(opline, opline->op1);
8205 	op2 = EX_VAR(opline->op2.var);
8206 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8207 		/* pass */
8208 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8209 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8210 			result = EX_VAR(opline->result.var);
8211 			fast_long_add_function(result, op1, op2);
8212 			ZEND_VM_NEXT_OPCODE();
8213 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8214 			d1 = (double)Z_LVAL_P(op1);
8215 			d2 = Z_DVAL_P(op2);
8216 			goto add_double;
8217 		}
8218 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8219 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8220 			d1 = Z_DVAL_P(op1);
8221 			d2 = Z_DVAL_P(op2);
8222 add_double:
8223 			result = EX_VAR(opline->result.var);
8224 			ZVAL_DOUBLE(result, d1 + d2);
8225 			ZEND_VM_NEXT_OPCODE();
8226 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8227 			d1 = Z_DVAL_P(op1);
8228 			d2 = (double)Z_LVAL_P(op2);
8229 			goto add_double;
8230 		}
8231 	}
8232 
8233 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8234 }
8235 
ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8236 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8237 {
8238 	USE_OPLINE
8239 	zval *op1, *op2, *result;
8240 	double d1, d2;
8241 
8242 	op1 = RT_CONSTANT(opline, opline->op1);
8243 	op2 = EX_VAR(opline->op2.var);
8244 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8245 		/* pass */
8246 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8247 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8248 			result = EX_VAR(opline->result.var);
8249 			fast_long_sub_function(result, op1, op2);
8250 			ZEND_VM_NEXT_OPCODE();
8251 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8252 			d1 = (double)Z_LVAL_P(op1);
8253 			d2 = Z_DVAL_P(op2);
8254 			goto sub_double;
8255 		}
8256 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8257 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8258 			d1 = Z_DVAL_P(op1);
8259 			d2 = Z_DVAL_P(op2);
8260 sub_double:
8261 			result = EX_VAR(opline->result.var);
8262 			ZVAL_DOUBLE(result, d1 - d2);
8263 			ZEND_VM_NEXT_OPCODE();
8264 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8265 			d1 = Z_DVAL_P(op1);
8266 			d2 = (double)Z_LVAL_P(op2);
8267 			goto sub_double;
8268 		}
8269 	}
8270 
8271 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8272 }
8273 
ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8274 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8275 {
8276 	USE_OPLINE
8277 	zval *op1, *op2, *result;
8278 
8279 	op1 = RT_CONSTANT(opline, opline->op1);
8280 	op2 = EX_VAR(opline->op2.var);
8281 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8282 		/* pass */
8283 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8284 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8285 			result = EX_VAR(opline->result.var);
8286 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
8287 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8288 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
8289 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
8290 				ZVAL_LONG(result, 0);
8291 			} else {
8292 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
8293 			}
8294 			ZEND_VM_NEXT_OPCODE();
8295 		}
8296 	}
8297 
8298 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8299 }
8300 
ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8301 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8302 {
8303 	USE_OPLINE
8304 	zval *op1, *op2;
8305 
8306 	op1 = RT_CONSTANT(opline, opline->op1);
8307 	op2 = EX_VAR(opline->op2.var);
8308 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8309 		/* pass */
8310 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
8311 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
8312 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
8313 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
8314 		ZVAL_LONG(EX_VAR(opline->result.var),
8315 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
8316 		ZEND_VM_NEXT_OPCODE();
8317 	}
8318 
8319 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8320 }
8321 
ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8322 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8323 {
8324 	USE_OPLINE
8325 	zval *op1, *op2;
8326 
8327 	op1 = RT_CONSTANT(opline, opline->op1);
8328 	op2 = EX_VAR(opline->op2.var);
8329 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8330 		/* pass */
8331 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
8332 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
8333 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
8334 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
8335 		ZEND_VM_NEXT_OPCODE();
8336 	}
8337 
8338 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8339 }
8340 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8341 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8342 {
8343 	USE_OPLINE
8344 	zval *op1, *op2;
8345 	double d1, d2;
8346 
8347 	op1 = RT_CONSTANT(opline, opline->op1);
8348 	op2 = EX_VAR(opline->op2.var);
8349 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8350 		/* pass */
8351 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8352 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8353 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
8354 is_smaller_true:
8355 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
8356 			} else {
8357 is_smaller_false:
8358 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
8359 			}
8360 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8361 			d1 = (double)Z_LVAL_P(op1);
8362 			d2 = Z_DVAL_P(op2);
8363 			goto is_smaller_double;
8364 		}
8365 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8366 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8367 			d1 = Z_DVAL_P(op1);
8368 			d2 = Z_DVAL_P(op2);
8369 is_smaller_double:
8370 			if (d1 < d2) {
8371 				goto is_smaller_true;
8372 			} else {
8373 				goto is_smaller_false;
8374 			}
8375 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8376 			d1 = Z_DVAL_P(op1);
8377 			d2 = (double)Z_LVAL_P(op2);
8378 			goto is_smaller_double;
8379 		}
8380 	}
8381 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8382 }
8383 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8384 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8385 {
8386 	USE_OPLINE
8387 	zval *op1, *op2;
8388 	double d1, d2;
8389 
8390 	op1 = RT_CONSTANT(opline, opline->op1);
8391 	op2 = EX_VAR(opline->op2.var);
8392 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8393 		/* pass */
8394 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8395 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8396 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
8397 is_smaller_true:
8398 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
8399 			} else {
8400 is_smaller_false:
8401 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
8402 			}
8403 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8404 			d1 = (double)Z_LVAL_P(op1);
8405 			d2 = Z_DVAL_P(op2);
8406 			goto is_smaller_double;
8407 		}
8408 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8409 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8410 			d1 = Z_DVAL_P(op1);
8411 			d2 = Z_DVAL_P(op2);
8412 is_smaller_double:
8413 			if (d1 < d2) {
8414 				goto is_smaller_true;
8415 			} else {
8416 				goto is_smaller_false;
8417 			}
8418 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8419 			d1 = Z_DVAL_P(op1);
8420 			d2 = (double)Z_LVAL_P(op2);
8421 			goto is_smaller_double;
8422 		}
8423 	}
8424 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8425 }
8426 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8427 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8428 {
8429 	USE_OPLINE
8430 	zval *op1, *op2;
8431 	double d1, d2;
8432 
8433 	op1 = RT_CONSTANT(opline, opline->op1);
8434 	op2 = EX_VAR(opline->op2.var);
8435 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8436 		/* pass */
8437 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8438 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8439 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
8440 is_smaller_true:
8441 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
8442 			} else {
8443 is_smaller_false:
8444 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
8445 			}
8446 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8447 			d1 = (double)Z_LVAL_P(op1);
8448 			d2 = Z_DVAL_P(op2);
8449 			goto is_smaller_double;
8450 		}
8451 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8452 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8453 			d1 = Z_DVAL_P(op1);
8454 			d2 = Z_DVAL_P(op2);
8455 is_smaller_double:
8456 			if (d1 < d2) {
8457 				goto is_smaller_true;
8458 			} else {
8459 				goto is_smaller_false;
8460 			}
8461 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8462 			d1 = Z_DVAL_P(op1);
8463 			d2 = (double)Z_LVAL_P(op2);
8464 			goto is_smaller_double;
8465 		}
8466 	}
8467 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8468 }
8469 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8470 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8471 {
8472 	USE_OPLINE
8473 	zval *op1, *op2;
8474 	double d1, d2;
8475 
8476 	op1 = RT_CONSTANT(opline, opline->op1);
8477 	op2 = EX_VAR(opline->op2.var);
8478 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8479 		/* pass */
8480 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8481 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8482 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
8483 is_smaller_or_equal_true:
8484 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
8485 				ZVAL_TRUE(EX_VAR(opline->result.var));
8486 				ZEND_VM_NEXT_OPCODE();
8487 			} else {
8488 is_smaller_or_equal_false:
8489 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
8490 				ZVAL_FALSE(EX_VAR(opline->result.var));
8491 				ZEND_VM_NEXT_OPCODE();
8492 			}
8493 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8494 			d1 = (double)Z_LVAL_P(op1);
8495 			d2 = Z_DVAL_P(op2);
8496 			goto is_smaller_or_equal_double;
8497 		}
8498 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8499 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8500 			d1 = Z_DVAL_P(op1);
8501 			d2 = Z_DVAL_P(op2);
8502 is_smaller_or_equal_double:
8503 			if (d1 <= d2) {
8504 				goto is_smaller_or_equal_true;
8505 			} else {
8506 				goto is_smaller_or_equal_false;
8507 			}
8508 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8509 			d1 = Z_DVAL_P(op1);
8510 			d2 = (double)Z_LVAL_P(op2);
8511 			goto is_smaller_or_equal_double;
8512 		}
8513 	}
8514 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8515 }
8516 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8517 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8518 {
8519 	USE_OPLINE
8520 	zval *op1, *op2;
8521 	double d1, d2;
8522 
8523 	op1 = RT_CONSTANT(opline, opline->op1);
8524 	op2 = EX_VAR(opline->op2.var);
8525 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8526 		/* pass */
8527 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8528 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8529 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
8530 is_smaller_or_equal_true:
8531 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
8532 				ZVAL_TRUE(EX_VAR(opline->result.var));
8533 				ZEND_VM_NEXT_OPCODE();
8534 			} else {
8535 is_smaller_or_equal_false:
8536 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
8537 				ZVAL_FALSE(EX_VAR(opline->result.var));
8538 				ZEND_VM_NEXT_OPCODE();
8539 			}
8540 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8541 			d1 = (double)Z_LVAL_P(op1);
8542 			d2 = Z_DVAL_P(op2);
8543 			goto is_smaller_or_equal_double;
8544 		}
8545 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8546 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8547 			d1 = Z_DVAL_P(op1);
8548 			d2 = Z_DVAL_P(op2);
8549 is_smaller_or_equal_double:
8550 			if (d1 <= d2) {
8551 				goto is_smaller_or_equal_true;
8552 			} else {
8553 				goto is_smaller_or_equal_false;
8554 			}
8555 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8556 			d1 = Z_DVAL_P(op1);
8557 			d2 = (double)Z_LVAL_P(op2);
8558 			goto is_smaller_or_equal_double;
8559 		}
8560 	}
8561 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8562 }
8563 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8564 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8565 {
8566 	USE_OPLINE
8567 	zval *op1, *op2;
8568 	double d1, d2;
8569 
8570 	op1 = RT_CONSTANT(opline, opline->op1);
8571 	op2 = EX_VAR(opline->op2.var);
8572 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8573 		/* pass */
8574 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8575 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8576 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
8577 is_smaller_or_equal_true:
8578 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
8579 				ZVAL_TRUE(EX_VAR(opline->result.var));
8580 				ZEND_VM_NEXT_OPCODE();
8581 			} else {
8582 is_smaller_or_equal_false:
8583 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
8584 				ZVAL_FALSE(EX_VAR(opline->result.var));
8585 				ZEND_VM_NEXT_OPCODE();
8586 			}
8587 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8588 			d1 = (double)Z_LVAL_P(op1);
8589 			d2 = Z_DVAL_P(op2);
8590 			goto is_smaller_or_equal_double;
8591 		}
8592 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8593 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8594 			d1 = Z_DVAL_P(op1);
8595 			d2 = Z_DVAL_P(op2);
8596 is_smaller_or_equal_double:
8597 			if (d1 <= d2) {
8598 				goto is_smaller_or_equal_true;
8599 			} else {
8600 				goto is_smaller_or_equal_false;
8601 			}
8602 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8603 			d1 = Z_DVAL_P(op1);
8604 			d2 = (double)Z_LVAL_P(op2);
8605 			goto is_smaller_or_equal_double;
8606 		}
8607 	}
8608 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8609 }
8610 
ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8611 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8612 {
8613 	zend_class_entry *ce, *scope;
8614 	zend_class_constant *c;
8615 	zval *value, *zv, *constant_zv;
8616 	zend_string *constant_name;
8617 	USE_OPLINE
8618 
8619 	SAVE_OPLINE();
8620 
8621 	do {
8622 		if (IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8623 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
8624 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
8625 				break;
8626 			}
8627 		}
8628 		if (IS_CONST == IS_CONST) {
8629 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
8630 				ce = CACHED_PTR(opline->extended_value);
8631 			} else {
8632 				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);
8633 				if (UNEXPECTED(ce == NULL)) {
8634 					ZVAL_UNDEF(EX_VAR(opline->result.var));
8635 					FREE_OP(opline->op2_type, opline->op2.var);
8636 					HANDLE_EXCEPTION();
8637 				}
8638 				CACHE_PTR(opline->extended_value, ce);
8639 			}
8640 		} else if (IS_CONST == IS_UNUSED) {
8641 			ce = zend_fetch_class(NULL, opline->op1.num);
8642 			if (UNEXPECTED(ce == NULL)) {
8643 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8644 				FREE_OP(opline->op2_type, opline->op2.var);
8645 				HANDLE_EXCEPTION();
8646 			}
8647 		} else {
8648 			ce = Z_CE_P(EX_VAR(opline->op1.var));
8649 		}
8650 		if (IS_CONST != IS_CONST
8651 			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
8652 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
8653 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
8654 			break;
8655 		}
8656 
8657 		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
8658 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
8659 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
8660 			ZVAL_UNDEF(EX_VAR(opline->result.var));
8661 			FREE_OP(opline->op2_type, opline->op2.var);
8662 			HANDLE_EXCEPTION();
8663 		}
8664 		constant_name = Z_STR_P(constant_zv);
8665 		/* Magic 'class' for constant OP2 is caught at compile-time */
8666 		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
8667 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
8668 			FREE_OP(opline->op2_type, opline->op2.var);
8669 			ZEND_VM_NEXT_OPCODE();
8670 		}
8671 		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
8672 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
8673 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
8674 
8675 		if (EXPECTED(zv != NULL)) {
8676 			c = Z_PTR_P(zv);
8677 			scope = EX(func)->op_array.scope;
8678 			if (!zend_verify_const_access(c, scope)) {
8679 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
8680 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8681 				FREE_OP(opline->op2_type, opline->op2.var);
8682 				HANDLE_EXCEPTION();
8683 			}
8684 
8685 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
8686 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
8687 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8688 				FREE_OP(opline->op2_type, opline->op2.var);
8689 				HANDLE_EXCEPTION();
8690 			}
8691 
8692 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
8693 			if (UNEXPECTED(is_constant_deprecated)) {
8694 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
8695 
8696 				if (EG(exception)) {
8697 					ZVAL_UNDEF(EX_VAR(opline->result.var));
8698 					FREE_OP(opline->op2_type, opline->op2.var);
8699 					HANDLE_EXCEPTION();
8700 				}
8701 			}
8702 
8703 			value = &c->value;
8704 			// Enums require loading of all class constants to build the backed enum table
8705 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
8706 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
8707 					ZVAL_UNDEF(EX_VAR(opline->result.var));
8708 					FREE_OP(opline->op2_type, opline->op2.var);
8709 					HANDLE_EXCEPTION();
8710 				}
8711 			}
8712 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
8713 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
8714 					ZVAL_UNDEF(EX_VAR(opline->result.var));
8715 					FREE_OP(opline->op2_type, opline->op2.var);
8716 					HANDLE_EXCEPTION();
8717 				}
8718 			}
8719 			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
8720 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
8721 			}
8722 		} else {
8723 			zend_throw_error(NULL, "Undefined constant %s::%s",
8724 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
8725 			ZVAL_UNDEF(EX_VAR(opline->result.var));
8726 			FREE_OP(opline->op2_type, opline->op2.var);
8727 			HANDLE_EXCEPTION();
8728 		}
8729 	} while (0);
8730 
8731 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
8732 
8733 	FREE_OP(opline->op2_type, opline->op2.var);
8734 	ZEND_VM_NEXT_OPCODE();
8735 }
8736 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8737 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8738 {
8739 	USE_OPLINE
8740 	zval *op1, *op2, *result;
8741 
8742 	op1 = RT_CONSTANT(opline, opline->op1);
8743 	op2 = EX_VAR(opline->op2.var);
8744 	result = EX_VAR(opline->result.var);
8745 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
8746 	ZEND_VM_NEXT_OPCODE();
8747 }
8748 
ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8749 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8750 {
8751 	USE_OPLINE
8752 	zval *op1, *op2, *result;
8753 
8754 	op1 = RT_CONSTANT(opline, opline->op1);
8755 	op2 = EX_VAR(opline->op2.var);
8756 	result = EX_VAR(opline->result.var);
8757 	fast_long_sub_function(result, op1, op2);
8758 	ZEND_VM_NEXT_OPCODE();
8759 }
8760 
ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8761 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8762 {
8763 	USE_OPLINE
8764 	zval *op1, *op2, *result;
8765 
8766 	op1 = RT_CONSTANT(opline, opline->op1);
8767 	op2 = EX_VAR(opline->op2.var);
8768 	result = EX_VAR(opline->result.var);
8769 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
8770 	ZEND_VM_NEXT_OPCODE();
8771 }
8772 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8773 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8774 {
8775 	USE_OPLINE
8776 	zval *op1, *op2;
8777 	bool result;
8778 
8779 	op1 = RT_CONSTANT(opline, opline->op1);
8780 	op2 = EX_VAR(opline->op2.var);
8781 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8782 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8783 }
8784 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8785 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8786 {
8787 	USE_OPLINE
8788 	zval *op1, *op2;
8789 	bool result;
8790 
8791 	op1 = RT_CONSTANT(opline, opline->op1);
8792 	op2 = EX_VAR(opline->op2.var);
8793 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8794 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8795 }
8796 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8797 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8798 {
8799 	USE_OPLINE
8800 	zval *op1, *op2;
8801 	bool result;
8802 
8803 	op1 = RT_CONSTANT(opline, opline->op1);
8804 	op2 = EX_VAR(opline->op2.var);
8805 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8806 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8807 }
8808 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8809 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8810 {
8811 	USE_OPLINE
8812 	zval *op1, *op2;
8813 	bool result;
8814 
8815 	op1 = RT_CONSTANT(opline, opline->op1);
8816 	op2 = EX_VAR(opline->op2.var);
8817 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8818 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8819 }
8820 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8821 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8822 {
8823 	USE_OPLINE
8824 	zval *op1, *op2;
8825 	bool result;
8826 
8827 	op1 = RT_CONSTANT(opline, opline->op1);
8828 	op2 = EX_VAR(opline->op2.var);
8829 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8830 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8831 }
8832 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8833 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8834 {
8835 	USE_OPLINE
8836 	zval *op1, *op2;
8837 	bool result;
8838 
8839 	op1 = RT_CONSTANT(opline, opline->op1);
8840 	op2 = EX_VAR(opline->op2.var);
8841 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8842 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8843 }
8844 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8846 {
8847 	USE_OPLINE
8848 	zval *op1, *op2;
8849 	bool result;
8850 
8851 	op1 = RT_CONSTANT(opline, opline->op1);
8852 	op2 = EX_VAR(opline->op2.var);
8853 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8854 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8855 }
8856 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8857 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)
8858 {
8859 	USE_OPLINE
8860 	zval *op1, *op2;
8861 	bool result;
8862 
8863 	op1 = RT_CONSTANT(opline, opline->op1);
8864 	op2 = EX_VAR(opline->op2.var);
8865 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8866 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8867 }
8868 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8869 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)
8870 {
8871 	USE_OPLINE
8872 	zval *op1, *op2;
8873 	bool result;
8874 
8875 	op1 = RT_CONSTANT(opline, opline->op1);
8876 	op2 = EX_VAR(opline->op2.var);
8877 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8878 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8879 }
8880 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8881 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8882 {
8883 	USE_OPLINE
8884 	zval *op1, *op2;
8885 	bool result;
8886 
8887 	op1 = RT_CONSTANT(opline, opline->op1);
8888 	op2 = EX_VAR(opline->op2.var);
8889 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8890 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8891 }
8892 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8893 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)
8894 {
8895 	USE_OPLINE
8896 	zval *op1, *op2;
8897 	bool result;
8898 
8899 	op1 = RT_CONSTANT(opline, opline->op1);
8900 	op2 = EX_VAR(opline->op2.var);
8901 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8902 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8903 }
8904 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8905 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)
8906 {
8907 	USE_OPLINE
8908 	zval *op1, *op2;
8909 	bool result;
8910 
8911 	op1 = RT_CONSTANT(opline, opline->op1);
8912 	op2 = EX_VAR(opline->op2.var);
8913 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8914 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8915 }
8916 
ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8917 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8918 {
8919 	USE_OPLINE
8920 	zval *container, *dim, *value;
8921 	zend_long offset;
8922 	HashTable *ht;
8923 
8924 	container = RT_CONSTANT(opline, opline->op1);
8925 	dim = EX_VAR(opline->op2.var);
8926 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8927 fetch_dim_r_index_array:
8928 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
8929 			offset = Z_LVAL_P(dim);
8930 		} else {
8931 			SAVE_OPLINE();
8932 			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
8933 
8934 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8935 		}
8936 		ht = Z_ARRVAL_P(container);
8937 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
8938 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
8939 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8940 			SAVE_OPLINE();
8941 
8942 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8943 		} else {
8944 			ZEND_VM_NEXT_OPCODE();
8945 		}
8946 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
8947 		container = Z_REFVAL_P(container);
8948 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8949 			goto fetch_dim_r_index_array;
8950 		} else {
8951 			goto fetch_dim_r_index_slow;
8952 		}
8953 	} else {
8954 fetch_dim_r_index_slow:
8955 		SAVE_OPLINE();
8956 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
8957 			dim++;
8958 		}
8959 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
8960 
8961 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8962 	}
8963 
8964 fetch_dim_r_index_undef:
8965 	ZVAL_NULL(EX_VAR(opline->result.var));
8966 	SAVE_OPLINE();
8967 	zend_undefined_offset(offset);
8968 
8969 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8970 }
8971 
ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8972 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8973 {
8974 	USE_OPLINE
8975 	zval *op1, *op2;
8976 
8977 	SAVE_OPLINE();
8978 	op1 = RT_CONSTANT(opline, opline->op1);
8979 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8980 	div_function(EX_VAR(opline->result.var), op1, op2);
8981 
8982 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8983 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8984 }
8985 
ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8986 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8987 {
8988 	USE_OPLINE
8989 	zval *op1, *op2;
8990 
8991 	SAVE_OPLINE();
8992 	op1 = RT_CONSTANT(opline, opline->op1);
8993 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8994 	pow_function(EX_VAR(opline->result.var), op1, op2);
8995 
8996 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8997 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8998 }
8999 
ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9000 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9001 {
9002 	USE_OPLINE
9003 	zval *op1, *op2;
9004 
9005 	op1 = RT_CONSTANT(opline, opline->op1);
9006 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9007 
9008 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
9009 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
9010 		zend_string *op1_str = Z_STR_P(op1);
9011 		zend_string *op2_str = Z_STR_P(op2);
9012 		zend_string *str;
9013 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
9014 
9015 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
9016 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
9017 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
9018 			} else {
9019 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
9020 			}
9021 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
9022 				zend_string_release_ex(op1_str, 0);
9023 			}
9024 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
9025 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
9026 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
9027 			} else {
9028 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
9029 			}
9030 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
9031 				zend_string_release_ex(op2_str, 0);
9032 			}
9033 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
9034 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
9035 			size_t len = ZSTR_LEN(op1_str);
9036 
9037 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
9038 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
9039 			}
9040 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
9041 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9042 			GC_ADD_FLAGS(str, flags);
9043 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9044 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
9045 				zend_string_release_ex(op2_str, 0);
9046 			}
9047 		} else {
9048 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
9049 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
9050 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9051 			GC_ADD_FLAGS(str, flags);
9052 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9053 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
9054 				zend_string_release_ex(op1_str, 0);
9055 			}
9056 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
9057 				zend_string_release_ex(op2_str, 0);
9058 			}
9059 		}
9060 		ZEND_VM_NEXT_OPCODE();
9061 	} else {
9062 		SAVE_OPLINE();
9063 
9064 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9065 			op1 = ZVAL_UNDEFINED_OP1();
9066 		}
9067 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
9068 			op2 = ZVAL_UNDEFINED_OP2();
9069 		}
9070 		concat_function(EX_VAR(opline->result.var), op1, op2);
9071 
9072 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9073 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9074 	}
9075 }
9076 
ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9077 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9078 {
9079 	USE_OPLINE
9080 	zval *op1, *op2;
9081 
9082 	SAVE_OPLINE();
9083 	op1 = RT_CONSTANT(opline, opline->op1);
9084 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9085 	compare_function(EX_VAR(opline->result.var), op1, op2);
9086 
9087 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9088 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9089 }
9090 
ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9091 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9092 {
9093 	USE_OPLINE
9094 	zval *container, *dim, *value;
9095 
9096 	SAVE_OPLINE();
9097 	container = RT_CONSTANT(opline, opline->op1);
9098 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9099 	if (IS_CONST != IS_CONST) {
9100 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9101 fetch_dim_r_array:
9102 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
9103 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
9104 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
9105 			container = Z_REFVAL_P(container);
9106 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9107 				goto fetch_dim_r_array;
9108 			} else {
9109 				goto fetch_dim_r_slow;
9110 			}
9111 		} else {
9112 fetch_dim_r_slow:
9113 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
9114 				dim++;
9115 			}
9116 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
9117 		}
9118 	} else {
9119 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
9120 	}
9121 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9122 
9123 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9124 }
9125 
ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9126 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9127 {
9128 	USE_OPLINE
9129 	zval *container;
9130 
9131 	SAVE_OPLINE();
9132 	container = RT_CONSTANT(opline, opline->op1);
9133 	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
9134 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9135 
9136 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9137 }
9138 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9139 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9140 {
9141 #if 0
9142 	USE_OPLINE
9143 #endif
9144 
9145 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
9146 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
9147 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9148 		}
9149 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9150 	} else {
9151 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
9152 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9153 		}
9154 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9155 	}
9156 }
9157 
ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9158 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9159 {
9160 	USE_OPLINE
9161 	zval *container;
9162 	void **cache_slot = NULL;
9163 
9164 	SAVE_OPLINE();
9165 	container = RT_CONSTANT(opline, opline->op1);
9166 
9167 	if (IS_CONST == IS_CONST ||
9168 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
9169 		do {
9170 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9171 				container = Z_REFVAL_P(container);
9172 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
9173 					break;
9174 				}
9175 			}
9176 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
9177 				ZVAL_UNDEFINED_OP1();
9178 			}
9179 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
9180 			ZVAL_NULL(EX_VAR(opline->result.var));
9181 			goto fetch_obj_r_finish;
9182 		} while (0);
9183 	}
9184 
9185 	/* here we are sure we are dealing with an object */
9186 	do {
9187 		zend_object *zobj = Z_OBJ_P(container);
9188 		zend_string *name, *tmp_name;
9189 		zval *retval;
9190 
9191 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9192 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
9193 
9194 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
9195 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
9196 
9197 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
9198 					retval = OBJ_PROP(zobj, prop_offset);
9199 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
9200 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
9201 							goto fetch_obj_r_copy;
9202 						} else {
9203 fetch_obj_r_fast_copy:
9204 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
9205 							ZEND_VM_NEXT_OPCODE();
9206 						}
9207 					}
9208 				} else if (EXPECTED(zobj->properties != NULL)) {
9209 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
9210 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
9211 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
9212 
9213 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
9214 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
9215 
9216 							if (EXPECTED(p->key == name) ||
9217 							    (EXPECTED(p->h == ZSTR_H(name)) &&
9218 							     EXPECTED(p->key != NULL) &&
9219 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
9220 								retval = &p->val;
9221 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
9222 									goto fetch_obj_r_copy;
9223 								} else {
9224 									goto fetch_obj_r_fast_copy;
9225 								}
9226 							}
9227 						}
9228 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
9229 					}
9230 					retval = zend_hash_find_known_hash(zobj->properties, name);
9231 					if (EXPECTED(retval)) {
9232 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
9233 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
9234 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
9235 							goto fetch_obj_r_copy;
9236 						} else {
9237 							goto fetch_obj_r_fast_copy;
9238 						}
9239 					}
9240 				}
9241 			}
9242 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
9243 		} else {
9244 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
9245 			if (UNEXPECTED(!name)) {
9246 				ZVAL_UNDEF(EX_VAR(opline->result.var));
9247 				break;
9248 			}
9249 		}
9250 
9251 #if ZEND_DEBUG
9252 		/* For non-standard object handlers, verify a declared property type in debug builds.
9253 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
9254 		zend_property_info *prop_info = NULL;
9255 		if (zobj->handlers->read_property != zend_std_read_property) {
9256 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
9257 		}
9258 #endif
9259 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
9260 #if ZEND_DEBUG
9261 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
9262 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
9263 			ZVAL_OPT_DEREF(retval);
9264 			zend_verify_property_type(prop_info, retval, /* strict */ true);
9265 		}
9266 #endif
9267 
9268 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9269 			zend_tmp_string_release(tmp_name);
9270 		}
9271 
9272 		if (retval != EX_VAR(opline->result.var)) {
9273 fetch_obj_r_copy:
9274 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
9275 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
9276 			zend_unwrap_reference(retval);
9277 		}
9278 	} while (0);
9279 
9280 fetch_obj_r_finish:
9281 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9282 
9283 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9284 }
9285 
ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9286 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9287 {
9288 	USE_OPLINE
9289 	zval *container;
9290 	void **cache_slot = NULL;
9291 
9292 	SAVE_OPLINE();
9293 	container = RT_CONSTANT(opline, opline->op1);
9294 
9295 	if (IS_CONST == IS_CONST ||
9296 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
9297 		do {
9298 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9299 				container = Z_REFVAL_P(container);
9300 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
9301 					break;
9302 				}
9303 			}
9304 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
9305 				ZVAL_UNDEFINED_OP2();
9306 			}
9307 			ZVAL_NULL(EX_VAR(opline->result.var));
9308 			goto fetch_obj_is_finish;
9309 		} while (0);
9310 	}
9311 
9312 	/* here we are sure we are dealing with an object */
9313 	do {
9314 		zend_object *zobj = Z_OBJ_P(container);
9315 		zend_string *name, *tmp_name;
9316 		zval *retval;
9317 
9318 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9319 			cache_slot = CACHE_ADDR(opline->extended_value);
9320 
9321 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
9322 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
9323 
9324 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
9325 					retval = OBJ_PROP(zobj, prop_offset);
9326 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
9327 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
9328 							goto fetch_obj_is_copy;
9329 						} else {
9330 fetch_obj_is_fast_copy:
9331 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
9332 							ZEND_VM_NEXT_OPCODE();
9333 						}
9334 					}
9335 				} else if (EXPECTED(zobj->properties != NULL)) {
9336 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
9337 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
9338 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
9339 
9340 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
9341 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
9342 
9343 							if (EXPECTED(p->key == name) ||
9344 							    (EXPECTED(p->h == ZSTR_H(name)) &&
9345 							     EXPECTED(p->key != NULL) &&
9346 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
9347 								retval = &p->val;
9348 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
9349 									goto fetch_obj_is_copy;
9350 								} else {
9351 									goto fetch_obj_is_fast_copy;
9352 								}
9353 							}
9354 						}
9355 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
9356 					}
9357 					retval = zend_hash_find_known_hash(zobj->properties, name);
9358 					if (EXPECTED(retval)) {
9359 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
9360 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
9361 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
9362 							goto fetch_obj_is_copy;
9363 						} else {
9364 							goto fetch_obj_is_fast_copy;
9365 						}
9366 					}
9367 				}
9368 			}
9369 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
9370 		} else {
9371 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
9372 			if (UNEXPECTED(!name)) {
9373 				ZVAL_UNDEF(EX_VAR(opline->result.var));
9374 				break;
9375 			}
9376 		}
9377 
9378 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
9379 
9380 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9381 			zend_tmp_string_release(tmp_name);
9382 		}
9383 
9384 		if (retval != EX_VAR(opline->result.var)) {
9385 fetch_obj_is_copy:
9386 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
9387 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
9388 			zend_unwrap_reference(retval);
9389 		}
9390 	} while (0);
9391 
9392 fetch_obj_is_finish:
9393 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9394 
9395 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9396 }
9397 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9398 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9399 {
9400 #if 0
9401 	USE_OPLINE
9402 #endif
9403 
9404 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
9405 		/* Behave like FETCH_OBJ_W */
9406 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
9407 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9408 		}
9409 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9410 	} else {
9411 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9412 	}
9413 }
9414 
ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9415 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9416 {
9417 	USE_OPLINE
9418 	zval *container;
9419 
9420 	SAVE_OPLINE();
9421 	container = RT_CONSTANT(opline, opline->op1);
9422 	zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
9423 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9424 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9425 }
9426 
ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9427 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9428 {
9429 	USE_OPLINE
9430 	zval *op1, *op2;
9431 	zend_string *op1_str, *op2_str, *str;
9432 
9433 
9434 	op1 = RT_CONSTANT(opline, opline->op1);
9435 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9436 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
9437 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
9438 		zend_string *op1_str = Z_STR_P(op1);
9439 		zend_string *op2_str = Z_STR_P(op2);
9440 		zend_string *str;
9441 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
9442 
9443 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
9444 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
9445 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
9446 			} else {
9447 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
9448 			}
9449 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
9450 				zend_string_release_ex(op1_str, 0);
9451 			}
9452 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
9453 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
9454 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
9455 			} else {
9456 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
9457 			}
9458 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
9459 				zend_string_release_ex(op2_str, 0);
9460 			}
9461 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
9462 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
9463 			size_t len = ZSTR_LEN(op1_str);
9464 
9465 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
9466 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9467 			GC_ADD_FLAGS(str, flags);
9468 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9469 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
9470 				zend_string_release_ex(op2_str, 0);
9471 			}
9472 		} else {
9473 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
9474 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
9475 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9476 			GC_ADD_FLAGS(str, flags);
9477 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9478 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
9479 				zend_string_release_ex(op1_str, 0);
9480 			}
9481 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
9482 				zend_string_release_ex(op2_str, 0);
9483 			}
9484 		}
9485 		ZEND_VM_NEXT_OPCODE();
9486 	}
9487 
9488 	SAVE_OPLINE();
9489 	if (IS_CONST == IS_CONST) {
9490 		op1_str = Z_STR_P(op1);
9491 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
9492 		op1_str = zend_string_copy(Z_STR_P(op1));
9493 	} else {
9494 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9495 			ZVAL_UNDEFINED_OP1();
9496 		}
9497 		op1_str = zval_get_string_func(op1);
9498 	}
9499 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9500 		op2_str = Z_STR_P(op2);
9501 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
9502 		op2_str = zend_string_copy(Z_STR_P(op2));
9503 	} else {
9504 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
9505 			ZVAL_UNDEFINED_OP2();
9506 		}
9507 		op2_str = zval_get_string_func(op2);
9508 	}
9509 	do {
9510 		if (IS_CONST != IS_CONST) {
9511 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
9512 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9513 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
9514 						GC_ADDREF(op2_str);
9515 					}
9516 				}
9517 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
9518 				zend_string_release_ex(op1_str, 0);
9519 				break;
9520 			}
9521 		}
9522 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9523 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
9524 				if (IS_CONST == IS_CONST) {
9525 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
9526 						GC_ADDREF(op1_str);
9527 					}
9528 				}
9529 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
9530 				zend_string_release_ex(op2_str, 0);
9531 				break;
9532 			}
9533 		}
9534 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
9535 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
9536 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9537 
9538 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
9539 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9540 		if (IS_CONST != IS_CONST) {
9541 			zend_string_release_ex(op1_str, 0);
9542 		}
9543 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9544 			zend_string_release_ex(op2_str, 0);
9545 		}
9546 	} while (0);
9547 
9548 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9549 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9550 }
9551 
ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9552 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9553 {
9554 	USE_OPLINE
9555 	zval *function_name;
9556 	zval *object;
9557 	zend_function *fbc;
9558 	zend_class_entry *called_scope;
9559 	zend_object *obj;
9560 	zend_execute_data *call;
9561 	uint32_t call_info;
9562 
9563 	SAVE_OPLINE();
9564 
9565 	object = RT_CONSTANT(opline, opline->op1);
9566 
9567 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9568 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9569 	}
9570 
9571 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
9572 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9573 		do {
9574 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
9575 				function_name = Z_REFVAL_P(function_name);
9576 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9577 					break;
9578 				}
9579 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9580 				ZVAL_UNDEFINED_OP2();
9581 				if (UNEXPECTED(EG(exception) != NULL)) {
9582 
9583 					HANDLE_EXCEPTION();
9584 				}
9585 			}
9586 			zend_throw_error(NULL, "Method name must be a string");
9587 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9588 
9589 			HANDLE_EXCEPTION();
9590 		} while (0);
9591 	}
9592 
9593 	if (IS_CONST == IS_UNUSED) {
9594 		obj = Z_OBJ_P(object);
9595 	} else {
9596 		do {
9597 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
9598 				obj = Z_OBJ_P(object);
9599 			} else {
9600 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
9601 					zend_reference *ref = Z_REF_P(object);
9602 
9603 					object = &ref->val;
9604 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
9605 						obj = Z_OBJ_P(object);
9606 						if (IS_CONST & IS_VAR) {
9607 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
9608 								efree_size(ref, sizeof(zend_reference));
9609 							} else {
9610 								Z_ADDREF_P(object);
9611 							}
9612 						}
9613 						break;
9614 					}
9615 				}
9616 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
9617 					object = ZVAL_UNDEFINED_OP1();
9618 					if (UNEXPECTED(EG(exception) != NULL)) {
9619 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9620 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9621 						}
9622 						HANDLE_EXCEPTION();
9623 					}
9624 				}
9625 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9626 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9627 				}
9628 				zend_invalid_method_call(object, function_name);
9629 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9630 
9631 				HANDLE_EXCEPTION();
9632 			}
9633 		} while (0);
9634 	}
9635 
9636 	called_scope = obj->ce;
9637 
9638 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
9639 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
9640 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
9641 	} else {
9642 		zend_object *orig_obj = obj;
9643 
9644 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9645 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9646 		}
9647 
9648 		/* First, locate the function. */
9649 		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));
9650 		if (UNEXPECTED(fbc == NULL)) {
9651 			if (EXPECTED(!EG(exception))) {
9652 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
9653 			}
9654 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9655 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
9656 				zend_objects_store_del(orig_obj);
9657 			}
9658 			HANDLE_EXCEPTION();
9659 		}
9660 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
9661 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
9662 		    EXPECTED(obj == orig_obj)) {
9663 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
9664 		}
9665 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
9666 			GC_ADDREF(obj); /* For $this pointer */
9667 			if (GC_DELREF(orig_obj) == 0) {
9668 				zend_objects_store_del(orig_obj);
9669 			}
9670 		}
9671 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9672 			init_func_run_time_cache(&fbc->op_array);
9673 		}
9674 	}
9675 
9676 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9677 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9678 	}
9679 
9680 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
9681 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
9682 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
9683 			zend_objects_store_del(obj);
9684 			if (UNEXPECTED(EG(exception))) {
9685 				HANDLE_EXCEPTION();
9686 			}
9687 		}
9688 		/* call static method */
9689 		obj = (zend_object*)called_scope;
9690 		call_info = ZEND_CALL_NESTED_FUNCTION;
9691 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
9692 		if (IS_CONST == IS_CV) {
9693 			GC_ADDREF(obj); /* For $this pointer */
9694 		}
9695 		/* CV may be changed indirectly (e.g. when it's a reference) */
9696 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
9697 	}
9698 
9699 	call = zend_vm_stack_push_call_frame(call_info,
9700 		fbc, opline->extended_value, obj);
9701 	call->prev_execute_data = EX(call);
9702 	EX(call) = call;
9703 
9704 	ZEND_VM_NEXT_OPCODE();
9705 }
9706 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9707 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9708 {
9709 	USE_OPLINE
9710 	zval *function_name;
9711 	zend_class_entry *ce;
9712 	uint32_t call_info;
9713 	zend_function *fbc;
9714 	zend_execute_data *call;
9715 
9716 	SAVE_OPLINE();
9717 
9718 	if (IS_CONST == IS_CONST) {
9719 		/* no function found. try a static method in class */
9720 		ce = CACHED_PTR(opline->result.num);
9721 		if (UNEXPECTED(ce == NULL)) {
9722 			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);
9723 			if (UNEXPECTED(ce == NULL)) {
9724 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9725 				HANDLE_EXCEPTION();
9726 			}
9727 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9728 				CACHE_PTR(opline->result.num, ce);
9729 			}
9730 		}
9731 	} else if (IS_CONST == IS_UNUSED) {
9732 		ce = zend_fetch_class(NULL, opline->op1.num);
9733 		if (UNEXPECTED(ce == NULL)) {
9734 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9735 			HANDLE_EXCEPTION();
9736 		}
9737 	} else {
9738 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9739 	}
9740 
9741 	if (IS_CONST == IS_CONST &&
9742 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
9743 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
9744 		/* nothing to do */
9745 	} else if (IS_CONST != IS_CONST &&
9746 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
9747 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
9748 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
9749 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
9750 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9751 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9752 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9753 				do {
9754 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
9755 						function_name = Z_REFVAL_P(function_name);
9756 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9757 							break;
9758 						}
9759 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9760 						ZVAL_UNDEFINED_OP2();
9761 						if (UNEXPECTED(EG(exception) != NULL)) {
9762 							HANDLE_EXCEPTION();
9763 						}
9764 					}
9765 					zend_throw_error(NULL, "Method name must be a string");
9766 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9767 					HANDLE_EXCEPTION();
9768 				} while (0);
9769 			}
9770 		}
9771 
9772 		if (ce->get_static_method) {
9773 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
9774 		} else {
9775 			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));
9776 		}
9777 		if (UNEXPECTED(fbc == NULL)) {
9778 			if (EXPECTED(!EG(exception))) {
9779 				zend_undefined_method(ce, Z_STR_P(function_name));
9780 			}
9781 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9782 			HANDLE_EXCEPTION();
9783 		}
9784 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
9785 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
9786 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
9787 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
9788 		}
9789 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9790 			init_func_run_time_cache(&fbc->op_array);
9791 		}
9792 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9793 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9794 		}
9795 	} else {
9796 		if (UNEXPECTED(ce->constructor == NULL)) {
9797 			zend_throw_error(NULL, "Cannot call constructor");
9798 			HANDLE_EXCEPTION();
9799 		}
9800 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
9801 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
9802 			HANDLE_EXCEPTION();
9803 		}
9804 		fbc = ce->constructor;
9805 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9806 			init_func_run_time_cache(&fbc->op_array);
9807 		}
9808 	}
9809 
9810 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
9811 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
9812 			ce = (zend_class_entry*)Z_OBJ(EX(This));
9813 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
9814 		} else {
9815 			zend_non_static_method_call(fbc);
9816 			HANDLE_EXCEPTION();
9817 		}
9818 	} else {
9819 		/* previous opcode is ZEND_FETCH_CLASS */
9820 		if (IS_CONST == IS_UNUSED
9821 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
9822 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
9823 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
9824 				ce = Z_OBJCE(EX(This));
9825 			} else {
9826 				ce = Z_CE(EX(This));
9827 			}
9828 		}
9829 		call_info = ZEND_CALL_NESTED_FUNCTION;
9830 	}
9831 
9832 	call = zend_vm_stack_push_call_frame(call_info,
9833 		fbc, opline->extended_value, ce);
9834 	call->prev_execute_data = EX(call);
9835 	EX(call) = call;
9836 
9837 	ZEND_VM_NEXT_OPCODE();
9838 }
9839 
ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9840 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9841 {
9842 	USE_OPLINE
9843 	zval *function_name;
9844 	zend_fcall_info_cache fcc;
9845 	char *error = NULL;
9846 	zend_function *func;
9847 	void *object_or_called_scope;
9848 	zend_execute_data *call;
9849 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
9850 
9851 	SAVE_OPLINE();
9852 	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9853 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
9854 		ZEND_ASSERT(!error);
9855 		func = fcc.function_handler;
9856 		object_or_called_scope = fcc.called_scope;
9857 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
9858 			/* Delay closure destruction until its invocation */
9859 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
9860 			call_info |= ZEND_CALL_CLOSURE;
9861 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
9862 				call_info |= ZEND_CALL_FAKE_CLOSURE;
9863 			}
9864 			if (fcc.object) {
9865 				object_or_called_scope = fcc.object;
9866 				call_info |= ZEND_CALL_HAS_THIS;
9867 			}
9868 		} else if (fcc.object) {
9869 			GC_ADDREF(fcc.object); /* For $this pointer */
9870 			object_or_called_scope = fcc.object;
9871 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
9872 		}
9873 
9874 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9875 		if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
9876 			if (call_info & ZEND_CALL_CLOSURE) {
9877 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
9878 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
9879 				zend_object_release(fcc.object);
9880 			}
9881 			HANDLE_EXCEPTION();
9882 		}
9883 
9884 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
9885 			init_func_run_time_cache(&func->op_array);
9886 		}
9887 	} else {
9888 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
9889 		efree(error);
9890 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9891 		HANDLE_EXCEPTION();
9892 	}
9893 
9894 	call = zend_vm_stack_push_call_frame(call_info,
9895 		func, opline->extended_value, object_or_called_scope);
9896 	call->prev_execute_data = EX(call);
9897 	EX(call) = call;
9898 
9899 	ZEND_VM_NEXT_OPCODE();
9900 }
9901 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9903 {
9904 	USE_OPLINE
9905 	zval *expr_ptr, new_expr;
9906 
9907 	SAVE_OPLINE();
9908 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
9909 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
9910 		expr_ptr = zend_get_bad_ptr();
9911 		if (Z_ISREF_P(expr_ptr)) {
9912 			Z_ADDREF_P(expr_ptr);
9913 		} else {
9914 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
9915 		}
9916 
9917 	} else {
9918 		expr_ptr = RT_CONSTANT(opline, opline->op1);
9919 		if (IS_CONST == IS_TMP_VAR) {
9920 			/* pass */
9921 		} else if (IS_CONST == IS_CONST) {
9922 			Z_TRY_ADDREF_P(expr_ptr);
9923 		} else if (IS_CONST == IS_CV) {
9924 			ZVAL_DEREF(expr_ptr);
9925 			Z_TRY_ADDREF_P(expr_ptr);
9926 		} else /* if (IS_CONST == IS_VAR) */ {
9927 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
9928 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
9929 
9930 				expr_ptr = Z_REFVAL_P(expr_ptr);
9931 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
9932 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
9933 					expr_ptr = &new_expr;
9934 					efree_size(ref, sizeof(zend_reference));
9935 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
9936 					Z_ADDREF_P(expr_ptr);
9937 				}
9938 			}
9939 		}
9940 	}
9941 
9942 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
9943 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9944 		zend_string *str;
9945 		zend_ulong hval;
9946 
9947 add_again:
9948 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9949 			str = Z_STR_P(offset);
9950 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9951 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9952 					goto num_index;
9953 				}
9954 			}
9955 str_index:
9956 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
9957 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9958 			hval = Z_LVAL_P(offset);
9959 num_index:
9960 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
9961 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
9962 			offset = Z_REFVAL_P(offset);
9963 			goto add_again;
9964 		} else if (Z_TYPE_P(offset) == IS_NULL) {
9965 			str = ZSTR_EMPTY_ALLOC();
9966 			goto str_index;
9967 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
9968 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
9969 			goto num_index;
9970 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
9971 			hval = 0;
9972 			goto num_index;
9973 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
9974 			hval = 1;
9975 			goto num_index;
9976 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
9977 			zend_use_resource_as_offset(offset);
9978 			hval = Z_RES_HANDLE_P(offset);
9979 			goto num_index;
9980 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
9981 			ZVAL_UNDEFINED_OP2();
9982 			str = ZSTR_EMPTY_ALLOC();
9983 			goto str_index;
9984 		} else {
9985 			zend_illegal_array_offset_access(offset);
9986 			zval_ptr_dtor_nogc(expr_ptr);
9987 		}
9988 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9989 	} else {
9990 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
9991 			zend_cannot_add_element();
9992 			zval_ptr_dtor_nogc(expr_ptr);
9993 		}
9994 	}
9995 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9996 }
9997 
ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9998 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9999 {
10000 	zval *array;
10001 	uint32_t size;
10002 	USE_OPLINE
10003 
10004 	array = EX_VAR(opline->result.var);
10005 	if (IS_CONST != IS_UNUSED) {
10006 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
10007 		ZVAL_ARR(array, zend_new_array(size));
10008 		/* Explicitly initialize array as not-packed if flag is set */
10009 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
10010 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
10011 		}
10012 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10013 	} else {
10014 		ZVAL_ARR(array, zend_new_array(0));
10015 		ZEND_VM_NEXT_OPCODE();
10016 	}
10017 }
10018 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10020 {
10021 	USE_OPLINE
10022 	zval *container;
10023 	bool result;
10024 	zend_ulong hval;
10025 	zval *offset;
10026 
10027 	SAVE_OPLINE();
10028 	container = RT_CONSTANT(opline, opline->op1);
10029 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
10030 
10031 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10032 		HashTable *ht;
10033 		zval *value;
10034 		zend_string *str;
10035 
10036 isset_dim_obj_array:
10037 		ht = Z_ARRVAL_P(container);
10038 isset_again:
10039 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
10040 			str = Z_STR_P(offset);
10041 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
10042 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
10043 					goto num_index_prop;
10044 				}
10045 			}
10046 			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
10047 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
10048 			hval = Z_LVAL_P(offset);
10049 num_index_prop:
10050 			value = zend_hash_index_find(ht, hval);
10051 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
10052 			offset = Z_REFVAL_P(offset);
10053 			goto isset_again;
10054 		} else {
10055 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
10056 			if (UNEXPECTED(EG(exception))) {
10057 				result = 0;
10058 				goto isset_dim_obj_exit;
10059 			}
10060 		}
10061 
10062 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
10063 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
10064 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
10065 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
10066 
10067 			if (IS_CONST & (IS_CONST|IS_CV)) {
10068 				/* avoid exception check */
10069 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10070 				ZEND_VM_SMART_BRANCH(result, 0);
10071 			}
10072 		} else {
10073 			result = (value == NULL || !i_zend_is_true(value));
10074 		}
10075 		goto isset_dim_obj_exit;
10076 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
10077 		container = Z_REFVAL_P(container);
10078 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10079 			goto isset_dim_obj_array;
10080 		}
10081 	}
10082 
10083 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
10084 		offset++;
10085 	}
10086 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
10087 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
10088 	} else {
10089 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
10090 	}
10091 
10092 isset_dim_obj_exit:
10093 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10094 
10095 	ZEND_VM_SMART_BRANCH(result, 1);
10096 }
10097 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10098 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10099 {
10100 	USE_OPLINE
10101 	zval *container;
10102 	int result;
10103 	zval *offset;
10104 	zend_string *name, *tmp_name;
10105 
10106 	SAVE_OPLINE();
10107 	container = RT_CONSTANT(opline, opline->op1);
10108 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
10109 
10110 	if (IS_CONST == IS_CONST ||
10111 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
10112 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10113 			container = Z_REFVAL_P(container);
10114 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
10115 				result = (opline->extended_value & ZEND_ISEMPTY);
10116 				goto isset_object_finish;
10117 			}
10118 		} else {
10119 			result = (opline->extended_value & ZEND_ISEMPTY);
10120 			goto isset_object_finish;
10121 		}
10122 	}
10123 
10124 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
10125 		name = Z_STR_P(offset);
10126 	} else {
10127 		name = zval_try_get_tmp_string(offset, &tmp_name);
10128 		if (UNEXPECTED(!name)) {
10129 			result = 0;
10130 			goto isset_object_finish;
10131 		}
10132 	}
10133 
10134 	result =
10135 		(opline->extended_value & ZEND_ISEMPTY) ^
10136 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
10137 
10138 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
10139 		zend_tmp_string_release(tmp_name);
10140 	}
10141 
10142 isset_object_finish:
10143 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10144 
10145 	ZEND_VM_SMART_BRANCH(result, 1);
10146 }
10147 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10148 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10149 {
10150 	USE_OPLINE
10151 
10152 	zval *key, *subject;
10153 	HashTable *ht;
10154 	bool result;
10155 
10156 	SAVE_OPLINE();
10157 
10158 	key = RT_CONSTANT(opline, opline->op1);
10159 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
10160 
10161 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
10162 array_key_exists_array:
10163 		ht = Z_ARRVAL_P(subject);
10164 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
10165 	} else {
10166 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
10167 			subject = Z_REFVAL_P(subject);
10168 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
10169 				goto array_key_exists_array;
10170 			}
10171 		}
10172 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
10173 		result = 0;
10174 	}
10175 
10176 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10177 
10178 	ZEND_VM_SMART_BRANCH(result, 1);
10179 }
10180 
10181 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10182 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10183 {
10184 	USE_OPLINE
10185 
10186 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
10187 
10188 	SAVE_OPLINE();
10189 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
10190 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10191 	}
10192 
10193 	/* Destroy the previously yielded value */
10194 	zval_ptr_dtor(&generator->value);
10195 
10196 	/* Destroy the previously yielded key */
10197 	zval_ptr_dtor(&generator->key);
10198 
10199 	/* Set the new yielded value */
10200 	if (IS_CONST != IS_UNUSED) {
10201 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
10202 			/* Constants and temporary variables aren't yieldable by reference,
10203 			 * but we still allow them with a notice. */
10204 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
10205 				zval *value;
10206 
10207 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10208 
10209 				value = RT_CONSTANT(opline, opline->op1);
10210 				ZVAL_COPY_VALUE(&generator->value, value);
10211 				if (IS_CONST == IS_CONST) {
10212 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10213 						Z_ADDREF(generator->value);
10214 					}
10215 				}
10216 			} else {
10217 				zval *value_ptr = zend_get_bad_ptr();
10218 
10219 				/* If a function call result is yielded and the function did
10220 				 * not return by reference we throw a notice. */
10221 				do {
10222 					if (IS_CONST == IS_VAR) {
10223 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
10224 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
10225 						 && !Z_ISREF_P(value_ptr)) {
10226 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10227 							ZVAL_COPY(&generator->value, value_ptr);
10228 							break;
10229 						}
10230 					}
10231 					if (Z_ISREF_P(value_ptr)) {
10232 						Z_ADDREF_P(value_ptr);
10233 					} else {
10234 						ZVAL_MAKE_REF_EX(value_ptr, 2);
10235 					}
10236 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
10237 				} while (0);
10238 
10239 			}
10240 		} else {
10241 			zval *value = RT_CONSTANT(opline, opline->op1);
10242 
10243 			/* Consts, temporary variables and references need copying */
10244 			if (IS_CONST == IS_CONST) {
10245 				ZVAL_COPY_VALUE(&generator->value, value);
10246 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10247 					Z_ADDREF(generator->value);
10248 				}
10249 			} else if (IS_CONST == IS_TMP_VAR) {
10250 				ZVAL_COPY_VALUE(&generator->value, value);
10251 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
10252 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
10253 
10254 			} else {
10255 				ZVAL_COPY_VALUE(&generator->value, value);
10256 				if (IS_CONST == IS_CV) {
10257 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
10258 				}
10259 			}
10260 		}
10261 	} else {
10262 		/* If no value was specified yield null */
10263 		ZVAL_NULL(&generator->value);
10264 	}
10265 
10266 	/* Set the new yielded key */
10267 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
10268 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
10269 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
10270 			key = Z_REFVAL_P(key);
10271 		}
10272 		ZVAL_COPY(&generator->key, key);
10273 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10274 
10275 		if (Z_TYPE(generator->key) == IS_LONG
10276 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
10277 		) {
10278 			generator->largest_used_integer_key = Z_LVAL(generator->key);
10279 		}
10280 	} else {
10281 		/* If no key was specified we use auto-increment keys */
10282 		generator->largest_used_integer_key++;
10283 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
10284 	}
10285 
10286 	if (RETURN_VALUE_USED(opline)) {
10287 		/* If the return value of yield is used set the send
10288 		 * target and initialize it to NULL */
10289 		generator->send_target = EX_VAR(opline->result.var);
10290 		ZVAL_NULL(generator->send_target);
10291 	} else {
10292 		generator->send_target = NULL;
10293 	}
10294 
10295 	/* We increment to the next op, so we are at the correct position when the
10296 	 * generator is resumed. */
10297 	ZEND_VM_INC_OPCODE();
10298 
10299 	/* The GOTO VM uses a local opline variable. We need to set the opline
10300 	 * variable in execute_data so we don't resume at an old position. */
10301 	SAVE_OPLINE();
10302 
10303 	ZEND_VM_RETURN();
10304 }
10305 
zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)10306 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)
10307 {
10308 	USE_OPLINE
10309 	zval *varname;
10310 	zval *retval;
10311 	zend_string *name, *tmp_name;
10312 	HashTable *target_symbol_table;
10313 
10314 	SAVE_OPLINE();
10315 	varname = RT_CONSTANT(opline, opline->op1);
10316 
10317 	if (IS_CONST == IS_CONST) {
10318 		name = Z_STR_P(varname);
10319 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
10320 		name = Z_STR_P(varname);
10321 		tmp_name = NULL;
10322 	} else {
10323 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
10324 			ZVAL_UNDEFINED_OP1();
10325 		}
10326 		name = zval_try_get_tmp_string(varname, &tmp_name);
10327 		if (UNEXPECTED(!name)) {
10328 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
10329 
10330 			}
10331 			ZVAL_UNDEF(EX_VAR(opline->result.var));
10332 			HANDLE_EXCEPTION();
10333 		}
10334 	}
10335 
10336 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
10337 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
10338 	if (retval == NULL) {
10339 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
10340 fetch_this:
10341 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
10342 			if (IS_CONST != IS_CONST) {
10343 				zend_tmp_string_release(tmp_name);
10344 			}
10345 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10346 		}
10347 		if (type == BP_VAR_W) {
10348 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
10349 		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
10350 			retval = &EG(uninitialized_zval);
10351 		} else {
10352 			if (IS_CONST == IS_CV) {
10353 				/* Keep name alive in case an error handler tries to free it. */
10354 				zend_string_addref(name);
10355 			}
10356 			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
10357 				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
10358 			if (type == BP_VAR_RW && !EG(exception)) {
10359 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
10360 			} else {
10361 				retval = &EG(uninitialized_zval);
10362 			}
10363 			if (IS_CONST == IS_CV) {
10364 				zend_string_release(name);
10365 			}
10366 		}
10367 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
10368 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
10369 		retval = Z_INDIRECT_P(retval);
10370 		if (Z_TYPE_P(retval) == IS_UNDEF) {
10371 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
10372 				goto fetch_this;
10373 			}
10374 			if (type == BP_VAR_W) {
10375 				ZVAL_NULL(retval);
10376 			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
10377 				retval = &EG(uninitialized_zval);
10378 			} else {
10379 				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
10380 					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
10381 				if (type == BP_VAR_RW && !EG(exception)) {
10382 					ZVAL_NULL(retval);
10383 				} else {
10384 					retval = &EG(uninitialized_zval);
10385 				}
10386 			}
10387 		}
10388 	}
10389 
10390 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
10391 
10392 	}
10393 
10394 	if (IS_CONST != IS_CONST) {
10395 		zend_tmp_string_release(tmp_name);
10396 	}
10397 
10398 	ZEND_ASSERT(retval != NULL);
10399 	if (type == BP_VAR_R || type == BP_VAR_IS) {
10400 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10401 	} else {
10402 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
10403 	}
10404 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10405 }
10406 
ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10408 {
10409 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10410 }
10411 
ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10412 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10413 {
10414 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10415 }
10416 
ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10417 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10418 {
10419 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10420 }
10421 
ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10423 {
10424 	int fetch_type =
10425 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
10426 			BP_VAR_W : BP_VAR_R;
10427 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10428 }
10429 
ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10430 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10431 {
10432 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10433 }
10434 
ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10435 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10436 {
10437 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10438 }
10439 
10440 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10441 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10442 {
10443 #if 0
10444 	USE_OPLINE
10445 #endif
10446 
10447 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
10448 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
10449 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10450 		}
10451 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10452 	} else {
10453 		if (IS_UNUSED == IS_UNUSED) {
10454 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10455 		}
10456 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10457 	}
10458 }
10459 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10460 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10461 {
10462 	USE_OPLINE
10463 	zval *function_name;
10464 	zend_class_entry *ce;
10465 	uint32_t call_info;
10466 	zend_function *fbc;
10467 	zend_execute_data *call;
10468 
10469 	SAVE_OPLINE();
10470 
10471 	if (IS_CONST == IS_CONST) {
10472 		/* no function found. try a static method in class */
10473 		ce = CACHED_PTR(opline->result.num);
10474 		if (UNEXPECTED(ce == NULL)) {
10475 			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);
10476 			if (UNEXPECTED(ce == NULL)) {
10477 
10478 				HANDLE_EXCEPTION();
10479 			}
10480 			if (IS_UNUSED != IS_CONST) {
10481 				CACHE_PTR(opline->result.num, ce);
10482 			}
10483 		}
10484 	} else if (IS_CONST == IS_UNUSED) {
10485 		ce = zend_fetch_class(NULL, opline->op1.num);
10486 		if (UNEXPECTED(ce == NULL)) {
10487 
10488 			HANDLE_EXCEPTION();
10489 		}
10490 	} else {
10491 		ce = Z_CE_P(EX_VAR(opline->op1.var));
10492 	}
10493 
10494 	if (IS_CONST == IS_CONST &&
10495 	    IS_UNUSED == IS_CONST &&
10496 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
10497 		/* nothing to do */
10498 	} else if (IS_CONST != IS_CONST &&
10499 	           IS_UNUSED == IS_CONST &&
10500 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
10501 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
10502 	} else if (IS_UNUSED != IS_UNUSED) {
10503 		function_name = NULL;
10504 		if (IS_UNUSED != IS_CONST) {
10505 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
10506 				do {
10507 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
10508 						function_name = Z_REFVAL_P(function_name);
10509 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
10510 							break;
10511 						}
10512 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
10513 						ZVAL_UNDEFINED_OP2();
10514 						if (UNEXPECTED(EG(exception) != NULL)) {
10515 							HANDLE_EXCEPTION();
10516 						}
10517 					}
10518 					zend_throw_error(NULL, "Method name must be a string");
10519 
10520 					HANDLE_EXCEPTION();
10521 				} while (0);
10522 			}
10523 		}
10524 
10525 		if (ce->get_static_method) {
10526 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
10527 		} else {
10528 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
10529 		}
10530 		if (UNEXPECTED(fbc == NULL)) {
10531 			if (EXPECTED(!EG(exception))) {
10532 				zend_undefined_method(ce, Z_STR_P(function_name));
10533 			}
10534 
10535 			HANDLE_EXCEPTION();
10536 		}
10537 		if (IS_UNUSED == IS_CONST &&
10538 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
10539 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
10540 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
10541 		}
10542 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
10543 			init_func_run_time_cache(&fbc->op_array);
10544 		}
10545 		if (IS_UNUSED != IS_CONST) {
10546 
10547 		}
10548 	} else {
10549 		if (UNEXPECTED(ce->constructor == NULL)) {
10550 			zend_throw_error(NULL, "Cannot call constructor");
10551 			HANDLE_EXCEPTION();
10552 		}
10553 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
10554 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
10555 			HANDLE_EXCEPTION();
10556 		}
10557 		fbc = ce->constructor;
10558 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
10559 			init_func_run_time_cache(&fbc->op_array);
10560 		}
10561 	}
10562 
10563 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
10564 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
10565 			ce = (zend_class_entry*)Z_OBJ(EX(This));
10566 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
10567 		} else {
10568 			zend_non_static_method_call(fbc);
10569 			HANDLE_EXCEPTION();
10570 		}
10571 	} else {
10572 		/* previous opcode is ZEND_FETCH_CLASS */
10573 		if (IS_CONST == IS_UNUSED
10574 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
10575 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
10576 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
10577 				ce = Z_OBJCE(EX(This));
10578 			} else {
10579 				ce = Z_CE(EX(This));
10580 			}
10581 		}
10582 		call_info = ZEND_CALL_NESTED_FUNCTION;
10583 	}
10584 
10585 	call = zend_vm_stack_push_call_frame(call_info,
10586 		fbc, opline->extended_value, ce);
10587 	call->prev_execute_data = EX(call);
10588 	EX(call) = call;
10589 
10590 	ZEND_VM_NEXT_OPCODE();
10591 }
10592 
ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10593 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10594 {
10595 	if (IS_CONST == IS_UNUSED) {
10596 		SAVE_OPLINE();
10597 		zend_verify_missing_return_type(EX(func));
10598 		HANDLE_EXCEPTION();
10599 	} else {
10600 /* prevents "undefined variable opline" errors */
10601 #if 0 || (IS_CONST != IS_UNUSED)
10602 		USE_OPLINE
10603 		zval *retval_ref, *retval_ptr;
10604 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
10605 		retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);
10606 
10607 		if (IS_CONST == IS_CONST) {
10608 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
10609 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
10610 		} else if (IS_CONST == IS_VAR) {
10611 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
10612 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
10613 			}
10614 			ZVAL_DEREF(retval_ptr);
10615 		} else if (IS_CONST == IS_CV) {
10616 			ZVAL_DEREF(retval_ptr);
10617 		}
10618 
10619 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
10620 			ZEND_VM_NEXT_OPCODE();
10621 		}
10622 
10623 		if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
10624 			SAVE_OPLINE();
10625 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
10626 			if (UNEXPECTED(EG(exception))) {
10627 				HANDLE_EXCEPTION();
10628 			}
10629 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
10630 				ZEND_VM_NEXT_OPCODE();
10631 			}
10632 		}
10633 
10634 		zend_reference *ref = NULL;
10635 		void *cache_slot = CACHE_ADDR(opline->op2.num);
10636 		if (UNEXPECTED(retval_ref != retval_ptr)) {
10637 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
10638 				ref = Z_REF_P(retval_ref);
10639 			} else {
10640 				/* A cast might happen - unwrap the reference if this is a by-value return */
10641 				if (Z_REFCOUNT_P(retval_ref) == 1) {
10642 					ZVAL_UNREF(retval_ref);
10643 				} else {
10644 					Z_DELREF_P(retval_ref);
10645 					ZVAL_COPY(retval_ref, retval_ptr);
10646 				}
10647 				retval_ptr = retval_ref;
10648 			}
10649 		}
10650 
10651 		SAVE_OPLINE();
10652 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
10653 			zend_verify_return_error(EX(func), retval_ptr);
10654 			HANDLE_EXCEPTION();
10655 		}
10656 		ZEND_VM_NEXT_OPCODE();
10657 #endif
10658 	}
10659 }
10660 
ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10661 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10662 {
10663 	USE_OPLINE
10664 	zval *value, *arg;
10665 
10666 	if (IS_UNUSED == IS_CONST) {
10667 		SAVE_OPLINE();
10668 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
10669 		uint32_t arg_num;
10670 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
10671 		if (UNEXPECTED(!arg)) {
10672 
10673 			HANDLE_EXCEPTION();
10674 		}
10675 	} else {
10676 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
10677 	}
10678 
10679 	value = RT_CONSTANT(opline, opline->op1);
10680 	ZVAL_COPY_VALUE(arg, value);
10681 	if (IS_CONST == IS_CONST) {
10682 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
10683 			Z_ADDREF_P(arg);
10684 		}
10685 	}
10686 	ZEND_VM_NEXT_OPCODE();
10687 }
10688 
ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10689 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10690 {
10691 	USE_OPLINE
10692 	zval *value, *arg;
10693 	uint32_t arg_num;
10694 
10695 	if (IS_UNUSED == IS_CONST) {
10696 		SAVE_OPLINE();
10697 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
10698 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
10699 		if (UNEXPECTED(!arg)) {
10700 
10701 			HANDLE_EXCEPTION();
10702 		}
10703 	} else {
10704 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
10705 		arg_num = opline->op2.num;
10706 	}
10707 
10708 	if (EXPECTED(0)) {
10709 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10710 			goto send_val_by_ref;
10711 		}
10712 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10713 send_val_by_ref:
10714 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10715 	}
10716 	value = RT_CONSTANT(opline, opline->op1);
10717 	ZVAL_COPY_VALUE(arg, value);
10718 	if (IS_CONST == IS_CONST) {
10719 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
10720 			Z_ADDREF_P(arg);
10721 		}
10722 	}
10723 	ZEND_VM_NEXT_OPCODE();
10724 }
10725 
ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10726 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10727 {
10728 	USE_OPLINE
10729 	zval *value, *arg;
10730 	uint32_t arg_num;
10731 
10732 	if (IS_UNUSED == IS_CONST) {
10733 		SAVE_OPLINE();
10734 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
10735 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
10736 		if (UNEXPECTED(!arg)) {
10737 
10738 			HANDLE_EXCEPTION();
10739 		}
10740 	} else {
10741 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
10742 		arg_num = opline->op2.num;
10743 	}
10744 
10745 	if (EXPECTED(1)) {
10746 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10747 			goto send_val_by_ref;
10748 		}
10749 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10750 send_val_by_ref:
10751 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10752 	}
10753 	value = RT_CONSTANT(opline, opline->op1);
10754 	ZVAL_COPY_VALUE(arg, value);
10755 	if (IS_CONST == IS_CONST) {
10756 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
10757 			Z_ADDREF_P(arg);
10758 		}
10759 	}
10760 	ZEND_VM_NEXT_OPCODE();
10761 }
10762 
ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10763 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10764 {
10765 	USE_OPLINE
10766 	zval *result;
10767 	zend_function *constructor;
10768 	zend_class_entry *ce;
10769 	zend_execute_data *call;
10770 
10771 	SAVE_OPLINE();
10772 	if (IS_CONST == IS_CONST) {
10773 		ce = CACHED_PTR(opline->op2.num);
10774 		if (UNEXPECTED(ce == NULL)) {
10775 			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);
10776 			if (UNEXPECTED(ce == NULL)) {
10777 				ZVAL_UNDEF(EX_VAR(opline->result.var));
10778 				HANDLE_EXCEPTION();
10779 			}
10780 			CACHE_PTR(opline->op2.num, ce);
10781 		}
10782 	} else if (IS_CONST == IS_UNUSED) {
10783 		ce = zend_fetch_class(NULL, opline->op1.num);
10784 		if (UNEXPECTED(ce == NULL)) {
10785 			ZVAL_UNDEF(EX_VAR(opline->result.var));
10786 			HANDLE_EXCEPTION();
10787 		}
10788 	} else {
10789 		ce = Z_CE_P(EX_VAR(opline->op1.var));
10790 	}
10791 
10792 	result = EX_VAR(opline->result.var);
10793 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
10794 		ZVAL_UNDEF(result);
10795 		HANDLE_EXCEPTION();
10796 	}
10797 
10798 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
10799 	if (constructor == NULL) {
10800 		if (UNEXPECTED(EG(exception))) {
10801 			HANDLE_EXCEPTION();
10802 		}
10803 
10804 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
10805 		 * opcode is DO_FCALL in case EXT instructions are used. */
10806 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
10807 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
10808 		}
10809 
10810 		/* Perform a dummy function call */
10811 		call = zend_vm_stack_push_call_frame(
10812 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
10813 			opline->extended_value, NULL);
10814 	} else {
10815 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
10816 			init_func_run_time_cache(&constructor->op_array);
10817 		}
10818 		/* We are not handling overloaded classes right now */
10819 		call = zend_vm_stack_push_call_frame(
10820 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
10821 			constructor,
10822 			opline->extended_value,
10823 			Z_OBJ_P(result));
10824 		Z_ADDREF_P(result);
10825 	}
10826 
10827 	call->prev_execute_data = EX(call);
10828 	EX(call) = call;
10829 	ZEND_VM_NEXT_OPCODE();
10830 }
10831 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10833 {
10834 	USE_OPLINE
10835 	zval *expr_ptr, new_expr;
10836 
10837 	SAVE_OPLINE();
10838 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
10839 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
10840 		expr_ptr = zend_get_bad_ptr();
10841 		if (Z_ISREF_P(expr_ptr)) {
10842 			Z_ADDREF_P(expr_ptr);
10843 		} else {
10844 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
10845 		}
10846 
10847 	} else {
10848 		expr_ptr = RT_CONSTANT(opline, opline->op1);
10849 		if (IS_CONST == IS_TMP_VAR) {
10850 			/* pass */
10851 		} else if (IS_CONST == IS_CONST) {
10852 			Z_TRY_ADDREF_P(expr_ptr);
10853 		} else if (IS_CONST == IS_CV) {
10854 			ZVAL_DEREF(expr_ptr);
10855 			Z_TRY_ADDREF_P(expr_ptr);
10856 		} else /* if (IS_CONST == IS_VAR) */ {
10857 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
10858 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
10859 
10860 				expr_ptr = Z_REFVAL_P(expr_ptr);
10861 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
10862 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
10863 					expr_ptr = &new_expr;
10864 					efree_size(ref, sizeof(zend_reference));
10865 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
10866 					Z_ADDREF_P(expr_ptr);
10867 				}
10868 			}
10869 		}
10870 	}
10871 
10872 	if (IS_UNUSED != IS_UNUSED) {
10873 		zval *offset = NULL;
10874 		zend_string *str;
10875 		zend_ulong hval;
10876 
10877 add_again:
10878 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
10879 			str = Z_STR_P(offset);
10880 			if (IS_UNUSED != IS_CONST) {
10881 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
10882 					goto num_index;
10883 				}
10884 			}
10885 str_index:
10886 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
10887 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
10888 			hval = Z_LVAL_P(offset);
10889 num_index:
10890 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
10891 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
10892 			offset = Z_REFVAL_P(offset);
10893 			goto add_again;
10894 		} else if (Z_TYPE_P(offset) == IS_NULL) {
10895 			str = ZSTR_EMPTY_ALLOC();
10896 			goto str_index;
10897 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
10898 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
10899 			goto num_index;
10900 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
10901 			hval = 0;
10902 			goto num_index;
10903 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
10904 			hval = 1;
10905 			goto num_index;
10906 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
10907 			zend_use_resource_as_offset(offset);
10908 			hval = Z_RES_HANDLE_P(offset);
10909 			goto num_index;
10910 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
10911 			ZVAL_UNDEFINED_OP2();
10912 			str = ZSTR_EMPTY_ALLOC();
10913 			goto str_index;
10914 		} else {
10915 			zend_illegal_array_offset_access(offset);
10916 			zval_ptr_dtor_nogc(expr_ptr);
10917 		}
10918 
10919 	} else {
10920 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
10921 			zend_cannot_add_element();
10922 			zval_ptr_dtor_nogc(expr_ptr);
10923 		}
10924 	}
10925 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10926 }
10927 
ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10928 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10929 {
10930 	zval *array;
10931 	uint32_t size;
10932 	USE_OPLINE
10933 
10934 	array = EX_VAR(opline->result.var);
10935 	if (IS_CONST != IS_UNUSED) {
10936 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
10937 		ZVAL_ARR(array, zend_new_array(size));
10938 		/* Explicitly initialize array as not-packed if flag is set */
10939 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
10940 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
10941 		}
10942 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10943 	} else {
10944 		ZVAL_ARR(array, zend_new_array(0));
10945 		ZEND_VM_NEXT_OPCODE();
10946 	}
10947 }
10948 
ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10949 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10950 {
10951 	USE_OPLINE
10952 	zval *varname;
10953 	zend_string *name, *tmp_name;
10954 	HashTable *target_symbol_table;
10955 
10956 	SAVE_OPLINE();
10957 
10958 	varname = RT_CONSTANT(opline, opline->op1);
10959 
10960 	if (IS_CONST == IS_CONST) {
10961 		name = Z_STR_P(varname);
10962 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
10963 		name = Z_STR_P(varname);
10964 		tmp_name = NULL;
10965 	} else {
10966 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
10967 			varname = ZVAL_UNDEFINED_OP1();
10968 		}
10969 		name = zval_try_get_tmp_string(varname, &tmp_name);
10970 		if (UNEXPECTED(!name)) {
10971 
10972 			HANDLE_EXCEPTION();
10973 		}
10974 	}
10975 
10976 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
10977 	zend_hash_del_ind(target_symbol_table, name);
10978 
10979 	if (IS_CONST != IS_CONST) {
10980 		zend_tmp_string_release(tmp_name);
10981 	}
10982 
10983 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10984 }
10985 
10986 /* 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)10987 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10988 {
10989 	USE_OPLINE
10990 	zval *value;
10991 	bool result;
10992 	zval *varname;
10993 	zend_string *name, *tmp_name;
10994 	HashTable *target_symbol_table;
10995 
10996 	SAVE_OPLINE();
10997 	varname = RT_CONSTANT(opline, opline->op1);
10998 	if (IS_CONST == IS_CONST) {
10999 		name = Z_STR_P(varname);
11000 	} else {
11001 		name = zval_get_tmp_string(varname, &tmp_name);
11002 	}
11003 
11004 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
11005 	value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
11006 
11007 	if (IS_CONST != IS_CONST) {
11008 		zend_tmp_string_release(tmp_name);
11009 	}
11010 
11011 	if (!value) {
11012 		result = (opline->extended_value & ZEND_ISEMPTY);
11013 	} else {
11014 		if (Z_TYPE_P(value) == IS_INDIRECT) {
11015 			value = Z_INDIRECT_P(value);
11016 		}
11017 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
11018 			if (Z_ISREF_P(value)) {
11019 				value = Z_REFVAL_P(value);
11020 			}
11021 			result = Z_TYPE_P(value) > IS_NULL;
11022 		} else {
11023 			result = !i_zend_is_true(value);
11024 		}
11025 	}
11026 
11027 	ZEND_VM_SMART_BRANCH(result, true);
11028 }
11029 
11030 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11031 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11032 {
11033 	USE_OPLINE
11034 
11035 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
11036 
11037 	SAVE_OPLINE();
11038 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
11039 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11040 	}
11041 
11042 	/* Destroy the previously yielded value */
11043 	zval_ptr_dtor(&generator->value);
11044 
11045 	/* Destroy the previously yielded key */
11046 	zval_ptr_dtor(&generator->key);
11047 
11048 	/* Set the new yielded value */
11049 	if (IS_CONST != IS_UNUSED) {
11050 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
11051 			/* Constants and temporary variables aren't yieldable by reference,
11052 			 * but we still allow them with a notice. */
11053 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
11054 				zval *value;
11055 
11056 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
11057 
11058 				value = RT_CONSTANT(opline, opline->op1);
11059 				ZVAL_COPY_VALUE(&generator->value, value);
11060 				if (IS_CONST == IS_CONST) {
11061 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
11062 						Z_ADDREF(generator->value);
11063 					}
11064 				}
11065 			} else {
11066 				zval *value_ptr = zend_get_bad_ptr();
11067 
11068 				/* If a function call result is yielded and the function did
11069 				 * not return by reference we throw a notice. */
11070 				do {
11071 					if (IS_CONST == IS_VAR) {
11072 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
11073 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
11074 						 && !Z_ISREF_P(value_ptr)) {
11075 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
11076 							ZVAL_COPY(&generator->value, value_ptr);
11077 							break;
11078 						}
11079 					}
11080 					if (Z_ISREF_P(value_ptr)) {
11081 						Z_ADDREF_P(value_ptr);
11082 					} else {
11083 						ZVAL_MAKE_REF_EX(value_ptr, 2);
11084 					}
11085 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
11086 				} while (0);
11087 
11088 			}
11089 		} else {
11090 			zval *value = RT_CONSTANT(opline, opline->op1);
11091 
11092 			/* Consts, temporary variables and references need copying */
11093 			if (IS_CONST == IS_CONST) {
11094 				ZVAL_COPY_VALUE(&generator->value, value);
11095 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
11096 					Z_ADDREF(generator->value);
11097 				}
11098 			} else if (IS_CONST == IS_TMP_VAR) {
11099 				ZVAL_COPY_VALUE(&generator->value, value);
11100 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
11101 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
11102 
11103 			} else {
11104 				ZVAL_COPY_VALUE(&generator->value, value);
11105 				if (IS_CONST == IS_CV) {
11106 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
11107 				}
11108 			}
11109 		}
11110 	} else {
11111 		/* If no value was specified yield null */
11112 		ZVAL_NULL(&generator->value);
11113 	}
11114 
11115 	/* Set the new yielded key */
11116 	if (IS_UNUSED != IS_UNUSED) {
11117 		zval *key = NULL;
11118 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
11119 			key = Z_REFVAL_P(key);
11120 		}
11121 		ZVAL_COPY(&generator->key, key);
11122 
11123 		if (Z_TYPE(generator->key) == IS_LONG
11124 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
11125 		) {
11126 			generator->largest_used_integer_key = Z_LVAL(generator->key);
11127 		}
11128 	} else {
11129 		/* If no key was specified we use auto-increment keys */
11130 		generator->largest_used_integer_key++;
11131 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
11132 	}
11133 
11134 	if (RETURN_VALUE_USED(opline)) {
11135 		/* If the return value of yield is used set the send
11136 		 * target and initialize it to NULL */
11137 		generator->send_target = EX_VAR(opline->result.var);
11138 		ZVAL_NULL(generator->send_target);
11139 	} else {
11140 		generator->send_target = NULL;
11141 	}
11142 
11143 	/* We increment to the next op, so we are at the correct position when the
11144 	 * generator is resumed. */
11145 	ZEND_VM_INC_OPCODE();
11146 
11147 	/* The GOTO VM uses a local opline variable. We need to set the opline
11148 	 * variable in execute_data so we don't resume at an old position. */
11149 	SAVE_OPLINE();
11150 
11151 	ZEND_VM_RETURN();
11152 }
11153 
ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11154 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11155 {
11156 	USE_OPLINE
11157 	zval *op;
11158 
11159 	SAVE_OPLINE();
11160 	op = RT_CONSTANT(opline, opline->op1);
11161 	zend_match_unhandled_error(op);
11162 	HANDLE_EXCEPTION();
11163 }
11164 
ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11165 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11166 {
11167 	USE_OPLINE
11168 	zval *op1;
11169 	zend_long count;
11170 
11171 	SAVE_OPLINE();
11172 	op1 = RT_CONSTANT(opline, opline->op1);
11173 
11174 	while (1) {
11175 		if (Z_TYPE_P(op1) == IS_ARRAY) {
11176 			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
11177 			break;
11178 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
11179 			zend_object *zobj = Z_OBJ_P(op1);
11180 
11181 			/* first, we check if the handler is defined */
11182 			if (zobj->handlers->count_elements) {
11183 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
11184 					break;
11185 				}
11186 				if (UNEXPECTED(EG(exception))) {
11187 					count = 0;
11188 					break;
11189 				}
11190 			}
11191 
11192 			/* if not and the object implements Countable we call its count() method */
11193 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
11194 				zval retval;
11195 
11196 				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
11197 				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
11198 				count = zval_get_long(&retval);
11199 				zval_ptr_dtor(&retval);
11200 				break;
11201 			}
11202 
11203 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
11204 		} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
11205 			op1 = Z_REFVAL_P(op1);
11206 			continue;
11207 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11208 			ZVAL_UNDEFINED_OP1();
11209 		}
11210 		count = 0;
11211 		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
11212 		break;
11213 	}
11214 
11215 	ZVAL_LONG(EX_VAR(opline->result.var), count);
11216 
11217 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11218 }
11219 
ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11220 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11221 {
11222 	USE_OPLINE
11223 
11224 	if (IS_CONST == IS_UNUSED) {
11225 		SAVE_OPLINE();
11226 		if (UNEXPECTED(!EX(func)->common.scope)) {
11227 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
11228 			ZVAL_UNDEF(EX_VAR(opline->result.var));
11229 			HANDLE_EXCEPTION();
11230 		} else {
11231 			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
11232 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
11233 			if (UNEXPECTED(EG(exception))) {
11234 				HANDLE_EXCEPTION();
11235 			}
11236 			ZEND_VM_NEXT_OPCODE();
11237 		}
11238 	} else {
11239 		zval *op1;
11240 
11241 		SAVE_OPLINE();
11242 		op1 = RT_CONSTANT(opline, opline->op1);
11243 		while (1) {
11244 			if (Z_TYPE_P(op1) == IS_OBJECT) {
11245 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
11246 			} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
11247 				op1 = Z_REFVAL_P(op1);
11248 				continue;
11249 			} else {
11250 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11251 					ZVAL_UNDEFINED_OP1();
11252 				}
11253 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
11254 				ZVAL_UNDEF(EX_VAR(opline->result.var));
11255 			}
11256 			break;
11257 		}
11258 
11259 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11260 	}
11261 }
11262 
ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11263 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11264 {
11265 	USE_OPLINE
11266 	zval *op1;
11267 	zend_string *type;
11268 
11269 	SAVE_OPLINE();
11270 	op1 = RT_CONSTANT(opline, opline->op1);
11271 	type = zend_zval_get_legacy_type(op1);
11272 	if (EXPECTED(type)) {
11273 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
11274 	} else {
11275 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
11276 	}
11277 
11278 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11279 }
11280 
ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11282 {
11283 	USE_OPLINE
11284 	zend_array *ht;
11285 	uint32_t arg_count, result_size, skip;
11286 
11287 	arg_count = EX_NUM_ARGS();
11288 	if (IS_CONST == IS_CONST) {
11289 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
11290 		if (arg_count < skip) {
11291 			result_size = 0;
11292 		} else {
11293 			result_size = arg_count - skip;
11294 		}
11295 	} else {
11296 		skip = 0;
11297 		result_size = arg_count;
11298 	}
11299 
11300 	if (result_size) {
11301 		SAVE_OPLINE();
11302 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
11303 
11304 		ht = zend_new_array(result_size);
11305 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
11306 		zend_hash_real_init_packed(ht);
11307 		ZEND_HASH_FILL_PACKED(ht) {
11308 			zval *p, *q;
11309 			uint32_t i = skip;
11310 			p = EX_VAR_NUM(i);
11311 			if (arg_count > first_extra_arg) {
11312 				while (i < first_extra_arg) {
11313 					q = p;
11314 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
11315 						ZVAL_DEREF(q);
11316 						if (Z_OPT_REFCOUNTED_P(q)) {
11317 							Z_ADDREF_P(q);
11318 						}
11319 						ZEND_HASH_FILL_SET(q);
11320 					} else {
11321 						ZEND_HASH_FILL_SET_NULL();
11322 					}
11323 					ZEND_HASH_FILL_NEXT();
11324 					p++;
11325 					i++;
11326 				}
11327 				if (skip < first_extra_arg) {
11328 					skip = 0;
11329 				} else {
11330 					skip -= first_extra_arg;
11331 				}
11332 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
11333 			}
11334 			while (i < arg_count) {
11335 				q = p;
11336 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
11337 					ZVAL_DEREF(q);
11338 					if (Z_OPT_REFCOUNTED_P(q)) {
11339 						Z_ADDREF_P(q);
11340 					}
11341 					ZEND_HASH_FILL_SET(q);
11342 				} else {
11343 					ZEND_HASH_FILL_SET_NULL();
11344 				}
11345 				ZEND_HASH_FILL_NEXT();
11346 				p++;
11347 				i++;
11348 			}
11349 		} ZEND_HASH_FILL_END();
11350 		ht->nNumOfElements = result_size;
11351 	} else {
11352 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
11353 	}
11354 	ZEND_VM_NEXT_OPCODE();
11355 }
11356 
11357 /* Contrary to what its name indicates, ZEND_COPY_TMP may receive and define references. */
ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11358 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11359 {
11360 	USE_OPLINE
11361 	zval *op1, *op2;
11362 
11363 	SAVE_OPLINE();
11364 	op1 = RT_CONSTANT(opline, opline->op1);
11365 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11366 	div_function(EX_VAR(opline->result.var), op1, op2);
11367 
11368 
11369 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11370 }
11371 
ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11373 {
11374 	USE_OPLINE
11375 	zval *op1, *op2;
11376 
11377 	SAVE_OPLINE();
11378 	op1 = RT_CONSTANT(opline, opline->op1);
11379 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11380 	pow_function(EX_VAR(opline->result.var), op1, op2);
11381 
11382 
11383 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11384 }
11385 
ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11386 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11387 {
11388 	USE_OPLINE
11389 	zval *op1, *op2;
11390 
11391 	op1 = RT_CONSTANT(opline, opline->op1);
11392 	op2 = EX_VAR(opline->op2.var);
11393 
11394 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
11395 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
11396 		zend_string *op1_str = Z_STR_P(op1);
11397 		zend_string *op2_str = Z_STR_P(op2);
11398 		zend_string *str;
11399 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
11400 
11401 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11402 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
11403 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
11404 			} else {
11405 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11406 			}
11407 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11408 				zend_string_release_ex(op1_str, 0);
11409 			}
11410 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11411 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
11412 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
11413 			} else {
11414 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11415 			}
11416 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11417 				zend_string_release_ex(op2_str, 0);
11418 			}
11419 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
11420 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
11421 			size_t len = ZSTR_LEN(op1_str);
11422 
11423 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
11424 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
11425 			}
11426 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
11427 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11428 			GC_ADD_FLAGS(str, flags);
11429 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11430 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11431 				zend_string_release_ex(op2_str, 0);
11432 			}
11433 		} else {
11434 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11435 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11436 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11437 			GC_ADD_FLAGS(str, flags);
11438 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11439 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11440 				zend_string_release_ex(op1_str, 0);
11441 			}
11442 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11443 				zend_string_release_ex(op2_str, 0);
11444 			}
11445 		}
11446 		ZEND_VM_NEXT_OPCODE();
11447 	} else {
11448 		SAVE_OPLINE();
11449 
11450 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11451 			op1 = ZVAL_UNDEFINED_OP1();
11452 		}
11453 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11454 			op2 = ZVAL_UNDEFINED_OP2();
11455 		}
11456 		concat_function(EX_VAR(opline->result.var), op1, op2);
11457 
11458 
11459 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11460 	}
11461 }
11462 
ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11463 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11464 {
11465 	USE_OPLINE
11466 	zval *op1, *op2;
11467 
11468 	SAVE_OPLINE();
11469 	op1 = RT_CONSTANT(opline, opline->op1);
11470 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11471 	compare_function(EX_VAR(opline->result.var), op1, op2);
11472 
11473 
11474 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11475 }
11476 
ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11477 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11478 {
11479 	USE_OPLINE
11480 	zval *container, *dim, *value;
11481 
11482 	SAVE_OPLINE();
11483 	container = RT_CONSTANT(opline, opline->op1);
11484 	dim = EX_VAR(opline->op2.var);
11485 	if (IS_CONST != IS_CONST) {
11486 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11487 fetch_dim_r_array:
11488 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
11489 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
11490 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
11491 			container = Z_REFVAL_P(container);
11492 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11493 				goto fetch_dim_r_array;
11494 			} else {
11495 				goto fetch_dim_r_slow;
11496 			}
11497 		} else {
11498 fetch_dim_r_slow:
11499 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
11500 				dim++;
11501 			}
11502 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
11503 		}
11504 	} else {
11505 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
11506 	}
11507 
11508 
11509 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11510 }
11511 
ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11512 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11513 {
11514 	USE_OPLINE
11515 	zval *container;
11516 
11517 	SAVE_OPLINE();
11518 	container = RT_CONSTANT(opline, opline->op1);
11519 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
11520 
11521 
11522 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11523 }
11524 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11525 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11526 {
11527 #if 0
11528 	USE_OPLINE
11529 #endif
11530 
11531 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
11532 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
11533 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11534 		}
11535 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11536 	} else {
11537 		if (IS_CV == IS_UNUSED) {
11538 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11539 		}
11540 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11541 	}
11542 }
11543 
ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11544 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11545 {
11546 	USE_OPLINE
11547 	zval *container;
11548 	void **cache_slot = NULL;
11549 
11550 	SAVE_OPLINE();
11551 	container = RT_CONSTANT(opline, opline->op1);
11552 
11553 	if (IS_CONST == IS_CONST ||
11554 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11555 		do {
11556 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11557 				container = Z_REFVAL_P(container);
11558 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
11559 					break;
11560 				}
11561 			}
11562 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
11563 				ZVAL_UNDEFINED_OP1();
11564 			}
11565 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11566 			ZVAL_NULL(EX_VAR(opline->result.var));
11567 			goto fetch_obj_r_finish;
11568 		} while (0);
11569 	}
11570 
11571 	/* here we are sure we are dealing with an object */
11572 	do {
11573 		zend_object *zobj = Z_OBJ_P(container);
11574 		zend_string *name, *tmp_name;
11575 		zval *retval;
11576 
11577 		if (IS_CV == IS_CONST) {
11578 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
11579 
11580 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
11581 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
11582 
11583 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
11584 					retval = OBJ_PROP(zobj, prop_offset);
11585 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
11586 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11587 							goto fetch_obj_r_copy;
11588 						} else {
11589 fetch_obj_r_fast_copy:
11590 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11591 							ZEND_VM_NEXT_OPCODE();
11592 						}
11593 					}
11594 				} else if (EXPECTED(zobj->properties != NULL)) {
11595 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11596 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
11597 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
11598 
11599 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
11600 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
11601 
11602 							if (EXPECTED(p->key == name) ||
11603 							    (EXPECTED(p->h == ZSTR_H(name)) &&
11604 							     EXPECTED(p->key != NULL) &&
11605 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
11606 								retval = &p->val;
11607 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11608 									goto fetch_obj_r_copy;
11609 								} else {
11610 									goto fetch_obj_r_fast_copy;
11611 								}
11612 							}
11613 						}
11614 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
11615 					}
11616 					retval = zend_hash_find_known_hash(zobj->properties, name);
11617 					if (EXPECTED(retval)) {
11618 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
11619 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
11620 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11621 							goto fetch_obj_r_copy;
11622 						} else {
11623 							goto fetch_obj_r_fast_copy;
11624 						}
11625 					}
11626 				}
11627 			}
11628 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11629 		} else {
11630 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
11631 			if (UNEXPECTED(!name)) {
11632 				ZVAL_UNDEF(EX_VAR(opline->result.var));
11633 				break;
11634 			}
11635 		}
11636 
11637 #if ZEND_DEBUG
11638 		/* For non-standard object handlers, verify a declared property type in debug builds.
11639 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
11640 		zend_property_info *prop_info = NULL;
11641 		if (zobj->handlers->read_property != zend_std_read_property) {
11642 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
11643 		}
11644 #endif
11645 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
11646 #if ZEND_DEBUG
11647 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
11648 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
11649 			ZVAL_OPT_DEREF(retval);
11650 			zend_verify_property_type(prop_info, retval, /* strict */ true);
11651 		}
11652 #endif
11653 
11654 		if (IS_CV != IS_CONST) {
11655 			zend_tmp_string_release(tmp_name);
11656 		}
11657 
11658 		if (retval != EX_VAR(opline->result.var)) {
11659 fetch_obj_r_copy:
11660 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11661 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
11662 			zend_unwrap_reference(retval);
11663 		}
11664 	} while (0);
11665 
11666 fetch_obj_r_finish:
11667 
11668 
11669 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11670 }
11671 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11672 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11673 {
11674 	USE_OPLINE
11675 	zval *container;
11676 	void **cache_slot = NULL;
11677 
11678 	SAVE_OPLINE();
11679 	container = RT_CONSTANT(opline, opline->op1);
11680 
11681 	if (IS_CONST == IS_CONST ||
11682 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11683 		do {
11684 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11685 				container = Z_REFVAL_P(container);
11686 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
11687 					break;
11688 				}
11689 			}
11690 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
11691 				ZVAL_UNDEFINED_OP2();
11692 			}
11693 			ZVAL_NULL(EX_VAR(opline->result.var));
11694 			goto fetch_obj_is_finish;
11695 		} while (0);
11696 	}
11697 
11698 	/* here we are sure we are dealing with an object */
11699 	do {
11700 		zend_object *zobj = Z_OBJ_P(container);
11701 		zend_string *name, *tmp_name;
11702 		zval *retval;
11703 
11704 		if (IS_CV == IS_CONST) {
11705 			cache_slot = CACHE_ADDR(opline->extended_value);
11706 
11707 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
11708 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
11709 
11710 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
11711 					retval = OBJ_PROP(zobj, prop_offset);
11712 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
11713 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11714 							goto fetch_obj_is_copy;
11715 						} else {
11716 fetch_obj_is_fast_copy:
11717 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11718 							ZEND_VM_NEXT_OPCODE();
11719 						}
11720 					}
11721 				} else if (EXPECTED(zobj->properties != NULL)) {
11722 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11723 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
11724 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
11725 
11726 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
11727 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
11728 
11729 							if (EXPECTED(p->key == name) ||
11730 							    (EXPECTED(p->h == ZSTR_H(name)) &&
11731 							     EXPECTED(p->key != NULL) &&
11732 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
11733 								retval = &p->val;
11734 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11735 									goto fetch_obj_is_copy;
11736 								} else {
11737 									goto fetch_obj_is_fast_copy;
11738 								}
11739 							}
11740 						}
11741 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
11742 					}
11743 					retval = zend_hash_find_known_hash(zobj->properties, name);
11744 					if (EXPECTED(retval)) {
11745 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
11746 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
11747 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11748 							goto fetch_obj_is_copy;
11749 						} else {
11750 							goto fetch_obj_is_fast_copy;
11751 						}
11752 					}
11753 				}
11754 			}
11755 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11756 		} else {
11757 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
11758 			if (UNEXPECTED(!name)) {
11759 				ZVAL_UNDEF(EX_VAR(opline->result.var));
11760 				break;
11761 			}
11762 		}
11763 
11764 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
11765 
11766 		if (IS_CV != IS_CONST) {
11767 			zend_tmp_string_release(tmp_name);
11768 		}
11769 
11770 		if (retval != EX_VAR(opline->result.var)) {
11771 fetch_obj_is_copy:
11772 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11773 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
11774 			zend_unwrap_reference(retval);
11775 		}
11776 	} while (0);
11777 
11778 fetch_obj_is_finish:
11779 
11780 
11781 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11782 }
11783 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11784 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11785 {
11786 #if 0
11787 	USE_OPLINE
11788 #endif
11789 
11790 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
11791 		/* Behave like FETCH_OBJ_W */
11792 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
11793 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11794 		}
11795 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11796 	} else {
11797 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11798 	}
11799 }
11800 
ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11802 {
11803 	USE_OPLINE
11804 	zval *container;
11805 
11806 	SAVE_OPLINE();
11807 	container = RT_CONSTANT(opline, opline->op1);
11808 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
11809 
11810 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11811 }
11812 
ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11813 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11814 {
11815 	USE_OPLINE
11816 	zval *op1, *op2;
11817 	zend_string *op1_str, *op2_str, *str;
11818 
11819 
11820 	op1 = RT_CONSTANT(opline, opline->op1);
11821 	op2 = EX_VAR(opline->op2.var);
11822 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
11823 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
11824 		zend_string *op1_str = Z_STR_P(op1);
11825 		zend_string *op2_str = Z_STR_P(op2);
11826 		zend_string *str;
11827 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
11828 
11829 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11830 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
11831 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
11832 			} else {
11833 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11834 			}
11835 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11836 				zend_string_release_ex(op1_str, 0);
11837 			}
11838 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11839 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
11840 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
11841 			} else {
11842 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11843 			}
11844 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11845 				zend_string_release_ex(op2_str, 0);
11846 			}
11847 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
11848 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
11849 			size_t len = ZSTR_LEN(op1_str);
11850 
11851 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
11852 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11853 			GC_ADD_FLAGS(str, flags);
11854 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11855 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11856 				zend_string_release_ex(op2_str, 0);
11857 			}
11858 		} else {
11859 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11860 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11861 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11862 			GC_ADD_FLAGS(str, flags);
11863 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11864 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11865 				zend_string_release_ex(op1_str, 0);
11866 			}
11867 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11868 				zend_string_release_ex(op2_str, 0);
11869 			}
11870 		}
11871 		ZEND_VM_NEXT_OPCODE();
11872 	}
11873 
11874 	SAVE_OPLINE();
11875 	if (IS_CONST == IS_CONST) {
11876 		op1_str = Z_STR_P(op1);
11877 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
11878 		op1_str = zend_string_copy(Z_STR_P(op1));
11879 	} else {
11880 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11881 			ZVAL_UNDEFINED_OP1();
11882 		}
11883 		op1_str = zval_get_string_func(op1);
11884 	}
11885 	if (IS_CV == IS_CONST) {
11886 		op2_str = Z_STR_P(op2);
11887 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
11888 		op2_str = zend_string_copy(Z_STR_P(op2));
11889 	} else {
11890 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11891 			ZVAL_UNDEFINED_OP2();
11892 		}
11893 		op2_str = zval_get_string_func(op2);
11894 	}
11895 	do {
11896 		if (IS_CONST != IS_CONST) {
11897 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11898 				if (IS_CV == IS_CONST) {
11899 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
11900 						GC_ADDREF(op2_str);
11901 					}
11902 				}
11903 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11904 				zend_string_release_ex(op1_str, 0);
11905 				break;
11906 			}
11907 		}
11908 		if (IS_CV != IS_CONST) {
11909 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11910 				if (IS_CONST == IS_CONST) {
11911 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
11912 						GC_ADDREF(op1_str);
11913 					}
11914 				}
11915 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11916 				zend_string_release_ex(op2_str, 0);
11917 				break;
11918 			}
11919 		}
11920 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11921 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11922 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11923 
11924 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
11925 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11926 		if (IS_CONST != IS_CONST) {
11927 			zend_string_release_ex(op1_str, 0);
11928 		}
11929 		if (IS_CV != IS_CONST) {
11930 			zend_string_release_ex(op2_str, 0);
11931 		}
11932 	} while (0);
11933 
11934 
11935 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11936 }
11937 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11938 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11939 {
11940 	USE_OPLINE
11941 	zval *function_name;
11942 	zval *object;
11943 	zend_function *fbc;
11944 	zend_class_entry *called_scope;
11945 	zend_object *obj;
11946 	zend_execute_data *call;
11947 	uint32_t call_info;
11948 
11949 	SAVE_OPLINE();
11950 
11951 	object = RT_CONSTANT(opline, opline->op1);
11952 
11953 	if (IS_CV != IS_CONST) {
11954 		function_name = EX_VAR(opline->op2.var);
11955 	}
11956 
11957 	if (IS_CV != IS_CONST &&
11958 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11959 		do {
11960 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
11961 				function_name = Z_REFVAL_P(function_name);
11962 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11963 					break;
11964 				}
11965 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11966 				ZVAL_UNDEFINED_OP2();
11967 				if (UNEXPECTED(EG(exception) != NULL)) {
11968 
11969 					HANDLE_EXCEPTION();
11970 				}
11971 			}
11972 			zend_throw_error(NULL, "Method name must be a string");
11973 
11974 
11975 			HANDLE_EXCEPTION();
11976 		} while (0);
11977 	}
11978 
11979 	if (IS_CONST == IS_UNUSED) {
11980 		obj = Z_OBJ_P(object);
11981 	} else {
11982 		do {
11983 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11984 				obj = Z_OBJ_P(object);
11985 			} else {
11986 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
11987 					zend_reference *ref = Z_REF_P(object);
11988 
11989 					object = &ref->val;
11990 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11991 						obj = Z_OBJ_P(object);
11992 						if (IS_CONST & IS_VAR) {
11993 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
11994 								efree_size(ref, sizeof(zend_reference));
11995 							} else {
11996 								Z_ADDREF_P(object);
11997 							}
11998 						}
11999 						break;
12000 					}
12001 				}
12002 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
12003 					object = ZVAL_UNDEFINED_OP1();
12004 					if (UNEXPECTED(EG(exception) != NULL)) {
12005 						if (IS_CV != IS_CONST) {
12006 
12007 						}
12008 						HANDLE_EXCEPTION();
12009 					}
12010 				}
12011 				if (IS_CV == IS_CONST) {
12012 					function_name = EX_VAR(opline->op2.var);
12013 				}
12014 				zend_invalid_method_call(object, function_name);
12015 
12016 
12017 				HANDLE_EXCEPTION();
12018 			}
12019 		} while (0);
12020 	}
12021 
12022 	called_scope = obj->ce;
12023 
12024 	if (IS_CV == IS_CONST &&
12025 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
12026 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
12027 	} else {
12028 		zend_object *orig_obj = obj;
12029 
12030 		if (IS_CV == IS_CONST) {
12031 			function_name = EX_VAR(opline->op2.var);
12032 		}
12033 
12034 		/* First, locate the function. */
12035 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
12036 		if (UNEXPECTED(fbc == NULL)) {
12037 			if (EXPECTED(!EG(exception))) {
12038 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
12039 			}
12040 
12041 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
12042 				zend_objects_store_del(orig_obj);
12043 			}
12044 			HANDLE_EXCEPTION();
12045 		}
12046 		if (IS_CV == IS_CONST &&
12047 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
12048 		    EXPECTED(obj == orig_obj)) {
12049 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
12050 		}
12051 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
12052 			GC_ADDREF(obj); /* For $this pointer */
12053 			if (GC_DELREF(orig_obj) == 0) {
12054 				zend_objects_store_del(orig_obj);
12055 			}
12056 		}
12057 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
12058 			init_func_run_time_cache(&fbc->op_array);
12059 		}
12060 	}
12061 
12062 	if (IS_CV != IS_CONST) {
12063 
12064 	}
12065 
12066 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
12067 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
12068 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
12069 			zend_objects_store_del(obj);
12070 			if (UNEXPECTED(EG(exception))) {
12071 				HANDLE_EXCEPTION();
12072 			}
12073 		}
12074 		/* call static method */
12075 		obj = (zend_object*)called_scope;
12076 		call_info = ZEND_CALL_NESTED_FUNCTION;
12077 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
12078 		if (IS_CONST == IS_CV) {
12079 			GC_ADDREF(obj); /* For $this pointer */
12080 		}
12081 		/* CV may be changed indirectly (e.g. when it's a reference) */
12082 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
12083 	}
12084 
12085 	call = zend_vm_stack_push_call_frame(call_info,
12086 		fbc, opline->extended_value, obj);
12087 	call->prev_execute_data = EX(call);
12088 	EX(call) = call;
12089 
12090 	ZEND_VM_NEXT_OPCODE();
12091 }
12092 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12093 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12094 {
12095 	USE_OPLINE
12096 	zval *function_name;
12097 	zend_class_entry *ce;
12098 	uint32_t call_info;
12099 	zend_function *fbc;
12100 	zend_execute_data *call;
12101 
12102 	SAVE_OPLINE();
12103 
12104 	if (IS_CONST == IS_CONST) {
12105 		/* no function found. try a static method in class */
12106 		ce = CACHED_PTR(opline->result.num);
12107 		if (UNEXPECTED(ce == NULL)) {
12108 			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);
12109 			if (UNEXPECTED(ce == NULL)) {
12110 
12111 				HANDLE_EXCEPTION();
12112 			}
12113 			if (IS_CV != IS_CONST) {
12114 				CACHE_PTR(opline->result.num, ce);
12115 			}
12116 		}
12117 	} else if (IS_CONST == IS_UNUSED) {
12118 		ce = zend_fetch_class(NULL, opline->op1.num);
12119 		if (UNEXPECTED(ce == NULL)) {
12120 
12121 			HANDLE_EXCEPTION();
12122 		}
12123 	} else {
12124 		ce = Z_CE_P(EX_VAR(opline->op1.var));
12125 	}
12126 
12127 	if (IS_CONST == IS_CONST &&
12128 	    IS_CV == IS_CONST &&
12129 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
12130 		/* nothing to do */
12131 	} else if (IS_CONST != IS_CONST &&
12132 	           IS_CV == IS_CONST &&
12133 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
12134 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
12135 	} else if (IS_CV != IS_UNUSED) {
12136 		function_name = EX_VAR(opline->op2.var);
12137 		if (IS_CV != IS_CONST) {
12138 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
12139 				do {
12140 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
12141 						function_name = Z_REFVAL_P(function_name);
12142 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
12143 							break;
12144 						}
12145 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
12146 						ZVAL_UNDEFINED_OP2();
12147 						if (UNEXPECTED(EG(exception) != NULL)) {
12148 							HANDLE_EXCEPTION();
12149 						}
12150 					}
12151 					zend_throw_error(NULL, "Method name must be a string");
12152 
12153 					HANDLE_EXCEPTION();
12154 				} while (0);
12155 			}
12156 		}
12157 
12158 		if (ce->get_static_method) {
12159 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
12160 		} else {
12161 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
12162 		}
12163 		if (UNEXPECTED(fbc == NULL)) {
12164 			if (EXPECTED(!EG(exception))) {
12165 				zend_undefined_method(ce, Z_STR_P(function_name));
12166 			}
12167 
12168 			HANDLE_EXCEPTION();
12169 		}
12170 		if (IS_CV == IS_CONST &&
12171 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
12172 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
12173 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
12174 		}
12175 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
12176 			init_func_run_time_cache(&fbc->op_array);
12177 		}
12178 		if (IS_CV != IS_CONST) {
12179 
12180 		}
12181 	} else {
12182 		if (UNEXPECTED(ce->constructor == NULL)) {
12183 			zend_throw_error(NULL, "Cannot call constructor");
12184 			HANDLE_EXCEPTION();
12185 		}
12186 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
12187 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
12188 			HANDLE_EXCEPTION();
12189 		}
12190 		fbc = ce->constructor;
12191 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
12192 			init_func_run_time_cache(&fbc->op_array);
12193 		}
12194 	}
12195 
12196 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
12197 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
12198 			ce = (zend_class_entry*)Z_OBJ(EX(This));
12199 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
12200 		} else {
12201 			zend_non_static_method_call(fbc);
12202 			HANDLE_EXCEPTION();
12203 		}
12204 	} else {
12205 		/* previous opcode is ZEND_FETCH_CLASS */
12206 		if (IS_CONST == IS_UNUSED
12207 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
12208 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
12209 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
12210 				ce = Z_OBJCE(EX(This));
12211 			} else {
12212 				ce = Z_CE(EX(This));
12213 			}
12214 		}
12215 		call_info = ZEND_CALL_NESTED_FUNCTION;
12216 	}
12217 
12218 	call = zend_vm_stack_push_call_frame(call_info,
12219 		fbc, opline->extended_value, ce);
12220 	call->prev_execute_data = EX(call);
12221 	EX(call) = call;
12222 
12223 	ZEND_VM_NEXT_OPCODE();
12224 }
12225 
ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12227 {
12228 	USE_OPLINE
12229 	zval *function_name;
12230 	zend_fcall_info_cache fcc;
12231 	char *error = NULL;
12232 	zend_function *func;
12233 	void *object_or_called_scope;
12234 	zend_execute_data *call;
12235 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
12236 
12237 	SAVE_OPLINE();
12238 	function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
12239 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
12240 		ZEND_ASSERT(!error);
12241 		func = fcc.function_handler;
12242 		object_or_called_scope = fcc.called_scope;
12243 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
12244 			/* Delay closure destruction until its invocation */
12245 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
12246 			call_info |= ZEND_CALL_CLOSURE;
12247 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
12248 				call_info |= ZEND_CALL_FAKE_CLOSURE;
12249 			}
12250 			if (fcc.object) {
12251 				object_or_called_scope = fcc.object;
12252 				call_info |= ZEND_CALL_HAS_THIS;
12253 			}
12254 		} else if (fcc.object) {
12255 			GC_ADDREF(fcc.object); /* For $this pointer */
12256 			object_or_called_scope = fcc.object;
12257 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
12258 		}
12259 
12260 		if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
12261 			if (call_info & ZEND_CALL_CLOSURE) {
12262 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
12263 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
12264 				zend_object_release(fcc.object);
12265 			}
12266 			HANDLE_EXCEPTION();
12267 		}
12268 
12269 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
12270 			init_func_run_time_cache(&func->op_array);
12271 		}
12272 	} else {
12273 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
12274 		efree(error);
12275 
12276 		HANDLE_EXCEPTION();
12277 	}
12278 
12279 	call = zend_vm_stack_push_call_frame(call_info,
12280 		func, opline->extended_value, object_or_called_scope);
12281 	call->prev_execute_data = EX(call);
12282 	EX(call) = call;
12283 
12284 	ZEND_VM_NEXT_OPCODE();
12285 }
12286 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12287 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12288 {
12289 	USE_OPLINE
12290 	zval *expr_ptr, new_expr;
12291 
12292 	SAVE_OPLINE();
12293 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
12294 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
12295 		expr_ptr = zend_get_bad_ptr();
12296 		if (Z_ISREF_P(expr_ptr)) {
12297 			Z_ADDREF_P(expr_ptr);
12298 		} else {
12299 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
12300 		}
12301 
12302 	} else {
12303 		expr_ptr = RT_CONSTANT(opline, opline->op1);
12304 		if (IS_CONST == IS_TMP_VAR) {
12305 			/* pass */
12306 		} else if (IS_CONST == IS_CONST) {
12307 			Z_TRY_ADDREF_P(expr_ptr);
12308 		} else if (IS_CONST == IS_CV) {
12309 			ZVAL_DEREF(expr_ptr);
12310 			Z_TRY_ADDREF_P(expr_ptr);
12311 		} else /* if (IS_CONST == IS_VAR) */ {
12312 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
12313 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
12314 
12315 				expr_ptr = Z_REFVAL_P(expr_ptr);
12316 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
12317 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
12318 					expr_ptr = &new_expr;
12319 					efree_size(ref, sizeof(zend_reference));
12320 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
12321 					Z_ADDREF_P(expr_ptr);
12322 				}
12323 			}
12324 		}
12325 	}
12326 
12327 	if (IS_CV != IS_UNUSED) {
12328 		zval *offset = EX_VAR(opline->op2.var);
12329 		zend_string *str;
12330 		zend_ulong hval;
12331 
12332 add_again:
12333 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
12334 			str = Z_STR_P(offset);
12335 			if (IS_CV != IS_CONST) {
12336 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
12337 					goto num_index;
12338 				}
12339 			}
12340 str_index:
12341 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
12342 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
12343 			hval = Z_LVAL_P(offset);
12344 num_index:
12345 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
12346 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
12347 			offset = Z_REFVAL_P(offset);
12348 			goto add_again;
12349 		} else if (Z_TYPE_P(offset) == IS_NULL) {
12350 			str = ZSTR_EMPTY_ALLOC();
12351 			goto str_index;
12352 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
12353 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
12354 			goto num_index;
12355 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
12356 			hval = 0;
12357 			goto num_index;
12358 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
12359 			hval = 1;
12360 			goto num_index;
12361 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
12362 			zend_use_resource_as_offset(offset);
12363 			hval = Z_RES_HANDLE_P(offset);
12364 			goto num_index;
12365 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
12366 			ZVAL_UNDEFINED_OP2();
12367 			str = ZSTR_EMPTY_ALLOC();
12368 			goto str_index;
12369 		} else {
12370 			zend_illegal_array_offset_access(offset);
12371 			zval_ptr_dtor_nogc(expr_ptr);
12372 		}
12373 
12374 	} else {
12375 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
12376 			zend_cannot_add_element();
12377 			zval_ptr_dtor_nogc(expr_ptr);
12378 		}
12379 	}
12380 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12381 }
12382 
ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12383 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12384 {
12385 	zval *array;
12386 	uint32_t size;
12387 	USE_OPLINE
12388 
12389 	array = EX_VAR(opline->result.var);
12390 	if (IS_CONST != IS_UNUSED) {
12391 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
12392 		ZVAL_ARR(array, zend_new_array(size));
12393 		/* Explicitly initialize array as not-packed if flag is set */
12394 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
12395 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
12396 		}
12397 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12398 	} else {
12399 		ZVAL_ARR(array, zend_new_array(0));
12400 		ZEND_VM_NEXT_OPCODE();
12401 	}
12402 }
12403 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12405 {
12406 	USE_OPLINE
12407 	zval *container;
12408 	bool result;
12409 	zend_ulong hval;
12410 	zval *offset;
12411 
12412 	SAVE_OPLINE();
12413 	container = RT_CONSTANT(opline, opline->op1);
12414 	offset = EX_VAR(opline->op2.var);
12415 
12416 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
12417 		HashTable *ht;
12418 		zval *value;
12419 		zend_string *str;
12420 
12421 isset_dim_obj_array:
12422 		ht = Z_ARRVAL_P(container);
12423 isset_again:
12424 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
12425 			str = Z_STR_P(offset);
12426 			if (IS_CV != IS_CONST) {
12427 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
12428 					goto num_index_prop;
12429 				}
12430 			}
12431 			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
12432 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
12433 			hval = Z_LVAL_P(offset);
12434 num_index_prop:
12435 			value = zend_hash_index_find(ht, hval);
12436 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
12437 			offset = Z_REFVAL_P(offset);
12438 			goto isset_again;
12439 		} else {
12440 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
12441 			if (UNEXPECTED(EG(exception))) {
12442 				result = 0;
12443 				goto isset_dim_obj_exit;
12444 			}
12445 		}
12446 
12447 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
12448 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
12449 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
12450 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
12451 
12452 			if (IS_CONST & (IS_CONST|IS_CV)) {
12453 				/* avoid exception check */
12454 
12455 				ZEND_VM_SMART_BRANCH(result, 0);
12456 			}
12457 		} else {
12458 			result = (value == NULL || !i_zend_is_true(value));
12459 		}
12460 		goto isset_dim_obj_exit;
12461 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
12462 		container = Z_REFVAL_P(container);
12463 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
12464 			goto isset_dim_obj_array;
12465 		}
12466 	}
12467 
12468 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
12469 		offset++;
12470 	}
12471 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
12472 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
12473 	} else {
12474 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
12475 	}
12476 
12477 isset_dim_obj_exit:
12478 
12479 
12480 	ZEND_VM_SMART_BRANCH(result, 1);
12481 }
12482 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12483 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12484 {
12485 	USE_OPLINE
12486 	zval *container;
12487 	int result;
12488 	zval *offset;
12489 	zend_string *name, *tmp_name;
12490 
12491 	SAVE_OPLINE();
12492 	container = RT_CONSTANT(opline, opline->op1);
12493 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
12494 
12495 	if (IS_CONST == IS_CONST ||
12496 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
12497 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
12498 			container = Z_REFVAL_P(container);
12499 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
12500 				result = (opline->extended_value & ZEND_ISEMPTY);
12501 				goto isset_object_finish;
12502 			}
12503 		} else {
12504 			result = (opline->extended_value & ZEND_ISEMPTY);
12505 			goto isset_object_finish;
12506 		}
12507 	}
12508 
12509 	if (IS_CV == IS_CONST) {
12510 		name = Z_STR_P(offset);
12511 	} else {
12512 		name = zval_try_get_tmp_string(offset, &tmp_name);
12513 		if (UNEXPECTED(!name)) {
12514 			result = 0;
12515 			goto isset_object_finish;
12516 		}
12517 	}
12518 
12519 	result =
12520 		(opline->extended_value & ZEND_ISEMPTY) ^
12521 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
12522 
12523 	if (IS_CV != IS_CONST) {
12524 		zend_tmp_string_release(tmp_name);
12525 	}
12526 
12527 isset_object_finish:
12528 
12529 
12530 	ZEND_VM_SMART_BRANCH(result, 1);
12531 }
12532 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12533 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12534 {
12535 	USE_OPLINE
12536 
12537 	zval *key, *subject;
12538 	HashTable *ht;
12539 	bool result;
12540 
12541 	SAVE_OPLINE();
12542 
12543 	key = RT_CONSTANT(opline, opline->op1);
12544 	subject = EX_VAR(opline->op2.var);
12545 
12546 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
12547 array_key_exists_array:
12548 		ht = Z_ARRVAL_P(subject);
12549 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
12550 	} else {
12551 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
12552 			subject = Z_REFVAL_P(subject);
12553 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
12554 				goto array_key_exists_array;
12555 			}
12556 		}
12557 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
12558 		result = 0;
12559 	}
12560 
12561 
12562 	ZEND_VM_SMART_BRANCH(result, 1);
12563 }
12564 
12565 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12566 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12567 {
12568 	USE_OPLINE
12569 
12570 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
12571 
12572 	SAVE_OPLINE();
12573 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
12574 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12575 	}
12576 
12577 	/* Destroy the previously yielded value */
12578 	zval_ptr_dtor(&generator->value);
12579 
12580 	/* Destroy the previously yielded key */
12581 	zval_ptr_dtor(&generator->key);
12582 
12583 	/* Set the new yielded value */
12584 	if (IS_CONST != IS_UNUSED) {
12585 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
12586 			/* Constants and temporary variables aren't yieldable by reference,
12587 			 * but we still allow them with a notice. */
12588 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
12589 				zval *value;
12590 
12591 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
12592 
12593 				value = RT_CONSTANT(opline, opline->op1);
12594 				ZVAL_COPY_VALUE(&generator->value, value);
12595 				if (IS_CONST == IS_CONST) {
12596 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
12597 						Z_ADDREF(generator->value);
12598 					}
12599 				}
12600 			} else {
12601 				zval *value_ptr = zend_get_bad_ptr();
12602 
12603 				/* If a function call result is yielded and the function did
12604 				 * not return by reference we throw a notice. */
12605 				do {
12606 					if (IS_CONST == IS_VAR) {
12607 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
12608 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
12609 						 && !Z_ISREF_P(value_ptr)) {
12610 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
12611 							ZVAL_COPY(&generator->value, value_ptr);
12612 							break;
12613 						}
12614 					}
12615 					if (Z_ISREF_P(value_ptr)) {
12616 						Z_ADDREF_P(value_ptr);
12617 					} else {
12618 						ZVAL_MAKE_REF_EX(value_ptr, 2);
12619 					}
12620 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
12621 				} while (0);
12622 
12623 			}
12624 		} else {
12625 			zval *value = RT_CONSTANT(opline, opline->op1);
12626 
12627 			/* Consts, temporary variables and references need copying */
12628 			if (IS_CONST == IS_CONST) {
12629 				ZVAL_COPY_VALUE(&generator->value, value);
12630 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
12631 					Z_ADDREF(generator->value);
12632 				}
12633 			} else if (IS_CONST == IS_TMP_VAR) {
12634 				ZVAL_COPY_VALUE(&generator->value, value);
12635 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
12636 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
12637 
12638 			} else {
12639 				ZVAL_COPY_VALUE(&generator->value, value);
12640 				if (IS_CONST == IS_CV) {
12641 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
12642 				}
12643 			}
12644 		}
12645 	} else {
12646 		/* If no value was specified yield null */
12647 		ZVAL_NULL(&generator->value);
12648 	}
12649 
12650 	/* Set the new yielded key */
12651 	if (IS_CV != IS_UNUSED) {
12652 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
12653 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
12654 			key = Z_REFVAL_P(key);
12655 		}
12656 		ZVAL_COPY(&generator->key, key);
12657 
12658 		if (Z_TYPE(generator->key) == IS_LONG
12659 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
12660 		) {
12661 			generator->largest_used_integer_key = Z_LVAL(generator->key);
12662 		}
12663 	} else {
12664 		/* If no key was specified we use auto-increment keys */
12665 		generator->largest_used_integer_key++;
12666 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
12667 	}
12668 
12669 	if (RETURN_VALUE_USED(opline)) {
12670 		/* If the return value of yield is used set the send
12671 		 * target and initialize it to NULL */
12672 		generator->send_target = EX_VAR(opline->result.var);
12673 		ZVAL_NULL(generator->send_target);
12674 	} else {
12675 		generator->send_target = NULL;
12676 	}
12677 
12678 	/* We increment to the next op, so we are at the correct position when the
12679 	 * generator is resumed. */
12680 	ZEND_VM_INC_OPCODE();
12681 
12682 	/* The GOTO VM uses a local opline variable. We need to set the opline
12683 	 * variable in execute_data so we don't resume at an old position. */
12684 	SAVE_OPLINE();
12685 
12686 	ZEND_VM_RETURN();
12687 }
12688 
ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12689 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12690 {
12691 	USE_OPLINE
12692 	zval *op1;
12693 
12694 	op1 = EX_VAR(opline->op1.var);
12695 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12696 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
12697 		ZEND_VM_NEXT_OPCODE();
12698 	}
12699 
12700 	ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12701 }
12702 
ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12703 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12704 {
12705 	USE_OPLINE
12706 	zval *value;
12707 
12708 	value = EX_VAR(opline->op1.var);
12709 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
12710 	ZEND_VM_NEXT_OPCODE();
12711 }
12712 
ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12713 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12714 {
12715 	USE_OPLINE
12716 	zval *value;
12717 
12718 	value = EX_VAR(opline->op1.var);
12719 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
12720 	ZEND_VM_NEXT_OPCODE();
12721 }
12722 
ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12723 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12724 {
12725 	USE_OPLINE
12726 	zval *value;
12727 
12728 	value = EX_VAR(opline->op1.var);
12729 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
12730 	ZEND_VM_NEXT_OPCODE();
12731 }
12732 
ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12733 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12734 {
12735 	USE_OPLINE
12736 	zval *op1, *op2, *result;
12737 	double d1, d2;
12738 
12739 	op1 = EX_VAR(opline->op1.var);
12740 	op2 = RT_CONSTANT(opline, opline->op2);
12741 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12742 		/* pass */
12743 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12744 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12745 			result = EX_VAR(opline->result.var);
12746 			fast_long_add_function(result, op1, op2);
12747 			ZEND_VM_NEXT_OPCODE();
12748 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12749 			d1 = (double)Z_LVAL_P(op1);
12750 			d2 = Z_DVAL_P(op2);
12751 			goto add_double;
12752 		}
12753 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12754 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12755 			d1 = Z_DVAL_P(op1);
12756 			d2 = Z_DVAL_P(op2);
12757 add_double:
12758 			result = EX_VAR(opline->result.var);
12759 			ZVAL_DOUBLE(result, d1 + d2);
12760 			ZEND_VM_NEXT_OPCODE();
12761 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12762 			d1 = Z_DVAL_P(op1);
12763 			d2 = (double)Z_LVAL_P(op2);
12764 			goto add_double;
12765 		}
12766 	}
12767 
12768 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12769 }
12770 
ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12771 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12772 {
12773 	USE_OPLINE
12774 	zval *op1, *op2, *result;
12775 	double d1, d2;
12776 
12777 	op1 = EX_VAR(opline->op1.var);
12778 	op2 = RT_CONSTANT(opline, opline->op2);
12779 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12780 		/* pass */
12781 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12782 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12783 			result = EX_VAR(opline->result.var);
12784 			fast_long_sub_function(result, op1, op2);
12785 			ZEND_VM_NEXT_OPCODE();
12786 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12787 			d1 = (double)Z_LVAL_P(op1);
12788 			d2 = Z_DVAL_P(op2);
12789 			goto sub_double;
12790 		}
12791 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12792 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12793 			d1 = Z_DVAL_P(op1);
12794 			d2 = Z_DVAL_P(op2);
12795 sub_double:
12796 			result = EX_VAR(opline->result.var);
12797 			ZVAL_DOUBLE(result, d1 - d2);
12798 			ZEND_VM_NEXT_OPCODE();
12799 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12800 			d1 = Z_DVAL_P(op1);
12801 			d2 = (double)Z_LVAL_P(op2);
12802 			goto sub_double;
12803 		}
12804 	}
12805 
12806 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12807 }
12808 
ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12809 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12810 {
12811 	USE_OPLINE
12812 	zval *op1, *op2, *result;
12813 	double d1, d2;
12814 
12815 	op1 = EX_VAR(opline->op1.var);
12816 	op2 = RT_CONSTANT(opline, opline->op2);
12817 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12818 		/* pass */
12819 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12820 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12821 			zend_long overflow;
12822 
12823 			result = EX_VAR(opline->result.var);
12824 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
12825 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
12826 			ZEND_VM_NEXT_OPCODE();
12827 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12828 			d1 = (double)Z_LVAL_P(op1);
12829 			d2 = Z_DVAL_P(op2);
12830 			goto mul_double;
12831 		}
12832 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12833 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12834 			d1 = Z_DVAL_P(op1);
12835 			d2 = Z_DVAL_P(op2);
12836 mul_double:
12837 			result = EX_VAR(opline->result.var);
12838 			ZVAL_DOUBLE(result, d1 * d2);
12839 			ZEND_VM_NEXT_OPCODE();
12840 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12841 			d1 = Z_DVAL_P(op1);
12842 			d2 = (double)Z_LVAL_P(op2);
12843 			goto mul_double;
12844 		}
12845 	}
12846 
12847 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12848 }
12849 
ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12851 {
12852 	USE_OPLINE
12853 	zval *op1, *op2, *result;
12854 
12855 	op1 = EX_VAR(opline->op1.var);
12856 	op2 = RT_CONSTANT(opline, opline->op2);
12857 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12858 		/* pass */
12859 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12860 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12861 			result = EX_VAR(opline->result.var);
12862 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
12863 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12864 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
12865 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
12866 				ZVAL_LONG(result, 0);
12867 			} else {
12868 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
12869 			}
12870 			ZEND_VM_NEXT_OPCODE();
12871 		}
12872 	}
12873 
12874 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12875 }
12876 
ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12878 {
12879 	USE_OPLINE
12880 	zval *op1, *op2;
12881 
12882 	op1 = EX_VAR(opline->op1.var);
12883 	op2 = RT_CONSTANT(opline, opline->op2);
12884 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12885 		/* pass */
12886 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12887 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12888 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12889 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
12890 		ZVAL_LONG(EX_VAR(opline->result.var),
12891 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
12892 		ZEND_VM_NEXT_OPCODE();
12893 	}
12894 
12895 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12896 }
12897 
ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12898 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12899 {
12900 	USE_OPLINE
12901 	zval *op1, *op2;
12902 
12903 	op1 = EX_VAR(opline->op1.var);
12904 	op2 = RT_CONSTANT(opline, opline->op2);
12905 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12906 		/* pass */
12907 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12908 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12909 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12910 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
12911 		ZEND_VM_NEXT_OPCODE();
12912 	}
12913 
12914 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12915 }
12916 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12917 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12918 {
12919 	USE_OPLINE
12920 	zval *op1, *op2;
12921 	double d1, d2;
12922 
12923 	op1 = EX_VAR(opline->op1.var);
12924 	op2 = RT_CONSTANT(opline, opline->op2);
12925 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12926 		/* pass */
12927 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12928 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12929 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12930 is_smaller_true:
12931 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
12932 			} else {
12933 is_smaller_false:
12934 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
12935 			}
12936 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12937 			d1 = (double)Z_LVAL_P(op1);
12938 			d2 = Z_DVAL_P(op2);
12939 			goto is_smaller_double;
12940 		}
12941 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12942 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12943 			d1 = Z_DVAL_P(op1);
12944 			d2 = Z_DVAL_P(op2);
12945 is_smaller_double:
12946 			if (d1 < d2) {
12947 				goto is_smaller_true;
12948 			} else {
12949 				goto is_smaller_false;
12950 			}
12951 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12952 			d1 = Z_DVAL_P(op1);
12953 			d2 = (double)Z_LVAL_P(op2);
12954 			goto is_smaller_double;
12955 		}
12956 	}
12957 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12958 }
12959 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12960 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12961 {
12962 	USE_OPLINE
12963 	zval *op1, *op2;
12964 	double d1, d2;
12965 
12966 	op1 = EX_VAR(opline->op1.var);
12967 	op2 = RT_CONSTANT(opline, opline->op2);
12968 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12969 		/* pass */
12970 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12971 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12972 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12973 is_smaller_true:
12974 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
12975 			} else {
12976 is_smaller_false:
12977 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
12978 			}
12979 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12980 			d1 = (double)Z_LVAL_P(op1);
12981 			d2 = Z_DVAL_P(op2);
12982 			goto is_smaller_double;
12983 		}
12984 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12985 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12986 			d1 = Z_DVAL_P(op1);
12987 			d2 = Z_DVAL_P(op2);
12988 is_smaller_double:
12989 			if (d1 < d2) {
12990 				goto is_smaller_true;
12991 			} else {
12992 				goto is_smaller_false;
12993 			}
12994 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12995 			d1 = Z_DVAL_P(op1);
12996 			d2 = (double)Z_LVAL_P(op2);
12997 			goto is_smaller_double;
12998 		}
12999 	}
13000 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13001 }
13002 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13003 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13004 {
13005 	USE_OPLINE
13006 	zval *op1, *op2;
13007 	double d1, d2;
13008 
13009 	op1 = EX_VAR(opline->op1.var);
13010 	op2 = RT_CONSTANT(opline, opline->op2);
13011 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
13012 		/* pass */
13013 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13014 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13015 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13016 is_smaller_true:
13017 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
13018 			} else {
13019 is_smaller_false:
13020 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
13021 			}
13022 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13023 			d1 = (double)Z_LVAL_P(op1);
13024 			d2 = Z_DVAL_P(op2);
13025 			goto is_smaller_double;
13026 		}
13027 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13028 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13029 			d1 = Z_DVAL_P(op1);
13030 			d2 = Z_DVAL_P(op2);
13031 is_smaller_double:
13032 			if (d1 < d2) {
13033 				goto is_smaller_true;
13034 			} else {
13035 				goto is_smaller_false;
13036 			}
13037 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13038 			d1 = Z_DVAL_P(op1);
13039 			d2 = (double)Z_LVAL_P(op2);
13040 			goto is_smaller_double;
13041 		}
13042 	}
13043 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13044 }
13045 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13046 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13047 {
13048 	USE_OPLINE
13049 	zval *op1, *op2;
13050 	double d1, d2;
13051 
13052 	op1 = EX_VAR(opline->op1.var);
13053 	op2 = RT_CONSTANT(opline, opline->op2);
13054 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
13055 		/* pass */
13056 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13057 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13058 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13059 is_smaller_or_equal_true:
13060 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
13061 				ZVAL_TRUE(EX_VAR(opline->result.var));
13062 				ZEND_VM_NEXT_OPCODE();
13063 			} else {
13064 is_smaller_or_equal_false:
13065 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
13066 				ZVAL_FALSE(EX_VAR(opline->result.var));
13067 				ZEND_VM_NEXT_OPCODE();
13068 			}
13069 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13070 			d1 = (double)Z_LVAL_P(op1);
13071 			d2 = Z_DVAL_P(op2);
13072 			goto is_smaller_or_equal_double;
13073 		}
13074 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13075 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13076 			d1 = Z_DVAL_P(op1);
13077 			d2 = Z_DVAL_P(op2);
13078 is_smaller_or_equal_double:
13079 			if (d1 <= d2) {
13080 				goto is_smaller_or_equal_true;
13081 			} else {
13082 				goto is_smaller_or_equal_false;
13083 			}
13084 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13085 			d1 = Z_DVAL_P(op1);
13086 			d2 = (double)Z_LVAL_P(op2);
13087 			goto is_smaller_or_equal_double;
13088 		}
13089 	}
13090 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13091 }
13092 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13093 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13094 {
13095 	USE_OPLINE
13096 	zval *op1, *op2;
13097 	double d1, d2;
13098 
13099 	op1 = EX_VAR(opline->op1.var);
13100 	op2 = RT_CONSTANT(opline, opline->op2);
13101 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
13102 		/* pass */
13103 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13104 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13105 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13106 is_smaller_or_equal_true:
13107 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
13108 				ZVAL_TRUE(EX_VAR(opline->result.var));
13109 				ZEND_VM_NEXT_OPCODE();
13110 			} else {
13111 is_smaller_or_equal_false:
13112 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
13113 				ZVAL_FALSE(EX_VAR(opline->result.var));
13114 				ZEND_VM_NEXT_OPCODE();
13115 			}
13116 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13117 			d1 = (double)Z_LVAL_P(op1);
13118 			d2 = Z_DVAL_P(op2);
13119 			goto is_smaller_or_equal_double;
13120 		}
13121 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13122 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13123 			d1 = Z_DVAL_P(op1);
13124 			d2 = Z_DVAL_P(op2);
13125 is_smaller_or_equal_double:
13126 			if (d1 <= d2) {
13127 				goto is_smaller_or_equal_true;
13128 			} else {
13129 				goto is_smaller_or_equal_false;
13130 			}
13131 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13132 			d1 = Z_DVAL_P(op1);
13133 			d2 = (double)Z_LVAL_P(op2);
13134 			goto is_smaller_or_equal_double;
13135 		}
13136 	}
13137 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13138 }
13139 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13140 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13141 {
13142 	USE_OPLINE
13143 	zval *op1, *op2;
13144 	double d1, d2;
13145 
13146 	op1 = EX_VAR(opline->op1.var);
13147 	op2 = RT_CONSTANT(opline, opline->op2);
13148 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
13149 		/* pass */
13150 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13151 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13152 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13153 is_smaller_or_equal_true:
13154 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
13155 				ZVAL_TRUE(EX_VAR(opline->result.var));
13156 				ZEND_VM_NEXT_OPCODE();
13157 			} else {
13158 is_smaller_or_equal_false:
13159 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
13160 				ZVAL_FALSE(EX_VAR(opline->result.var));
13161 				ZEND_VM_NEXT_OPCODE();
13162 			}
13163 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13164 			d1 = (double)Z_LVAL_P(op1);
13165 			d2 = Z_DVAL_P(op2);
13166 			goto is_smaller_or_equal_double;
13167 		}
13168 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13169 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13170 			d1 = Z_DVAL_P(op1);
13171 			d2 = Z_DVAL_P(op2);
13172 is_smaller_or_equal_double:
13173 			if (d1 <= d2) {
13174 				goto is_smaller_or_equal_true;
13175 			} else {
13176 				goto is_smaller_or_equal_false;
13177 			}
13178 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13179 			d1 = Z_DVAL_P(op1);
13180 			d2 = (double)Z_LVAL_P(op2);
13181 			goto is_smaller_or_equal_double;
13182 		}
13183 	}
13184 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13185 }
13186 
ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13187 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13188 {
13189 	USE_OPLINE
13190 	zval *op1, *op2;
13191 
13192 	op1 = EX_VAR(opline->op1.var);
13193 	op2 = RT_CONSTANT(opline, opline->op2);
13194 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
13195 		/* pass */
13196 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13197 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13198 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
13199 		ZEND_VM_NEXT_OPCODE();
13200 	}
13201 
13202 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13203 }
13204 
ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13205 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13206 {
13207 	USE_OPLINE
13208 	zval *op1, *op2;
13209 
13210 	op1 = EX_VAR(opline->op1.var);
13211 	op2 = RT_CONSTANT(opline, opline->op2);
13212 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
13213 		/* pass */
13214 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13215 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13216 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
13217 		ZEND_VM_NEXT_OPCODE();
13218 	}
13219 
13220 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13221 }
13222 
ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13223 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13224 {
13225 	USE_OPLINE
13226 	zval *op1, *op2;
13227 
13228 	op1 = EX_VAR(opline->op1.var);
13229 	op2 = RT_CONSTANT(opline, opline->op2);
13230 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
13231 		/* pass */
13232 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13233 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13234 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
13235 		ZEND_VM_NEXT_OPCODE();
13236 	}
13237 
13238 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13239 }
13240 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13241 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13242 {
13243 	USE_OPLINE
13244 	zval *container;
13245 
13246 	SAVE_OPLINE();
13247 	container = EX_VAR(opline->op1.var);
13248 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
13249 
13250 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13251 }
13252 
ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13253 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13254 {
13255 	USE_OPLINE
13256 	zval *op, *jump_zv;
13257 	HashTable *jumptable;
13258 
13259 	op = EX_VAR(opline->op1.var);
13260 
13261 	if (Z_TYPE_P(op) != IS_LONG) {
13262 		ZVAL_DEREF(op);
13263 		if (Z_TYPE_P(op) != IS_LONG) {
13264 			/* Wrong type, fall back to ZEND_CASE chain */
13265 			ZEND_VM_NEXT_OPCODE();
13266 		}
13267 	}
13268 
13269 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
13270 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
13271 	if (jump_zv != NULL) {
13272 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
13273 		ZEND_VM_CONTINUE();
13274 	} else {
13275 		/* default */
13276 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
13277 		ZEND_VM_CONTINUE();
13278 	}
13279 }
13280 
ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13282 {
13283 	USE_OPLINE
13284 	zval *op, *jump_zv;
13285 	HashTable *jumptable;
13286 
13287 	op = EX_VAR(opline->op1.var);
13288 
13289 	if (Z_TYPE_P(op) != IS_STRING) {
13290 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13291 			/* Wrong type, fall back to ZEND_CASE chain */
13292 			ZEND_VM_NEXT_OPCODE();
13293 		} else {
13294 			ZVAL_DEREF(op);
13295 			if (Z_TYPE_P(op) != IS_STRING) {
13296 				/* Wrong type, fall back to ZEND_CASE chain */
13297 				ZEND_VM_NEXT_OPCODE();
13298 			}
13299 		}
13300 	}
13301 
13302 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
13303 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
13304 	if (jump_zv != NULL) {
13305 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
13306 		ZEND_VM_CONTINUE();
13307 	} else {
13308 		/* default */
13309 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
13310 		ZEND_VM_CONTINUE();
13311 	}
13312 }
13313 
ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13314 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13315 {
13316 	USE_OPLINE
13317 	zval *op, *jump_zv;
13318 	HashTable *jumptable;
13319 
13320 	op = EX_VAR(opline->op1.var);
13321 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
13322 
13323 match_try_again:
13324 	if (Z_TYPE_P(op) == IS_LONG) {
13325 		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
13326 	} else if (Z_TYPE_P(op) == IS_STRING) {
13327 		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
13328 	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
13329 		op = Z_REFVAL_P(op);
13330 		goto match_try_again;
13331 	} else {
13332 		if (UNEXPECTED(((IS_TMP_VAR|IS_VAR|IS_CV) & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
13333 			SAVE_OPLINE();
13334 			op = ZVAL_UNDEFINED_OP1();
13335 			if (UNEXPECTED(EG(exception))) {
13336 				HANDLE_EXCEPTION();
13337 			}
13338 			goto match_try_again;
13339 		}
13340 
13341 		goto default_branch;
13342 	}
13343 
13344 	if (jump_zv != NULL) {
13345 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
13346 		ZEND_VM_CONTINUE();
13347 	} else {
13348 default_branch:
13349 		/* default */
13350 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
13351 		ZEND_VM_CONTINUE();
13352 	}
13353 }
13354 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13355 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13356 {
13357 	USE_OPLINE
13358 	zval *op1, *op2, *result;
13359 
13360 	op1 = EX_VAR(opline->op1.var);
13361 	op2 = RT_CONSTANT(opline, opline->op2);
13362 	result = EX_VAR(opline->result.var);
13363 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
13364 	ZEND_VM_NEXT_OPCODE();
13365 }
13366 
ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13367 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13368 {
13369 	USE_OPLINE
13370 	zval *op1, *op2, *result;
13371 
13372 	op1 = EX_VAR(opline->op1.var);
13373 	op2 = RT_CONSTANT(opline, opline->op2);
13374 	result = EX_VAR(opline->result.var);
13375 	fast_long_add_function(result, op1, op2);
13376 	ZEND_VM_NEXT_OPCODE();
13377 }
13378 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13379 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13380 {
13381 	USE_OPLINE
13382 	zval *op1, *op2, *result;
13383 
13384 	op1 = EX_VAR(opline->op1.var);
13385 	op2 = RT_CONSTANT(opline, opline->op2);
13386 	result = EX_VAR(opline->result.var);
13387 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
13388 	ZEND_VM_NEXT_OPCODE();
13389 }
13390 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13391 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13392 {
13393 	USE_OPLINE
13394 	zval *op1, *op2, *result;
13395 
13396 	op1 = EX_VAR(opline->op1.var);
13397 	op2 = RT_CONSTANT(opline, opline->op2);
13398 	result = EX_VAR(opline->result.var);
13399 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
13400 	ZEND_VM_NEXT_OPCODE();
13401 }
13402 
ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13403 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13404 {
13405 	USE_OPLINE
13406 	zval *op1, *op2, *result;
13407 
13408 	op1 = EX_VAR(opline->op1.var);
13409 	op2 = RT_CONSTANT(opline, opline->op2);
13410 	result = EX_VAR(opline->result.var);
13411 	fast_long_sub_function(result, op1, op2);
13412 	ZEND_VM_NEXT_OPCODE();
13413 }
13414 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13415 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13416 {
13417 	USE_OPLINE
13418 	zval *op1, *op2, *result;
13419 
13420 	op1 = EX_VAR(opline->op1.var);
13421 	op2 = RT_CONSTANT(opline, opline->op2);
13422 	result = EX_VAR(opline->result.var);
13423 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
13424 	ZEND_VM_NEXT_OPCODE();
13425 }
13426 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13427 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13428 {
13429 	USE_OPLINE
13430 	zval *op1, *op2, *result;
13431 
13432 	op1 = EX_VAR(opline->op1.var);
13433 	op2 = RT_CONSTANT(opline, opline->op2);
13434 	result = EX_VAR(opline->result.var);
13435 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
13436 	ZEND_VM_NEXT_OPCODE();
13437 }
13438 
ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13439 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13440 {
13441 	USE_OPLINE
13442 	zval *op1, *op2, *result;
13443 	zend_long overflow;
13444 
13445 	op1 = EX_VAR(opline->op1.var);
13446 	op2 = RT_CONSTANT(opline, opline->op2);
13447 	result = EX_VAR(opline->result.var);
13448 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
13449 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
13450 	ZEND_VM_NEXT_OPCODE();
13451 }
13452 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13453 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13454 {
13455 	USE_OPLINE
13456 	zval *op1, *op2, *result;
13457 
13458 	op1 = EX_VAR(opline->op1.var);
13459 	op2 = RT_CONSTANT(opline, opline->op2);
13460 	result = EX_VAR(opline->result.var);
13461 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
13462 	ZEND_VM_NEXT_OPCODE();
13463 }
13464 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13465 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13466 {
13467 	USE_OPLINE
13468 	zval *op1, *op2;
13469 	bool result;
13470 
13471 	op1 = EX_VAR(opline->op1.var);
13472 	op2 = RT_CONSTANT(opline, opline->op2);
13473 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13474 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13475 }
13476 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13477 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13478 {
13479 	USE_OPLINE
13480 	zval *op1, *op2;
13481 	bool result;
13482 
13483 	op1 = EX_VAR(opline->op1.var);
13484 	op2 = RT_CONSTANT(opline, opline->op2);
13485 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13486 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13487 }
13488 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13489 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13490 {
13491 	USE_OPLINE
13492 	zval *op1, *op2;
13493 	bool result;
13494 
13495 	op1 = EX_VAR(opline->op1.var);
13496 	op2 = RT_CONSTANT(opline, opline->op2);
13497 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13498 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13499 }
13500 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13501 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13502 {
13503 	USE_OPLINE
13504 	zval *op1, *op2;
13505 	bool result;
13506 
13507 	op1 = EX_VAR(opline->op1.var);
13508 	op2 = RT_CONSTANT(opline, opline->op2);
13509 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13510 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13511 }
13512 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13513 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13514 {
13515 	USE_OPLINE
13516 	zval *op1, *op2;
13517 	bool result;
13518 
13519 	op1 = EX_VAR(opline->op1.var);
13520 	op2 = RT_CONSTANT(opline, opline->op2);
13521 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13522 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13523 }
13524 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13525 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13526 {
13527 	USE_OPLINE
13528 	zval *op1, *op2;
13529 	bool result;
13530 
13531 	op1 = EX_VAR(opline->op1.var);
13532 	op2 = RT_CONSTANT(opline, opline->op2);
13533 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13534 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13535 }
13536 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13537 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13538 {
13539 	USE_OPLINE
13540 	zval *op1, *op2;
13541 	bool result;
13542 
13543 	op1 = EX_VAR(opline->op1.var);
13544 	op2 = RT_CONSTANT(opline, opline->op2);
13545 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13546 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13547 }
13548 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13549 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13550 {
13551 	USE_OPLINE
13552 	zval *op1, *op2;
13553 	bool result;
13554 
13555 	op1 = EX_VAR(opline->op1.var);
13556 	op2 = RT_CONSTANT(opline, opline->op2);
13557 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13558 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13559 }
13560 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13561 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13562 {
13563 	USE_OPLINE
13564 	zval *op1, *op2;
13565 	bool result;
13566 
13567 	op1 = EX_VAR(opline->op1.var);
13568 	op2 = RT_CONSTANT(opline, opline->op2);
13569 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13570 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13571 }
13572 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13573 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13574 {
13575 	USE_OPLINE
13576 	zval *op1, *op2;
13577 	bool result;
13578 
13579 	op1 = EX_VAR(opline->op1.var);
13580 	op2 = RT_CONSTANT(opline, opline->op2);
13581 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13582 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13583 }
13584 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13585 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13586 {
13587 	USE_OPLINE
13588 	zval *op1, *op2;
13589 	bool result;
13590 
13591 	op1 = EX_VAR(opline->op1.var);
13592 	op2 = RT_CONSTANT(opline, opline->op2);
13593 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13594 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13595 }
13596 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13597 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13598 {
13599 	USE_OPLINE
13600 	zval *op1, *op2;
13601 	bool result;
13602 
13603 	op1 = EX_VAR(opline->op1.var);
13604 	op2 = RT_CONSTANT(opline, opline->op2);
13605 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13606 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13607 }
13608 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13609 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13610 {
13611 	USE_OPLINE
13612 	zval *op1, *op2;
13613 	bool result;
13614 
13615 	op1 = EX_VAR(opline->op1.var);
13616 	op2 = RT_CONSTANT(opline, opline->op2);
13617 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13618 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13619 }
13620 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13621 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13622 {
13623 	USE_OPLINE
13624 	zval *op1, *op2;
13625 	bool result;
13626 
13627 	op1 = EX_VAR(opline->op1.var);
13628 	op2 = RT_CONSTANT(opline, opline->op2);
13629 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13630 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13631 }
13632 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13633 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13634 {
13635 	USE_OPLINE
13636 	zval *op1, *op2;
13637 	bool result;
13638 
13639 	op1 = EX_VAR(opline->op1.var);
13640 	op2 = RT_CONSTANT(opline, opline->op2);
13641 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13642 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13643 }
13644 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13645 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13646 {
13647 	USE_OPLINE
13648 	zval *op1, *op2;
13649 	bool result;
13650 
13651 	op1 = EX_VAR(opline->op1.var);
13652 	op2 = RT_CONSTANT(opline, opline->op2);
13653 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13654 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13655 }
13656 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13657 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13658 {
13659 	USE_OPLINE
13660 	zval *op1, *op2;
13661 	bool result;
13662 
13663 	op1 = EX_VAR(opline->op1.var);
13664 	op2 = RT_CONSTANT(opline, opline->op2);
13665 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13666 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13667 }
13668 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13669 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13670 {
13671 	USE_OPLINE
13672 	zval *op1, *op2;
13673 	bool result;
13674 
13675 	op1 = EX_VAR(opline->op1.var);
13676 	op2 = RT_CONSTANT(opline, opline->op2);
13677 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13678 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13679 }
13680 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13681 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13682 {
13683 	USE_OPLINE
13684 	zval *op1, *op2;
13685 	bool result;
13686 
13687 	op1 = EX_VAR(opline->op1.var);
13688 	op2 = RT_CONSTANT(opline, opline->op2);
13689 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13690 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13691 }
13692 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13693 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)
13694 {
13695 	USE_OPLINE
13696 	zval *op1, *op2;
13697 	bool result;
13698 
13699 	op1 = EX_VAR(opline->op1.var);
13700 	op2 = RT_CONSTANT(opline, opline->op2);
13701 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13702 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13703 }
13704 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13705 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)
13706 {
13707 	USE_OPLINE
13708 	zval *op1, *op2;
13709 	bool result;
13710 
13711 	op1 = EX_VAR(opline->op1.var);
13712 	op2 = RT_CONSTANT(opline, opline->op2);
13713 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13714 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13715 }
13716 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13717 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13718 {
13719 	USE_OPLINE
13720 	zval *op1, *op2;
13721 	bool result;
13722 
13723 	op1 = EX_VAR(opline->op1.var);
13724 	op2 = RT_CONSTANT(opline, opline->op2);
13725 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13726 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13727 }
13728 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13729 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)
13730 {
13731 	USE_OPLINE
13732 	zval *op1, *op2;
13733 	bool result;
13734 
13735 	op1 = EX_VAR(opline->op1.var);
13736 	op2 = RT_CONSTANT(opline, opline->op2);
13737 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13738 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13739 }
13740 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13741 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)
13742 {
13743 	USE_OPLINE
13744 	zval *op1, *op2;
13745 	bool result;
13746 
13747 	op1 = EX_VAR(opline->op1.var);
13748 	op2 = RT_CONSTANT(opline, opline->op2);
13749 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13750 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13751 }
13752 
ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13753 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13754 {
13755 	USE_OPLINE
13756 	zval *op1, *op2, *result;
13757 	double d1, d2;
13758 
13759 	op1 = EX_VAR(opline->op1.var);
13760 	op2 = EX_VAR(opline->op2.var);
13761 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13762 		/* pass */
13763 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13764 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13765 			result = EX_VAR(opline->result.var);
13766 			fast_long_add_function(result, op1, op2);
13767 			ZEND_VM_NEXT_OPCODE();
13768 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13769 			d1 = (double)Z_LVAL_P(op1);
13770 			d2 = Z_DVAL_P(op2);
13771 			goto add_double;
13772 		}
13773 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13774 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13775 			d1 = Z_DVAL_P(op1);
13776 			d2 = Z_DVAL_P(op2);
13777 add_double:
13778 			result = EX_VAR(opline->result.var);
13779 			ZVAL_DOUBLE(result, d1 + d2);
13780 			ZEND_VM_NEXT_OPCODE();
13781 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13782 			d1 = Z_DVAL_P(op1);
13783 			d2 = (double)Z_LVAL_P(op2);
13784 			goto add_double;
13785 		}
13786 	}
13787 
13788 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13789 }
13790 
ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13791 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13792 {
13793 	USE_OPLINE
13794 	zval *op1, *op2, *result;
13795 	double d1, d2;
13796 
13797 	op1 = EX_VAR(opline->op1.var);
13798 	op2 = EX_VAR(opline->op2.var);
13799 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13800 		/* pass */
13801 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13802 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13803 			result = EX_VAR(opline->result.var);
13804 			fast_long_sub_function(result, op1, op2);
13805 			ZEND_VM_NEXT_OPCODE();
13806 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13807 			d1 = (double)Z_LVAL_P(op1);
13808 			d2 = Z_DVAL_P(op2);
13809 			goto sub_double;
13810 		}
13811 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13812 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13813 			d1 = Z_DVAL_P(op1);
13814 			d2 = Z_DVAL_P(op2);
13815 sub_double:
13816 			result = EX_VAR(opline->result.var);
13817 			ZVAL_DOUBLE(result, d1 - d2);
13818 			ZEND_VM_NEXT_OPCODE();
13819 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13820 			d1 = Z_DVAL_P(op1);
13821 			d2 = (double)Z_LVAL_P(op2);
13822 			goto sub_double;
13823 		}
13824 	}
13825 
13826 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13827 }
13828 
ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13829 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13830 {
13831 	USE_OPLINE
13832 	zval *op1, *op2, *result;
13833 	double d1, d2;
13834 
13835 	op1 = EX_VAR(opline->op1.var);
13836 	op2 = EX_VAR(opline->op2.var);
13837 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13838 		/* pass */
13839 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13840 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13841 			zend_long overflow;
13842 
13843 			result = EX_VAR(opline->result.var);
13844 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
13845 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
13846 			ZEND_VM_NEXT_OPCODE();
13847 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13848 			d1 = (double)Z_LVAL_P(op1);
13849 			d2 = Z_DVAL_P(op2);
13850 			goto mul_double;
13851 		}
13852 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13853 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13854 			d1 = Z_DVAL_P(op1);
13855 			d2 = Z_DVAL_P(op2);
13856 mul_double:
13857 			result = EX_VAR(opline->result.var);
13858 			ZVAL_DOUBLE(result, d1 * d2);
13859 			ZEND_VM_NEXT_OPCODE();
13860 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13861 			d1 = Z_DVAL_P(op1);
13862 			d2 = (double)Z_LVAL_P(op2);
13863 			goto mul_double;
13864 		}
13865 	}
13866 
13867 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13868 }
13869 
ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13871 {
13872 	USE_OPLINE
13873 	zval *op1, *op2, *result;
13874 
13875 	op1 = EX_VAR(opline->op1.var);
13876 	op2 = EX_VAR(opline->op2.var);
13877 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13878 		/* pass */
13879 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13880 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13881 			result = EX_VAR(opline->result.var);
13882 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
13883 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
13884 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
13885 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
13886 				ZVAL_LONG(result, 0);
13887 			} else {
13888 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
13889 			}
13890 			ZEND_VM_NEXT_OPCODE();
13891 		}
13892 	}
13893 
13894 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13895 }
13896 
ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13897 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13898 {
13899 	USE_OPLINE
13900 	zval *op1, *op2;
13901 
13902 	op1 = EX_VAR(opline->op1.var);
13903 	op2 = EX_VAR(opline->op2.var);
13904 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13905 		/* pass */
13906 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13907 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
13908 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
13909 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
13910 		ZVAL_LONG(EX_VAR(opline->result.var),
13911 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
13912 		ZEND_VM_NEXT_OPCODE();
13913 	}
13914 
13915 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13916 }
13917 
ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13918 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13919 {
13920 	USE_OPLINE
13921 	zval *op1, *op2;
13922 
13923 	op1 = EX_VAR(opline->op1.var);
13924 	op2 = EX_VAR(opline->op2.var);
13925 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13926 		/* pass */
13927 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13928 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
13929 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
13930 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
13931 		ZEND_VM_NEXT_OPCODE();
13932 	}
13933 
13934 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13935 }
13936 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13937 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13938 {
13939 	USE_OPLINE
13940 	zval *op1, *op2;
13941 	double d1, d2;
13942 
13943 	op1 = EX_VAR(opline->op1.var);
13944 	op2 = EX_VAR(opline->op2.var);
13945 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13946 		/* pass */
13947 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13948 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13949 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13950 is_smaller_true:
13951 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
13952 			} else {
13953 is_smaller_false:
13954 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
13955 			}
13956 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13957 			d1 = (double)Z_LVAL_P(op1);
13958 			d2 = Z_DVAL_P(op2);
13959 			goto is_smaller_double;
13960 		}
13961 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13962 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13963 			d1 = Z_DVAL_P(op1);
13964 			d2 = Z_DVAL_P(op2);
13965 is_smaller_double:
13966 			if (d1 < d2) {
13967 				goto is_smaller_true;
13968 			} else {
13969 				goto is_smaller_false;
13970 			}
13971 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13972 			d1 = Z_DVAL_P(op1);
13973 			d2 = (double)Z_LVAL_P(op2);
13974 			goto is_smaller_double;
13975 		}
13976 	}
13977 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13978 }
13979 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13980 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13981 {
13982 	USE_OPLINE
13983 	zval *op1, *op2;
13984 	double d1, d2;
13985 
13986 	op1 = EX_VAR(opline->op1.var);
13987 	op2 = EX_VAR(opline->op2.var);
13988 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13989 		/* pass */
13990 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13991 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13992 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13993 is_smaller_true:
13994 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
13995 			} else {
13996 is_smaller_false:
13997 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
13998 			}
13999 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14000 			d1 = (double)Z_LVAL_P(op1);
14001 			d2 = Z_DVAL_P(op2);
14002 			goto is_smaller_double;
14003 		}
14004 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
14005 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14006 			d1 = Z_DVAL_P(op1);
14007 			d2 = Z_DVAL_P(op2);
14008 is_smaller_double:
14009 			if (d1 < d2) {
14010 				goto is_smaller_true;
14011 			} else {
14012 				goto is_smaller_false;
14013 			}
14014 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14015 			d1 = Z_DVAL_P(op1);
14016 			d2 = (double)Z_LVAL_P(op2);
14017 			goto is_smaller_double;
14018 		}
14019 	}
14020 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14021 }
14022 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14023 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14024 {
14025 	USE_OPLINE
14026 	zval *op1, *op2;
14027 	double d1, d2;
14028 
14029 	op1 = EX_VAR(opline->op1.var);
14030 	op2 = EX_VAR(opline->op2.var);
14031 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
14032 		/* pass */
14033 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
14034 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14035 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
14036 is_smaller_true:
14037 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
14038 			} else {
14039 is_smaller_false:
14040 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
14041 			}
14042 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14043 			d1 = (double)Z_LVAL_P(op1);
14044 			d2 = Z_DVAL_P(op2);
14045 			goto is_smaller_double;
14046 		}
14047 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
14048 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14049 			d1 = Z_DVAL_P(op1);
14050 			d2 = Z_DVAL_P(op2);
14051 is_smaller_double:
14052 			if (d1 < d2) {
14053 				goto is_smaller_true;
14054 			} else {
14055 				goto is_smaller_false;
14056 			}
14057 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14058 			d1 = Z_DVAL_P(op1);
14059 			d2 = (double)Z_LVAL_P(op2);
14060 			goto is_smaller_double;
14061 		}
14062 	}
14063 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14064 }
14065 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14066 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14067 {
14068 	USE_OPLINE
14069 	zval *op1, *op2;
14070 	double d1, d2;
14071 
14072 	op1 = EX_VAR(opline->op1.var);
14073 	op2 = EX_VAR(opline->op2.var);
14074 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
14075 		/* pass */
14076 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
14077 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14078 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
14079 is_smaller_or_equal_true:
14080 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
14081 				ZVAL_TRUE(EX_VAR(opline->result.var));
14082 				ZEND_VM_NEXT_OPCODE();
14083 			} else {
14084 is_smaller_or_equal_false:
14085 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
14086 				ZVAL_FALSE(EX_VAR(opline->result.var));
14087 				ZEND_VM_NEXT_OPCODE();
14088 			}
14089 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14090 			d1 = (double)Z_LVAL_P(op1);
14091 			d2 = Z_DVAL_P(op2);
14092 			goto is_smaller_or_equal_double;
14093 		}
14094 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
14095 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14096 			d1 = Z_DVAL_P(op1);
14097 			d2 = Z_DVAL_P(op2);
14098 is_smaller_or_equal_double:
14099 			if (d1 <= d2) {
14100 				goto is_smaller_or_equal_true;
14101 			} else {
14102 				goto is_smaller_or_equal_false;
14103 			}
14104 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14105 			d1 = Z_DVAL_P(op1);
14106 			d2 = (double)Z_LVAL_P(op2);
14107 			goto is_smaller_or_equal_double;
14108 		}
14109 	}
14110 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14111 }
14112 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14113 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14114 {
14115 	USE_OPLINE
14116 	zval *op1, *op2;
14117 	double d1, d2;
14118 
14119 	op1 = EX_VAR(opline->op1.var);
14120 	op2 = EX_VAR(opline->op2.var);
14121 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
14122 		/* pass */
14123 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
14124 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14125 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
14126 is_smaller_or_equal_true:
14127 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
14128 				ZVAL_TRUE(EX_VAR(opline->result.var));
14129 				ZEND_VM_NEXT_OPCODE();
14130 			} else {
14131 is_smaller_or_equal_false:
14132 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
14133 				ZVAL_FALSE(EX_VAR(opline->result.var));
14134 				ZEND_VM_NEXT_OPCODE();
14135 			}
14136 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14137 			d1 = (double)Z_LVAL_P(op1);
14138 			d2 = Z_DVAL_P(op2);
14139 			goto is_smaller_or_equal_double;
14140 		}
14141 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
14142 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14143 			d1 = Z_DVAL_P(op1);
14144 			d2 = Z_DVAL_P(op2);
14145 is_smaller_or_equal_double:
14146 			if (d1 <= d2) {
14147 				goto is_smaller_or_equal_true;
14148 			} else {
14149 				goto is_smaller_or_equal_false;
14150 			}
14151 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14152 			d1 = Z_DVAL_P(op1);
14153 			d2 = (double)Z_LVAL_P(op2);
14154 			goto is_smaller_or_equal_double;
14155 		}
14156 	}
14157 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14158 }
14159 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14160 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14161 {
14162 	USE_OPLINE
14163 	zval *op1, *op2;
14164 	double d1, d2;
14165 
14166 	op1 = EX_VAR(opline->op1.var);
14167 	op2 = EX_VAR(opline->op2.var);
14168 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
14169 		/* pass */
14170 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
14171 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14172 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
14173 is_smaller_or_equal_true:
14174 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
14175 				ZVAL_TRUE(EX_VAR(opline->result.var));
14176 				ZEND_VM_NEXT_OPCODE();
14177 			} else {
14178 is_smaller_or_equal_false:
14179 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
14180 				ZVAL_FALSE(EX_VAR(opline->result.var));
14181 				ZEND_VM_NEXT_OPCODE();
14182 			}
14183 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14184 			d1 = (double)Z_LVAL_P(op1);
14185 			d2 = Z_DVAL_P(op2);
14186 			goto is_smaller_or_equal_double;
14187 		}
14188 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
14189 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
14190 			d1 = Z_DVAL_P(op1);
14191 			d2 = Z_DVAL_P(op2);
14192 is_smaller_or_equal_double:
14193 			if (d1 <= d2) {
14194 				goto is_smaller_or_equal_true;
14195 			} else {
14196 				goto is_smaller_or_equal_false;
14197 			}
14198 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14199 			d1 = Z_DVAL_P(op1);
14200 			d2 = (double)Z_LVAL_P(op2);
14201 			goto is_smaller_or_equal_double;
14202 		}
14203 	}
14204 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14205 }
14206 
ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14207 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14208 {
14209 	USE_OPLINE
14210 	zval *op1, *op2;
14211 
14212 	op1 = EX_VAR(opline->op1.var);
14213 	op2 = EX_VAR(opline->op2.var);
14214 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
14215 		/* pass */
14216 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
14217 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14218 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
14219 		ZEND_VM_NEXT_OPCODE();
14220 	}
14221 
14222 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14223 }
14224 
ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14225 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14226 {
14227 	USE_OPLINE
14228 	zval *op1, *op2;
14229 
14230 	op1 = EX_VAR(opline->op1.var);
14231 	op2 = EX_VAR(opline->op2.var);
14232 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
14233 		/* pass */
14234 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
14235 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14236 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
14237 		ZEND_VM_NEXT_OPCODE();
14238 	}
14239 
14240 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14241 }
14242 
ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14243 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14244 {
14245 	USE_OPLINE
14246 	zval *op1, *op2;
14247 
14248 	op1 = EX_VAR(opline->op1.var);
14249 	op2 = EX_VAR(opline->op2.var);
14250 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
14251 		/* pass */
14252 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
14253 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
14254 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
14255 		ZEND_VM_NEXT_OPCODE();
14256 	}
14257 
14258 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14259 }
14260 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14261 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14262 {
14263 	USE_OPLINE
14264 	zval *op1, *op2, *result;
14265 
14266 	op1 = EX_VAR(opline->op1.var);
14267 	op2 = EX_VAR(opline->op2.var);
14268 	result = EX_VAR(opline->result.var);
14269 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
14270 	ZEND_VM_NEXT_OPCODE();
14271 }
14272 
ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14273 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14274 {
14275 	USE_OPLINE
14276 	zval *op1, *op2, *result;
14277 
14278 	op1 = EX_VAR(opline->op1.var);
14279 	op2 = EX_VAR(opline->op2.var);
14280 	result = EX_VAR(opline->result.var);
14281 	fast_long_add_function(result, op1, op2);
14282 	ZEND_VM_NEXT_OPCODE();
14283 }
14284 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14285 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14286 {
14287 	USE_OPLINE
14288 	zval *op1, *op2, *result;
14289 
14290 	op1 = EX_VAR(opline->op1.var);
14291 	op2 = EX_VAR(opline->op2.var);
14292 	result = EX_VAR(opline->result.var);
14293 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
14294 	ZEND_VM_NEXT_OPCODE();
14295 }
14296 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14297 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14298 {
14299 	USE_OPLINE
14300 	zval *op1, *op2, *result;
14301 
14302 	op1 = EX_VAR(opline->op1.var);
14303 	op2 = EX_VAR(opline->op2.var);
14304 	result = EX_VAR(opline->result.var);
14305 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
14306 	ZEND_VM_NEXT_OPCODE();
14307 }
14308 
ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14309 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14310 {
14311 	USE_OPLINE
14312 	zval *op1, *op2, *result;
14313 
14314 	op1 = EX_VAR(opline->op1.var);
14315 	op2 = EX_VAR(opline->op2.var);
14316 	result = EX_VAR(opline->result.var);
14317 	fast_long_sub_function(result, op1, op2);
14318 	ZEND_VM_NEXT_OPCODE();
14319 }
14320 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14321 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14322 {
14323 	USE_OPLINE
14324 	zval *op1, *op2, *result;
14325 
14326 	op1 = EX_VAR(opline->op1.var);
14327 	op2 = EX_VAR(opline->op2.var);
14328 	result = EX_VAR(opline->result.var);
14329 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
14330 	ZEND_VM_NEXT_OPCODE();
14331 }
14332 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14333 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14334 {
14335 	USE_OPLINE
14336 	zval *op1, *op2, *result;
14337 
14338 	op1 = EX_VAR(opline->op1.var);
14339 	op2 = EX_VAR(opline->op2.var);
14340 	result = EX_VAR(opline->result.var);
14341 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
14342 	ZEND_VM_NEXT_OPCODE();
14343 }
14344 
ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14345 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14346 {
14347 	USE_OPLINE
14348 	zval *op1, *op2, *result;
14349 	zend_long overflow;
14350 
14351 	op1 = EX_VAR(opline->op1.var);
14352 	op2 = EX_VAR(opline->op2.var);
14353 	result = EX_VAR(opline->result.var);
14354 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
14355 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
14356 	ZEND_VM_NEXT_OPCODE();
14357 }
14358 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14359 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14360 {
14361 	USE_OPLINE
14362 	zval *op1, *op2, *result;
14363 
14364 	op1 = EX_VAR(opline->op1.var);
14365 	op2 = EX_VAR(opline->op2.var);
14366 	result = EX_VAR(opline->result.var);
14367 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
14368 	ZEND_VM_NEXT_OPCODE();
14369 }
14370 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14371 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14372 {
14373 	USE_OPLINE
14374 	zval *op1, *op2;
14375 	bool result;
14376 
14377 	op1 = EX_VAR(opline->op1.var);
14378 	op2 = EX_VAR(opline->op2.var);
14379 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
14380 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14381 }
14382 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14383 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14384 {
14385 	USE_OPLINE
14386 	zval *op1, *op2;
14387 	bool result;
14388 
14389 	op1 = EX_VAR(opline->op1.var);
14390 	op2 = EX_VAR(opline->op2.var);
14391 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
14392 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14393 }
14394 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14395 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14396 {
14397 	USE_OPLINE
14398 	zval *op1, *op2;
14399 	bool result;
14400 
14401 	op1 = EX_VAR(opline->op1.var);
14402 	op2 = EX_VAR(opline->op2.var);
14403 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
14404 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14405 }
14406 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14408 {
14409 	USE_OPLINE
14410 	zval *op1, *op2;
14411 	bool result;
14412 
14413 	op1 = EX_VAR(opline->op1.var);
14414 	op2 = EX_VAR(opline->op2.var);
14415 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
14416 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14417 }
14418 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14419 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14420 {
14421 	USE_OPLINE
14422 	zval *op1, *op2;
14423 	bool result;
14424 
14425 	op1 = EX_VAR(opline->op1.var);
14426 	op2 = EX_VAR(opline->op2.var);
14427 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
14428 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14429 }
14430 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14431 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14432 {
14433 	USE_OPLINE
14434 	zval *op1, *op2;
14435 	bool result;
14436 
14437 	op1 = EX_VAR(opline->op1.var);
14438 	op2 = EX_VAR(opline->op2.var);
14439 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
14440 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14441 }
14442 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14443 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14444 {
14445 	USE_OPLINE
14446 	zval *op1, *op2;
14447 	bool result;
14448 
14449 	op1 = EX_VAR(opline->op1.var);
14450 	op2 = EX_VAR(opline->op2.var);
14451 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
14452 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14453 }
14454 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14455 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14456 {
14457 	USE_OPLINE
14458 	zval *op1, *op2;
14459 	bool result;
14460 
14461 	op1 = EX_VAR(opline->op1.var);
14462 	op2 = EX_VAR(opline->op2.var);
14463 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
14464 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14465 }
14466 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14467 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14468 {
14469 	USE_OPLINE
14470 	zval *op1, *op2;
14471 	bool result;
14472 
14473 	op1 = EX_VAR(opline->op1.var);
14474 	op2 = EX_VAR(opline->op2.var);
14475 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
14476 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14477 }
14478 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14479 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14480 {
14481 	USE_OPLINE
14482 	zval *op1, *op2;
14483 	bool result;
14484 
14485 	op1 = EX_VAR(opline->op1.var);
14486 	op2 = EX_VAR(opline->op2.var);
14487 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
14488 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14489 }
14490 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14491 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14492 {
14493 	USE_OPLINE
14494 	zval *op1, *op2;
14495 	bool result;
14496 
14497 	op1 = EX_VAR(opline->op1.var);
14498 	op2 = EX_VAR(opline->op2.var);
14499 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
14500 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14501 }
14502 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14503 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14504 {
14505 	USE_OPLINE
14506 	zval *op1, *op2;
14507 	bool result;
14508 
14509 	op1 = EX_VAR(opline->op1.var);
14510 	op2 = EX_VAR(opline->op2.var);
14511 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
14512 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14513 }
14514 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14515 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14516 {
14517 	USE_OPLINE
14518 	zval *op1, *op2;
14519 	bool result;
14520 
14521 	op1 = EX_VAR(opline->op1.var);
14522 	op2 = EX_VAR(opline->op2.var);
14523 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
14524 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14525 }
14526 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14527 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14528 {
14529 	USE_OPLINE
14530 	zval *op1, *op2;
14531 	bool result;
14532 
14533 	op1 = EX_VAR(opline->op1.var);
14534 	op2 = EX_VAR(opline->op2.var);
14535 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
14536 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14537 }
14538 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14539 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14540 {
14541 	USE_OPLINE
14542 	zval *op1, *op2;
14543 	bool result;
14544 
14545 	op1 = EX_VAR(opline->op1.var);
14546 	op2 = EX_VAR(opline->op2.var);
14547 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
14548 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14549 }
14550 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14551 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14552 {
14553 	USE_OPLINE
14554 	zval *op1, *op2;
14555 	bool result;
14556 
14557 	op1 = EX_VAR(opline->op1.var);
14558 	op2 = EX_VAR(opline->op2.var);
14559 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
14560 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14561 }
14562 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14563 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14564 {
14565 	USE_OPLINE
14566 	zval *op1, *op2;
14567 	bool result;
14568 
14569 	op1 = EX_VAR(opline->op1.var);
14570 	op2 = EX_VAR(opline->op2.var);
14571 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
14572 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14573 }
14574 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14575 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14576 {
14577 	USE_OPLINE
14578 	zval *op1, *op2;
14579 	bool result;
14580 
14581 	op1 = EX_VAR(opline->op1.var);
14582 	op2 = EX_VAR(opline->op2.var);
14583 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
14584 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14585 }
14586 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14587 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14588 {
14589 	USE_OPLINE
14590 	zval *op1, *op2;
14591 	bool result;
14592 
14593 	op1 = EX_VAR(opline->op1.var);
14594 	op2 = EX_VAR(opline->op2.var);
14595 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
14596 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14597 }
14598 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14599 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)
14600 {
14601 	USE_OPLINE
14602 	zval *op1, *op2;
14603 	bool result;
14604 
14605 	op1 = EX_VAR(opline->op1.var);
14606 	op2 = EX_VAR(opline->op2.var);
14607 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
14608 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14609 }
14610 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14611 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)
14612 {
14613 	USE_OPLINE
14614 	zval *op1, *op2;
14615 	bool result;
14616 
14617 	op1 = EX_VAR(opline->op1.var);
14618 	op2 = EX_VAR(opline->op2.var);
14619 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
14620 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14621 }
14622 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14623 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14624 {
14625 	USE_OPLINE
14626 	zval *op1, *op2;
14627 	bool result;
14628 
14629 	op1 = EX_VAR(opline->op1.var);
14630 	op2 = EX_VAR(opline->op2.var);
14631 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
14632 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14633 }
14634 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14635 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)
14636 {
14637 	USE_OPLINE
14638 	zval *op1, *op2;
14639 	bool result;
14640 
14641 	op1 = EX_VAR(opline->op1.var);
14642 	op2 = EX_VAR(opline->op2.var);
14643 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
14644 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14645 }
14646 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14647 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)
14648 {
14649 	USE_OPLINE
14650 	zval *op1, *op2;
14651 	bool result;
14652 
14653 	op1 = EX_VAR(opline->op1.var);
14654 	op2 = EX_VAR(opline->op2.var);
14655 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
14656 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14657 }
14658 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14659 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14660 {
14661 	USE_OPLINE
14662 	zval *container;
14663 
14664 	SAVE_OPLINE();
14665 	container = EX_VAR(opline->op1.var);
14666 	zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
14667 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
14668 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14669 }
14670 
ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14671 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14672 {
14673 	USE_OPLINE
14674 	zval *op;
14675 
14676 	SAVE_OPLINE();
14677 	op = EX_VAR(opline->op1.var);
14678 	zend_match_unhandled_error(op);
14679 	HANDLE_EXCEPTION();
14680 }
14681 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14683 {
14684 	USE_OPLINE
14685 	zval *container;
14686 
14687 	SAVE_OPLINE();
14688 	container = EX_VAR(opline->op1.var);
14689 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
14690 
14691 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14692 }
14693 
ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14694 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14695 {
14696 	USE_OPLINE
14697 	zval *val;
14698 
14699 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14700 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14701 		ZVAL_FALSE(EX_VAR(opline->result.var));
14702 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14703 		/* The result and op1 can be the same cv zval */
14704 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
14705 		ZVAL_TRUE(EX_VAR(opline->result.var));
14706 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
14707 			SAVE_OPLINE();
14708 			ZVAL_UNDEFINED_OP1();
14709 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14710 		}
14711 	} else {
14712 		SAVE_OPLINE();
14713 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
14714 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14715 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14716 	}
14717 	ZEND_VM_NEXT_OPCODE();
14718 }
14719 
ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14720 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14721 {
14722 	USE_OPLINE
14723 	zval *z;
14724 
14725 	SAVE_OPLINE();
14726 	z = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14727 
14728 	if (Z_TYPE_P(z) == IS_STRING) {
14729 		zend_string *str = Z_STR_P(z);
14730 
14731 		if (ZSTR_LEN(str) != 0) {
14732 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
14733 		}
14734 	} else {
14735 		zend_string *str = zval_get_string_func(z);
14736 
14737 		if (ZSTR_LEN(str) != 0) {
14738 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
14739 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
14740 			ZVAL_UNDEFINED_OP1();
14741 		}
14742 		zend_string_release_ex(str, 0);
14743 	}
14744 
14745 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14746 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14747 }
14748 
ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14749 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14750 {
14751 	USE_OPLINE
14752 	zval *val;
14753 	uint8_t op1_type;
14754 
14755 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14756 
14757 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14758 		ZEND_VM_NEXT_OPCODE();
14759 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14760 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14761 			SAVE_OPLINE();
14762 			ZVAL_UNDEFINED_OP1();
14763 			if (UNEXPECTED(EG(exception))) {
14764 				HANDLE_EXCEPTION();
14765 			}
14766 		}
14767 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14768 	}
14769 
14770 	SAVE_OPLINE();
14771 	op1_type = (IS_TMP_VAR|IS_VAR);
14772 	if (i_zend_is_true(val)) {
14773 		opline++;
14774 	} else {
14775 		opline = OP_JMP_ADDR(opline, opline->op2);
14776 	}
14777 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
14778 		zval_ptr_dtor_nogc(val);
14779 	}
14780 	ZEND_VM_JMP(opline);
14781 }
14782 
ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14783 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14784 {
14785 	USE_OPLINE
14786 	zval *val;
14787 	uint8_t op1_type;
14788 
14789 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14790 
14791 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14792 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14793 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14794 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14795 			SAVE_OPLINE();
14796 			ZVAL_UNDEFINED_OP1();
14797 			if (UNEXPECTED(EG(exception))) {
14798 				HANDLE_EXCEPTION();
14799 			}
14800 		}
14801 		ZEND_VM_NEXT_OPCODE();
14802 	}
14803 
14804 	SAVE_OPLINE();
14805 	op1_type = (IS_TMP_VAR|IS_VAR);
14806 	if (i_zend_is_true(val)) {
14807 		opline = OP_JMP_ADDR(opline, opline->op2);
14808 	} else {
14809 		opline++;
14810 	}
14811 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
14812 		zval_ptr_dtor_nogc(val);
14813 	}
14814 	ZEND_VM_JMP(opline);
14815 }
14816 
ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14817 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14818 {
14819 	USE_OPLINE
14820 	zval *val;
14821 	bool ret;
14822 
14823 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14824 
14825 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14826 		ZVAL_TRUE(EX_VAR(opline->result.var));
14827 		ZEND_VM_NEXT_OPCODE();
14828 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14829 		ZVAL_FALSE(EX_VAR(opline->result.var));
14830 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14831 			SAVE_OPLINE();
14832 			ZVAL_UNDEFINED_OP1();
14833 			if (UNEXPECTED(EG(exception))) {
14834 				HANDLE_EXCEPTION();
14835 			}
14836 		}
14837 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14838 	}
14839 
14840 	SAVE_OPLINE();
14841 	ret = i_zend_is_true(val);
14842 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14843 	if (ret) {
14844 		ZVAL_TRUE(EX_VAR(opline->result.var));
14845 		opline++;
14846 	} else {
14847 		ZVAL_FALSE(EX_VAR(opline->result.var));
14848 		opline = OP_JMP_ADDR(opline, opline->op2);
14849 	}
14850 	ZEND_VM_JMP(opline);
14851 }
14852 
ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14853 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14854 {
14855 	USE_OPLINE
14856 	zval *val;
14857 	bool ret;
14858 
14859 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14860 
14861 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14862 		ZVAL_TRUE(EX_VAR(opline->result.var));
14863 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14864 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14865 		ZVAL_FALSE(EX_VAR(opline->result.var));
14866 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14867 			SAVE_OPLINE();
14868 			ZVAL_UNDEFINED_OP1();
14869 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14870 		} else {
14871 			ZEND_VM_NEXT_OPCODE();
14872 		}
14873 	}
14874 
14875 	SAVE_OPLINE();
14876 	ret = i_zend_is_true(val);
14877 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14878 	if (ret) {
14879 		ZVAL_TRUE(EX_VAR(opline->result.var));
14880 		opline = OP_JMP_ADDR(opline, opline->op2);
14881 	} else {
14882 		ZVAL_FALSE(EX_VAR(opline->result.var));
14883 		opline++;
14884 	}
14885 	ZEND_VM_JMP(opline);
14886 }
14887 
ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14888 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14889 {
14890 	USE_OPLINE
14891 
14892 	SAVE_OPLINE();
14893 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14894 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14895 }
14896 
ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14897 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14898 {
14899 	zval *var;
14900 	USE_OPLINE
14901 
14902 	var = EX_VAR(opline->op1.var);
14903 	if (Z_TYPE_P(var) != IS_ARRAY) {
14904 		SAVE_OPLINE();
14905 		if (Z_FE_ITER_P(var) != (uint32_t)-1) {
14906 			zend_hash_iterator_del(Z_FE_ITER_P(var));
14907 		}
14908 		zval_ptr_dtor_nogc(var);
14909 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14910 	}
14911 
14912 	/* This is freeing an array. Use an inlined version of zval_ptr_dtor_nogc. */
14913 	/* PHP only needs to save the opline and check for an exception if the last reference to the array was garbage collected (destructors of elements in the array could throw an exception) */
14914 	if (Z_REFCOUNTED_P(var) && !Z_DELREF_P(var)) {
14915 		SAVE_OPLINE();
14916 		rc_dtor_func(Z_COUNTED_P(var));
14917 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14918 	}
14919 	ZEND_VM_NEXT_OPCODE();
14920 }
14921 
ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14922 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14923 {
14924 	USE_OPLINE
14925 	zval *value;
14926 
14927 	SAVE_OPLINE();
14928 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14929 
14930 	do {
14931 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
14932 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
14933 				value = Z_REFVAL_P(value);
14934 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
14935 					break;
14936 				}
14937 			}
14938 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
14939 				ZVAL_UNDEFINED_OP1();
14940 				if (UNEXPECTED(EG(exception) != NULL)) {
14941 					HANDLE_EXCEPTION();
14942 				}
14943 			}
14944 			zend_throw_error(NULL, "Can only throw objects");
14945 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14946 			HANDLE_EXCEPTION();
14947 		}
14948 	} while (0);
14949 
14950 	zend_exception_save();
14951 	Z_TRY_ADDREF_P(value);
14952 	zend_throw_exception_object(value);
14953 	zend_exception_restore();
14954 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14955 	HANDLE_EXCEPTION();
14956 }
14957 
ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14958 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14959 {
14960 	USE_OPLINE
14961 	zval *val;
14962 
14963 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14964 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14965 		ZVAL_TRUE(EX_VAR(opline->result.var));
14966 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14967 		/* The result and op1 can be the same cv zval */
14968 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
14969 		ZVAL_FALSE(EX_VAR(opline->result.var));
14970 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
14971 			SAVE_OPLINE();
14972 			ZVAL_UNDEFINED_OP1();
14973 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14974 		}
14975 	} else {
14976 		SAVE_OPLINE();
14977 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
14978 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14979 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14980 	}
14981 	ZEND_VM_NEXT_OPCODE();
14982 }
14983 
ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14984 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14985 {
14986 	USE_OPLINE
14987 	zval *obj;
14988 	zend_object *zobj;
14989 	zend_class_entry *ce, *scope;
14990 	zend_function *clone;
14991 	zend_object_clone_obj_t clone_call;
14992 
14993 	SAVE_OPLINE();
14994 	obj = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14995 
14996 	do {
14997 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
14998 		    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
14999 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
15000 				obj = Z_REFVAL_P(obj);
15001 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
15002 					break;
15003 				}
15004 			}
15005 			ZVAL_UNDEF(EX_VAR(opline->result.var));
15006 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
15007 				ZVAL_UNDEFINED_OP1();
15008 				if (UNEXPECTED(EG(exception) != NULL)) {
15009 					HANDLE_EXCEPTION();
15010 				}
15011 			}
15012 			zend_throw_error(NULL, "__clone method called on non-object");
15013 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15014 			HANDLE_EXCEPTION();
15015 		}
15016 	} while (0);
15017 
15018 	zobj = Z_OBJ_P(obj);
15019 	ce = zobj->ce;
15020 	clone = ce->clone;
15021 	clone_call = zobj->handlers->clone_obj;
15022 	if (UNEXPECTED(clone_call == NULL)) {
15023 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
15024 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15025 		ZVAL_UNDEF(EX_VAR(opline->result.var));
15026 		HANDLE_EXCEPTION();
15027 	}
15028 
15029 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
15030 		scope = EX(func)->op_array.scope;
15031 		if (clone->common.scope != scope) {
15032 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
15033 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
15034 				zend_wrong_clone_call(clone, scope);
15035 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15036 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15037 				HANDLE_EXCEPTION();
15038 			}
15039 		}
15040 	}
15041 
15042 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
15043 
15044 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15045 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15046 }
15047 
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15048 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15049 {
15050 	USE_OPLINE
15051 	zend_op_array *new_op_array;
15052 	zval *inc_filename;
15053 
15054 	SAVE_OPLINE();
15055 	inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15056 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
15057 	if (UNEXPECTED(EG(exception) != NULL)) {
15058 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15059 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
15060 			destroy_op_array(new_op_array);
15061 			efree_size(new_op_array, sizeof(zend_op_array));
15062 		}
15063 		UNDEF_RESULT();
15064 		HANDLE_EXCEPTION();
15065 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
15066 		if (RETURN_VALUE_USED(opline)) {
15067 			ZVAL_TRUE(EX_VAR(opline->result.var));
15068 		}
15069 	} else if (UNEXPECTED(new_op_array == NULL)) {
15070 		if (RETURN_VALUE_USED(opline)) {
15071 			ZVAL_FALSE(EX_VAR(opline->result.var));
15072 		}
15073 	} else if (new_op_array->last == 1
15074 			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
15075 			&& new_op_array->opcodes[0].op1_type == IS_CONST
15076 			&& EXPECTED(zend_execute_ex == execute_ex)) {
15077 		if (RETURN_VALUE_USED(opline)) {
15078 			const zend_op *op = new_op_array->opcodes;
15079 
15080 			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
15081 		}
15082 		zend_destroy_static_vars(new_op_array);
15083 		destroy_op_array(new_op_array);
15084 		efree_size(new_op_array, sizeof(zend_op_array));
15085 	} else {
15086 		zval *return_value = NULL;
15087 		zend_execute_data *call;
15088 		if (RETURN_VALUE_USED(opline)) {
15089 			return_value = EX_VAR(opline->result.var);
15090 		}
15091 
15092 		new_op_array->scope = EX(func)->op_array.scope;
15093 
15094 		call = zend_vm_stack_push_call_frame(
15095 			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
15096 			(zend_function*)new_op_array, 0,
15097 			Z_PTR(EX(This)));
15098 
15099 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
15100 			call->symbol_table = EX(symbol_table);
15101 		} else {
15102 			call->symbol_table = zend_rebuild_symbol_table();
15103 		}
15104 
15105 		call->prev_execute_data = execute_data;
15106 		i_init_code_execute_data(call, new_op_array, return_value);
15107 
15108 		if (EXPECTED(zend_execute_ex == execute_ex)) {
15109 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15110 			ZEND_VM_ENTER();
15111 		} else {
15112 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
15113 			zend_execute_ex(call);
15114 			zend_vm_stack_free_call_frame(call);
15115 		}
15116 
15117 		zend_destroy_static_vars(new_op_array);
15118 		destroy_op_array(new_op_array);
15119 		efree_size(new_op_array, sizeof(zend_op_array));
15120 		if (UNEXPECTED(EG(exception) != NULL)) {
15121 			zend_rethrow_exception(execute_data);
15122 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15123 			UNDEF_RESULT();
15124 			HANDLE_EXCEPTION();
15125 		}
15126 	}
15127 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15128 	ZEND_VM_NEXT_OPCODE();
15129 }
15130 
ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15131 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15132 {
15133 	USE_OPLINE
15134 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
15135 	zval *val;
15136 
15137 	SAVE_OPLINE();
15138 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15139 
15140 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
15141 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
15142 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15143 		UNDEF_RESULT();
15144 		HANDLE_EXCEPTION();
15145 	}
15146 
15147 yield_from_try_again:
15148 	if (Z_TYPE_P(val) == IS_ARRAY) {
15149 		ZVAL_COPY_VALUE(&generator->values, val);
15150 		if (Z_OPT_REFCOUNTED_P(val)) {
15151 			Z_ADDREF_P(val);
15152 		}
15153 		Z_FE_POS(generator->values) = 0;
15154 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15155 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
15156 		zend_class_entry *ce = Z_OBJCE_P(val);
15157 		if (ce == zend_ce_generator) {
15158 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
15159 
15160 			Z_ADDREF_P(val);
15161 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15162 
15163 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
15164 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
15165 				zval_ptr_dtor(val);
15166 				UNDEF_RESULT();
15167 				HANDLE_EXCEPTION();
15168 			} else if (Z_ISUNDEF(new_gen->retval)) {
15169 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
15170 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
15171 					zval_ptr_dtor(val);
15172 					UNDEF_RESULT();
15173 					HANDLE_EXCEPTION();
15174 				} else {
15175 					zend_generator_yield_from(generator, new_gen);
15176 				}
15177 			} else {
15178 				if (RETURN_VALUE_USED(opline)) {
15179 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
15180 				}
15181 				ZEND_VM_NEXT_OPCODE();
15182 			}
15183 		} else {
15184 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
15185 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15186 
15187 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
15188 				if (!EG(exception)) {
15189 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
15190 				}
15191 				UNDEF_RESULT();
15192 				HANDLE_EXCEPTION();
15193 			}
15194 
15195 			iter->index = 0;
15196 			if (iter->funcs->rewind) {
15197 				iter->funcs->rewind(iter);
15198 				if (UNEXPECTED(EG(exception) != NULL)) {
15199 					OBJ_RELEASE(&iter->std);
15200 					UNDEF_RESULT();
15201 					HANDLE_EXCEPTION();
15202 				}
15203 			}
15204 
15205 			ZVAL_OBJ(&generator->values, &iter->std);
15206 		}
15207 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
15208 		val = Z_REFVAL_P(val);
15209 		goto yield_from_try_again;
15210 	} else {
15211 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
15212 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15213 		UNDEF_RESULT();
15214 		HANDLE_EXCEPTION();
15215 	}
15216 
15217 	/* This is the default return value
15218 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
15219 	if (RETURN_VALUE_USED(opline)) {
15220 		ZVAL_NULL(EX_VAR(opline->result.var));
15221 	}
15222 
15223 	/* This generator has no send target (though the generator we delegate to might have one) */
15224 	generator->send_target = NULL;
15225 
15226 	/* We increment to the next op, so we are at the correct position when the
15227 	 * generator is resumed. */
15228 	ZEND_VM_INC_OPCODE();
15229 
15230 	/* The GOTO VM uses a local opline variable. We need to set the opline
15231 	 * variable in execute_data so we don't resume at an old position. */
15232 	SAVE_OPLINE();
15233 
15234 	ZEND_VM_RETURN();
15235 }
15236 
ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15237 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15238 {
15239 	USE_OPLINE
15240 	zval *value;
15241 
15242 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15243 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
15244 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
15245 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15246 			zval_ptr_dtor_str(value);
15247 		}
15248 		ZEND_VM_NEXT_OPCODE();
15249 	} else {
15250 		bool strict;
15251 
15252 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
15253 			value = Z_REFVAL_P(value);
15254 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
15255 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
15256 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15257 				ZEND_VM_NEXT_OPCODE();
15258 			}
15259 		}
15260 
15261 		SAVE_OPLINE();
15262 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
15263 			value = ZVAL_UNDEFINED_OP1();
15264 		}
15265 		strict = EX_USES_STRICT_TYPES();
15266 		do {
15267 			if (EXPECTED(!strict)) {
15268 				zend_string *str;
15269 				zval tmp;
15270 
15271 				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
15272 					zend_error(E_DEPRECATED,
15273 						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
15274 					ZVAL_LONG(EX_VAR(opline->result.var), 0);
15275 					if (UNEXPECTED(EG(exception))) {
15276 						HANDLE_EXCEPTION();
15277 					}
15278 					break;
15279 				}
15280 
15281 				ZVAL_COPY(&tmp, value);
15282 				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
15283 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
15284 					zval_ptr_dtor(&tmp);
15285 					break;
15286 				}
15287 				zval_ptr_dtor(&tmp);
15288 			}
15289 			if (!EG(exception)) {
15290 				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
15291 			}
15292 			ZVAL_UNDEF(EX_VAR(opline->result.var));
15293 		} while (0);
15294 	}
15295 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15296 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15297 }
15298 
ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15299 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15300 {
15301 	USE_OPLINE
15302 	zval *value;
15303 	int result = 0;
15304 
15305 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15306 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
15307 type_check_resource:
15308 		if (opline->extended_value != MAY_BE_RESOURCE
15309 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
15310 			result = 1;
15311 		}
15312 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
15313 		value = Z_REFVAL_P(value);
15314 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
15315 			goto type_check_resource;
15316 		}
15317 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
15318 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
15319 		SAVE_OPLINE();
15320 		ZVAL_UNDEFINED_OP1();
15321 		if (UNEXPECTED(EG(exception))) {
15322 			ZVAL_UNDEF(EX_VAR(opline->result.var));
15323 			HANDLE_EXCEPTION();
15324 		}
15325 	}
15326 	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15327 		SAVE_OPLINE();
15328 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15329 		ZEND_VM_SMART_BRANCH(result, 1);
15330 	} else {
15331 		ZEND_VM_SMART_BRANCH(result, 0);
15332 	}
15333 }
15334 
ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15335 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15336 {
15337 	uint32_t fetch_type;
15338 	zend_class_entry *called_scope, *scope;
15339 	USE_OPLINE
15340 
15341 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
15342 		SAVE_OPLINE();
15343 		zval *op = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15344 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
15345 			ZVAL_DEREF(op);
15346 			if (Z_TYPE_P(op) != IS_OBJECT) {
15347 				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
15348 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15349 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15350 				HANDLE_EXCEPTION();
15351 			}
15352 		}
15353 
15354 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
15355 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15356 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15357 	}
15358 
15359 	fetch_type = opline->op1.num;
15360 	scope = EX(func)->op_array.scope;
15361 	if (UNEXPECTED(scope == NULL)) {
15362 		SAVE_OPLINE();
15363 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
15364 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
15365 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
15366 		ZVAL_UNDEF(EX_VAR(opline->result.var));
15367 		HANDLE_EXCEPTION();
15368 	}
15369 
15370 	switch (fetch_type) {
15371 		case ZEND_FETCH_CLASS_SELF:
15372 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
15373 			break;
15374 		case ZEND_FETCH_CLASS_PARENT:
15375 			if (UNEXPECTED(scope->parent == NULL)) {
15376 				SAVE_OPLINE();
15377 				zend_throw_error(NULL,
15378 					"Cannot use \"parent\" when current class scope has no parent");
15379 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15380 				HANDLE_EXCEPTION();
15381 			}
15382 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
15383 			break;
15384 		case ZEND_FETCH_CLASS_STATIC:
15385 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
15386 				called_scope = Z_OBJCE(EX(This));
15387 			} else {
15388 				called_scope = Z_CE(EX(This));
15389 			}
15390 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
15391 			break;
15392 		EMPTY_SWITCH_DEFAULT_CASE()
15393 	}
15394 	ZEND_VM_NEXT_OPCODE();
15395 }
15396 
ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15397 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15398 {
15399 	USE_OPLINE
15400 	zval *op1, *op2;
15401 
15402 	SAVE_OPLINE();
15403 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15404 	op2 = RT_CONSTANT(opline, opline->op2);
15405 	div_function(EX_VAR(opline->result.var), op1, op2);
15406 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15407 
15408 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15409 }
15410 
ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15412 {
15413 	USE_OPLINE
15414 	zval *op1, *op2;
15415 
15416 	SAVE_OPLINE();
15417 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15418 	op2 = RT_CONSTANT(opline, opline->op2);
15419 	pow_function(EX_VAR(opline->result.var), op1, op2);
15420 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15421 
15422 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15423 }
15424 
ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15425 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15426 {
15427 	USE_OPLINE
15428 	zval *op1, *op2;
15429 
15430 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15431 	op2 = RT_CONSTANT(opline, opline->op2);
15432 
15433 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
15434 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
15435 		zend_string *op1_str = Z_STR_P(op1);
15436 		zend_string *op2_str = Z_STR_P(op2);
15437 		zend_string *str;
15438 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
15439 
15440 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
15441 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
15442 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
15443 			} else {
15444 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
15445 			}
15446 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15447 				zend_string_release_ex(op1_str, 0);
15448 			}
15449 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
15450 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
15451 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
15452 			} else {
15453 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
15454 			}
15455 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15456 				zend_string_release_ex(op2_str, 0);
15457 			}
15458 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
15459 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
15460 			size_t len = ZSTR_LEN(op1_str);
15461 
15462 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
15463 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
15464 			}
15465 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
15466 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15467 			GC_ADD_FLAGS(str, flags);
15468 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15469 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15470 				zend_string_release_ex(op2_str, 0);
15471 			}
15472 		} else {
15473 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
15474 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
15475 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15476 			GC_ADD_FLAGS(str, flags);
15477 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15478 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15479 				zend_string_release_ex(op1_str, 0);
15480 			}
15481 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15482 				zend_string_release_ex(op2_str, 0);
15483 			}
15484 		}
15485 		ZEND_VM_NEXT_OPCODE();
15486 	} else {
15487 		SAVE_OPLINE();
15488 
15489 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
15490 			op1 = ZVAL_UNDEFINED_OP1();
15491 		}
15492 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
15493 			op2 = ZVAL_UNDEFINED_OP2();
15494 		}
15495 		concat_function(EX_VAR(opline->result.var), op1, op2);
15496 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15497 
15498 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15499 	}
15500 }
15501 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15502 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15503 {
15504 	USE_OPLINE
15505 	zval *op1, *op2;
15506 	double d1, d2;
15507 
15508 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15509 	op2 = RT_CONSTANT(opline, opline->op2);
15510 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15511 		/* pass */
15512 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15513 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15514 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15515 is_equal_true:
15516 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
15517 			} else {
15518 is_equal_false:
15519 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
15520 			}
15521 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15522 			d1 = (double)Z_LVAL_P(op1);
15523 			d2 = Z_DVAL_P(op2);
15524 			goto is_equal_double;
15525 		}
15526 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15527 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15528 			d1 = Z_DVAL_P(op1);
15529 			d2 = Z_DVAL_P(op2);
15530 is_equal_double:
15531 			if (d1 == d2) {
15532 				goto is_equal_true;
15533 			} else {
15534 				goto is_equal_false;
15535 			}
15536 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15537 			d1 = Z_DVAL_P(op1);
15538 			d2 = (double)Z_LVAL_P(op2);
15539 			goto is_equal_double;
15540 		}
15541 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15542 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15543 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15544 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15545 				zval_ptr_dtor_str(op1);
15546 			}
15547 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15548 				zval_ptr_dtor_str(op2);
15549 			}
15550 			if (result) {
15551 				goto is_equal_true;
15552 			} else {
15553 				goto is_equal_false;
15554 			}
15555 		}
15556 	}
15557 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15558 }
15559 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15560 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15561 {
15562 	USE_OPLINE
15563 	zval *op1, *op2;
15564 	double d1, d2;
15565 
15566 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15567 	op2 = RT_CONSTANT(opline, opline->op2);
15568 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15569 		/* pass */
15570 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15571 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15572 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15573 is_equal_true:
15574 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
15575 			} else {
15576 is_equal_false:
15577 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
15578 			}
15579 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15580 			d1 = (double)Z_LVAL_P(op1);
15581 			d2 = Z_DVAL_P(op2);
15582 			goto is_equal_double;
15583 		}
15584 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15585 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15586 			d1 = Z_DVAL_P(op1);
15587 			d2 = Z_DVAL_P(op2);
15588 is_equal_double:
15589 			if (d1 == d2) {
15590 				goto is_equal_true;
15591 			} else {
15592 				goto is_equal_false;
15593 			}
15594 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15595 			d1 = Z_DVAL_P(op1);
15596 			d2 = (double)Z_LVAL_P(op2);
15597 			goto is_equal_double;
15598 		}
15599 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15600 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15601 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15602 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15603 				zval_ptr_dtor_str(op1);
15604 			}
15605 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15606 				zval_ptr_dtor_str(op2);
15607 			}
15608 			if (result) {
15609 				goto is_equal_true;
15610 			} else {
15611 				goto is_equal_false;
15612 			}
15613 		}
15614 	}
15615 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15616 }
15617 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15618 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15619 {
15620 	USE_OPLINE
15621 	zval *op1, *op2;
15622 	double d1, d2;
15623 
15624 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15625 	op2 = RT_CONSTANT(opline, opline->op2);
15626 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15627 		/* pass */
15628 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15629 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15630 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15631 is_equal_true:
15632 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
15633 			} else {
15634 is_equal_false:
15635 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
15636 			}
15637 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15638 			d1 = (double)Z_LVAL_P(op1);
15639 			d2 = Z_DVAL_P(op2);
15640 			goto is_equal_double;
15641 		}
15642 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15643 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15644 			d1 = Z_DVAL_P(op1);
15645 			d2 = Z_DVAL_P(op2);
15646 is_equal_double:
15647 			if (d1 == d2) {
15648 				goto is_equal_true;
15649 			} else {
15650 				goto is_equal_false;
15651 			}
15652 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15653 			d1 = Z_DVAL_P(op1);
15654 			d2 = (double)Z_LVAL_P(op2);
15655 			goto is_equal_double;
15656 		}
15657 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15658 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15659 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15660 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15661 				zval_ptr_dtor_str(op1);
15662 			}
15663 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15664 				zval_ptr_dtor_str(op2);
15665 			}
15666 			if (result) {
15667 				goto is_equal_true;
15668 			} else {
15669 				goto is_equal_false;
15670 			}
15671 		}
15672 	}
15673 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15674 }
15675 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15676 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15677 {
15678 	USE_OPLINE
15679 	zval *op1, *op2;
15680 	double d1, d2;
15681 
15682 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15683 	op2 = RT_CONSTANT(opline, opline->op2);
15684 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15685 		/* pass */
15686 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15687 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15688 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15689 is_not_equal_true:
15690 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
15691 			} else {
15692 is_not_equal_false:
15693 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
15694 			}
15695 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15696 			d1 = (double)Z_LVAL_P(op1);
15697 			d2 = Z_DVAL_P(op2);
15698 			goto is_not_equal_double;
15699 		}
15700 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15701 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15702 			d1 = Z_DVAL_P(op1);
15703 			d2 = Z_DVAL_P(op2);
15704 is_not_equal_double:
15705 			if (d1 != d2) {
15706 				goto is_not_equal_true;
15707 			} else {
15708 				goto is_not_equal_false;
15709 			}
15710 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15711 			d1 = Z_DVAL_P(op1);
15712 			d2 = (double)Z_LVAL_P(op2);
15713 			goto is_not_equal_double;
15714 		}
15715 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15716 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15717 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15718 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15719 				zval_ptr_dtor_str(op1);
15720 			}
15721 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15722 				zval_ptr_dtor_str(op2);
15723 			}
15724 			if (!result) {
15725 				goto is_not_equal_true;
15726 			} else {
15727 				goto is_not_equal_false;
15728 			}
15729 		}
15730 	}
15731 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15732 }
15733 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15734 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15735 {
15736 	USE_OPLINE
15737 	zval *op1, *op2;
15738 	double d1, d2;
15739 
15740 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15741 	op2 = RT_CONSTANT(opline, opline->op2);
15742 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15743 		/* pass */
15744 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15745 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15746 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15747 is_not_equal_true:
15748 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
15749 			} else {
15750 is_not_equal_false:
15751 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
15752 			}
15753 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15754 			d1 = (double)Z_LVAL_P(op1);
15755 			d2 = Z_DVAL_P(op2);
15756 			goto is_not_equal_double;
15757 		}
15758 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15759 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15760 			d1 = Z_DVAL_P(op1);
15761 			d2 = Z_DVAL_P(op2);
15762 is_not_equal_double:
15763 			if (d1 != d2) {
15764 				goto is_not_equal_true;
15765 			} else {
15766 				goto is_not_equal_false;
15767 			}
15768 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15769 			d1 = Z_DVAL_P(op1);
15770 			d2 = (double)Z_LVAL_P(op2);
15771 			goto is_not_equal_double;
15772 		}
15773 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15774 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15775 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15776 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15777 				zval_ptr_dtor_str(op1);
15778 			}
15779 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15780 				zval_ptr_dtor_str(op2);
15781 			}
15782 			if (!result) {
15783 				goto is_not_equal_true;
15784 			} else {
15785 				goto is_not_equal_false;
15786 			}
15787 		}
15788 	}
15789 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15790 }
15791 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15793 {
15794 	USE_OPLINE
15795 	zval *op1, *op2;
15796 	double d1, d2;
15797 
15798 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15799 	op2 = RT_CONSTANT(opline, opline->op2);
15800 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15801 		/* pass */
15802 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15803 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15804 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15805 is_not_equal_true:
15806 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
15807 			} else {
15808 is_not_equal_false:
15809 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
15810 			}
15811 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15812 			d1 = (double)Z_LVAL_P(op1);
15813 			d2 = Z_DVAL_P(op2);
15814 			goto is_not_equal_double;
15815 		}
15816 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15817 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15818 			d1 = Z_DVAL_P(op1);
15819 			d2 = Z_DVAL_P(op2);
15820 is_not_equal_double:
15821 			if (d1 != d2) {
15822 				goto is_not_equal_true;
15823 			} else {
15824 				goto is_not_equal_false;
15825 			}
15826 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15827 			d1 = Z_DVAL_P(op1);
15828 			d2 = (double)Z_LVAL_P(op2);
15829 			goto is_not_equal_double;
15830 		}
15831 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15832 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15833 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15834 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15835 				zval_ptr_dtor_str(op1);
15836 			}
15837 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15838 				zval_ptr_dtor_str(op2);
15839 			}
15840 			if (!result) {
15841 				goto is_not_equal_true;
15842 			} else {
15843 				goto is_not_equal_false;
15844 			}
15845 		}
15846 	}
15847 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15848 }
15849 
ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15851 {
15852 	USE_OPLINE
15853 	zval *op1, *op2;
15854 
15855 	SAVE_OPLINE();
15856 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15857 	op2 = RT_CONSTANT(opline, opline->op2);
15858 	compare_function(EX_VAR(opline->result.var), op1, op2);
15859 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15860 
15861 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15862 }
15863 
ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15865 {
15866 	USE_OPLINE
15867 	zval *op1, *op2;
15868 
15869 	SAVE_OPLINE();
15870 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15871 	op2 = RT_CONSTANT(opline, opline->op2);
15872 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
15873 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15874 
15875 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15876 }
15877 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15878 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15879 {
15880 	USE_OPLINE
15881 	zval *container, *dim, *value;
15882 
15883 	SAVE_OPLINE();
15884 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15885 	dim = RT_CONSTANT(opline, opline->op2);
15886 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15887 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15888 fetch_dim_r_array:
15889 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
15890 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
15891 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
15892 			container = Z_REFVAL_P(container);
15893 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15894 				goto fetch_dim_r_array;
15895 			} else {
15896 				goto fetch_dim_r_slow;
15897 			}
15898 		} else {
15899 fetch_dim_r_slow:
15900 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
15901 				dim++;
15902 			}
15903 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
15904 		}
15905 	} else {
15906 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
15907 	}
15908 
15909 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15910 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15911 }
15912 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15913 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15914 {
15915 	USE_OPLINE
15916 	zval *container;
15917 
15918 	SAVE_OPLINE();
15919 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15920 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
15921 
15922 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15923 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15924 }
15925 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15926 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15927 {
15928 	USE_OPLINE
15929 	zval *container;
15930 	void **cache_slot = NULL;
15931 
15932 	SAVE_OPLINE();
15933 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15934 
15935 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15936 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15937 		do {
15938 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15939 				container = Z_REFVAL_P(container);
15940 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
15941 					break;
15942 				}
15943 			}
15944 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15945 				ZVAL_UNDEFINED_OP1();
15946 			}
15947 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
15948 			ZVAL_NULL(EX_VAR(opline->result.var));
15949 			goto fetch_obj_r_finish;
15950 		} while (0);
15951 	}
15952 
15953 	/* here we are sure we are dealing with an object */
15954 	do {
15955 		zend_object *zobj = Z_OBJ_P(container);
15956 		zend_string *name, *tmp_name;
15957 		zval *retval;
15958 
15959 		if (IS_CONST == IS_CONST) {
15960 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
15961 
15962 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
15963 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
15964 
15965 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
15966 					retval = OBJ_PROP(zobj, prop_offset);
15967 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
15968 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15969 							goto fetch_obj_r_copy;
15970 						} else {
15971 fetch_obj_r_fast_copy:
15972 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15973 							ZEND_VM_NEXT_OPCODE();
15974 						}
15975 					}
15976 				} else if (EXPECTED(zobj->properties != NULL)) {
15977 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15978 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
15979 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
15980 
15981 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
15982 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
15983 
15984 							if (EXPECTED(p->key == name) ||
15985 							    (EXPECTED(p->h == ZSTR_H(name)) &&
15986 							     EXPECTED(p->key != NULL) &&
15987 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
15988 								retval = &p->val;
15989 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15990 									goto fetch_obj_r_copy;
15991 								} else {
15992 									goto fetch_obj_r_fast_copy;
15993 								}
15994 							}
15995 						}
15996 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
15997 					}
15998 					retval = zend_hash_find_known_hash(zobj->properties, name);
15999 					if (EXPECTED(retval)) {
16000 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
16001 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
16002 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16003 							goto fetch_obj_r_copy;
16004 						} else {
16005 							goto fetch_obj_r_fast_copy;
16006 						}
16007 					}
16008 				}
16009 			}
16010 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
16011 		} else {
16012 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
16013 			if (UNEXPECTED(!name)) {
16014 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16015 				break;
16016 			}
16017 		}
16018 
16019 #if ZEND_DEBUG
16020 		/* For non-standard object handlers, verify a declared property type in debug builds.
16021 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
16022 		zend_property_info *prop_info = NULL;
16023 		if (zobj->handlers->read_property != zend_std_read_property) {
16024 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
16025 		}
16026 #endif
16027 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
16028 #if ZEND_DEBUG
16029 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
16030 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
16031 			ZVAL_OPT_DEREF(retval);
16032 			zend_verify_property_type(prop_info, retval, /* strict */ true);
16033 		}
16034 #endif
16035 
16036 		if (IS_CONST != IS_CONST) {
16037 			zend_tmp_string_release(tmp_name);
16038 		}
16039 
16040 		if (retval != EX_VAR(opline->result.var)) {
16041 fetch_obj_r_copy:
16042 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16043 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
16044 			zend_unwrap_reference(retval);
16045 		}
16046 	} while (0);
16047 
16048 fetch_obj_r_finish:
16049 
16050 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16051 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16052 }
16053 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16054 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16055 {
16056 	USE_OPLINE
16057 	zval *container;
16058 	void **cache_slot = NULL;
16059 
16060 	SAVE_OPLINE();
16061 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16062 
16063 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
16064 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
16065 		do {
16066 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
16067 				container = Z_REFVAL_P(container);
16068 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
16069 					break;
16070 				}
16071 			}
16072 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
16073 				ZVAL_UNDEFINED_OP2();
16074 			}
16075 			ZVAL_NULL(EX_VAR(opline->result.var));
16076 			goto fetch_obj_is_finish;
16077 		} while (0);
16078 	}
16079 
16080 	/* here we are sure we are dealing with an object */
16081 	do {
16082 		zend_object *zobj = Z_OBJ_P(container);
16083 		zend_string *name, *tmp_name;
16084 		zval *retval;
16085 
16086 		if (IS_CONST == IS_CONST) {
16087 			cache_slot = CACHE_ADDR(opline->extended_value);
16088 
16089 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
16090 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
16091 
16092 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
16093 					retval = OBJ_PROP(zobj, prop_offset);
16094 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
16095 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16096 							goto fetch_obj_is_copy;
16097 						} else {
16098 fetch_obj_is_fast_copy:
16099 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16100 							ZEND_VM_NEXT_OPCODE();
16101 						}
16102 					}
16103 				} else if (EXPECTED(zobj->properties != NULL)) {
16104 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
16105 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
16106 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
16107 
16108 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
16109 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
16110 
16111 							if (EXPECTED(p->key == name) ||
16112 							    (EXPECTED(p->h == ZSTR_H(name)) &&
16113 							     EXPECTED(p->key != NULL) &&
16114 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
16115 								retval = &p->val;
16116 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16117 									goto fetch_obj_is_copy;
16118 								} else {
16119 									goto fetch_obj_is_fast_copy;
16120 								}
16121 							}
16122 						}
16123 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
16124 					}
16125 					retval = zend_hash_find_known_hash(zobj->properties, name);
16126 					if (EXPECTED(retval)) {
16127 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
16128 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
16129 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16130 							goto fetch_obj_is_copy;
16131 						} else {
16132 							goto fetch_obj_is_fast_copy;
16133 						}
16134 					}
16135 				}
16136 			}
16137 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
16138 		} else {
16139 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
16140 			if (UNEXPECTED(!name)) {
16141 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16142 				break;
16143 			}
16144 		}
16145 
16146 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
16147 
16148 		if (IS_CONST != IS_CONST) {
16149 			zend_tmp_string_release(tmp_name);
16150 		}
16151 
16152 		if (retval != EX_VAR(opline->result.var)) {
16153 fetch_obj_is_copy:
16154 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16155 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
16156 			zend_unwrap_reference(retval);
16157 		}
16158 	} while (0);
16159 
16160 fetch_obj_is_finish:
16161 
16162 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16163 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16164 }
16165 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16167 {
16168 	USE_OPLINE
16169 	zval *op1, *op2;
16170 	zend_string *op1_str, *op2_str, *str;
16171 
16172 
16173 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16174 	op2 = RT_CONSTANT(opline, opline->op2);
16175 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
16176 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
16177 		zend_string *op1_str = Z_STR_P(op1);
16178 		zend_string *op2_str = Z_STR_P(op2);
16179 		zend_string *str;
16180 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
16181 
16182 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16183 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
16184 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
16185 			} else {
16186 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16187 			}
16188 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16189 				zend_string_release_ex(op1_str, 0);
16190 			}
16191 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16192 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16193 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
16194 			} else {
16195 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16196 			}
16197 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
16198 				zend_string_release_ex(op2_str, 0);
16199 			}
16200 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
16201 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
16202 			size_t len = ZSTR_LEN(op1_str);
16203 
16204 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
16205 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16206 			GC_ADD_FLAGS(str, flags);
16207 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16208 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
16209 				zend_string_release_ex(op2_str, 0);
16210 			}
16211 		} else {
16212 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16213 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16214 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16215 			GC_ADD_FLAGS(str, flags);
16216 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16217 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16218 				zend_string_release_ex(op1_str, 0);
16219 			}
16220 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
16221 				zend_string_release_ex(op2_str, 0);
16222 			}
16223 		}
16224 		ZEND_VM_NEXT_OPCODE();
16225 	}
16226 
16227 	SAVE_OPLINE();
16228 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16229 		op1_str = Z_STR_P(op1);
16230 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16231 		op1_str = zend_string_copy(Z_STR_P(op1));
16232 	} else {
16233 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16234 			ZVAL_UNDEFINED_OP1();
16235 		}
16236 		op1_str = zval_get_string_func(op1);
16237 	}
16238 	if (IS_CONST == IS_CONST) {
16239 		op2_str = Z_STR_P(op2);
16240 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16241 		op2_str = zend_string_copy(Z_STR_P(op2));
16242 	} else {
16243 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
16244 			ZVAL_UNDEFINED_OP2();
16245 		}
16246 		op2_str = zval_get_string_func(op2);
16247 	}
16248 	do {
16249 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16250 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16251 				if (IS_CONST == IS_CONST) {
16252 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
16253 						GC_ADDREF(op2_str);
16254 					}
16255 				}
16256 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16257 				zend_string_release_ex(op1_str, 0);
16258 				break;
16259 			}
16260 		}
16261 		if (IS_CONST != IS_CONST) {
16262 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16263 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16264 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
16265 						GC_ADDREF(op1_str);
16266 					}
16267 				}
16268 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16269 				zend_string_release_ex(op2_str, 0);
16270 				break;
16271 			}
16272 		}
16273 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16274 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16275 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16276 
16277 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
16278 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16279 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16280 			zend_string_release_ex(op1_str, 0);
16281 		}
16282 		if (IS_CONST != IS_CONST) {
16283 			zend_string_release_ex(op2_str, 0);
16284 		}
16285 	} while (0);
16286 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16287 
16288 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16289 }
16290 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16291 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16292 {
16293 	USE_OPLINE
16294 	zval *function_name;
16295 	zval *object;
16296 	zend_function *fbc;
16297 	zend_class_entry *called_scope;
16298 	zend_object *obj;
16299 	zend_execute_data *call;
16300 	uint32_t call_info;
16301 
16302 	SAVE_OPLINE();
16303 
16304 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16305 
16306 	if (IS_CONST != IS_CONST) {
16307 		function_name = RT_CONSTANT(opline, opline->op2);
16308 	}
16309 
16310 	if (IS_CONST != IS_CONST &&
16311 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
16312 		do {
16313 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
16314 				function_name = Z_REFVAL_P(function_name);
16315 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
16316 					break;
16317 				}
16318 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
16319 				ZVAL_UNDEFINED_OP2();
16320 				if (UNEXPECTED(EG(exception) != NULL)) {
16321 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16322 					HANDLE_EXCEPTION();
16323 				}
16324 			}
16325 			zend_throw_error(NULL, "Method name must be a string");
16326 
16327 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16328 			HANDLE_EXCEPTION();
16329 		} while (0);
16330 	}
16331 
16332 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
16333 		obj = Z_OBJ_P(object);
16334 	} else {
16335 		do {
16336 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
16337 				obj = Z_OBJ_P(object);
16338 			} else {
16339 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
16340 					zend_reference *ref = Z_REF_P(object);
16341 
16342 					object = &ref->val;
16343 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
16344 						obj = Z_OBJ_P(object);
16345 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
16346 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
16347 								efree_size(ref, sizeof(zend_reference));
16348 							} else {
16349 								Z_ADDREF_P(object);
16350 							}
16351 						}
16352 						break;
16353 					}
16354 				}
16355 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
16356 					object = ZVAL_UNDEFINED_OP1();
16357 					if (UNEXPECTED(EG(exception) != NULL)) {
16358 						if (IS_CONST != IS_CONST) {
16359 
16360 						}
16361 						HANDLE_EXCEPTION();
16362 					}
16363 				}
16364 				if (IS_CONST == IS_CONST) {
16365 					function_name = RT_CONSTANT(opline, opline->op2);
16366 				}
16367 				zend_invalid_method_call(object, function_name);
16368 
16369 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16370 				HANDLE_EXCEPTION();
16371 			}
16372 		} while (0);
16373 	}
16374 
16375 	called_scope = obj->ce;
16376 
16377 	if (IS_CONST == IS_CONST &&
16378 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
16379 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
16380 	} else {
16381 		zend_object *orig_obj = obj;
16382 
16383 		if (IS_CONST == IS_CONST) {
16384 			function_name = RT_CONSTANT(opline, opline->op2);
16385 		}
16386 
16387 		/* First, locate the function. */
16388 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
16389 		if (UNEXPECTED(fbc == NULL)) {
16390 			if (EXPECTED(!EG(exception))) {
16391 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
16392 			}
16393 
16394 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
16395 				zend_objects_store_del(orig_obj);
16396 			}
16397 			HANDLE_EXCEPTION();
16398 		}
16399 		if (IS_CONST == IS_CONST &&
16400 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
16401 		    EXPECTED(obj == orig_obj)) {
16402 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
16403 		}
16404 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
16405 			GC_ADDREF(obj); /* For $this pointer */
16406 			if (GC_DELREF(orig_obj) == 0) {
16407 				zend_objects_store_del(orig_obj);
16408 			}
16409 		}
16410 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
16411 			init_func_run_time_cache(&fbc->op_array);
16412 		}
16413 	}
16414 
16415 	if (IS_CONST != IS_CONST) {
16416 
16417 	}
16418 
16419 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
16420 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
16421 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
16422 			zend_objects_store_del(obj);
16423 			if (UNEXPECTED(EG(exception))) {
16424 				HANDLE_EXCEPTION();
16425 			}
16426 		}
16427 		/* call static method */
16428 		obj = (zend_object*)called_scope;
16429 		call_info = ZEND_CALL_NESTED_FUNCTION;
16430 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
16431 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
16432 			GC_ADDREF(obj); /* For $this pointer */
16433 		}
16434 		/* CV may be changed indirectly (e.g. when it's a reference) */
16435 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
16436 	}
16437 
16438 	call = zend_vm_stack_push_call_frame(call_info,
16439 		fbc, opline->extended_value, obj);
16440 	call->prev_execute_data = EX(call);
16441 	EX(call) = call;
16442 
16443 	ZEND_VM_NEXT_OPCODE();
16444 }
16445 
ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16446 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16447 {
16448 	USE_OPLINE
16449 	zval *value, *arg;
16450 
16451 	if (IS_CONST == IS_CONST) {
16452 		SAVE_OPLINE();
16453 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
16454 		uint32_t arg_num;
16455 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
16456 		if (UNEXPECTED(!arg)) {
16457 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16458 			HANDLE_EXCEPTION();
16459 		}
16460 	} else {
16461 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16462 	}
16463 
16464 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16465 	ZVAL_COPY_VALUE(arg, value);
16466 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16467 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
16468 			Z_ADDREF_P(arg);
16469 		}
16470 	}
16471 	ZEND_VM_NEXT_OPCODE();
16472 }
16473 
ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16474 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16475 {
16476 	USE_OPLINE
16477 	zval *op1, *op2;
16478 	double d1, d2;
16479 
16480 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16481 	op2 = RT_CONSTANT(opline, opline->op2);
16482 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16483 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16484 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16485 case_true:
16486 				ZEND_VM_SMART_BRANCH_TRUE();
16487 			} else {
16488 case_false:
16489 				ZEND_VM_SMART_BRANCH_FALSE();
16490 			}
16491 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16492 			d1 = (double)Z_LVAL_P(op1);
16493 			d2 = Z_DVAL_P(op2);
16494 			goto case_double;
16495 		}
16496 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16497 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16498 			d1 = Z_DVAL_P(op1);
16499 			d2 = Z_DVAL_P(op2);
16500 case_double:
16501 			if (d1 == d2) {
16502 				goto case_true;
16503 			} else {
16504 				goto case_false;
16505 			}
16506 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16507 			d1 = Z_DVAL_P(op1);
16508 			d2 = (double)Z_LVAL_P(op2);
16509 			goto case_double;
16510 		}
16511 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16512 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16513 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16514 
16515 			if (result) {
16516 				goto case_true;
16517 			} else {
16518 				goto case_false;
16519 			}
16520 		}
16521 	}
16522 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16523 }
16524 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16525 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16526 {
16527 	USE_OPLINE
16528 	zval *container;
16529 	bool result;
16530 	zend_ulong hval;
16531 	zval *offset;
16532 
16533 	SAVE_OPLINE();
16534 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16535 	offset = RT_CONSTANT(opline, opline->op2);
16536 
16537 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16538 		HashTable *ht;
16539 		zval *value;
16540 		zend_string *str;
16541 
16542 isset_dim_obj_array:
16543 		ht = Z_ARRVAL_P(container);
16544 isset_again:
16545 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
16546 			str = Z_STR_P(offset);
16547 			if (IS_CONST != IS_CONST) {
16548 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
16549 					goto num_index_prop;
16550 				}
16551 			}
16552 			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
16553 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
16554 			hval = Z_LVAL_P(offset);
16555 num_index_prop:
16556 			value = zend_hash_index_find(ht, hval);
16557 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
16558 			offset = Z_REFVAL_P(offset);
16559 			goto isset_again;
16560 		} else {
16561 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
16562 			if (UNEXPECTED(EG(exception))) {
16563 				result = 0;
16564 				goto isset_dim_obj_exit;
16565 			}
16566 		}
16567 
16568 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
16569 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
16570 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
16571 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
16572 
16573 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
16574 				/* avoid exception check */
16575 
16576 				ZEND_VM_SMART_BRANCH(result, 0);
16577 			}
16578 		} else {
16579 			result = (value == NULL || !i_zend_is_true(value));
16580 		}
16581 		goto isset_dim_obj_exit;
16582 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
16583 		container = Z_REFVAL_P(container);
16584 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16585 			goto isset_dim_obj_array;
16586 		}
16587 	}
16588 
16589 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
16590 		offset++;
16591 	}
16592 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
16593 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
16594 	} else {
16595 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
16596 	}
16597 
16598 isset_dim_obj_exit:
16599 
16600 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16601 	ZEND_VM_SMART_BRANCH(result, 1);
16602 }
16603 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16604 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16605 {
16606 	USE_OPLINE
16607 	zval *container;
16608 	int result;
16609 	zval *offset;
16610 	zend_string *name, *tmp_name;
16611 
16612 	SAVE_OPLINE();
16613 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16614 	offset = RT_CONSTANT(opline, opline->op2);
16615 
16616 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
16617 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
16618 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
16619 			container = Z_REFVAL_P(container);
16620 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
16621 				result = (opline->extended_value & ZEND_ISEMPTY);
16622 				goto isset_object_finish;
16623 			}
16624 		} else {
16625 			result = (opline->extended_value & ZEND_ISEMPTY);
16626 			goto isset_object_finish;
16627 		}
16628 	}
16629 
16630 	if (IS_CONST == IS_CONST) {
16631 		name = Z_STR_P(offset);
16632 	} else {
16633 		name = zval_try_get_tmp_string(offset, &tmp_name);
16634 		if (UNEXPECTED(!name)) {
16635 			result = 0;
16636 			goto isset_object_finish;
16637 		}
16638 	}
16639 
16640 	result =
16641 		(opline->extended_value & ZEND_ISEMPTY) ^
16642 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
16643 
16644 	if (IS_CONST != IS_CONST) {
16645 		zend_tmp_string_release(tmp_name);
16646 	}
16647 
16648 isset_object_finish:
16649 
16650 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16651 	ZEND_VM_SMART_BRANCH(result, 1);
16652 }
16653 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16654 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16655 {
16656 	USE_OPLINE
16657 
16658 	zval *key, *subject;
16659 	HashTable *ht;
16660 	bool result;
16661 
16662 	SAVE_OPLINE();
16663 
16664 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16665 	subject = RT_CONSTANT(opline, opline->op2);
16666 
16667 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
16668 array_key_exists_array:
16669 		ht = Z_ARRVAL_P(subject);
16670 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
16671 	} else {
16672 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
16673 			subject = Z_REFVAL_P(subject);
16674 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
16675 				goto array_key_exists_array;
16676 			}
16677 		}
16678 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
16679 		result = 0;
16680 	}
16681 
16682 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16683 	ZEND_VM_SMART_BRANCH(result, 1);
16684 }
16685 
16686 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16687 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16688 {
16689 	USE_OPLINE
16690 	zval *expr;
16691 	bool result;
16692 
16693 	SAVE_OPLINE();
16694 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16695 
16696 try_instanceof:
16697 	if (Z_TYPE_P(expr) == IS_OBJECT) {
16698 		zend_class_entry *ce;
16699 
16700 		if (IS_CONST == IS_CONST) {
16701 			ce = CACHED_PTR(opline->extended_value);
16702 			if (UNEXPECTED(ce == NULL)) {
16703 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
16704 				if (EXPECTED(ce)) {
16705 					CACHE_PTR(opline->extended_value, ce);
16706 				}
16707 			}
16708 		} else if (IS_CONST == IS_UNUSED) {
16709 			ce = zend_fetch_class(NULL, opline->op2.num);
16710 			if (UNEXPECTED(ce == NULL)) {
16711 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16712 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16713 				HANDLE_EXCEPTION();
16714 			}
16715 		} else {
16716 			ce = Z_CE_P(EX_VAR(opline->op2.var));
16717 		}
16718 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
16719 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
16720 		expr = Z_REFVAL_P(expr);
16721 		goto try_instanceof;
16722 	} else {
16723 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
16724 			ZVAL_UNDEFINED_OP1();
16725 		}
16726 		result = 0;
16727 	}
16728 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16729 	ZEND_VM_SMART_BRANCH(result, 1);
16730 }
16731 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16732 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16733 {
16734 	USE_OPLINE
16735 	zval *container, *dim, *value;
16736 	zend_long offset;
16737 	HashTable *ht;
16738 
16739 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16740 	dim = RT_CONSTANT(opline, opline->op2);
16741 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16742 fetch_dim_r_index_array:
16743 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
16744 			offset = Z_LVAL_P(dim);
16745 		} else {
16746 			SAVE_OPLINE();
16747 			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
16748 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16749 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16750 		}
16751 		ht = Z_ARRVAL_P(container);
16752 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
16753 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
16754 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16755 			SAVE_OPLINE();
16756 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16757 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16758 		} else {
16759 			ZEND_VM_NEXT_OPCODE();
16760 		}
16761 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
16762 		container = Z_REFVAL_P(container);
16763 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16764 			goto fetch_dim_r_index_array;
16765 		} else {
16766 			goto fetch_dim_r_index_slow;
16767 		}
16768 	} else {
16769 fetch_dim_r_index_slow:
16770 		SAVE_OPLINE();
16771 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
16772 			dim++;
16773 		}
16774 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
16775 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16776 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16777 	}
16778 
16779 fetch_dim_r_index_undef:
16780 	ZVAL_NULL(EX_VAR(opline->result.var));
16781 	SAVE_OPLINE();
16782 	zend_undefined_offset(offset);
16783 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16784 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16785 }
16786 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16787 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16788 {
16789 	USE_OPLINE
16790 	zval *container, *dim, *value;
16791 	zend_long offset;
16792 	HashTable *ht;
16793 
16794 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16795 	dim = EX_VAR(opline->op2.var);
16796 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16797 fetch_dim_r_index_array:
16798 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
16799 			offset = Z_LVAL_P(dim);
16800 		} else {
16801 			SAVE_OPLINE();
16802 			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
16803 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16804 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16805 		}
16806 		ht = Z_ARRVAL_P(container);
16807 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
16808 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
16809 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16810 			SAVE_OPLINE();
16811 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16812 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16813 		} else {
16814 			ZEND_VM_NEXT_OPCODE();
16815 		}
16816 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
16817 		container = Z_REFVAL_P(container);
16818 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16819 			goto fetch_dim_r_index_array;
16820 		} else {
16821 			goto fetch_dim_r_index_slow;
16822 		}
16823 	} else {
16824 fetch_dim_r_index_slow:
16825 		SAVE_OPLINE();
16826 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
16827 			dim++;
16828 		}
16829 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
16830 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16831 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16832 	}
16833 
16834 fetch_dim_r_index_undef:
16835 	ZVAL_NULL(EX_VAR(opline->result.var));
16836 	SAVE_OPLINE();
16837 	zend_undefined_offset(offset);
16838 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16839 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16840 }
16841 
ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16842 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16843 {
16844 	USE_OPLINE
16845 	zval *op1, *op2;
16846 
16847 	SAVE_OPLINE();
16848 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16849 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16850 	div_function(EX_VAR(opline->result.var), op1, op2);
16851 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16852 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16853 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16854 }
16855 
ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16856 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16857 {
16858 	USE_OPLINE
16859 	zval *op1, *op2;
16860 
16861 	SAVE_OPLINE();
16862 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16863 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16864 	pow_function(EX_VAR(opline->result.var), op1, op2);
16865 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16866 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16867 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16868 }
16869 
ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16871 {
16872 	USE_OPLINE
16873 	zval *op1, *op2;
16874 
16875 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16876 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16877 
16878 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
16879 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
16880 		zend_string *op1_str = Z_STR_P(op1);
16881 		zend_string *op2_str = Z_STR_P(op2);
16882 		zend_string *str;
16883 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
16884 
16885 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16886 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16887 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
16888 			} else {
16889 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16890 			}
16891 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16892 				zend_string_release_ex(op1_str, 0);
16893 			}
16894 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16895 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16896 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
16897 			} else {
16898 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16899 			}
16900 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16901 				zend_string_release_ex(op2_str, 0);
16902 			}
16903 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
16904 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
16905 			size_t len = ZSTR_LEN(op1_str);
16906 
16907 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
16908 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
16909 			}
16910 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
16911 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16912 			GC_ADD_FLAGS(str, flags);
16913 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16914 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16915 				zend_string_release_ex(op2_str, 0);
16916 			}
16917 		} else {
16918 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16919 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16920 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16921 			GC_ADD_FLAGS(str, flags);
16922 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16923 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16924 				zend_string_release_ex(op1_str, 0);
16925 			}
16926 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16927 				zend_string_release_ex(op2_str, 0);
16928 			}
16929 		}
16930 		ZEND_VM_NEXT_OPCODE();
16931 	} else {
16932 		SAVE_OPLINE();
16933 
16934 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16935 			op1 = ZVAL_UNDEFINED_OP1();
16936 		}
16937 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
16938 			op2 = ZVAL_UNDEFINED_OP2();
16939 		}
16940 		concat_function(EX_VAR(opline->result.var), op1, op2);
16941 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16942 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16943 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16944 	}
16945 }
16946 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16947 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16948 {
16949 	USE_OPLINE
16950 	zval *op1, *op2;
16951 	double d1, d2;
16952 
16953 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16954 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16955 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16956 		/* pass */
16957 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16958 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16959 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16960 is_equal_true:
16961 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
16962 			} else {
16963 is_equal_false:
16964 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
16965 			}
16966 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16967 			d1 = (double)Z_LVAL_P(op1);
16968 			d2 = Z_DVAL_P(op2);
16969 			goto is_equal_double;
16970 		}
16971 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16972 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16973 			d1 = Z_DVAL_P(op1);
16974 			d2 = Z_DVAL_P(op2);
16975 is_equal_double:
16976 			if (d1 == d2) {
16977 				goto is_equal_true;
16978 			} else {
16979 				goto is_equal_false;
16980 			}
16981 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16982 			d1 = Z_DVAL_P(op1);
16983 			d2 = (double)Z_LVAL_P(op2);
16984 			goto is_equal_double;
16985 		}
16986 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16987 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16988 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16989 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16990 				zval_ptr_dtor_str(op1);
16991 			}
16992 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16993 				zval_ptr_dtor_str(op2);
16994 			}
16995 			if (result) {
16996 				goto is_equal_true;
16997 			} else {
16998 				goto is_equal_false;
16999 			}
17000 		}
17001 	}
17002 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17003 }
17004 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17005 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17006 {
17007 	USE_OPLINE
17008 	zval *op1, *op2;
17009 	double d1, d2;
17010 
17011 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17012 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17013 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
17014 		/* pass */
17015 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17016 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17017 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
17018 is_equal_true:
17019 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
17020 			} else {
17021 is_equal_false:
17022 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
17023 			}
17024 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17025 			d1 = (double)Z_LVAL_P(op1);
17026 			d2 = Z_DVAL_P(op2);
17027 			goto is_equal_double;
17028 		}
17029 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17030 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17031 			d1 = Z_DVAL_P(op1);
17032 			d2 = Z_DVAL_P(op2);
17033 is_equal_double:
17034 			if (d1 == d2) {
17035 				goto is_equal_true;
17036 			} else {
17037 				goto is_equal_false;
17038 			}
17039 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17040 			d1 = Z_DVAL_P(op1);
17041 			d2 = (double)Z_LVAL_P(op2);
17042 			goto is_equal_double;
17043 		}
17044 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17045 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17046 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17047 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17048 				zval_ptr_dtor_str(op1);
17049 			}
17050 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17051 				zval_ptr_dtor_str(op2);
17052 			}
17053 			if (result) {
17054 				goto is_equal_true;
17055 			} else {
17056 				goto is_equal_false;
17057 			}
17058 		}
17059 	}
17060 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17061 }
17062 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17063 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17064 {
17065 	USE_OPLINE
17066 	zval *op1, *op2;
17067 	double d1, d2;
17068 
17069 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17070 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17071 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
17072 		/* pass */
17073 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17074 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17075 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
17076 is_equal_true:
17077 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
17078 			} else {
17079 is_equal_false:
17080 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
17081 			}
17082 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17083 			d1 = (double)Z_LVAL_P(op1);
17084 			d2 = Z_DVAL_P(op2);
17085 			goto is_equal_double;
17086 		}
17087 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17088 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17089 			d1 = Z_DVAL_P(op1);
17090 			d2 = Z_DVAL_P(op2);
17091 is_equal_double:
17092 			if (d1 == d2) {
17093 				goto is_equal_true;
17094 			} else {
17095 				goto is_equal_false;
17096 			}
17097 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17098 			d1 = Z_DVAL_P(op1);
17099 			d2 = (double)Z_LVAL_P(op2);
17100 			goto is_equal_double;
17101 		}
17102 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17103 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17104 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17105 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17106 				zval_ptr_dtor_str(op1);
17107 			}
17108 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17109 				zval_ptr_dtor_str(op2);
17110 			}
17111 			if (result) {
17112 				goto is_equal_true;
17113 			} else {
17114 				goto is_equal_false;
17115 			}
17116 		}
17117 	}
17118 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17119 }
17120 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17121 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17122 {
17123 	USE_OPLINE
17124 	zval *op1, *op2;
17125 	double d1, d2;
17126 
17127 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17128 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17129 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
17130 		/* pass */
17131 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17132 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17133 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
17134 is_not_equal_true:
17135 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
17136 			} else {
17137 is_not_equal_false:
17138 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
17139 			}
17140 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17141 			d1 = (double)Z_LVAL_P(op1);
17142 			d2 = Z_DVAL_P(op2);
17143 			goto is_not_equal_double;
17144 		}
17145 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17146 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17147 			d1 = Z_DVAL_P(op1);
17148 			d2 = Z_DVAL_P(op2);
17149 is_not_equal_double:
17150 			if (d1 != d2) {
17151 				goto is_not_equal_true;
17152 			} else {
17153 				goto is_not_equal_false;
17154 			}
17155 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17156 			d1 = Z_DVAL_P(op1);
17157 			d2 = (double)Z_LVAL_P(op2);
17158 			goto is_not_equal_double;
17159 		}
17160 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17161 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17162 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17163 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17164 				zval_ptr_dtor_str(op1);
17165 			}
17166 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17167 				zval_ptr_dtor_str(op2);
17168 			}
17169 			if (!result) {
17170 				goto is_not_equal_true;
17171 			} else {
17172 				goto is_not_equal_false;
17173 			}
17174 		}
17175 	}
17176 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17177 }
17178 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17179 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17180 {
17181 	USE_OPLINE
17182 	zval *op1, *op2;
17183 	double d1, d2;
17184 
17185 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17186 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17187 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
17188 		/* pass */
17189 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17190 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17191 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
17192 is_not_equal_true:
17193 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
17194 			} else {
17195 is_not_equal_false:
17196 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
17197 			}
17198 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17199 			d1 = (double)Z_LVAL_P(op1);
17200 			d2 = Z_DVAL_P(op2);
17201 			goto is_not_equal_double;
17202 		}
17203 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17204 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17205 			d1 = Z_DVAL_P(op1);
17206 			d2 = Z_DVAL_P(op2);
17207 is_not_equal_double:
17208 			if (d1 != d2) {
17209 				goto is_not_equal_true;
17210 			} else {
17211 				goto is_not_equal_false;
17212 			}
17213 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17214 			d1 = Z_DVAL_P(op1);
17215 			d2 = (double)Z_LVAL_P(op2);
17216 			goto is_not_equal_double;
17217 		}
17218 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17219 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17220 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17221 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17222 				zval_ptr_dtor_str(op1);
17223 			}
17224 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17225 				zval_ptr_dtor_str(op2);
17226 			}
17227 			if (!result) {
17228 				goto is_not_equal_true;
17229 			} else {
17230 				goto is_not_equal_false;
17231 			}
17232 		}
17233 	}
17234 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17235 }
17236 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17237 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17238 {
17239 	USE_OPLINE
17240 	zval *op1, *op2;
17241 	double d1, d2;
17242 
17243 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17244 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17245 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
17246 		/* pass */
17247 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17248 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17249 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
17250 is_not_equal_true:
17251 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
17252 			} else {
17253 is_not_equal_false:
17254 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
17255 			}
17256 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17257 			d1 = (double)Z_LVAL_P(op1);
17258 			d2 = Z_DVAL_P(op2);
17259 			goto is_not_equal_double;
17260 		}
17261 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17262 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17263 			d1 = Z_DVAL_P(op1);
17264 			d2 = Z_DVAL_P(op2);
17265 is_not_equal_double:
17266 			if (d1 != d2) {
17267 				goto is_not_equal_true;
17268 			} else {
17269 				goto is_not_equal_false;
17270 			}
17271 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17272 			d1 = Z_DVAL_P(op1);
17273 			d2 = (double)Z_LVAL_P(op2);
17274 			goto is_not_equal_double;
17275 		}
17276 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17277 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17278 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17279 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17280 				zval_ptr_dtor_str(op1);
17281 			}
17282 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17283 				zval_ptr_dtor_str(op2);
17284 			}
17285 			if (!result) {
17286 				goto is_not_equal_true;
17287 			} else {
17288 				goto is_not_equal_false;
17289 			}
17290 		}
17291 	}
17292 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17293 }
17294 
ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17295 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17296 {
17297 	USE_OPLINE
17298 	zval *op1, *op2;
17299 
17300 	SAVE_OPLINE();
17301 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17302 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17303 	compare_function(EX_VAR(opline->result.var), op1, op2);
17304 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17305 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17306 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17307 }
17308 
ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17309 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17310 {
17311 	USE_OPLINE
17312 	zval *op1, *op2;
17313 
17314 	SAVE_OPLINE();
17315 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17316 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17317 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
17318 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17319 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17320 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17321 }
17322 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17323 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17324 {
17325 	USE_OPLINE
17326 	zval *container, *dim, *value;
17327 
17328 	SAVE_OPLINE();
17329 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17330 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17331 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17332 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17333 fetch_dim_r_array:
17334 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
17335 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
17336 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
17337 			container = Z_REFVAL_P(container);
17338 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17339 				goto fetch_dim_r_array;
17340 			} else {
17341 				goto fetch_dim_r_slow;
17342 			}
17343 		} else {
17344 fetch_dim_r_slow:
17345 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
17346 				dim++;
17347 			}
17348 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
17349 		}
17350 	} else {
17351 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
17352 	}
17353 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17354 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17355 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17356 }
17357 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17358 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17359 {
17360 	USE_OPLINE
17361 	zval *container;
17362 
17363 	SAVE_OPLINE();
17364 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17365 	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
17366 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17367 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17368 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17369 }
17370 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17371 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17372 {
17373 	USE_OPLINE
17374 	zval *container;
17375 	void **cache_slot = NULL;
17376 
17377 	SAVE_OPLINE();
17378 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17379 
17380 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17381 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17382 		do {
17383 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17384 				container = Z_REFVAL_P(container);
17385 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
17386 					break;
17387 				}
17388 			}
17389 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
17390 				ZVAL_UNDEFINED_OP1();
17391 			}
17392 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17393 			ZVAL_NULL(EX_VAR(opline->result.var));
17394 			goto fetch_obj_r_finish;
17395 		} while (0);
17396 	}
17397 
17398 	/* here we are sure we are dealing with an object */
17399 	do {
17400 		zend_object *zobj = Z_OBJ_P(container);
17401 		zend_string *name, *tmp_name;
17402 		zval *retval;
17403 
17404 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17405 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
17406 
17407 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
17408 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
17409 
17410 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
17411 					retval = OBJ_PROP(zobj, prop_offset);
17412 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
17413 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17414 							goto fetch_obj_r_copy;
17415 						} else {
17416 fetch_obj_r_fast_copy:
17417 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17418 							ZEND_VM_NEXT_OPCODE();
17419 						}
17420 					}
17421 				} else if (EXPECTED(zobj->properties != NULL)) {
17422 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17423 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
17424 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
17425 
17426 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
17427 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
17428 
17429 							if (EXPECTED(p->key == name) ||
17430 							    (EXPECTED(p->h == ZSTR_H(name)) &&
17431 							     EXPECTED(p->key != NULL) &&
17432 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
17433 								retval = &p->val;
17434 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17435 									goto fetch_obj_r_copy;
17436 								} else {
17437 									goto fetch_obj_r_fast_copy;
17438 								}
17439 							}
17440 						}
17441 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
17442 					}
17443 					retval = zend_hash_find_known_hash(zobj->properties, name);
17444 					if (EXPECTED(retval)) {
17445 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
17446 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
17447 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17448 							goto fetch_obj_r_copy;
17449 						} else {
17450 							goto fetch_obj_r_fast_copy;
17451 						}
17452 					}
17453 				}
17454 			}
17455 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17456 		} else {
17457 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
17458 			if (UNEXPECTED(!name)) {
17459 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17460 				break;
17461 			}
17462 		}
17463 
17464 #if ZEND_DEBUG
17465 		/* For non-standard object handlers, verify a declared property type in debug builds.
17466 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
17467 		zend_property_info *prop_info = NULL;
17468 		if (zobj->handlers->read_property != zend_std_read_property) {
17469 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
17470 		}
17471 #endif
17472 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
17473 #if ZEND_DEBUG
17474 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
17475 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
17476 			ZVAL_OPT_DEREF(retval);
17477 			zend_verify_property_type(prop_info, retval, /* strict */ true);
17478 		}
17479 #endif
17480 
17481 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17482 			zend_tmp_string_release(tmp_name);
17483 		}
17484 
17485 		if (retval != EX_VAR(opline->result.var)) {
17486 fetch_obj_r_copy:
17487 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17488 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
17489 			zend_unwrap_reference(retval);
17490 		}
17491 	} while (0);
17492 
17493 fetch_obj_r_finish:
17494 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17495 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17496 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17497 }
17498 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17499 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17500 {
17501 	USE_OPLINE
17502 	zval *container;
17503 	void **cache_slot = NULL;
17504 
17505 	SAVE_OPLINE();
17506 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17507 
17508 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17509 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17510 		do {
17511 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17512 				container = Z_REFVAL_P(container);
17513 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
17514 					break;
17515 				}
17516 			}
17517 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
17518 				ZVAL_UNDEFINED_OP2();
17519 			}
17520 			ZVAL_NULL(EX_VAR(opline->result.var));
17521 			goto fetch_obj_is_finish;
17522 		} while (0);
17523 	}
17524 
17525 	/* here we are sure we are dealing with an object */
17526 	do {
17527 		zend_object *zobj = Z_OBJ_P(container);
17528 		zend_string *name, *tmp_name;
17529 		zval *retval;
17530 
17531 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17532 			cache_slot = CACHE_ADDR(opline->extended_value);
17533 
17534 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
17535 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
17536 
17537 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
17538 					retval = OBJ_PROP(zobj, prop_offset);
17539 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
17540 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17541 							goto fetch_obj_is_copy;
17542 						} else {
17543 fetch_obj_is_fast_copy:
17544 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17545 							ZEND_VM_NEXT_OPCODE();
17546 						}
17547 					}
17548 				} else if (EXPECTED(zobj->properties != NULL)) {
17549 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17550 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
17551 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
17552 
17553 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
17554 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
17555 
17556 							if (EXPECTED(p->key == name) ||
17557 							    (EXPECTED(p->h == ZSTR_H(name)) &&
17558 							     EXPECTED(p->key != NULL) &&
17559 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
17560 								retval = &p->val;
17561 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17562 									goto fetch_obj_is_copy;
17563 								} else {
17564 									goto fetch_obj_is_fast_copy;
17565 								}
17566 							}
17567 						}
17568 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
17569 					}
17570 					retval = zend_hash_find_known_hash(zobj->properties, name);
17571 					if (EXPECTED(retval)) {
17572 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
17573 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
17574 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17575 							goto fetch_obj_is_copy;
17576 						} else {
17577 							goto fetch_obj_is_fast_copy;
17578 						}
17579 					}
17580 				}
17581 			}
17582 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17583 		} else {
17584 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
17585 			if (UNEXPECTED(!name)) {
17586 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17587 				break;
17588 			}
17589 		}
17590 
17591 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
17592 
17593 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17594 			zend_tmp_string_release(tmp_name);
17595 		}
17596 
17597 		if (retval != EX_VAR(opline->result.var)) {
17598 fetch_obj_is_copy:
17599 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17600 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
17601 			zend_unwrap_reference(retval);
17602 		}
17603 	} while (0);
17604 
17605 fetch_obj_is_finish:
17606 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17607 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17608 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17609 }
17610 
ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17611 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17612 {
17613 	USE_OPLINE
17614 	zval *op1, *op2;
17615 	zend_string *op1_str, *op2_str, *str;
17616 
17617 
17618 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17619 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17620 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
17621 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
17622 		zend_string *op1_str = Z_STR_P(op1);
17623 		zend_string *op2_str = Z_STR_P(op2);
17624 		zend_string *str;
17625 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
17626 
17627 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17628 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17629 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
17630 			} else {
17631 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17632 			}
17633 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17634 				zend_string_release_ex(op1_str, 0);
17635 			}
17636 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17637 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17638 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
17639 			} else {
17640 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17641 			}
17642 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17643 				zend_string_release_ex(op2_str, 0);
17644 			}
17645 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
17646 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
17647 			size_t len = ZSTR_LEN(op1_str);
17648 
17649 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
17650 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17651 			GC_ADD_FLAGS(str, flags);
17652 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17653 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17654 				zend_string_release_ex(op2_str, 0);
17655 			}
17656 		} else {
17657 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17658 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17659 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17660 			GC_ADD_FLAGS(str, flags);
17661 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17662 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17663 				zend_string_release_ex(op1_str, 0);
17664 			}
17665 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17666 				zend_string_release_ex(op2_str, 0);
17667 			}
17668 		}
17669 		ZEND_VM_NEXT_OPCODE();
17670 	}
17671 
17672 	SAVE_OPLINE();
17673 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17674 		op1_str = Z_STR_P(op1);
17675 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17676 		op1_str = zend_string_copy(Z_STR_P(op1));
17677 	} else {
17678 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17679 			ZVAL_UNDEFINED_OP1();
17680 		}
17681 		op1_str = zval_get_string_func(op1);
17682 	}
17683 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17684 		op2_str = Z_STR_P(op2);
17685 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17686 		op2_str = zend_string_copy(Z_STR_P(op2));
17687 	} else {
17688 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
17689 			ZVAL_UNDEFINED_OP2();
17690 		}
17691 		op2_str = zval_get_string_func(op2);
17692 	}
17693 	do {
17694 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17695 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17696 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17697 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
17698 						GC_ADDREF(op2_str);
17699 					}
17700 				}
17701 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17702 				zend_string_release_ex(op1_str, 0);
17703 				break;
17704 			}
17705 		}
17706 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17707 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17708 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17709 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
17710 						GC_ADDREF(op1_str);
17711 					}
17712 				}
17713 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17714 				zend_string_release_ex(op2_str, 0);
17715 				break;
17716 			}
17717 		}
17718 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17719 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17720 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17721 
17722 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
17723 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17724 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17725 			zend_string_release_ex(op1_str, 0);
17726 		}
17727 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17728 			zend_string_release_ex(op2_str, 0);
17729 		}
17730 	} while (0);
17731 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17732 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17733 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17734 }
17735 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17736 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17737 {
17738 	USE_OPLINE
17739 	zval *function_name;
17740 	zval *object;
17741 	zend_function *fbc;
17742 	zend_class_entry *called_scope;
17743 	zend_object *obj;
17744 	zend_execute_data *call;
17745 	uint32_t call_info;
17746 
17747 	SAVE_OPLINE();
17748 
17749 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17750 
17751 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17752 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17753 	}
17754 
17755 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
17756 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
17757 		do {
17758 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
17759 				function_name = Z_REFVAL_P(function_name);
17760 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
17761 					break;
17762 				}
17763 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
17764 				ZVAL_UNDEFINED_OP2();
17765 				if (UNEXPECTED(EG(exception) != NULL)) {
17766 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17767 					HANDLE_EXCEPTION();
17768 				}
17769 			}
17770 			zend_throw_error(NULL, "Method name must be a string");
17771 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17772 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17773 			HANDLE_EXCEPTION();
17774 		} while (0);
17775 	}
17776 
17777 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
17778 		obj = Z_OBJ_P(object);
17779 	} else {
17780 		do {
17781 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
17782 				obj = Z_OBJ_P(object);
17783 			} else {
17784 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
17785 					zend_reference *ref = Z_REF_P(object);
17786 
17787 					object = &ref->val;
17788 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
17789 						obj = Z_OBJ_P(object);
17790 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
17791 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
17792 								efree_size(ref, sizeof(zend_reference));
17793 							} else {
17794 								Z_ADDREF_P(object);
17795 							}
17796 						}
17797 						break;
17798 					}
17799 				}
17800 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
17801 					object = ZVAL_UNDEFINED_OP1();
17802 					if (UNEXPECTED(EG(exception) != NULL)) {
17803 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17804 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17805 						}
17806 						HANDLE_EXCEPTION();
17807 					}
17808 				}
17809 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17810 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17811 				}
17812 				zend_invalid_method_call(object, function_name);
17813 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17814 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17815 				HANDLE_EXCEPTION();
17816 			}
17817 		} while (0);
17818 	}
17819 
17820 	called_scope = obj->ce;
17821 
17822 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
17823 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
17824 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
17825 	} else {
17826 		zend_object *orig_obj = obj;
17827 
17828 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17829 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17830 		}
17831 
17832 		/* First, locate the function. */
17833 		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));
17834 		if (UNEXPECTED(fbc == NULL)) {
17835 			if (EXPECTED(!EG(exception))) {
17836 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
17837 			}
17838 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17839 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
17840 				zend_objects_store_del(orig_obj);
17841 			}
17842 			HANDLE_EXCEPTION();
17843 		}
17844 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
17845 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
17846 		    EXPECTED(obj == orig_obj)) {
17847 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
17848 		}
17849 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
17850 			GC_ADDREF(obj); /* For $this pointer */
17851 			if (GC_DELREF(orig_obj) == 0) {
17852 				zend_objects_store_del(orig_obj);
17853 			}
17854 		}
17855 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
17856 			init_func_run_time_cache(&fbc->op_array);
17857 		}
17858 	}
17859 
17860 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17861 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17862 	}
17863 
17864 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
17865 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
17866 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
17867 			zend_objects_store_del(obj);
17868 			if (UNEXPECTED(EG(exception))) {
17869 				HANDLE_EXCEPTION();
17870 			}
17871 		}
17872 		/* call static method */
17873 		obj = (zend_object*)called_scope;
17874 		call_info = ZEND_CALL_NESTED_FUNCTION;
17875 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
17876 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
17877 			GC_ADDREF(obj); /* For $this pointer */
17878 		}
17879 		/* CV may be changed indirectly (e.g. when it's a reference) */
17880 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
17881 	}
17882 
17883 	call = zend_vm_stack_push_call_frame(call_info,
17884 		fbc, opline->extended_value, obj);
17885 	call->prev_execute_data = EX(call);
17886 	EX(call) = call;
17887 
17888 	ZEND_VM_NEXT_OPCODE();
17889 }
17890 
ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17891 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17892 {
17893 	USE_OPLINE
17894 	zval *op1, *op2;
17895 	double d1, d2;
17896 
17897 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17898 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17899 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17900 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17901 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
17902 case_true:
17903 				ZEND_VM_SMART_BRANCH_TRUE();
17904 			} else {
17905 case_false:
17906 				ZEND_VM_SMART_BRANCH_FALSE();
17907 			}
17908 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17909 			d1 = (double)Z_LVAL_P(op1);
17910 			d2 = Z_DVAL_P(op2);
17911 			goto case_double;
17912 		}
17913 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17914 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17915 			d1 = Z_DVAL_P(op1);
17916 			d2 = Z_DVAL_P(op2);
17917 case_double:
17918 			if (d1 == d2) {
17919 				goto case_true;
17920 			} else {
17921 				goto case_false;
17922 			}
17923 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17924 			d1 = Z_DVAL_P(op1);
17925 			d2 = (double)Z_LVAL_P(op2);
17926 			goto case_double;
17927 		}
17928 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17929 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17930 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17931 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17932 			if (result) {
17933 				goto case_true;
17934 			} else {
17935 				goto case_false;
17936 			}
17937 		}
17938 	}
17939 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17940 }
17941 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17942 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17943 {
17944 	USE_OPLINE
17945 	zval *container;
17946 	bool result;
17947 	zend_ulong hval;
17948 	zval *offset;
17949 
17950 	SAVE_OPLINE();
17951 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17952 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17953 
17954 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17955 		HashTable *ht;
17956 		zval *value;
17957 		zend_string *str;
17958 
17959 isset_dim_obj_array:
17960 		ht = Z_ARRVAL_P(container);
17961 isset_again:
17962 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
17963 			str = Z_STR_P(offset);
17964 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17965 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
17966 					goto num_index_prop;
17967 				}
17968 			}
17969 			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
17970 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
17971 			hval = Z_LVAL_P(offset);
17972 num_index_prop:
17973 			value = zend_hash_index_find(ht, hval);
17974 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
17975 			offset = Z_REFVAL_P(offset);
17976 			goto isset_again;
17977 		} else {
17978 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
17979 			if (UNEXPECTED(EG(exception))) {
17980 				result = 0;
17981 				goto isset_dim_obj_exit;
17982 			}
17983 		}
17984 
17985 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
17986 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
17987 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
17988 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
17989 
17990 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
17991 				/* avoid exception check */
17992 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17993 				ZEND_VM_SMART_BRANCH(result, 0);
17994 			}
17995 		} else {
17996 			result = (value == NULL || !i_zend_is_true(value));
17997 		}
17998 		goto isset_dim_obj_exit;
17999 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
18000 		container = Z_REFVAL_P(container);
18001 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18002 			goto isset_dim_obj_array;
18003 		}
18004 	}
18005 
18006 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
18007 		offset++;
18008 	}
18009 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
18010 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
18011 	} else {
18012 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
18013 	}
18014 
18015 isset_dim_obj_exit:
18016 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
18017 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18018 	ZEND_VM_SMART_BRANCH(result, 1);
18019 }
18020 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18021 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18022 {
18023 	USE_OPLINE
18024 	zval *container;
18025 	int result;
18026 	zval *offset;
18027 	zend_string *name, *tmp_name;
18028 
18029 	SAVE_OPLINE();
18030 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18031 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
18032 
18033 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
18034 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18035 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18036 			container = Z_REFVAL_P(container);
18037 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
18038 				result = (opline->extended_value & ZEND_ISEMPTY);
18039 				goto isset_object_finish;
18040 			}
18041 		} else {
18042 			result = (opline->extended_value & ZEND_ISEMPTY);
18043 			goto isset_object_finish;
18044 		}
18045 	}
18046 
18047 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18048 		name = Z_STR_P(offset);
18049 	} else {
18050 		name = zval_try_get_tmp_string(offset, &tmp_name);
18051 		if (UNEXPECTED(!name)) {
18052 			result = 0;
18053 			goto isset_object_finish;
18054 		}
18055 	}
18056 
18057 	result =
18058 		(opline->extended_value & ZEND_ISEMPTY) ^
18059 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
18060 
18061 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18062 		zend_tmp_string_release(tmp_name);
18063 	}
18064 
18065 isset_object_finish:
18066 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
18067 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18068 	ZEND_VM_SMART_BRANCH(result, 1);
18069 }
18070 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18071 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18072 {
18073 	USE_OPLINE
18074 
18075 	zval *key, *subject;
18076 	HashTable *ht;
18077 	bool result;
18078 
18079 	SAVE_OPLINE();
18080 
18081 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18082 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
18083 
18084 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
18085 array_key_exists_array:
18086 		ht = Z_ARRVAL_P(subject);
18087 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
18088 	} else {
18089 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
18090 			subject = Z_REFVAL_P(subject);
18091 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
18092 				goto array_key_exists_array;
18093 			}
18094 		}
18095 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
18096 		result = 0;
18097 	}
18098 
18099 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
18100 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18101 	ZEND_VM_SMART_BRANCH(result, 1);
18102 }
18103 
18104 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18105 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18106 {
18107 	USE_OPLINE
18108 	zval *expr;
18109 	bool result;
18110 
18111 	SAVE_OPLINE();
18112 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18113 
18114 try_instanceof:
18115 	if (Z_TYPE_P(expr) == IS_OBJECT) {
18116 		zend_class_entry *ce;
18117 
18118 		if (IS_VAR == IS_CONST) {
18119 			ce = CACHED_PTR(opline->extended_value);
18120 			if (UNEXPECTED(ce == NULL)) {
18121 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
18122 				if (EXPECTED(ce)) {
18123 					CACHE_PTR(opline->extended_value, ce);
18124 				}
18125 			}
18126 		} else if (IS_VAR == IS_UNUSED) {
18127 			ce = zend_fetch_class(NULL, opline->op2.num);
18128 			if (UNEXPECTED(ce == NULL)) {
18129 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18130 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18131 				HANDLE_EXCEPTION();
18132 			}
18133 		} else {
18134 			ce = Z_CE_P(EX_VAR(opline->op2.var));
18135 		}
18136 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
18137 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
18138 		expr = Z_REFVAL_P(expr);
18139 		goto try_instanceof;
18140 	} else {
18141 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
18142 			ZVAL_UNDEFINED_OP1();
18143 		}
18144 		result = 0;
18145 	}
18146 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18147 	ZEND_VM_SMART_BRANCH(result, 1);
18148 }
18149 
zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)18150 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)
18151 {
18152 	USE_OPLINE
18153 	zval *varname;
18154 	zval *retval;
18155 	zend_string *name, *tmp_name;
18156 	HashTable *target_symbol_table;
18157 
18158 	SAVE_OPLINE();
18159 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18160 
18161 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18162 		name = Z_STR_P(varname);
18163 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
18164 		name = Z_STR_P(varname);
18165 		tmp_name = NULL;
18166 	} else {
18167 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
18168 			ZVAL_UNDEFINED_OP1();
18169 		}
18170 		name = zval_try_get_tmp_string(varname, &tmp_name);
18171 		if (UNEXPECTED(!name)) {
18172 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
18173 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18174 			}
18175 			ZVAL_UNDEF(EX_VAR(opline->result.var));
18176 			HANDLE_EXCEPTION();
18177 		}
18178 	}
18179 
18180 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
18181 	retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
18182 	if (retval == NULL) {
18183 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
18184 fetch_this:
18185 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
18186 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18187 				zend_tmp_string_release(tmp_name);
18188 			}
18189 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18190 		}
18191 		if (type == BP_VAR_W) {
18192 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
18193 		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
18194 			retval = &EG(uninitialized_zval);
18195 		} else {
18196 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
18197 				/* Keep name alive in case an error handler tries to free it. */
18198 				zend_string_addref(name);
18199 			}
18200 			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
18201 				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
18202 			if (type == BP_VAR_RW && !EG(exception)) {
18203 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
18204 			} else {
18205 				retval = &EG(uninitialized_zval);
18206 			}
18207 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
18208 				zend_string_release(name);
18209 			}
18210 		}
18211 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
18212 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
18213 		retval = Z_INDIRECT_P(retval);
18214 		if (Z_TYPE_P(retval) == IS_UNDEF) {
18215 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
18216 				goto fetch_this;
18217 			}
18218 			if (type == BP_VAR_W) {
18219 				ZVAL_NULL(retval);
18220 			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
18221 				retval = &EG(uninitialized_zval);
18222 			} else {
18223 				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
18224 					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
18225 				if (type == BP_VAR_RW && !EG(exception)) {
18226 					ZVAL_NULL(retval);
18227 				} else {
18228 					retval = &EG(uninitialized_zval);
18229 				}
18230 			}
18231 		}
18232 	}
18233 
18234 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
18235 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18236 	}
18237 
18238 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18239 		zend_tmp_string_release(tmp_name);
18240 	}
18241 
18242 	ZEND_ASSERT(retval != NULL);
18243 	if (type == BP_VAR_R || type == BP_VAR_IS) {
18244 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18245 	} else {
18246 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
18247 	}
18248 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18249 }
18250 
ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18251 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18252 {
18253 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18254 }
18255 
ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18257 {
18258 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18259 }
18260 
ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18261 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18262 {
18263 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18264 }
18265 
ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18267 {
18268 	int fetch_type =
18269 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
18270 			BP_VAR_W : BP_VAR_R;
18271 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18272 }
18273 
ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18274 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18275 {
18276 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18277 }
18278 
ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18279 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18280 {
18281 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18282 }
18283 
18284 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18285 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18286 {
18287 	USE_OPLINE
18288 	zval *value, *arg;
18289 
18290 	if (IS_UNUSED == IS_CONST) {
18291 		SAVE_OPLINE();
18292 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
18293 		uint32_t arg_num;
18294 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
18295 		if (UNEXPECTED(!arg)) {
18296 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18297 			HANDLE_EXCEPTION();
18298 		}
18299 	} else {
18300 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
18301 	}
18302 
18303 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18304 	ZVAL_COPY_VALUE(arg, value);
18305 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18306 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
18307 			Z_ADDREF_P(arg);
18308 		}
18309 	}
18310 	ZEND_VM_NEXT_OPCODE();
18311 }
18312 
ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18313 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18314 {
18315 	USE_OPLINE
18316 	zval *varname;
18317 	zend_string *name, *tmp_name;
18318 	HashTable *target_symbol_table;
18319 
18320 	SAVE_OPLINE();
18321 
18322 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18323 
18324 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18325 		name = Z_STR_P(varname);
18326 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
18327 		name = Z_STR_P(varname);
18328 		tmp_name = NULL;
18329 	} else {
18330 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
18331 			varname = ZVAL_UNDEFINED_OP1();
18332 		}
18333 		name = zval_try_get_tmp_string(varname, &tmp_name);
18334 		if (UNEXPECTED(!name)) {
18335 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18336 			HANDLE_EXCEPTION();
18337 		}
18338 	}
18339 
18340 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
18341 	zend_hash_del_ind(target_symbol_table, name);
18342 
18343 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18344 		zend_tmp_string_release(tmp_name);
18345 	}
18346 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18347 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18348 }
18349 
18350 /* 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)18351 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18352 {
18353 	USE_OPLINE
18354 	zval *value;
18355 	bool result;
18356 	zval *varname;
18357 	zend_string *name, *tmp_name;
18358 	HashTable *target_symbol_table;
18359 
18360 	SAVE_OPLINE();
18361 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18362 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18363 		name = Z_STR_P(varname);
18364 	} else {
18365 		name = zval_get_tmp_string(varname, &tmp_name);
18366 	}
18367 
18368 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
18369 	value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
18370 
18371 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18372 		zend_tmp_string_release(tmp_name);
18373 	}
18374 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18375 
18376 	if (!value) {
18377 		result = (opline->extended_value & ZEND_ISEMPTY);
18378 	} else {
18379 		if (Z_TYPE_P(value) == IS_INDIRECT) {
18380 			value = Z_INDIRECT_P(value);
18381 		}
18382 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
18383 			if (Z_ISREF_P(value)) {
18384 				value = Z_REFVAL_P(value);
18385 			}
18386 			result = Z_TYPE_P(value) > IS_NULL;
18387 		} else {
18388 			result = !i_zend_is_true(value);
18389 		}
18390 	}
18391 
18392 	ZEND_VM_SMART_BRANCH(result, true);
18393 }
18394 
18395 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18396 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18397 {
18398 	USE_OPLINE
18399 	zval *expr;
18400 	bool result;
18401 
18402 	SAVE_OPLINE();
18403 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18404 
18405 try_instanceof:
18406 	if (Z_TYPE_P(expr) == IS_OBJECT) {
18407 		zend_class_entry *ce;
18408 
18409 		if (IS_UNUSED == IS_CONST) {
18410 			ce = CACHED_PTR(opline->extended_value);
18411 			if (UNEXPECTED(ce == NULL)) {
18412 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
18413 				if (EXPECTED(ce)) {
18414 					CACHE_PTR(opline->extended_value, ce);
18415 				}
18416 			}
18417 		} else if (IS_UNUSED == IS_UNUSED) {
18418 			ce = zend_fetch_class(NULL, opline->op2.num);
18419 			if (UNEXPECTED(ce == NULL)) {
18420 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18421 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18422 				HANDLE_EXCEPTION();
18423 			}
18424 		} else {
18425 			ce = Z_CE_P(EX_VAR(opline->op2.var));
18426 		}
18427 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
18428 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
18429 		expr = Z_REFVAL_P(expr);
18430 		goto try_instanceof;
18431 	} else {
18432 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
18433 			ZVAL_UNDEFINED_OP1();
18434 		}
18435 		result = 0;
18436 	}
18437 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18438 	ZEND_VM_SMART_BRANCH(result, 1);
18439 }
18440 
ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18441 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18442 {
18443 	USE_OPLINE
18444 	zval *op1;
18445 	zend_long count;
18446 
18447 	SAVE_OPLINE();
18448 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18449 
18450 	while (1) {
18451 		if (Z_TYPE_P(op1) == IS_ARRAY) {
18452 			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
18453 			break;
18454 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
18455 			zend_object *zobj = Z_OBJ_P(op1);
18456 
18457 			/* first, we check if the handler is defined */
18458 			if (zobj->handlers->count_elements) {
18459 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
18460 					break;
18461 				}
18462 				if (UNEXPECTED(EG(exception))) {
18463 					count = 0;
18464 					break;
18465 				}
18466 			}
18467 
18468 			/* if not and the object implements Countable we call its count() method */
18469 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
18470 				zval retval;
18471 
18472 				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
18473 				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
18474 				count = zval_get_long(&retval);
18475 				zval_ptr_dtor(&retval);
18476 				break;
18477 			}
18478 
18479 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
18480 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
18481 			op1 = Z_REFVAL_P(op1);
18482 			continue;
18483 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18484 			ZVAL_UNDEFINED_OP1();
18485 		}
18486 		count = 0;
18487 		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
18488 		break;
18489 	}
18490 
18491 	ZVAL_LONG(EX_VAR(opline->result.var), count);
18492 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18493 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18494 }
18495 
ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18496 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18497 {
18498 	USE_OPLINE
18499 	zend_array *ht = Z_ARRVAL_P(_get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC));
18500 	ZVAL_LONG(EX_VAR(opline->result.var), zend_hash_num_elements(ht));
18501 	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR) && !(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
18502 		SAVE_OPLINE();
18503 		zend_array_destroy(ht);
18504 		if (EG(exception)) {
18505 			HANDLE_EXCEPTION();
18506 		}
18507 	}
18508 	ZEND_VM_NEXT_OPCODE();
18509 }
18510 
ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18511 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18512 {
18513 	USE_OPLINE
18514 
18515 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
18516 		SAVE_OPLINE();
18517 		if (UNEXPECTED(!EX(func)->common.scope)) {
18518 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
18519 			ZVAL_UNDEF(EX_VAR(opline->result.var));
18520 			HANDLE_EXCEPTION();
18521 		} else {
18522 			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
18523 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
18524 			if (UNEXPECTED(EG(exception))) {
18525 				HANDLE_EXCEPTION();
18526 			}
18527 			ZEND_VM_NEXT_OPCODE();
18528 		}
18529 	} else {
18530 		zval *op1;
18531 
18532 		SAVE_OPLINE();
18533 		op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18534 		while (1) {
18535 			if (Z_TYPE_P(op1) == IS_OBJECT) {
18536 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
18537 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
18538 				op1 = Z_REFVAL_P(op1);
18539 				continue;
18540 			} else {
18541 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18542 					ZVAL_UNDEFINED_OP1();
18543 				}
18544 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
18545 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18546 			}
18547 			break;
18548 		}
18549 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18550 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18551 	}
18552 }
18553 
ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18554 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18555 {
18556 	USE_OPLINE
18557 	zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18558 	zval *result = EX_VAR(opline->result.var);
18559 	ZVAL_COPY(result, value);
18560 	ZEND_VM_NEXT_OPCODE();
18561 }
18562 
ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18563 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18564 {
18565 	USE_OPLINE
18566 	zval *op1, *op2;
18567 
18568 	SAVE_OPLINE();
18569 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18570 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
18571 	div_function(EX_VAR(opline->result.var), op1, op2);
18572 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18573 
18574 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18575 }
18576 
ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18577 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18578 {
18579 	USE_OPLINE
18580 	zval *op1, *op2;
18581 
18582 	SAVE_OPLINE();
18583 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18584 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
18585 	pow_function(EX_VAR(opline->result.var), op1, op2);
18586 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18587 
18588 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18589 }
18590 
ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18591 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18592 {
18593 	USE_OPLINE
18594 	zval *op1, *op2;
18595 
18596 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18597 	op2 = EX_VAR(opline->op2.var);
18598 
18599 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
18600 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
18601 		zend_string *op1_str = Z_STR_P(op1);
18602 		zend_string *op2_str = Z_STR_P(op2);
18603 		zend_string *str;
18604 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
18605 
18606 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
18607 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
18608 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
18609 			} else {
18610 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
18611 			}
18612 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18613 				zend_string_release_ex(op1_str, 0);
18614 			}
18615 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
18616 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
18617 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
18618 			} else {
18619 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
18620 			}
18621 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18622 				zend_string_release_ex(op2_str, 0);
18623 			}
18624 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
18625 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
18626 			size_t len = ZSTR_LEN(op1_str);
18627 
18628 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
18629 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
18630 			}
18631 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
18632 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18633 			GC_ADD_FLAGS(str, flags);
18634 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18635 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18636 				zend_string_release_ex(op2_str, 0);
18637 			}
18638 		} else {
18639 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
18640 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
18641 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18642 			GC_ADD_FLAGS(str, flags);
18643 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18644 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18645 				zend_string_release_ex(op1_str, 0);
18646 			}
18647 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18648 				zend_string_release_ex(op2_str, 0);
18649 			}
18650 		}
18651 		ZEND_VM_NEXT_OPCODE();
18652 	} else {
18653 		SAVE_OPLINE();
18654 
18655 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18656 			op1 = ZVAL_UNDEFINED_OP1();
18657 		}
18658 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
18659 			op2 = ZVAL_UNDEFINED_OP2();
18660 		}
18661 		concat_function(EX_VAR(opline->result.var), op1, op2);
18662 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18663 
18664 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18665 	}
18666 }
18667 
ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18668 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18669 {
18670 	USE_OPLINE
18671 	zval *op1, *op2;
18672 
18673 	SAVE_OPLINE();
18674 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18675 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
18676 	compare_function(EX_VAR(opline->result.var), op1, op2);
18677 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18678 
18679 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18680 }
18681 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18683 {
18684 	USE_OPLINE
18685 	zval *container, *dim, *value;
18686 
18687 	SAVE_OPLINE();
18688 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18689 	dim = EX_VAR(opline->op2.var);
18690 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18691 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18692 fetch_dim_r_array:
18693 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
18694 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
18695 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
18696 			container = Z_REFVAL_P(container);
18697 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18698 				goto fetch_dim_r_array;
18699 			} else {
18700 				goto fetch_dim_r_slow;
18701 			}
18702 		} else {
18703 fetch_dim_r_slow:
18704 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
18705 				dim++;
18706 			}
18707 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
18708 		}
18709 	} else {
18710 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
18711 	}
18712 
18713 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18714 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18715 }
18716 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18717 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18718 {
18719 	USE_OPLINE
18720 	zval *container;
18721 
18722 	SAVE_OPLINE();
18723 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18724 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
18725 
18726 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18727 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18728 }
18729 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18730 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18731 {
18732 	USE_OPLINE
18733 	zval *container;
18734 	void **cache_slot = NULL;
18735 
18736 	SAVE_OPLINE();
18737 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18738 
18739 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
18740 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18741 		do {
18742 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18743 				container = Z_REFVAL_P(container);
18744 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
18745 					break;
18746 				}
18747 			}
18748 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
18749 				ZVAL_UNDEFINED_OP1();
18750 			}
18751 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18752 			ZVAL_NULL(EX_VAR(opline->result.var));
18753 			goto fetch_obj_r_finish;
18754 		} while (0);
18755 	}
18756 
18757 	/* here we are sure we are dealing with an object */
18758 	do {
18759 		zend_object *zobj = Z_OBJ_P(container);
18760 		zend_string *name, *tmp_name;
18761 		zval *retval;
18762 
18763 		if (IS_CV == IS_CONST) {
18764 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
18765 
18766 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
18767 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
18768 
18769 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
18770 					retval = OBJ_PROP(zobj, prop_offset);
18771 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
18772 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18773 							goto fetch_obj_r_copy;
18774 						} else {
18775 fetch_obj_r_fast_copy:
18776 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18777 							ZEND_VM_NEXT_OPCODE();
18778 						}
18779 					}
18780 				} else if (EXPECTED(zobj->properties != NULL)) {
18781 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18782 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
18783 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
18784 
18785 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
18786 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
18787 
18788 							if (EXPECTED(p->key == name) ||
18789 							    (EXPECTED(p->h == ZSTR_H(name)) &&
18790 							     EXPECTED(p->key != NULL) &&
18791 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
18792 								retval = &p->val;
18793 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18794 									goto fetch_obj_r_copy;
18795 								} else {
18796 									goto fetch_obj_r_fast_copy;
18797 								}
18798 							}
18799 						}
18800 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
18801 					}
18802 					retval = zend_hash_find_known_hash(zobj->properties, name);
18803 					if (EXPECTED(retval)) {
18804 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
18805 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
18806 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18807 							goto fetch_obj_r_copy;
18808 						} else {
18809 							goto fetch_obj_r_fast_copy;
18810 						}
18811 					}
18812 				}
18813 			}
18814 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18815 		} else {
18816 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
18817 			if (UNEXPECTED(!name)) {
18818 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18819 				break;
18820 			}
18821 		}
18822 
18823 #if ZEND_DEBUG
18824 		/* For non-standard object handlers, verify a declared property type in debug builds.
18825 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
18826 		zend_property_info *prop_info = NULL;
18827 		if (zobj->handlers->read_property != zend_std_read_property) {
18828 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
18829 		}
18830 #endif
18831 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
18832 #if ZEND_DEBUG
18833 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
18834 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
18835 			ZVAL_OPT_DEREF(retval);
18836 			zend_verify_property_type(prop_info, retval, /* strict */ true);
18837 		}
18838 #endif
18839 
18840 		if (IS_CV != IS_CONST) {
18841 			zend_tmp_string_release(tmp_name);
18842 		}
18843 
18844 		if (retval != EX_VAR(opline->result.var)) {
18845 fetch_obj_r_copy:
18846 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18847 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
18848 			zend_unwrap_reference(retval);
18849 		}
18850 	} while (0);
18851 
18852 fetch_obj_r_finish:
18853 
18854 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18855 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18856 }
18857 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18859 {
18860 	USE_OPLINE
18861 	zval *container;
18862 	void **cache_slot = NULL;
18863 
18864 	SAVE_OPLINE();
18865 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18866 
18867 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
18868 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18869 		do {
18870 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18871 				container = Z_REFVAL_P(container);
18872 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
18873 					break;
18874 				}
18875 			}
18876 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
18877 				ZVAL_UNDEFINED_OP2();
18878 			}
18879 			ZVAL_NULL(EX_VAR(opline->result.var));
18880 			goto fetch_obj_is_finish;
18881 		} while (0);
18882 	}
18883 
18884 	/* here we are sure we are dealing with an object */
18885 	do {
18886 		zend_object *zobj = Z_OBJ_P(container);
18887 		zend_string *name, *tmp_name;
18888 		zval *retval;
18889 
18890 		if (IS_CV == IS_CONST) {
18891 			cache_slot = CACHE_ADDR(opline->extended_value);
18892 
18893 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
18894 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
18895 
18896 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
18897 					retval = OBJ_PROP(zobj, prop_offset);
18898 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
18899 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18900 							goto fetch_obj_is_copy;
18901 						} else {
18902 fetch_obj_is_fast_copy:
18903 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18904 							ZEND_VM_NEXT_OPCODE();
18905 						}
18906 					}
18907 				} else if (EXPECTED(zobj->properties != NULL)) {
18908 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18909 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
18910 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
18911 
18912 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
18913 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
18914 
18915 							if (EXPECTED(p->key == name) ||
18916 							    (EXPECTED(p->h == ZSTR_H(name)) &&
18917 							     EXPECTED(p->key != NULL) &&
18918 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
18919 								retval = &p->val;
18920 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18921 									goto fetch_obj_is_copy;
18922 								} else {
18923 									goto fetch_obj_is_fast_copy;
18924 								}
18925 							}
18926 						}
18927 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
18928 					}
18929 					retval = zend_hash_find_known_hash(zobj->properties, name);
18930 					if (EXPECTED(retval)) {
18931 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
18932 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
18933 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18934 							goto fetch_obj_is_copy;
18935 						} else {
18936 							goto fetch_obj_is_fast_copy;
18937 						}
18938 					}
18939 				}
18940 			}
18941 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18942 		} else {
18943 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
18944 			if (UNEXPECTED(!name)) {
18945 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18946 				break;
18947 			}
18948 		}
18949 
18950 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
18951 
18952 		if (IS_CV != IS_CONST) {
18953 			zend_tmp_string_release(tmp_name);
18954 		}
18955 
18956 		if (retval != EX_VAR(opline->result.var)) {
18957 fetch_obj_is_copy:
18958 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18959 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
18960 			zend_unwrap_reference(retval);
18961 		}
18962 	} while (0);
18963 
18964 fetch_obj_is_finish:
18965 
18966 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18967 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18968 }
18969 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18970 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18971 {
18972 	USE_OPLINE
18973 	zval *op1, *op2;
18974 	zend_string *op1_str, *op2_str, *str;
18975 
18976 
18977 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18978 	op2 = EX_VAR(opline->op2.var);
18979 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
18980 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
18981 		zend_string *op1_str = Z_STR_P(op1);
18982 		zend_string *op2_str = Z_STR_P(op2);
18983 		zend_string *str;
18984 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
18985 
18986 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
18987 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
18988 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
18989 			} else {
18990 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
18991 			}
18992 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18993 				zend_string_release_ex(op1_str, 0);
18994 			}
18995 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
18996 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
18997 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
18998 			} else {
18999 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
19000 			}
19001 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
19002 				zend_string_release_ex(op2_str, 0);
19003 			}
19004 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
19005 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
19006 			size_t len = ZSTR_LEN(op1_str);
19007 
19008 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
19009 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
19010 			GC_ADD_FLAGS(str, flags);
19011 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
19012 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
19013 				zend_string_release_ex(op2_str, 0);
19014 			}
19015 		} else {
19016 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
19017 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
19018 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
19019 			GC_ADD_FLAGS(str, flags);
19020 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
19021 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
19022 				zend_string_release_ex(op1_str, 0);
19023 			}
19024 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
19025 				zend_string_release_ex(op2_str, 0);
19026 			}
19027 		}
19028 		ZEND_VM_NEXT_OPCODE();
19029 	}
19030 
19031 	SAVE_OPLINE();
19032 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
19033 		op1_str = Z_STR_P(op1);
19034 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
19035 		op1_str = zend_string_copy(Z_STR_P(op1));
19036 	} else {
19037 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
19038 			ZVAL_UNDEFINED_OP1();
19039 		}
19040 		op1_str = zval_get_string_func(op1);
19041 	}
19042 	if (IS_CV == IS_CONST) {
19043 		op2_str = Z_STR_P(op2);
19044 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
19045 		op2_str = zend_string_copy(Z_STR_P(op2));
19046 	} else {
19047 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
19048 			ZVAL_UNDEFINED_OP2();
19049 		}
19050 		op2_str = zval_get_string_func(op2);
19051 	}
19052 	do {
19053 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
19054 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
19055 				if (IS_CV == IS_CONST) {
19056 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
19057 						GC_ADDREF(op2_str);
19058 					}
19059 				}
19060 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
19061 				zend_string_release_ex(op1_str, 0);
19062 				break;
19063 			}
19064 		}
19065 		if (IS_CV != IS_CONST) {
19066 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
19067 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
19068 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
19069 						GC_ADDREF(op1_str);
19070 					}
19071 				}
19072 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
19073 				zend_string_release_ex(op2_str, 0);
19074 				break;
19075 			}
19076 		}
19077 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
19078 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
19079 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
19080 
19081 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
19082 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
19083 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
19084 			zend_string_release_ex(op1_str, 0);
19085 		}
19086 		if (IS_CV != IS_CONST) {
19087 			zend_string_release_ex(op2_str, 0);
19088 		}
19089 	} while (0);
19090 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19091 
19092 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19093 }
19094 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19095 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19096 {
19097 	USE_OPLINE
19098 	zval *function_name;
19099 	zval *object;
19100 	zend_function *fbc;
19101 	zend_class_entry *called_scope;
19102 	zend_object *obj;
19103 	zend_execute_data *call;
19104 	uint32_t call_info;
19105 
19106 	SAVE_OPLINE();
19107 
19108 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
19109 
19110 	if (IS_CV != IS_CONST) {
19111 		function_name = EX_VAR(opline->op2.var);
19112 	}
19113 
19114 	if (IS_CV != IS_CONST &&
19115 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
19116 		do {
19117 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
19118 				function_name = Z_REFVAL_P(function_name);
19119 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
19120 					break;
19121 				}
19122 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
19123 				ZVAL_UNDEFINED_OP2();
19124 				if (UNEXPECTED(EG(exception) != NULL)) {
19125 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19126 					HANDLE_EXCEPTION();
19127 				}
19128 			}
19129 			zend_throw_error(NULL, "Method name must be a string");
19130 
19131 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19132 			HANDLE_EXCEPTION();
19133 		} while (0);
19134 	}
19135 
19136 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
19137 		obj = Z_OBJ_P(object);
19138 	} else {
19139 		do {
19140 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
19141 				obj = Z_OBJ_P(object);
19142 			} else {
19143 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
19144 					zend_reference *ref = Z_REF_P(object);
19145 
19146 					object = &ref->val;
19147 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
19148 						obj = Z_OBJ_P(object);
19149 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
19150 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19151 								efree_size(ref, sizeof(zend_reference));
19152 							} else {
19153 								Z_ADDREF_P(object);
19154 							}
19155 						}
19156 						break;
19157 					}
19158 				}
19159 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
19160 					object = ZVAL_UNDEFINED_OP1();
19161 					if (UNEXPECTED(EG(exception) != NULL)) {
19162 						if (IS_CV != IS_CONST) {
19163 
19164 						}
19165 						HANDLE_EXCEPTION();
19166 					}
19167 				}
19168 				if (IS_CV == IS_CONST) {
19169 					function_name = EX_VAR(opline->op2.var);
19170 				}
19171 				zend_invalid_method_call(object, function_name);
19172 
19173 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19174 				HANDLE_EXCEPTION();
19175 			}
19176 		} while (0);
19177 	}
19178 
19179 	called_scope = obj->ce;
19180 
19181 	if (IS_CV == IS_CONST &&
19182 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
19183 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
19184 	} else {
19185 		zend_object *orig_obj = obj;
19186 
19187 		if (IS_CV == IS_CONST) {
19188 			function_name = EX_VAR(opline->op2.var);
19189 		}
19190 
19191 		/* First, locate the function. */
19192 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
19193 		if (UNEXPECTED(fbc == NULL)) {
19194 			if (EXPECTED(!EG(exception))) {
19195 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
19196 			}
19197 
19198 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
19199 				zend_objects_store_del(orig_obj);
19200 			}
19201 			HANDLE_EXCEPTION();
19202 		}
19203 		if (IS_CV == IS_CONST &&
19204 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
19205 		    EXPECTED(obj == orig_obj)) {
19206 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
19207 		}
19208 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
19209 			GC_ADDREF(obj); /* For $this pointer */
19210 			if (GC_DELREF(orig_obj) == 0) {
19211 				zend_objects_store_del(orig_obj);
19212 			}
19213 		}
19214 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
19215 			init_func_run_time_cache(&fbc->op_array);
19216 		}
19217 	}
19218 
19219 	if (IS_CV != IS_CONST) {
19220 
19221 	}
19222 
19223 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
19224 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
19225 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
19226 			zend_objects_store_del(obj);
19227 			if (UNEXPECTED(EG(exception))) {
19228 				HANDLE_EXCEPTION();
19229 			}
19230 		}
19231 		/* call static method */
19232 		obj = (zend_object*)called_scope;
19233 		call_info = ZEND_CALL_NESTED_FUNCTION;
19234 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
19235 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
19236 			GC_ADDREF(obj); /* For $this pointer */
19237 		}
19238 		/* CV may be changed indirectly (e.g. when it's a reference) */
19239 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
19240 	}
19241 
19242 	call = zend_vm_stack_push_call_frame(call_info,
19243 		fbc, opline->extended_value, obj);
19244 	call->prev_execute_data = EX(call);
19245 	EX(call) = call;
19246 
19247 	ZEND_VM_NEXT_OPCODE();
19248 }
19249 
ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19250 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19251 {
19252 	USE_OPLINE
19253 	zval *op1, *op2;
19254 	double d1, d2;
19255 
19256 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
19257 	op2 = EX_VAR(opline->op2.var);
19258 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
19259 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
19260 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
19261 case_true:
19262 				ZEND_VM_SMART_BRANCH_TRUE();
19263 			} else {
19264 case_false:
19265 				ZEND_VM_SMART_BRANCH_FALSE();
19266 			}
19267 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
19268 			d1 = (double)Z_LVAL_P(op1);
19269 			d2 = Z_DVAL_P(op2);
19270 			goto case_double;
19271 		}
19272 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
19273 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
19274 			d1 = Z_DVAL_P(op1);
19275 			d2 = Z_DVAL_P(op2);
19276 case_double:
19277 			if (d1 == d2) {
19278 				goto case_true;
19279 			} else {
19280 				goto case_false;
19281 			}
19282 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
19283 			d1 = Z_DVAL_P(op1);
19284 			d2 = (double)Z_LVAL_P(op2);
19285 			goto case_double;
19286 		}
19287 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
19288 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
19289 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
19290 
19291 			if (result) {
19292 				goto case_true;
19293 			} else {
19294 				goto case_false;
19295 			}
19296 		}
19297 	}
19298 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19299 }
19300 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19301 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19302 {
19303 	USE_OPLINE
19304 	zval *container;
19305 	bool result;
19306 	zend_ulong hval;
19307 	zval *offset;
19308 
19309 	SAVE_OPLINE();
19310 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
19311 	offset = EX_VAR(opline->op2.var);
19312 
19313 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
19314 		HashTable *ht;
19315 		zval *value;
19316 		zend_string *str;
19317 
19318 isset_dim_obj_array:
19319 		ht = Z_ARRVAL_P(container);
19320 isset_again:
19321 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
19322 			str = Z_STR_P(offset);
19323 			if (IS_CV != IS_CONST) {
19324 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
19325 					goto num_index_prop;
19326 				}
19327 			}
19328 			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
19329 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
19330 			hval = Z_LVAL_P(offset);
19331 num_index_prop:
19332 			value = zend_hash_index_find(ht, hval);
19333 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
19334 			offset = Z_REFVAL_P(offset);
19335 			goto isset_again;
19336 		} else {
19337 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
19338 			if (UNEXPECTED(EG(exception))) {
19339 				result = 0;
19340 				goto isset_dim_obj_exit;
19341 			}
19342 		}
19343 
19344 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
19345 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
19346 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
19347 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
19348 
19349 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
19350 				/* avoid exception check */
19351 
19352 				ZEND_VM_SMART_BRANCH(result, 0);
19353 			}
19354 		} else {
19355 			result = (value == NULL || !i_zend_is_true(value));
19356 		}
19357 		goto isset_dim_obj_exit;
19358 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
19359 		container = Z_REFVAL_P(container);
19360 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
19361 			goto isset_dim_obj_array;
19362 		}
19363 	}
19364 
19365 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
19366 		offset++;
19367 	}
19368 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
19369 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
19370 	} else {
19371 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
19372 	}
19373 
19374 isset_dim_obj_exit:
19375 
19376 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19377 	ZEND_VM_SMART_BRANCH(result, 1);
19378 }
19379 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19380 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19381 {
19382 	USE_OPLINE
19383 	zval *container;
19384 	int result;
19385 	zval *offset;
19386 	zend_string *name, *tmp_name;
19387 
19388 	SAVE_OPLINE();
19389 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
19390 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
19391 
19392 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
19393 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
19394 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
19395 			container = Z_REFVAL_P(container);
19396 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
19397 				result = (opline->extended_value & ZEND_ISEMPTY);
19398 				goto isset_object_finish;
19399 			}
19400 		} else {
19401 			result = (opline->extended_value & ZEND_ISEMPTY);
19402 			goto isset_object_finish;
19403 		}
19404 	}
19405 
19406 	if (IS_CV == IS_CONST) {
19407 		name = Z_STR_P(offset);
19408 	} else {
19409 		name = zval_try_get_tmp_string(offset, &tmp_name);
19410 		if (UNEXPECTED(!name)) {
19411 			result = 0;
19412 			goto isset_object_finish;
19413 		}
19414 	}
19415 
19416 	result =
19417 		(opline->extended_value & ZEND_ISEMPTY) ^
19418 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
19419 
19420 	if (IS_CV != IS_CONST) {
19421 		zend_tmp_string_release(tmp_name);
19422 	}
19423 
19424 isset_object_finish:
19425 
19426 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19427 	ZEND_VM_SMART_BRANCH(result, 1);
19428 }
19429 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19430 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19431 {
19432 	USE_OPLINE
19433 
19434 	zval *key, *subject;
19435 	HashTable *ht;
19436 	bool result;
19437 
19438 	SAVE_OPLINE();
19439 
19440 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
19441 	subject = EX_VAR(opline->op2.var);
19442 
19443 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
19444 array_key_exists_array:
19445 		ht = Z_ARRVAL_P(subject);
19446 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
19447 	} else {
19448 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
19449 			subject = Z_REFVAL_P(subject);
19450 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
19451 				goto array_key_exists_array;
19452 			}
19453 		}
19454 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
19455 		result = 0;
19456 	}
19457 
19458 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19459 	ZEND_VM_SMART_BRANCH(result, 1);
19460 }
19461 
19462 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19463 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19464 {
19465 	USE_OPLINE
19466 	zval *retval_ptr;
19467 	zval *return_value;
19468 
19469 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19470 	return_value = EX(return_value);
19471 
19472 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
19473 		SAVE_OPLINE();
19474 		retval_ptr = ZVAL_UNDEFINED_OP1();
19475 		if (return_value) {
19476 			ZVAL_NULL(return_value);
19477 		}
19478 	} else if (!return_value) {
19479 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
19480 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
19481 				SAVE_OPLINE();
19482 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
19483 			}
19484 		}
19485 	} else {
19486 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19487 			ZVAL_COPY_VALUE(return_value, retval_ptr);
19488 			if (IS_TMP_VAR == IS_CONST) {
19489 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
19490 					Z_ADDREF_P(return_value);
19491 				}
19492 			}
19493 		} else if (IS_TMP_VAR == IS_CV) {
19494 			do {
19495 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
19496 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
19497 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
19498 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
19499 							ZVAL_COPY_VALUE(return_value, retval_ptr);
19500 							if (GC_MAY_LEAK(ref)) {
19501 								SAVE_OPLINE();
19502 								gc_possible_root(ref);
19503 							}
19504 							ZVAL_NULL(retval_ptr);
19505 							break;
19506 						} else {
19507 							Z_ADDREF_P(retval_ptr);
19508 						}
19509 					} else {
19510 						retval_ptr = Z_REFVAL_P(retval_ptr);
19511 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
19512 							Z_ADDREF_P(retval_ptr);
19513 						}
19514 					}
19515 				}
19516 				ZVAL_COPY_VALUE(return_value, retval_ptr);
19517 			} while (0);
19518 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
19519 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
19520 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
19521 
19522 				retval_ptr = Z_REFVAL_P(retval_ptr);
19523 				ZVAL_COPY_VALUE(return_value, retval_ptr);
19524 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19525 					efree_size(ref, sizeof(zend_reference));
19526 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
19527 					Z_ADDREF_P(retval_ptr);
19528 				}
19529 			} else {
19530 				ZVAL_COPY_VALUE(return_value, retval_ptr);
19531 			}
19532 		}
19533 	}
19534 
19535 
19536 
19537 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19538 }
19539 
ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19540 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19541 {
19542 	USE_OPLINE
19543 	zval *retval_ptr;
19544 	zval *return_value;
19545 
19546 	SAVE_OPLINE();
19547 
19548 	return_value = EX(return_value);
19549 
19550 	do {
19551 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
19552 		    (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
19553 			/* Not supposed to happen, but we'll allow it */
19554 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
19555 
19556 			retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19557 			if (!return_value) {
19558 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19559 			} else {
19560 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
19561 					ZVAL_COPY_VALUE(return_value, retval_ptr);
19562 					break;
19563 				}
19564 
19565 				ZVAL_NEW_REF(return_value, retval_ptr);
19566 				if (IS_TMP_VAR == IS_CONST) {
19567 					Z_TRY_ADDREF_P(retval_ptr);
19568 				}
19569 			}
19570 			break;
19571 		}
19572 
19573 		retval_ptr = zend_get_bad_ptr();
19574 
19575 		if (IS_TMP_VAR == IS_VAR) {
19576 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
19577 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
19578 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
19579 				if (return_value) {
19580 					ZVAL_NEW_REF(return_value, retval_ptr);
19581 				} else {
19582 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19583 				}
19584 				break;
19585 			}
19586 		}
19587 
19588 		if (return_value) {
19589 			if (Z_ISREF_P(retval_ptr)) {
19590 				Z_ADDREF_P(retval_ptr);
19591 			} else {
19592 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
19593 			}
19594 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
19595 		}
19596 
19597 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19598 	} while (0);
19599 
19600 
19601 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19602 }
19603 
ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19604 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19605 {
19606 	USE_OPLINE
19607 	zval *retval;
19608 
19609 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
19610 
19611 	SAVE_OPLINE();
19612 	retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19613 
19614 	/* Copy return value into generator->retval */
19615 	if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19616 		ZVAL_COPY_VALUE(&generator->retval, retval);
19617 		if (IS_TMP_VAR == IS_CONST) {
19618 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
19619 				Z_ADDREF(generator->retval);
19620 			}
19621 		}
19622 	} else if (IS_TMP_VAR == IS_CV) {
19623 		ZVAL_COPY_DEREF(&generator->retval, retval);
19624 	} else /* if (IS_TMP_VAR == IS_VAR) */ {
19625 		if (UNEXPECTED(Z_ISREF_P(retval))) {
19626 			zend_refcounted *ref = Z_COUNTED_P(retval);
19627 
19628 			retval = Z_REFVAL_P(retval);
19629 			ZVAL_COPY_VALUE(&generator->retval, retval);
19630 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19631 				efree_size(ref, sizeof(zend_reference));
19632 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
19633 				Z_ADDREF_P(retval);
19634 			}
19635 		} else {
19636 			ZVAL_COPY_VALUE(&generator->retval, retval);
19637 		}
19638 	}
19639 
19640 	EG(current_execute_data) = EX(prev_execute_data);
19641 
19642 	/* Close the generator to free up resources */
19643 	zend_generator_close(generator, 1);
19644 
19645 	/* Pass execution back to handling code */
19646 	ZEND_VM_RETURN();
19647 }
19648 
ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19649 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19650 {
19651 	USE_OPLINE
19652 	zval *arg, *param;
19653 
19654 	SAVE_OPLINE();
19655 
19656 	arg = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19657 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
19658 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
19659 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
19660 		Z_TRY_ADDREF_P(arg);
19661 		ZVAL_NEW_REF(param, arg);
19662 	} else {
19663 		ZVAL_COPY(param, arg);
19664 	}
19665 
19666 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19667 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19668 }
19669 
ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19670 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19671 {
19672 	USE_OPLINE
19673 	zval *expr;
19674 	zval *result = EX_VAR(opline->result.var);
19675 	HashTable *ht;
19676 
19677 	SAVE_OPLINE();
19678 	expr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19679 
19680 	switch (opline->extended_value) {
19681 		case IS_LONG:
19682 			ZVAL_LONG(result, zval_get_long(expr));
19683 			break;
19684 		case IS_DOUBLE:
19685 			ZVAL_DOUBLE(result, zval_get_double(expr));
19686 			break;
19687 		case IS_STRING:
19688 			ZVAL_STR(result, zval_get_string(expr));
19689 			break;
19690 		default:
19691 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
19692 			if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
19693 				ZVAL_DEREF(expr);
19694 			}
19695 			/* If value is already of correct type, return it directly */
19696 			if (Z_TYPE_P(expr) == opline->extended_value) {
19697 				ZVAL_COPY_VALUE(result, expr);
19698 				if (IS_TMP_VAR == IS_CONST) {
19699 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19700 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
19701 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19702 				}
19703 
19704 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19705 			}
19706 
19707 			if (opline->extended_value == IS_ARRAY) {
19708 				if (IS_TMP_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
19709 					if (Z_TYPE_P(expr) != IS_NULL) {
19710 						ZVAL_ARR(result, zend_new_array(1));
19711 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
19712 						if (IS_TMP_VAR == IS_CONST) {
19713 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
19714 						} else {
19715 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
19716 						}
19717 					} else {
19718 						ZVAL_EMPTY_ARRAY(result);
19719 					}
19720 				} else if (Z_OBJ_P(expr)->properties == NULL
19721 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
19722 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
19723 					/* Optimized version without rebuilding properties HashTable */
19724 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
19725 				} else {
19726 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
19727 					if (obj_ht) {
19728 						/* fast copy */
19729 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
19730 							(Z_OBJCE_P(expr)->default_properties_count ||
19731 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
19732 							 GC_IS_RECURSIVE(obj_ht))));
19733 						zend_release_properties(obj_ht);
19734 					} else {
19735 						ZVAL_EMPTY_ARRAY(result);
19736 					}
19737 				}
19738 			} else {
19739 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
19740 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
19741 				if (Z_TYPE_P(expr) == IS_ARRAY) {
19742 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
19743 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
19744 						/* TODO: try not to duplicate immutable arrays as well ??? */
19745 						ht = zend_array_dup(ht);
19746 					}
19747 					Z_OBJ_P(result)->properties = ht;
19748 				} else if (Z_TYPE_P(expr) != IS_NULL) {
19749 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
19750 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
19751 					if (IS_TMP_VAR == IS_CONST) {
19752 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
19753 					} else {
19754 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
19755 					}
19756 				}
19757 			}
19758 	}
19759 
19760 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19761 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19762 }
19763 
ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19764 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19765 {
19766 	USE_OPLINE
19767 	zval *array_ptr, *result;
19768 
19769 	SAVE_OPLINE();
19770 
19771 	array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19772 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
19773 		result = EX_VAR(opline->result.var);
19774 		ZVAL_COPY_VALUE(result, array_ptr);
19775 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
19776 			Z_ADDREF_P(array_ptr);
19777 		}
19778 		Z_FE_POS_P(result) = 0;
19779 
19780 		ZEND_VM_NEXT_OPCODE();
19781 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
19782 		zend_object *zobj = Z_OBJ_P(array_ptr);
19783 		if (!zobj->ce->get_iterator) {
19784 			HashTable *properties = zobj->properties;
19785 			if (properties) {
19786 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
19787 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
19788 						GC_DELREF(properties);
19789 					}
19790 					properties = zobj->properties = zend_array_dup(properties);
19791 				}
19792 			} else {
19793 				properties = zobj->handlers->get_properties(zobj);
19794 			}
19795 
19796 			result = EX_VAR(opline->result.var);
19797 			ZVAL_COPY_VALUE(result, array_ptr);
19798 			if (IS_TMP_VAR != IS_TMP_VAR) {
19799 				Z_ADDREF_P(array_ptr);
19800 			}
19801 
19802 			if (zend_hash_num_elements(properties) == 0) {
19803 				Z_FE_ITER_P(result) = (uint32_t) -1;
19804 
19805 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19806 			}
19807 
19808 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
19809 
19810 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19811 		} else {
19812 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
19813 
19814 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19815 			if (UNEXPECTED(EG(exception))) {
19816 				HANDLE_EXCEPTION();
19817 			} else if (is_empty) {
19818 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19819 			} else {
19820 				ZEND_VM_NEXT_OPCODE();
19821 			}
19822 		}
19823 	} else {
19824 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
19825 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19826 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
19827 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19828 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19829 	}
19830 }
19831 
ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19833 {
19834 	USE_OPLINE
19835 	zval *array_ptr, *array_ref;
19836 
19837 	SAVE_OPLINE();
19838 
19839 	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
19840 		array_ref = array_ptr = zend_get_bad_ptr();
19841 		if (Z_ISREF_P(array_ref)) {
19842 			array_ptr = Z_REFVAL_P(array_ref);
19843 		}
19844 	} else {
19845 		array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19846 	}
19847 
19848 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
19849 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
19850 			if (array_ptr == array_ref) {
19851 				ZVAL_NEW_REF(array_ref, array_ref);
19852 				array_ptr = Z_REFVAL_P(array_ref);
19853 			}
19854 			Z_ADDREF_P(array_ref);
19855 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
19856 		} else {
19857 			array_ref = EX_VAR(opline->result.var);
19858 			ZVAL_NEW_REF(array_ref, array_ptr);
19859 			array_ptr = Z_REFVAL_P(array_ref);
19860 		}
19861 		if (IS_TMP_VAR == IS_CONST) {
19862 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
19863 		} else {
19864 			SEPARATE_ARRAY(array_ptr);
19865 		}
19866 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
19867 
19868 		ZEND_VM_NEXT_OPCODE();
19869 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
19870 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
19871 			HashTable *properties;
19872 			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
19873 				if (array_ptr == array_ref) {
19874 					ZVAL_NEW_REF(array_ref, array_ref);
19875 					array_ptr = Z_REFVAL_P(array_ref);
19876 				}
19877 				Z_ADDREF_P(array_ref);
19878 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
19879 			} else {
19880 				array_ptr = EX_VAR(opline->result.var);
19881 				ZVAL_COPY_VALUE(array_ptr, array_ref);
19882 			}
19883 			if (Z_OBJ_P(array_ptr)->properties
19884 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
19885 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
19886 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
19887 				}
19888 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
19889 			}
19890 
19891 			properties = Z_OBJPROP_P(array_ptr);
19892 			if (zend_hash_num_elements(properties) == 0) {
19893 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
19894 
19895 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19896 			}
19897 
19898 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
19899 
19900 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19901 		} else {
19902 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
19903 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19904 			if (UNEXPECTED(EG(exception))) {
19905 				HANDLE_EXCEPTION();
19906 			} else if (is_empty) {
19907 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19908 			} else {
19909 				ZEND_VM_NEXT_OPCODE();
19910 			}
19911 		}
19912 	} else {
19913 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
19914 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19915 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
19916 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19917 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19918 	}
19919 }
19920 
ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19921 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19922 {
19923 	USE_OPLINE
19924 
19925 	if (E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))
19926 			&& !E_HAS_ONLY_FATAL_ERRORS(Z_LVAL_P(EX_VAR(opline->op1.var)))) {
19927 		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
19928 	}
19929 	ZEND_VM_NEXT_OPCODE();
19930 }
19931 
ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19932 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19933 {
19934 	USE_OPLINE
19935 	zval *value;
19936 	zend_reference *ref = NULL;
19937 	bool ret;
19938 
19939 	SAVE_OPLINE();
19940 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19941 
19942 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
19943 		if (IS_TMP_VAR == IS_VAR) {
19944 			ref = Z_REF_P(value);
19945 		}
19946 		value = Z_REFVAL_P(value);
19947 	}
19948 
19949 	ret = i_zend_is_true(value);
19950 
19951 	if (UNEXPECTED(EG(exception))) {
19952 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19953 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19954 		HANDLE_EXCEPTION();
19955 	}
19956 
19957 	if (ret) {
19958 		zval *result = EX_VAR(opline->result.var);
19959 
19960 		ZVAL_COPY_VALUE(result, value);
19961 		if (IS_TMP_VAR == IS_CONST) {
19962 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19963 		} else if (IS_TMP_VAR == IS_CV) {
19964 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19965 		} else if (IS_TMP_VAR == IS_VAR && ref) {
19966 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19967 				efree_size(ref, sizeof(zend_reference));
19968 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19969 				Z_ADDREF_P(result);
19970 			}
19971 		}
19972 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19973 	}
19974 
19975 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19976 	ZEND_VM_NEXT_OPCODE();
19977 }
19978 
ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19979 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19980 {
19981 	USE_OPLINE
19982 	zval *value;
19983 	zend_reference *ref = NULL;
19984 
19985 	SAVE_OPLINE();
19986 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19987 
19988 	if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19989 		if (IS_TMP_VAR & IS_VAR) {
19990 			ref = Z_REF_P(value);
19991 		}
19992 		value = Z_REFVAL_P(value);
19993 	}
19994 
19995 	if (Z_TYPE_P(value) > IS_NULL) {
19996 		zval *result = EX_VAR(opline->result.var);
19997 		ZVAL_COPY_VALUE(result, value);
19998 		if (IS_TMP_VAR == IS_CONST) {
19999 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
20000 		} else if (IS_TMP_VAR == IS_CV) {
20001 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
20002 		} else if ((IS_TMP_VAR & IS_VAR) && ref) {
20003 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20004 				efree_size(ref, sizeof(zend_reference));
20005 			} else if (Z_OPT_REFCOUNTED_P(result)) {
20006 				Z_ADDREF_P(result);
20007 			}
20008 		}
20009 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
20010 	}
20011 
20012 	if ((IS_TMP_VAR & IS_VAR) && ref) {
20013 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20014 			efree_size(ref, sizeof(zend_reference));
20015 		}
20016 	}
20017 	ZEND_VM_NEXT_OPCODE();
20018 }
20019 
ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20020 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20021 {
20022 	USE_OPLINE
20023 	zval *val, *result;
20024 
20025 	val = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20026 
20027 	if (Z_TYPE_P(val) > IS_NULL) {
20028 		do {
20029 			if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
20030 				val = Z_REFVAL_P(val);
20031 				if (Z_TYPE_P(val) <= IS_NULL) {
20032 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20033 					break;
20034 				}
20035 			}
20036 			ZEND_VM_NEXT_OPCODE();
20037 		} while (0);
20038 	}
20039 
20040 	result = EX_VAR(opline->result.var);
20041 	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
20042 	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
20043 		ZVAL_NULL(result);
20044 		if (IS_TMP_VAR == IS_CV
20045 			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
20046 			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
20047 		) {
20048 			SAVE_OPLINE();
20049 			ZVAL_UNDEFINED_OP1();
20050 			if (UNEXPECTED(EG(exception) != NULL)) {
20051 				HANDLE_EXCEPTION();
20052 			}
20053 		}
20054 	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
20055 		ZVAL_FALSE(result);
20056 	} else {
20057 		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
20058 		ZVAL_TRUE(result);
20059 	}
20060 
20061 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
20062 }
20063 
ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20064 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20065 {
20066 	USE_OPLINE
20067 	zval *value;
20068 	zval *result = EX_VAR(opline->result.var);
20069 
20070 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20071 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
20072 		SAVE_OPLINE();
20073 		ZVAL_UNDEFINED_OP1();
20074 		ZVAL_NULL(result);
20075 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20076 	}
20077 
20078 	if (IS_TMP_VAR == IS_CV) {
20079 		ZVAL_COPY_DEREF(result, value);
20080 	} else if (IS_TMP_VAR == IS_VAR) {
20081 		if (UNEXPECTED(Z_ISREF_P(value))) {
20082 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
20083 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
20084 				efree_size(Z_REF_P(value), sizeof(zend_reference));
20085 			} else if (Z_OPT_REFCOUNTED_P(result)) {
20086 				Z_ADDREF_P(result);
20087 			}
20088 		} else {
20089 			ZVAL_COPY_VALUE(result, value);
20090 		}
20091 	} else {
20092 		ZVAL_COPY_VALUE(result, value);
20093 		if (IS_TMP_VAR == IS_CONST) {
20094 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
20095 				Z_ADDREF_P(result);
20096 			}
20097 		}
20098 	}
20099 	ZEND_VM_NEXT_OPCODE();
20100 }
20101 
ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20102 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20103 {
20104 	USE_OPLINE
20105 	zval *op1, *op2;
20106 	bool result;
20107 
20108 	SAVE_OPLINE();
20109 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20110 	op2 = RT_CONSTANT(opline, opline->op2);
20111 	result = fast_is_identical_function(op1, op2);
20112 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20113 
20114 	ZEND_VM_SMART_BRANCH(result, 1);
20115 }
20116 
ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20117 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20118 {
20119 	USE_OPLINE
20120 	zval *op1, *op2;
20121 	bool result;
20122 
20123 	SAVE_OPLINE();
20124 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20125 	op2 = RT_CONSTANT(opline, opline->op2);
20126 	result = fast_is_identical_function(op1, op2);
20127 
20128 	ZEND_VM_SMART_BRANCH(result, 1);
20129 }
20130 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20131 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20132 {
20133 	USE_OPLINE
20134 	zval *op1, *op2;
20135 	bool result;
20136 
20137 	SAVE_OPLINE();
20138 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20139 	op2 = RT_CONSTANT(opline, opline->op2);
20140 	result = fast_is_not_identical_function(op1, op2);
20141 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20142 
20143 	ZEND_VM_SMART_BRANCH(result, 1);
20144 }
20145 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20146 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20147 {
20148 #if 0
20149 	USE_OPLINE
20150 #endif
20151 
20152 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20153 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20154 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20155 		}
20156 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20157 	} else {
20158 		if (IS_CONST == IS_UNUSED) {
20159 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20160 		}
20161 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20162 	}
20163 }
20164 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20165 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20166 {
20167 #if 0
20168 	USE_OPLINE
20169 #endif
20170 
20171 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20172 		/* Behave like FETCH_OBJ_W */
20173 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20174 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20175 		}
20176 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20177 	} else {
20178 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20179 	}
20180 }
20181 
ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20182 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20183 {
20184 	USE_OPLINE
20185 	zend_string **rope;
20186 	zval *var;
20187 
20188 	/* op1 and result are the same */
20189 	rope = (zend_string**)EX_VAR(opline->op1.var);
20190 	if (IS_CONST == IS_CONST) {
20191 		var = RT_CONSTANT(opline, opline->op2);
20192 		rope[opline->extended_value] = Z_STR_P(var);
20193 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20194 			Z_ADDREF_P(var);
20195 		}
20196 	} else {
20197 		var = RT_CONSTANT(opline, opline->op2);
20198 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20199 			if (IS_CONST == IS_CV) {
20200 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20201 			} else {
20202 				rope[opline->extended_value] = Z_STR_P(var);
20203 			}
20204 		} else {
20205 			SAVE_OPLINE();
20206 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20207 				ZVAL_UNDEFINED_OP2();
20208 			}
20209 			rope[opline->extended_value] = zval_get_string_func(var);
20210 
20211 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20212 		}
20213 	}
20214 	ZEND_VM_NEXT_OPCODE();
20215 }
20216 
ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20218 {
20219 	USE_OPLINE
20220 	zend_string **rope;
20221 	zval *var, *ret;
20222 	uint32_t i;
20223 
20224 	rope = (zend_string**)EX_VAR(opline->op1.var);
20225 	if (IS_CONST == IS_CONST) {
20226 		var = RT_CONSTANT(opline, opline->op2);
20227 		rope[opline->extended_value] = Z_STR_P(var);
20228 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20229 			Z_ADDREF_P(var);
20230 		}
20231 	} else {
20232 		var = RT_CONSTANT(opline, opline->op2);
20233 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20234 			if (IS_CONST == IS_CV) {
20235 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20236 			} else {
20237 				rope[opline->extended_value] = Z_STR_P(var);
20238 			}
20239 		} else {
20240 			SAVE_OPLINE();
20241 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20242 				ZVAL_UNDEFINED_OP2();
20243 			}
20244 			rope[opline->extended_value] = zval_get_string_func(var);
20245 
20246 			if (UNEXPECTED(EG(exception))) {
20247 				for (i = 0; i <= opline->extended_value; i++) {
20248 					zend_string_release_ex(rope[i], 0);
20249 				}
20250 				ZVAL_UNDEF(EX_VAR(opline->result.var));
20251 				HANDLE_EXCEPTION();
20252 			}
20253 		}
20254 	}
20255 
20256 	size_t len = 0;
20257 	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
20258 	for (i = 0; i <= opline->extended_value; i++) {
20259 		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
20260 		len += ZSTR_LEN(rope[i]);
20261 	}
20262 	ret = EX_VAR(opline->result.var);
20263 	ZVAL_STR(ret, zend_string_alloc(len, 0));
20264 	GC_ADD_FLAGS(Z_STR_P(ret), flags);
20265 
20266 	char *target = Z_STRVAL_P(ret);
20267 	for (i = 0; i <= opline->extended_value; i++) {
20268 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
20269 		target += ZSTR_LEN(rope[i]);
20270 		zend_string_release_ex(rope[i], 0);
20271 	}
20272 	*target = '\0';
20273 
20274 	ZEND_VM_NEXT_OPCODE();
20275 }
20276 
ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20277 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20278 {
20279 	USE_OPLINE
20280 	zval *value, *arg;
20281 	uint32_t arg_num;
20282 
20283 	if (IS_CONST == IS_CONST) {
20284 		SAVE_OPLINE();
20285 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
20286 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
20287 		if (UNEXPECTED(!arg)) {
20288 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20289 			HANDLE_EXCEPTION();
20290 		}
20291 	} else {
20292 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20293 		arg_num = opline->op2.num;
20294 	}
20295 
20296 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
20297 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20298 			goto send_val_by_ref;
20299 		}
20300 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20301 send_val_by_ref:
20302 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20303 	}
20304 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20305 	ZVAL_COPY_VALUE(arg, value);
20306 	if (IS_TMP_VAR == IS_CONST) {
20307 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
20308 			Z_ADDREF_P(arg);
20309 		}
20310 	}
20311 	ZEND_VM_NEXT_OPCODE();
20312 }
20313 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20314 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20315 {
20316 	USE_OPLINE
20317 	zval *expr_ptr, new_expr;
20318 
20319 	SAVE_OPLINE();
20320 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20321 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20322 		expr_ptr = zend_get_bad_ptr();
20323 		if (Z_ISREF_P(expr_ptr)) {
20324 			Z_ADDREF_P(expr_ptr);
20325 		} else {
20326 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20327 		}
20328 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20329 	} else {
20330 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20331 		if (IS_TMP_VAR == IS_TMP_VAR) {
20332 			/* pass */
20333 		} else if (IS_TMP_VAR == IS_CONST) {
20334 			Z_TRY_ADDREF_P(expr_ptr);
20335 		} else if (IS_TMP_VAR == IS_CV) {
20336 			ZVAL_DEREF(expr_ptr);
20337 			Z_TRY_ADDREF_P(expr_ptr);
20338 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20339 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20340 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20341 
20342 				expr_ptr = Z_REFVAL_P(expr_ptr);
20343 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20344 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20345 					expr_ptr = &new_expr;
20346 					efree_size(ref, sizeof(zend_reference));
20347 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20348 					Z_ADDREF_P(expr_ptr);
20349 				}
20350 			}
20351 		}
20352 	}
20353 
20354 	if (IS_CONST != IS_UNUSED) {
20355 		zval *offset = RT_CONSTANT(opline, opline->op2);
20356 		zend_string *str;
20357 		zend_ulong hval;
20358 
20359 add_again:
20360 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20361 			str = Z_STR_P(offset);
20362 			if (IS_CONST != IS_CONST) {
20363 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20364 					goto num_index;
20365 				}
20366 			}
20367 str_index:
20368 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20369 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20370 			hval = Z_LVAL_P(offset);
20371 num_index:
20372 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20373 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20374 			offset = Z_REFVAL_P(offset);
20375 			goto add_again;
20376 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20377 			str = ZSTR_EMPTY_ALLOC();
20378 			goto str_index;
20379 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20380 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
20381 			goto num_index;
20382 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20383 			hval = 0;
20384 			goto num_index;
20385 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20386 			hval = 1;
20387 			goto num_index;
20388 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20389 			zend_use_resource_as_offset(offset);
20390 			hval = Z_RES_HANDLE_P(offset);
20391 			goto num_index;
20392 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20393 			ZVAL_UNDEFINED_OP2();
20394 			str = ZSTR_EMPTY_ALLOC();
20395 			goto str_index;
20396 		} else {
20397 			zend_illegal_array_offset_access(offset);
20398 			zval_ptr_dtor_nogc(expr_ptr);
20399 		}
20400 
20401 	} else {
20402 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20403 			zend_cannot_add_element();
20404 			zval_ptr_dtor_nogc(expr_ptr);
20405 		}
20406 	}
20407 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20408 }
20409 
ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20410 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20411 {
20412 	zval *array;
20413 	uint32_t size;
20414 	USE_OPLINE
20415 
20416 	array = EX_VAR(opline->result.var);
20417 	if (IS_TMP_VAR != IS_UNUSED) {
20418 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20419 		ZVAL_ARR(array, zend_new_array(size));
20420 		/* Explicitly initialize array as not-packed if flag is set */
20421 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20422 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
20423 		}
20424 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20425 	} else {
20426 		ZVAL_ARR(array, zend_new_array(0));
20427 		ZEND_VM_NEXT_OPCODE();
20428 	}
20429 }
20430 
ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20431 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20432 {
20433 	USE_OPLINE
20434 
20435 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20436 
20437 	SAVE_OPLINE();
20438 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20439 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20440 	}
20441 
20442 	/* Destroy the previously yielded value */
20443 	zval_ptr_dtor(&generator->value);
20444 
20445 	/* Destroy the previously yielded key */
20446 	zval_ptr_dtor(&generator->key);
20447 
20448 	/* Set the new yielded value */
20449 	if (IS_TMP_VAR != IS_UNUSED) {
20450 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20451 			/* Constants and temporary variables aren't yieldable by reference,
20452 			 * but we still allow them with a notice. */
20453 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
20454 				zval *value;
20455 
20456 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20457 
20458 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20459 				ZVAL_COPY_VALUE(&generator->value, value);
20460 				if (IS_TMP_VAR == IS_CONST) {
20461 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20462 						Z_ADDREF(generator->value);
20463 					}
20464 				}
20465 			} else {
20466 				zval *value_ptr = zend_get_bad_ptr();
20467 
20468 				/* If a function call result is yielded and the function did
20469 				 * not return by reference we throw a notice. */
20470 				do {
20471 					if (IS_TMP_VAR == IS_VAR) {
20472 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
20473 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
20474 						 && !Z_ISREF_P(value_ptr)) {
20475 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20476 							ZVAL_COPY(&generator->value, value_ptr);
20477 							break;
20478 						}
20479 					}
20480 					if (Z_ISREF_P(value_ptr)) {
20481 						Z_ADDREF_P(value_ptr);
20482 					} else {
20483 						ZVAL_MAKE_REF_EX(value_ptr, 2);
20484 					}
20485 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
20486 				} while (0);
20487 
20488 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20489 			}
20490 		} else {
20491 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20492 
20493 			/* Consts, temporary variables and references need copying */
20494 			if (IS_TMP_VAR == IS_CONST) {
20495 				ZVAL_COPY_VALUE(&generator->value, value);
20496 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20497 					Z_ADDREF(generator->value);
20498 				}
20499 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20500 				ZVAL_COPY_VALUE(&generator->value, value);
20501 			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20502 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20503 
20504 			} else {
20505 				ZVAL_COPY_VALUE(&generator->value, value);
20506 				if (IS_TMP_VAR == IS_CV) {
20507 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20508 				}
20509 			}
20510 		}
20511 	} else {
20512 		/* If no value was specified yield null */
20513 		ZVAL_NULL(&generator->value);
20514 	}
20515 
20516 	/* Set the new yielded key */
20517 	if (IS_CONST != IS_UNUSED) {
20518 		zval *key = RT_CONSTANT(opline, opline->op2);
20519 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
20520 			key = Z_REFVAL_P(key);
20521 		}
20522 		ZVAL_COPY(&generator->key, key);
20523 
20524 		if (Z_TYPE(generator->key) == IS_LONG
20525 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20526 		) {
20527 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20528 		}
20529 	} else {
20530 		/* If no key was specified we use auto-increment keys */
20531 		generator->largest_used_integer_key++;
20532 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20533 	}
20534 
20535 	if (RETURN_VALUE_USED(opline)) {
20536 		/* If the return value of yield is used set the send
20537 		 * target and initialize it to NULL */
20538 		generator->send_target = EX_VAR(opline->result.var);
20539 		ZVAL_NULL(generator->send_target);
20540 	} else {
20541 		generator->send_target = NULL;
20542 	}
20543 
20544 	/* We increment to the next op, so we are at the correct position when the
20545 	 * generator is resumed. */
20546 	ZEND_VM_INC_OPCODE();
20547 
20548 	/* The GOTO VM uses a local opline variable. We need to set the opline
20549 	 * variable in execute_data so we don't resume at an old position. */
20550 	SAVE_OPLINE();
20551 
20552 	ZEND_VM_RETURN();
20553 }
20554 
ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20555 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20556 {
20557 	USE_OPLINE
20558 	zval *op1;
20559 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
20560 	zval *result;
20561 
20562 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20563 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
20564 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_TMP_VAR == IS_CONST);
20565 		if (IS_TMP_VAR & (IS_TMP_VAR|IS_VAR)) {
20566 			zval_ptr_dtor_str(op1);
20567 		}
20568 		ZEND_VM_SMART_BRANCH(result, 0);
20569 	}
20570 
20571 	if (opline->extended_value) {
20572 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
20573 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
20574 			ZEND_VM_SMART_BRANCH(result, 0);
20575 		}
20576 		SAVE_OPLINE();
20577 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
20578 			op1 = Z_REFVAL_P(op1);
20579 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
20580 				result = zend_hash_find(ht, Z_STR_P(op1));
20581 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20582 				ZEND_VM_SMART_BRANCH(result, 0);
20583 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
20584 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
20585 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20586 				ZEND_VM_SMART_BRANCH(result, 0);
20587 			}
20588 		} else if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
20589 			ZVAL_UNDEFINED_OP1();
20590 		}
20591 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
20592 		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
20593 			SAVE_OPLINE();
20594 			ZVAL_UNDEFINED_OP1();
20595 			if (UNEXPECTED(EG(exception) != NULL)) {
20596 				HANDLE_EXCEPTION();
20597 			}
20598 		}
20599 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
20600 		ZEND_VM_SMART_BRANCH(result, 0);
20601 	} else {
20602 		zend_string *key;
20603 		zval key_tmp;
20604 
20605 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
20606 			op1 = Z_REFVAL_P(op1);
20607 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
20608 				result = zend_hash_find(ht, Z_STR_P(op1));
20609 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20610 				ZEND_VM_SMART_BRANCH(result, 0);
20611 			}
20612 		}
20613 
20614 		SAVE_OPLINE();
20615 		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
20616 			ZVAL_STR(&key_tmp, key);
20617 			if (zend_compare(op1, &key_tmp) == 0) {
20618 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20619 				ZEND_VM_SMART_BRANCH(1, 1);
20620 			}
20621 		} ZEND_HASH_FOREACH_END();
20622 	}
20623 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20624 	ZEND_VM_SMART_BRANCH(0, 1);
20625 }
20626 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20627 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20628 {
20629 #if 0
20630 	USE_OPLINE
20631 #endif
20632 
20633 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20634 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20635 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20636 		}
20637 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20638 	} else {
20639 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
20640 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20641 		}
20642 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20643 	}
20644 }
20645 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20646 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20647 {
20648 #if 0
20649 	USE_OPLINE
20650 #endif
20651 
20652 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20653 		/* Behave like FETCH_OBJ_W */
20654 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20655 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20656 		}
20657 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20658 	} else {
20659 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20660 	}
20661 }
20662 
ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20663 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20664 {
20665 	USE_OPLINE
20666 	zend_string **rope;
20667 	zval *var;
20668 
20669 	/* op1 and result are the same */
20670 	rope = (zend_string**)EX_VAR(opline->op1.var);
20671 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
20672 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20673 		rope[opline->extended_value] = Z_STR_P(var);
20674 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20675 			Z_ADDREF_P(var);
20676 		}
20677 	} else {
20678 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20679 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20680 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
20681 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20682 			} else {
20683 				rope[opline->extended_value] = Z_STR_P(var);
20684 			}
20685 		} else {
20686 			SAVE_OPLINE();
20687 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20688 				ZVAL_UNDEFINED_OP2();
20689 			}
20690 			rope[opline->extended_value] = zval_get_string_func(var);
20691 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20692 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20693 		}
20694 	}
20695 	ZEND_VM_NEXT_OPCODE();
20696 }
20697 
ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20698 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20699 {
20700 	USE_OPLINE
20701 	zend_string **rope;
20702 	zval *var, *ret;
20703 	uint32_t i;
20704 
20705 	rope = (zend_string**)EX_VAR(opline->op1.var);
20706 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
20707 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20708 		rope[opline->extended_value] = Z_STR_P(var);
20709 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20710 			Z_ADDREF_P(var);
20711 		}
20712 	} else {
20713 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20714 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20715 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
20716 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20717 			} else {
20718 				rope[opline->extended_value] = Z_STR_P(var);
20719 			}
20720 		} else {
20721 			SAVE_OPLINE();
20722 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20723 				ZVAL_UNDEFINED_OP2();
20724 			}
20725 			rope[opline->extended_value] = zval_get_string_func(var);
20726 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20727 			if (UNEXPECTED(EG(exception))) {
20728 				for (i = 0; i <= opline->extended_value; i++) {
20729 					zend_string_release_ex(rope[i], 0);
20730 				}
20731 				ZVAL_UNDEF(EX_VAR(opline->result.var));
20732 				HANDLE_EXCEPTION();
20733 			}
20734 		}
20735 	}
20736 
20737 	size_t len = 0;
20738 	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
20739 	for (i = 0; i <= opline->extended_value; i++) {
20740 		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
20741 		len += ZSTR_LEN(rope[i]);
20742 	}
20743 	ret = EX_VAR(opline->result.var);
20744 	ZVAL_STR(ret, zend_string_alloc(len, 0));
20745 	GC_ADD_FLAGS(Z_STR_P(ret), flags);
20746 
20747 	char *target = Z_STRVAL_P(ret);
20748 	for (i = 0; i <= opline->extended_value; i++) {
20749 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
20750 		target += ZSTR_LEN(rope[i]);
20751 		zend_string_release_ex(rope[i], 0);
20752 	}
20753 	*target = '\0';
20754 
20755 	ZEND_VM_NEXT_OPCODE();
20756 }
20757 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20758 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20759 {
20760 	USE_OPLINE
20761 	zval *expr_ptr, new_expr;
20762 
20763 	SAVE_OPLINE();
20764 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20765 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20766 		expr_ptr = zend_get_bad_ptr();
20767 		if (Z_ISREF_P(expr_ptr)) {
20768 			Z_ADDREF_P(expr_ptr);
20769 		} else {
20770 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20771 		}
20772 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20773 	} else {
20774 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20775 		if (IS_TMP_VAR == IS_TMP_VAR) {
20776 			/* pass */
20777 		} else if (IS_TMP_VAR == IS_CONST) {
20778 			Z_TRY_ADDREF_P(expr_ptr);
20779 		} else if (IS_TMP_VAR == IS_CV) {
20780 			ZVAL_DEREF(expr_ptr);
20781 			Z_TRY_ADDREF_P(expr_ptr);
20782 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20783 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20784 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20785 
20786 				expr_ptr = Z_REFVAL_P(expr_ptr);
20787 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20788 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20789 					expr_ptr = &new_expr;
20790 					efree_size(ref, sizeof(zend_reference));
20791 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20792 					Z_ADDREF_P(expr_ptr);
20793 				}
20794 			}
20795 		}
20796 	}
20797 
20798 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
20799 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20800 		zend_string *str;
20801 		zend_ulong hval;
20802 
20803 add_again:
20804 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20805 			str = Z_STR_P(offset);
20806 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
20807 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20808 					goto num_index;
20809 				}
20810 			}
20811 str_index:
20812 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20813 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20814 			hval = Z_LVAL_P(offset);
20815 num_index:
20816 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20817 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20818 			offset = Z_REFVAL_P(offset);
20819 			goto add_again;
20820 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20821 			str = ZSTR_EMPTY_ALLOC();
20822 			goto str_index;
20823 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20824 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
20825 			goto num_index;
20826 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20827 			hval = 0;
20828 			goto num_index;
20829 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20830 			hval = 1;
20831 			goto num_index;
20832 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20833 			zend_use_resource_as_offset(offset);
20834 			hval = Z_RES_HANDLE_P(offset);
20835 			goto num_index;
20836 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20837 			ZVAL_UNDEFINED_OP2();
20838 			str = ZSTR_EMPTY_ALLOC();
20839 			goto str_index;
20840 		} else {
20841 			zend_illegal_array_offset_access(offset);
20842 			zval_ptr_dtor_nogc(expr_ptr);
20843 		}
20844 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20845 	} else {
20846 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20847 			zend_cannot_add_element();
20848 			zval_ptr_dtor_nogc(expr_ptr);
20849 		}
20850 	}
20851 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20852 }
20853 
ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20854 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20855 {
20856 	zval *array;
20857 	uint32_t size;
20858 	USE_OPLINE
20859 
20860 	array = EX_VAR(opline->result.var);
20861 	if (IS_TMP_VAR != IS_UNUSED) {
20862 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20863 		ZVAL_ARR(array, zend_new_array(size));
20864 		/* Explicitly initialize array as not-packed if flag is set */
20865 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20866 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
20867 		}
20868 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20869 	} else {
20870 		ZVAL_ARR(array, zend_new_array(0));
20871 		ZEND_VM_NEXT_OPCODE();
20872 	}
20873 }
20874 
ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20875 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20876 {
20877 	USE_OPLINE
20878 
20879 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20880 
20881 	SAVE_OPLINE();
20882 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20883 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20884 	}
20885 
20886 	/* Destroy the previously yielded value */
20887 	zval_ptr_dtor(&generator->value);
20888 
20889 	/* Destroy the previously yielded key */
20890 	zval_ptr_dtor(&generator->key);
20891 
20892 	/* Set the new yielded value */
20893 	if (IS_TMP_VAR != IS_UNUSED) {
20894 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20895 			/* Constants and temporary variables aren't yieldable by reference,
20896 			 * but we still allow them with a notice. */
20897 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
20898 				zval *value;
20899 
20900 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20901 
20902 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20903 				ZVAL_COPY_VALUE(&generator->value, value);
20904 				if (IS_TMP_VAR == IS_CONST) {
20905 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20906 						Z_ADDREF(generator->value);
20907 					}
20908 				}
20909 			} else {
20910 				zval *value_ptr = zend_get_bad_ptr();
20911 
20912 				/* If a function call result is yielded and the function did
20913 				 * not return by reference we throw a notice. */
20914 				do {
20915 					if (IS_TMP_VAR == IS_VAR) {
20916 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
20917 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
20918 						 && !Z_ISREF_P(value_ptr)) {
20919 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20920 							ZVAL_COPY(&generator->value, value_ptr);
20921 							break;
20922 						}
20923 					}
20924 					if (Z_ISREF_P(value_ptr)) {
20925 						Z_ADDREF_P(value_ptr);
20926 					} else {
20927 						ZVAL_MAKE_REF_EX(value_ptr, 2);
20928 					}
20929 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
20930 				} while (0);
20931 
20932 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20933 			}
20934 		} else {
20935 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20936 
20937 			/* Consts, temporary variables and references need copying */
20938 			if (IS_TMP_VAR == IS_CONST) {
20939 				ZVAL_COPY_VALUE(&generator->value, value);
20940 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20941 					Z_ADDREF(generator->value);
20942 				}
20943 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20944 				ZVAL_COPY_VALUE(&generator->value, value);
20945 			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20946 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20947 
20948 			} else {
20949 				ZVAL_COPY_VALUE(&generator->value, value);
20950 				if (IS_TMP_VAR == IS_CV) {
20951 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20952 				}
20953 			}
20954 		}
20955 	} else {
20956 		/* If no value was specified yield null */
20957 		ZVAL_NULL(&generator->value);
20958 	}
20959 
20960 	/* Set the new yielded key */
20961 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
20962 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20963 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
20964 			key = Z_REFVAL_P(key);
20965 		}
20966 		ZVAL_COPY(&generator->key, key);
20967 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20968 
20969 		if (Z_TYPE(generator->key) == IS_LONG
20970 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20971 		) {
20972 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20973 		}
20974 	} else {
20975 		/* If no key was specified we use auto-increment keys */
20976 		generator->largest_used_integer_key++;
20977 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20978 	}
20979 
20980 	if (RETURN_VALUE_USED(opline)) {
20981 		/* If the return value of yield is used set the send
20982 		 * target and initialize it to NULL */
20983 		generator->send_target = EX_VAR(opline->result.var);
20984 		ZVAL_NULL(generator->send_target);
20985 	} else {
20986 		generator->send_target = NULL;
20987 	}
20988 
20989 	/* We increment to the next op, so we are at the correct position when the
20990 	 * generator is resumed. */
20991 	ZEND_VM_INC_OPCODE();
20992 
20993 	/* The GOTO VM uses a local opline variable. We need to set the opline
20994 	 * variable in execute_data so we don't resume at an old position. */
20995 	SAVE_OPLINE();
20996 
20997 	ZEND_VM_RETURN();
20998 }
20999 
ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21000 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21001 {
21002 	USE_OPLINE
21003 	zval *op1, *op2;
21004 	bool result;
21005 
21006 	SAVE_OPLINE();
21007 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21008 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
21009 	result = fast_is_identical_function(op1, op2);
21010 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21011 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
21012 	ZEND_VM_SMART_BRANCH(result, 1);
21013 }
21014 
ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21015 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21016 {
21017 	USE_OPLINE
21018 	zval *op1, *op2;
21019 	bool result;
21020 
21021 	SAVE_OPLINE();
21022 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21023 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
21024 	result = fast_is_identical_function(op1, op2);
21025 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
21026 	ZEND_VM_SMART_BRANCH(result, 1);
21027 }
21028 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21029 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21030 {
21031 	USE_OPLINE
21032 	zval *op1, *op2;
21033 	bool result;
21034 
21035 	SAVE_OPLINE();
21036 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21037 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
21038 	result = fast_is_not_identical_function(op1, op2);
21039 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21040 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
21041 	ZEND_VM_SMART_BRANCH(result, 1);
21042 }
21043 
ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21044 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21045 {
21046 	USE_OPLINE
21047 	zval *op1, *op2;
21048 	bool result;
21049 
21050 	SAVE_OPLINE();
21051 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21052 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
21053 	result = fast_is_identical_function(op1, op2);
21054 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
21055 	ZEND_VM_SMART_BRANCH(result, 1);
21056 }
21057 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21058 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21059 {
21060 #if 0
21061 	USE_OPLINE
21062 #endif
21063 
21064 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
21065 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
21066 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21067 		}
21068 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21069 	} else {
21070 		if (IS_UNUSED == IS_UNUSED) {
21071 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21072 		}
21073 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21074 	}
21075 }
21076 
ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21077 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21078 {
21079 	if (IS_TMP_VAR == IS_UNUSED) {
21080 		SAVE_OPLINE();
21081 		zend_verify_missing_return_type(EX(func));
21082 		HANDLE_EXCEPTION();
21083 	} else {
21084 /* prevents "undefined variable opline" errors */
21085 #if 0 || (IS_TMP_VAR != IS_UNUSED)
21086 		USE_OPLINE
21087 		zval *retval_ref, *retval_ptr;
21088 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
21089 		retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21090 
21091 		if (IS_TMP_VAR == IS_CONST) {
21092 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
21093 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
21094 		} else if (IS_TMP_VAR == IS_VAR) {
21095 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
21096 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
21097 			}
21098 			ZVAL_DEREF(retval_ptr);
21099 		} else if (IS_TMP_VAR == IS_CV) {
21100 			ZVAL_DEREF(retval_ptr);
21101 		}
21102 
21103 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
21104 			ZEND_VM_NEXT_OPCODE();
21105 		}
21106 
21107 		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
21108 			SAVE_OPLINE();
21109 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
21110 			if (UNEXPECTED(EG(exception))) {
21111 				HANDLE_EXCEPTION();
21112 			}
21113 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
21114 				ZEND_VM_NEXT_OPCODE();
21115 			}
21116 		}
21117 
21118 		zend_reference *ref = NULL;
21119 		void *cache_slot = CACHE_ADDR(opline->op2.num);
21120 		if (UNEXPECTED(retval_ref != retval_ptr)) {
21121 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
21122 				ref = Z_REF_P(retval_ref);
21123 			} else {
21124 				/* A cast might happen - unwrap the reference if this is a by-value return */
21125 				if (Z_REFCOUNT_P(retval_ref) == 1) {
21126 					ZVAL_UNREF(retval_ref);
21127 				} else {
21128 					Z_DELREF_P(retval_ref);
21129 					ZVAL_COPY(retval_ref, retval_ptr);
21130 				}
21131 				retval_ptr = retval_ref;
21132 			}
21133 		}
21134 
21135 		SAVE_OPLINE();
21136 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
21137 			zend_verify_return_error(EX(func), retval_ptr);
21138 			HANDLE_EXCEPTION();
21139 		}
21140 		ZEND_VM_NEXT_OPCODE();
21141 #endif
21142 	}
21143 }
21144 
ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21145 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21146 {
21147 	USE_OPLINE
21148 	zval *value, *arg;
21149 	uint32_t arg_num;
21150 
21151 	if (IS_UNUSED == IS_CONST) {
21152 		SAVE_OPLINE();
21153 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
21154 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
21155 		if (UNEXPECTED(!arg)) {
21156 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21157 			HANDLE_EXCEPTION();
21158 		}
21159 	} else {
21160 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21161 		arg_num = opline->op2.num;
21162 	}
21163 
21164 	if (EXPECTED(0)) {
21165 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21166 			goto send_val_by_ref;
21167 		}
21168 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21169 send_val_by_ref:
21170 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21171 	}
21172 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21173 	ZVAL_COPY_VALUE(arg, value);
21174 	if (IS_TMP_VAR == IS_CONST) {
21175 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
21176 			Z_ADDREF_P(arg);
21177 		}
21178 	}
21179 	ZEND_VM_NEXT_OPCODE();
21180 }
21181 
ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21182 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21183 {
21184 	USE_OPLINE
21185 	zval *value, *arg;
21186 	uint32_t arg_num;
21187 
21188 	if (IS_UNUSED == IS_CONST) {
21189 		SAVE_OPLINE();
21190 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
21191 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
21192 		if (UNEXPECTED(!arg)) {
21193 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21194 			HANDLE_EXCEPTION();
21195 		}
21196 	} else {
21197 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21198 		arg_num = opline->op2.num;
21199 	}
21200 
21201 	if (EXPECTED(1)) {
21202 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21203 			goto send_val_by_ref;
21204 		}
21205 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21206 send_val_by_ref:
21207 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21208 	}
21209 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21210 	ZVAL_COPY_VALUE(arg, value);
21211 	if (IS_TMP_VAR == IS_CONST) {
21212 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
21213 			Z_ADDREF_P(arg);
21214 		}
21215 	}
21216 	ZEND_VM_NEXT_OPCODE();
21217 }
21218 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21220 {
21221 	USE_OPLINE
21222 	zval *expr_ptr, new_expr;
21223 
21224 	SAVE_OPLINE();
21225 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
21226 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
21227 		expr_ptr = zend_get_bad_ptr();
21228 		if (Z_ISREF_P(expr_ptr)) {
21229 			Z_ADDREF_P(expr_ptr);
21230 		} else {
21231 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
21232 		}
21233 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21234 	} else {
21235 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21236 		if (IS_TMP_VAR == IS_TMP_VAR) {
21237 			/* pass */
21238 		} else if (IS_TMP_VAR == IS_CONST) {
21239 			Z_TRY_ADDREF_P(expr_ptr);
21240 		} else if (IS_TMP_VAR == IS_CV) {
21241 			ZVAL_DEREF(expr_ptr);
21242 			Z_TRY_ADDREF_P(expr_ptr);
21243 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
21244 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
21245 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
21246 
21247 				expr_ptr = Z_REFVAL_P(expr_ptr);
21248 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21249 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
21250 					expr_ptr = &new_expr;
21251 					efree_size(ref, sizeof(zend_reference));
21252 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
21253 					Z_ADDREF_P(expr_ptr);
21254 				}
21255 			}
21256 		}
21257 	}
21258 
21259 	if (IS_UNUSED != IS_UNUSED) {
21260 		zval *offset = NULL;
21261 		zend_string *str;
21262 		zend_ulong hval;
21263 
21264 add_again:
21265 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
21266 			str = Z_STR_P(offset);
21267 			if (IS_UNUSED != IS_CONST) {
21268 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
21269 					goto num_index;
21270 				}
21271 			}
21272 str_index:
21273 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
21274 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
21275 			hval = Z_LVAL_P(offset);
21276 num_index:
21277 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
21278 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
21279 			offset = Z_REFVAL_P(offset);
21280 			goto add_again;
21281 		} else if (Z_TYPE_P(offset) == IS_NULL) {
21282 			str = ZSTR_EMPTY_ALLOC();
21283 			goto str_index;
21284 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
21285 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
21286 			goto num_index;
21287 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
21288 			hval = 0;
21289 			goto num_index;
21290 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
21291 			hval = 1;
21292 			goto num_index;
21293 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
21294 			zend_use_resource_as_offset(offset);
21295 			hval = Z_RES_HANDLE_P(offset);
21296 			goto num_index;
21297 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
21298 			ZVAL_UNDEFINED_OP2();
21299 			str = ZSTR_EMPTY_ALLOC();
21300 			goto str_index;
21301 		} else {
21302 			zend_illegal_array_offset_access(offset);
21303 			zval_ptr_dtor_nogc(expr_ptr);
21304 		}
21305 
21306 	} else {
21307 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
21308 			zend_cannot_add_element();
21309 			zval_ptr_dtor_nogc(expr_ptr);
21310 		}
21311 	}
21312 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21313 }
21314 
ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21315 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21316 {
21317 	zval *array;
21318 	uint32_t size;
21319 	USE_OPLINE
21320 
21321 	array = EX_VAR(opline->result.var);
21322 	if (IS_TMP_VAR != IS_UNUSED) {
21323 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
21324 		ZVAL_ARR(array, zend_new_array(size));
21325 		/* Explicitly initialize array as not-packed if flag is set */
21326 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
21327 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
21328 		}
21329 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21330 	} else {
21331 		ZVAL_ARR(array, zend_new_array(0));
21332 		ZEND_VM_NEXT_OPCODE();
21333 	}
21334 }
21335 
ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21336 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21337 {
21338 	USE_OPLINE
21339 
21340 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
21341 
21342 	SAVE_OPLINE();
21343 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
21344 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21345 	}
21346 
21347 	/* Destroy the previously yielded value */
21348 	zval_ptr_dtor(&generator->value);
21349 
21350 	/* Destroy the previously yielded key */
21351 	zval_ptr_dtor(&generator->key);
21352 
21353 	/* Set the new yielded value */
21354 	if (IS_TMP_VAR != IS_UNUSED) {
21355 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
21356 			/* Constants and temporary variables aren't yieldable by reference,
21357 			 * but we still allow them with a notice. */
21358 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
21359 				zval *value;
21360 
21361 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21362 
21363 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21364 				ZVAL_COPY_VALUE(&generator->value, value);
21365 				if (IS_TMP_VAR == IS_CONST) {
21366 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21367 						Z_ADDREF(generator->value);
21368 					}
21369 				}
21370 			} else {
21371 				zval *value_ptr = zend_get_bad_ptr();
21372 
21373 				/* If a function call result is yielded and the function did
21374 				 * not return by reference we throw a notice. */
21375 				do {
21376 					if (IS_TMP_VAR == IS_VAR) {
21377 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
21378 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
21379 						 && !Z_ISREF_P(value_ptr)) {
21380 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21381 							ZVAL_COPY(&generator->value, value_ptr);
21382 							break;
21383 						}
21384 					}
21385 					if (Z_ISREF_P(value_ptr)) {
21386 						Z_ADDREF_P(value_ptr);
21387 					} else {
21388 						ZVAL_MAKE_REF_EX(value_ptr, 2);
21389 					}
21390 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
21391 				} while (0);
21392 
21393 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21394 			}
21395 		} else {
21396 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21397 
21398 			/* Consts, temporary variables and references need copying */
21399 			if (IS_TMP_VAR == IS_CONST) {
21400 				ZVAL_COPY_VALUE(&generator->value, value);
21401 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21402 					Z_ADDREF(generator->value);
21403 				}
21404 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
21405 				ZVAL_COPY_VALUE(&generator->value, value);
21406 			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
21407 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
21408 
21409 			} else {
21410 				ZVAL_COPY_VALUE(&generator->value, value);
21411 				if (IS_TMP_VAR == IS_CV) {
21412 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
21413 				}
21414 			}
21415 		}
21416 	} else {
21417 		/* If no value was specified yield null */
21418 		ZVAL_NULL(&generator->value);
21419 	}
21420 
21421 	/* Set the new yielded key */
21422 	if (IS_UNUSED != IS_UNUSED) {
21423 		zval *key = NULL;
21424 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
21425 			key = Z_REFVAL_P(key);
21426 		}
21427 		ZVAL_COPY(&generator->key, key);
21428 
21429 		if (Z_TYPE(generator->key) == IS_LONG
21430 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
21431 		) {
21432 			generator->largest_used_integer_key = Z_LVAL(generator->key);
21433 		}
21434 	} else {
21435 		/* If no key was specified we use auto-increment keys */
21436 		generator->largest_used_integer_key++;
21437 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
21438 	}
21439 
21440 	if (RETURN_VALUE_USED(opline)) {
21441 		/* If the return value of yield is used set the send
21442 		 * target and initialize it to NULL */
21443 		generator->send_target = EX_VAR(opline->result.var);
21444 		ZVAL_NULL(generator->send_target);
21445 	} else {
21446 		generator->send_target = NULL;
21447 	}
21448 
21449 	/* We increment to the next op, so we are at the correct position when the
21450 	 * generator is resumed. */
21451 	ZEND_VM_INC_OPCODE();
21452 
21453 	/* The GOTO VM uses a local opline variable. We need to set the opline
21454 	 * variable in execute_data so we don't resume at an old position. */
21455 	SAVE_OPLINE();
21456 
21457 	ZEND_VM_RETURN();
21458 }
21459 
ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21460 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21461 {
21462 	USE_OPLINE
21463 	zval *op1;
21464 	zend_string *type;
21465 
21466 	SAVE_OPLINE();
21467 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21468 	type = zend_zval_get_legacy_type(op1);
21469 	if (EXPECTED(type)) {
21470 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
21471 	} else {
21472 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
21473 	}
21474 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21475 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21476 }
21477 
ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21479 {
21480 	USE_OPLINE
21481 	zval *op1, *op2;
21482 	bool result;
21483 
21484 	SAVE_OPLINE();
21485 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21486 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21487 	result = fast_is_identical_function(op1, op2);
21488 
21489 	ZEND_VM_SMART_BRANCH(result, 1);
21490 }
21491 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21492 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21493 {
21494 #if 0
21495 	USE_OPLINE
21496 #endif
21497 
21498 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
21499 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
21500 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21501 		}
21502 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21503 	} else {
21504 		if (IS_CV == IS_UNUSED) {
21505 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21506 		}
21507 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21508 	}
21509 }
21510 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21511 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21512 {
21513 #if 0
21514 	USE_OPLINE
21515 #endif
21516 
21517 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
21518 		/* Behave like FETCH_OBJ_W */
21519 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
21520 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21521 		}
21522 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21523 	} else {
21524 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21525 	}
21526 }
21527 
ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21528 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21529 {
21530 	USE_OPLINE
21531 	zend_string **rope;
21532 	zval *var;
21533 
21534 	/* op1 and result are the same */
21535 	rope = (zend_string**)EX_VAR(opline->op1.var);
21536 	if (IS_CV == IS_CONST) {
21537 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21538 		rope[opline->extended_value] = Z_STR_P(var);
21539 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
21540 			Z_ADDREF_P(var);
21541 		}
21542 	} else {
21543 		var = EX_VAR(opline->op2.var);
21544 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
21545 			if (IS_CV == IS_CV) {
21546 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
21547 			} else {
21548 				rope[opline->extended_value] = Z_STR_P(var);
21549 			}
21550 		} else {
21551 			SAVE_OPLINE();
21552 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
21553 				ZVAL_UNDEFINED_OP2();
21554 			}
21555 			rope[opline->extended_value] = zval_get_string_func(var);
21556 
21557 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21558 		}
21559 	}
21560 	ZEND_VM_NEXT_OPCODE();
21561 }
21562 
ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21563 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21564 {
21565 	USE_OPLINE
21566 	zend_string **rope;
21567 	zval *var, *ret;
21568 	uint32_t i;
21569 
21570 	rope = (zend_string**)EX_VAR(opline->op1.var);
21571 	if (IS_CV == IS_CONST) {
21572 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21573 		rope[opline->extended_value] = Z_STR_P(var);
21574 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
21575 			Z_ADDREF_P(var);
21576 		}
21577 	} else {
21578 		var = EX_VAR(opline->op2.var);
21579 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
21580 			if (IS_CV == IS_CV) {
21581 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
21582 			} else {
21583 				rope[opline->extended_value] = Z_STR_P(var);
21584 			}
21585 		} else {
21586 			SAVE_OPLINE();
21587 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
21588 				ZVAL_UNDEFINED_OP2();
21589 			}
21590 			rope[opline->extended_value] = zval_get_string_func(var);
21591 
21592 			if (UNEXPECTED(EG(exception))) {
21593 				for (i = 0; i <= opline->extended_value; i++) {
21594 					zend_string_release_ex(rope[i], 0);
21595 				}
21596 				ZVAL_UNDEF(EX_VAR(opline->result.var));
21597 				HANDLE_EXCEPTION();
21598 			}
21599 		}
21600 	}
21601 
21602 	size_t len = 0;
21603 	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
21604 	for (i = 0; i <= opline->extended_value; i++) {
21605 		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
21606 		len += ZSTR_LEN(rope[i]);
21607 	}
21608 	ret = EX_VAR(opline->result.var);
21609 	ZVAL_STR(ret, zend_string_alloc(len, 0));
21610 	GC_ADD_FLAGS(Z_STR_P(ret), flags);
21611 
21612 	char *target = Z_STRVAL_P(ret);
21613 	for (i = 0; i <= opline->extended_value; i++) {
21614 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
21615 		target += ZSTR_LEN(rope[i]);
21616 		zend_string_release_ex(rope[i], 0);
21617 	}
21618 	*target = '\0';
21619 
21620 	ZEND_VM_NEXT_OPCODE();
21621 }
21622 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21623 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21624 {
21625 	USE_OPLINE
21626 	zval *expr_ptr, new_expr;
21627 
21628 	SAVE_OPLINE();
21629 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
21630 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
21631 		expr_ptr = zend_get_bad_ptr();
21632 		if (Z_ISREF_P(expr_ptr)) {
21633 			Z_ADDREF_P(expr_ptr);
21634 		} else {
21635 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
21636 		}
21637 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21638 	} else {
21639 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21640 		if (IS_TMP_VAR == IS_TMP_VAR) {
21641 			/* pass */
21642 		} else if (IS_TMP_VAR == IS_CONST) {
21643 			Z_TRY_ADDREF_P(expr_ptr);
21644 		} else if (IS_TMP_VAR == IS_CV) {
21645 			ZVAL_DEREF(expr_ptr);
21646 			Z_TRY_ADDREF_P(expr_ptr);
21647 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
21648 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
21649 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
21650 
21651 				expr_ptr = Z_REFVAL_P(expr_ptr);
21652 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21653 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
21654 					expr_ptr = &new_expr;
21655 					efree_size(ref, sizeof(zend_reference));
21656 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
21657 					Z_ADDREF_P(expr_ptr);
21658 				}
21659 			}
21660 		}
21661 	}
21662 
21663 	if (IS_CV != IS_UNUSED) {
21664 		zval *offset = EX_VAR(opline->op2.var);
21665 		zend_string *str;
21666 		zend_ulong hval;
21667 
21668 add_again:
21669 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
21670 			str = Z_STR_P(offset);
21671 			if (IS_CV != IS_CONST) {
21672 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
21673 					goto num_index;
21674 				}
21675 			}
21676 str_index:
21677 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
21678 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
21679 			hval = Z_LVAL_P(offset);
21680 num_index:
21681 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
21682 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
21683 			offset = Z_REFVAL_P(offset);
21684 			goto add_again;
21685 		} else if (Z_TYPE_P(offset) == IS_NULL) {
21686 			str = ZSTR_EMPTY_ALLOC();
21687 			goto str_index;
21688 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
21689 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
21690 			goto num_index;
21691 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
21692 			hval = 0;
21693 			goto num_index;
21694 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
21695 			hval = 1;
21696 			goto num_index;
21697 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
21698 			zend_use_resource_as_offset(offset);
21699 			hval = Z_RES_HANDLE_P(offset);
21700 			goto num_index;
21701 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
21702 			ZVAL_UNDEFINED_OP2();
21703 			str = ZSTR_EMPTY_ALLOC();
21704 			goto str_index;
21705 		} else {
21706 			zend_illegal_array_offset_access(offset);
21707 			zval_ptr_dtor_nogc(expr_ptr);
21708 		}
21709 
21710 	} else {
21711 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
21712 			zend_cannot_add_element();
21713 			zval_ptr_dtor_nogc(expr_ptr);
21714 		}
21715 	}
21716 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21717 }
21718 
ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21719 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21720 {
21721 	zval *array;
21722 	uint32_t size;
21723 	USE_OPLINE
21724 
21725 	array = EX_VAR(opline->result.var);
21726 	if (IS_TMP_VAR != IS_UNUSED) {
21727 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
21728 		ZVAL_ARR(array, zend_new_array(size));
21729 		/* Explicitly initialize array as not-packed if flag is set */
21730 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
21731 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
21732 		}
21733 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21734 	} else {
21735 		ZVAL_ARR(array, zend_new_array(0));
21736 		ZEND_VM_NEXT_OPCODE();
21737 	}
21738 }
21739 
ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21740 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21741 {
21742 	USE_OPLINE
21743 
21744 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
21745 
21746 	SAVE_OPLINE();
21747 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
21748 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21749 	}
21750 
21751 	/* Destroy the previously yielded value */
21752 	zval_ptr_dtor(&generator->value);
21753 
21754 	/* Destroy the previously yielded key */
21755 	zval_ptr_dtor(&generator->key);
21756 
21757 	/* Set the new yielded value */
21758 	if (IS_TMP_VAR != IS_UNUSED) {
21759 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
21760 			/* Constants and temporary variables aren't yieldable by reference,
21761 			 * but we still allow them with a notice. */
21762 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
21763 				zval *value;
21764 
21765 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21766 
21767 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21768 				ZVAL_COPY_VALUE(&generator->value, value);
21769 				if (IS_TMP_VAR == IS_CONST) {
21770 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21771 						Z_ADDREF(generator->value);
21772 					}
21773 				}
21774 			} else {
21775 				zval *value_ptr = zend_get_bad_ptr();
21776 
21777 				/* If a function call result is yielded and the function did
21778 				 * not return by reference we throw a notice. */
21779 				do {
21780 					if (IS_TMP_VAR == IS_VAR) {
21781 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
21782 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
21783 						 && !Z_ISREF_P(value_ptr)) {
21784 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21785 							ZVAL_COPY(&generator->value, value_ptr);
21786 							break;
21787 						}
21788 					}
21789 					if (Z_ISREF_P(value_ptr)) {
21790 						Z_ADDREF_P(value_ptr);
21791 					} else {
21792 						ZVAL_MAKE_REF_EX(value_ptr, 2);
21793 					}
21794 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
21795 				} while (0);
21796 
21797 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21798 			}
21799 		} else {
21800 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21801 
21802 			/* Consts, temporary variables and references need copying */
21803 			if (IS_TMP_VAR == IS_CONST) {
21804 				ZVAL_COPY_VALUE(&generator->value, value);
21805 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21806 					Z_ADDREF(generator->value);
21807 				}
21808 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
21809 				ZVAL_COPY_VALUE(&generator->value, value);
21810 			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
21811 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
21812 
21813 			} else {
21814 				ZVAL_COPY_VALUE(&generator->value, value);
21815 				if (IS_TMP_VAR == IS_CV) {
21816 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
21817 				}
21818 			}
21819 		}
21820 	} else {
21821 		/* If no value was specified yield null */
21822 		ZVAL_NULL(&generator->value);
21823 	}
21824 
21825 	/* Set the new yielded key */
21826 	if (IS_CV != IS_UNUSED) {
21827 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21828 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
21829 			key = Z_REFVAL_P(key);
21830 		}
21831 		ZVAL_COPY(&generator->key, key);
21832 
21833 		if (Z_TYPE(generator->key) == IS_LONG
21834 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
21835 		) {
21836 			generator->largest_used_integer_key = Z_LVAL(generator->key);
21837 		}
21838 	} else {
21839 		/* If no key was specified we use auto-increment keys */
21840 		generator->largest_used_integer_key++;
21841 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
21842 	}
21843 
21844 	if (RETURN_VALUE_USED(opline)) {
21845 		/* If the return value of yield is used set the send
21846 		 * target and initialize it to NULL */
21847 		generator->send_target = EX_VAR(opline->result.var);
21848 		ZVAL_NULL(generator->send_target);
21849 	} else {
21850 		generator->send_target = NULL;
21851 	}
21852 
21853 	/* We increment to the next op, so we are at the correct position when the
21854 	 * generator is resumed. */
21855 	ZEND_VM_INC_OPCODE();
21856 
21857 	/* The GOTO VM uses a local opline variable. We need to set the opline
21858 	 * variable in execute_data so we don't resume at an old position. */
21859 	SAVE_OPLINE();
21860 
21861 	ZEND_VM_RETURN();
21862 }
21863 
ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21865 {
21866 	USE_OPLINE
21867 	zval *closure, *var;
21868 
21869 	closure = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21870 	if (opline->extended_value & ZEND_BIND_REF) {
21871 		/* By-ref binding */
21872 		var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
21873 		if (Z_ISREF_P(var)) {
21874 			Z_ADDREF_P(var);
21875 		} else {
21876 			ZVAL_MAKE_REF_EX(var, 2);
21877 		}
21878 	} else {
21879 		var = EX_VAR(opline->op2.var);
21880 		if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
21881 			SAVE_OPLINE();
21882 			var = ZVAL_UNDEFINED_OP2();
21883 			if (UNEXPECTED(EG(exception))) {
21884 				HANDLE_EXCEPTION();
21885 			}
21886 		}
21887 		ZVAL_DEREF(var);
21888 		Z_TRY_ADDREF_P(var);
21889 	}
21890 
21891 	zend_closure_bind_var_ex(closure,
21892 		(opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
21893 	ZEND_VM_NEXT_OPCODE();
21894 }
21895 
zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21896 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21897 {
21898 	USE_OPLINE
21899 	zval *var_ptr;
21900 
21901 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21902 
21903 	SAVE_OPLINE();
21904 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21905 		ZVAL_UNDEFINED_OP1();
21906 		ZVAL_NULL(var_ptr);
21907 	}
21908 
21909 	do {
21910 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21911 			zend_reference *ref = Z_REF_P(var_ptr);
21912 			var_ptr = Z_REFVAL_P(var_ptr);
21913 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21914 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
21915 				break;
21916 			}
21917 		}
21918 		increment_function(var_ptr);
21919 	} while (0);
21920 
21921 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21922 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21923 	}
21924 
21925 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21926 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21927 }
21928 
ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21929 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21930 {
21931 	USE_OPLINE
21932 	zval *var_ptr;
21933 
21934 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21935 
21936 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21937 		fast_long_increment_function(var_ptr);
21938 		if (UNEXPECTED(0)) {
21939 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21940 		}
21941 		ZEND_VM_NEXT_OPCODE();
21942 	}
21943 
21944 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21945 }
21946 
ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21947 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21948 {
21949 	USE_OPLINE
21950 	zval *var_ptr;
21951 
21952 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21953 
21954 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21955 		fast_long_increment_function(var_ptr);
21956 		if (UNEXPECTED(1)) {
21957 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21958 		}
21959 		ZEND_VM_NEXT_OPCODE();
21960 	}
21961 
21962 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21963 }
21964 
zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21965 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21966 {
21967 	USE_OPLINE
21968 	zval *var_ptr;
21969 
21970 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21971 
21972 	SAVE_OPLINE();
21973 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21974 		ZVAL_UNDEFINED_OP1();
21975 		ZVAL_NULL(var_ptr);
21976 	}
21977 
21978 	do {
21979 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21980 			zend_reference *ref = Z_REF_P(var_ptr);
21981 			var_ptr = Z_REFVAL_P(var_ptr);
21982 
21983 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21984 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
21985 				break;
21986 			}
21987 		}
21988 		decrement_function(var_ptr);
21989 	} while (0);
21990 
21991 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21992 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21993 	}
21994 
21995 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21996 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21997 }
21998 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21999 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22000 {
22001 	USE_OPLINE
22002 	zval *var_ptr;
22003 
22004 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22005 
22006 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
22007 		fast_long_decrement_function(var_ptr);
22008 		if (UNEXPECTED(0)) {
22009 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
22010 		}
22011 		ZEND_VM_NEXT_OPCODE();
22012 	}
22013 
22014 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22015 }
22016 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22017 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22018 {
22019 	USE_OPLINE
22020 	zval *var_ptr;
22021 
22022 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22023 
22024 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
22025 		fast_long_decrement_function(var_ptr);
22026 		if (UNEXPECTED(1)) {
22027 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
22028 		}
22029 		ZEND_VM_NEXT_OPCODE();
22030 	}
22031 
22032 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22033 }
22034 
zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)22035 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
22036 {
22037 	USE_OPLINE
22038 	zval *var_ptr;
22039 
22040 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22041 
22042 	SAVE_OPLINE();
22043 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
22044 		ZVAL_UNDEFINED_OP1();
22045 		ZVAL_NULL(var_ptr);
22046 	}
22047 
22048 	do {
22049 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
22050 			zend_reference *ref = Z_REF_P(var_ptr);
22051 			var_ptr = Z_REFVAL_P(var_ptr);
22052 
22053 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22054 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
22055 				break;
22056 			}
22057 		}
22058 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22059 
22060 		increment_function(var_ptr);
22061 	} while (0);
22062 
22063 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22064 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22065 }
22066 
ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22067 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22068 {
22069 	USE_OPLINE
22070 	zval *var_ptr;
22071 
22072 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22073 
22074 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
22075 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
22076 		fast_long_increment_function(var_ptr);
22077 		ZEND_VM_NEXT_OPCODE();
22078 	}
22079 
22080 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22081 }
22082 
zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)22083 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
22084 {
22085 	USE_OPLINE
22086 	zval *var_ptr;
22087 
22088 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22089 
22090 	SAVE_OPLINE();
22091 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
22092 		ZVAL_UNDEFINED_OP1();
22093 		ZVAL_NULL(var_ptr);
22094 	}
22095 
22096 	do {
22097 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
22098 			zend_reference *ref = Z_REF_P(var_ptr);
22099 			var_ptr = Z_REFVAL_P(var_ptr);
22100 
22101 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22102 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
22103 				break;
22104 			}
22105 		}
22106 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22107 
22108 		decrement_function(var_ptr);
22109 	} while (0);
22110 
22111 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22112 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22113 }
22114 
ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22115 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22116 {
22117 	USE_OPLINE
22118 	zval *var_ptr;
22119 
22120 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22121 
22122 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
22123 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
22124 		fast_long_decrement_function(var_ptr);
22125 		ZEND_VM_NEXT_OPCODE();
22126 	}
22127 
22128 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22129 }
22130 
ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22131 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22132 {
22133 	USE_OPLINE
22134 	zval *retval_ptr;
22135 	zval *return_value;
22136 
22137 	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22138 	return_value = EX(return_value);
22139 
22140 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
22141 		SAVE_OPLINE();
22142 		retval_ptr = ZVAL_UNDEFINED_OP1();
22143 		if (return_value) {
22144 			ZVAL_NULL(return_value);
22145 		}
22146 	} else if (!return_value) {
22147 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
22148 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
22149 				SAVE_OPLINE();
22150 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
22151 			}
22152 		}
22153 	} else {
22154 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
22155 			ZVAL_COPY_VALUE(return_value, retval_ptr);
22156 			if (IS_VAR == IS_CONST) {
22157 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
22158 					Z_ADDREF_P(return_value);
22159 				}
22160 			}
22161 		} else if (IS_VAR == IS_CV) {
22162 			do {
22163 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
22164 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
22165 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
22166 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
22167 							ZVAL_COPY_VALUE(return_value, retval_ptr);
22168 							if (GC_MAY_LEAK(ref)) {
22169 								SAVE_OPLINE();
22170 								gc_possible_root(ref);
22171 							}
22172 							ZVAL_NULL(retval_ptr);
22173 							break;
22174 						} else {
22175 							Z_ADDREF_P(retval_ptr);
22176 						}
22177 					} else {
22178 						retval_ptr = Z_REFVAL_P(retval_ptr);
22179 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
22180 							Z_ADDREF_P(retval_ptr);
22181 						}
22182 					}
22183 				}
22184 				ZVAL_COPY_VALUE(return_value, retval_ptr);
22185 			} while (0);
22186 		} else /* if (IS_VAR == IS_VAR) */ {
22187 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
22188 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
22189 
22190 				retval_ptr = Z_REFVAL_P(retval_ptr);
22191 				ZVAL_COPY_VALUE(return_value, retval_ptr);
22192 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22193 					efree_size(ref, sizeof(zend_reference));
22194 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
22195 					Z_ADDREF_P(retval_ptr);
22196 				}
22197 			} else {
22198 				ZVAL_COPY_VALUE(return_value, retval_ptr);
22199 			}
22200 		}
22201 	}
22202 
22203 
22204 
22205 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22206 }
22207 
ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22208 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22209 {
22210 	USE_OPLINE
22211 	zval *retval_ptr;
22212 	zval *return_value;
22213 
22214 	SAVE_OPLINE();
22215 
22216 	return_value = EX(return_value);
22217 
22218 	do {
22219 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
22220 		    (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
22221 			/* Not supposed to happen, but we'll allow it */
22222 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
22223 
22224 			retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22225 			if (!return_value) {
22226 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22227 			} else {
22228 				if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
22229 					ZVAL_COPY_VALUE(return_value, retval_ptr);
22230 					break;
22231 				}
22232 
22233 				ZVAL_NEW_REF(return_value, retval_ptr);
22234 				if (IS_VAR == IS_CONST) {
22235 					Z_TRY_ADDREF_P(retval_ptr);
22236 				}
22237 			}
22238 			break;
22239 		}
22240 
22241 		retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22242 
22243 		if (IS_VAR == IS_VAR) {
22244 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
22245 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
22246 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
22247 				if (return_value) {
22248 					ZVAL_NEW_REF(return_value, retval_ptr);
22249 				} else {
22250 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22251 				}
22252 				break;
22253 			}
22254 		}
22255 
22256 		if (return_value) {
22257 			if (Z_ISREF_P(retval_ptr)) {
22258 				Z_ADDREF_P(retval_ptr);
22259 			} else {
22260 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
22261 			}
22262 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
22263 		}
22264 
22265 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22266 	} while (0);
22267 
22268 
22269 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22270 }
22271 
ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22273 {
22274 	USE_OPLINE
22275 	zval *retval;
22276 
22277 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
22278 
22279 	SAVE_OPLINE();
22280 	retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22281 
22282 	/* Copy return value into generator->retval */
22283 	if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
22284 		ZVAL_COPY_VALUE(&generator->retval, retval);
22285 		if (IS_VAR == IS_CONST) {
22286 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
22287 				Z_ADDREF(generator->retval);
22288 			}
22289 		}
22290 	} else if (IS_VAR == IS_CV) {
22291 		ZVAL_COPY_DEREF(&generator->retval, retval);
22292 	} else /* if (IS_VAR == IS_VAR) */ {
22293 		if (UNEXPECTED(Z_ISREF_P(retval))) {
22294 			zend_refcounted *ref = Z_COUNTED_P(retval);
22295 
22296 			retval = Z_REFVAL_P(retval);
22297 			ZVAL_COPY_VALUE(&generator->retval, retval);
22298 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22299 				efree_size(ref, sizeof(zend_reference));
22300 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
22301 				Z_ADDREF_P(retval);
22302 			}
22303 		} else {
22304 			ZVAL_COPY_VALUE(&generator->retval, retval);
22305 		}
22306 	}
22307 
22308 	EG(current_execute_data) = EX(prev_execute_data);
22309 
22310 	/* Close the generator to free up resources */
22311 	zend_generator_close(generator, 1);
22312 
22313 	/* Pass execution back to handling code */
22314 	ZEND_VM_RETURN();
22315 }
22316 
ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22317 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22318 {
22319 	USE_OPLINE
22320 	zval *arg, *param;
22321 
22322 	SAVE_OPLINE();
22323 
22324 	arg = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22325 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
22326 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
22327 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
22328 		Z_TRY_ADDREF_P(arg);
22329 		ZVAL_NEW_REF(param, arg);
22330 	} else {
22331 		ZVAL_COPY(param, arg);
22332 	}
22333 
22334 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22335 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22336 }
22337 
ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22338 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22339 {
22340 	USE_OPLINE
22341 	zval *expr;
22342 	zval *result = EX_VAR(opline->result.var);
22343 	HashTable *ht;
22344 
22345 	SAVE_OPLINE();
22346 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22347 
22348 	switch (opline->extended_value) {
22349 		case IS_LONG:
22350 			ZVAL_LONG(result, zval_get_long(expr));
22351 			break;
22352 		case IS_DOUBLE:
22353 			ZVAL_DOUBLE(result, zval_get_double(expr));
22354 			break;
22355 		case IS_STRING:
22356 			ZVAL_STR(result, zval_get_string(expr));
22357 			break;
22358 		default:
22359 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
22360 			if (IS_VAR & (IS_VAR|IS_CV)) {
22361 				ZVAL_DEREF(expr);
22362 			}
22363 			/* If value is already of correct type, return it directly */
22364 			if (Z_TYPE_P(expr) == opline->extended_value) {
22365 				ZVAL_COPY_VALUE(result, expr);
22366 				if (IS_VAR == IS_CONST) {
22367 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22368 				} else if (IS_VAR != IS_TMP_VAR) {
22369 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22370 				}
22371 
22372 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22373 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22374 			}
22375 
22376 			if (opline->extended_value == IS_ARRAY) {
22377 				if (IS_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
22378 					if (Z_TYPE_P(expr) != IS_NULL) {
22379 						ZVAL_ARR(result, zend_new_array(1));
22380 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
22381 						if (IS_VAR == IS_CONST) {
22382 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
22383 						} else {
22384 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
22385 						}
22386 					} else {
22387 						ZVAL_EMPTY_ARRAY(result);
22388 					}
22389 				} else if (Z_OBJ_P(expr)->properties == NULL
22390 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
22391 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
22392 					/* Optimized version without rebuilding properties HashTable */
22393 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
22394 				} else {
22395 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
22396 					if (obj_ht) {
22397 						/* fast copy */
22398 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
22399 							(Z_OBJCE_P(expr)->default_properties_count ||
22400 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
22401 							 GC_IS_RECURSIVE(obj_ht))));
22402 						zend_release_properties(obj_ht);
22403 					} else {
22404 						ZVAL_EMPTY_ARRAY(result);
22405 					}
22406 				}
22407 			} else {
22408 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
22409 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
22410 				if (Z_TYPE_P(expr) == IS_ARRAY) {
22411 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
22412 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
22413 						/* TODO: try not to duplicate immutable arrays as well ??? */
22414 						ht = zend_array_dup(ht);
22415 					}
22416 					Z_OBJ_P(result)->properties = ht;
22417 				} else if (Z_TYPE_P(expr) != IS_NULL) {
22418 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
22419 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
22420 					if (IS_VAR == IS_CONST) {
22421 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
22422 					} else {
22423 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
22424 					}
22425 				}
22426 			}
22427 	}
22428 
22429 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22430 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22431 }
22432 
ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22434 {
22435 	USE_OPLINE
22436 	zval *array_ptr, *result;
22437 
22438 	SAVE_OPLINE();
22439 
22440 	array_ptr = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22441 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
22442 		result = EX_VAR(opline->result.var);
22443 		ZVAL_COPY_VALUE(result, array_ptr);
22444 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
22445 			Z_ADDREF_P(array_ptr);
22446 		}
22447 		Z_FE_POS_P(result) = 0;
22448 
22449 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22450 		ZEND_VM_NEXT_OPCODE();
22451 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
22452 		zend_object *zobj = Z_OBJ_P(array_ptr);
22453 		if (!zobj->ce->get_iterator) {
22454 			HashTable *properties = zobj->properties;
22455 			if (properties) {
22456 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
22457 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
22458 						GC_DELREF(properties);
22459 					}
22460 					properties = zobj->properties = zend_array_dup(properties);
22461 				}
22462 			} else {
22463 				properties = zobj->handlers->get_properties(zobj);
22464 			}
22465 
22466 			result = EX_VAR(opline->result.var);
22467 			ZVAL_COPY_VALUE(result, array_ptr);
22468 			if (IS_VAR != IS_TMP_VAR) {
22469 				Z_ADDREF_P(array_ptr);
22470 			}
22471 
22472 			if (zend_hash_num_elements(properties) == 0) {
22473 				Z_FE_ITER_P(result) = (uint32_t) -1;
22474 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22475 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
22476 			}
22477 
22478 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
22479 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22480 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22481 		} else {
22482 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
22483 
22484 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22485 			if (UNEXPECTED(EG(exception))) {
22486 				HANDLE_EXCEPTION();
22487 			} else if (is_empty) {
22488 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22489 			} else {
22490 				ZEND_VM_NEXT_OPCODE();
22491 			}
22492 		}
22493 	} else {
22494 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
22495 		ZVAL_UNDEF(EX_VAR(opline->result.var));
22496 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
22497 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22498 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
22499 	}
22500 }
22501 
ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22502 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22503 {
22504 	USE_OPLINE
22505 	zval *array_ptr, *array_ref;
22506 
22507 	SAVE_OPLINE();
22508 
22509 	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
22510 		array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22511 		if (Z_ISREF_P(array_ref)) {
22512 			array_ptr = Z_REFVAL_P(array_ref);
22513 		}
22514 	} else {
22515 		array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22516 	}
22517 
22518 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
22519 		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
22520 			if (array_ptr == array_ref) {
22521 				ZVAL_NEW_REF(array_ref, array_ref);
22522 				array_ptr = Z_REFVAL_P(array_ref);
22523 			}
22524 			Z_ADDREF_P(array_ref);
22525 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
22526 		} else {
22527 			array_ref = EX_VAR(opline->result.var);
22528 			ZVAL_NEW_REF(array_ref, array_ptr);
22529 			array_ptr = Z_REFVAL_P(array_ref);
22530 		}
22531 		if (IS_VAR == IS_CONST) {
22532 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
22533 		} else {
22534 			SEPARATE_ARRAY(array_ptr);
22535 		}
22536 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
22537 
22538 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22539 		ZEND_VM_NEXT_OPCODE();
22540 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
22541 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
22542 			HashTable *properties;
22543 			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
22544 				if (array_ptr == array_ref) {
22545 					ZVAL_NEW_REF(array_ref, array_ref);
22546 					array_ptr = Z_REFVAL_P(array_ref);
22547 				}
22548 				Z_ADDREF_P(array_ref);
22549 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
22550 			} else {
22551 				array_ptr = EX_VAR(opline->result.var);
22552 				ZVAL_COPY_VALUE(array_ptr, array_ref);
22553 			}
22554 			if (Z_OBJ_P(array_ptr)->properties
22555 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
22556 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
22557 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
22558 				}
22559 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
22560 			}
22561 
22562 			properties = Z_OBJPROP_P(array_ptr);
22563 			if (zend_hash_num_elements(properties) == 0) {
22564 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
22565 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22566 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
22567 			}
22568 
22569 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
22570 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22571 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22572 		} else {
22573 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
22574 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22575 			if (UNEXPECTED(EG(exception))) {
22576 				HANDLE_EXCEPTION();
22577 			} else if (is_empty) {
22578 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22579 			} else {
22580 				ZEND_VM_NEXT_OPCODE();
22581 			}
22582 		}
22583 	} else {
22584 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
22585 		ZVAL_UNDEF(EX_VAR(opline->result.var));
22586 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
22587 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22588 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
22589 	}
22590 }
22591 
ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22592 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22593 {
22594 	USE_OPLINE
22595 	zval *array;
22596 	zval *value;
22597 	uint32_t value_type;
22598 	HashTable *fe_ht;
22599 	HashPosition pos;
22600 
22601 	array = EX_VAR(opline->op1.var);
22602 	if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
22603 		ZEND_VM_TAIL_CALL(zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22604 	}
22605 	fe_ht = Z_ARRVAL_P(array);
22606 	pos = Z_FE_POS_P(array);
22607 	if (HT_IS_PACKED(fe_ht)) {
22608 		value = fe_ht->arPacked + pos;
22609 		while (1) {
22610 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22611 				/* reached end of iteration */
22612 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
22613 				ZEND_VM_CONTINUE();
22614 			}
22615 			value_type = Z_TYPE_INFO_P(value);
22616 			ZEND_ASSERT(value_type != IS_INDIRECT);
22617 			if (EXPECTED(value_type != IS_UNDEF)) {
22618 				break;
22619 			}
22620 			pos++;
22621 			value++;
22622 		}
22623 		Z_FE_POS_P(array) = pos + 1;
22624 		if (RETURN_VALUE_USED(opline)) {
22625 			ZVAL_LONG(EX_VAR(opline->result.var), pos);
22626 		}
22627 	} else {
22628 		Bucket *p;
22629 
22630 		p = fe_ht->arData + pos;
22631 		while (1) {
22632 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22633 				/* reached end of iteration */
22634 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
22635 				ZEND_VM_CONTINUE();
22636 			}
22637 			pos++;
22638 			value = &p->val;
22639 			value_type = Z_TYPE_INFO_P(value);
22640 			ZEND_ASSERT(value_type != IS_INDIRECT);
22641 			if (EXPECTED(value_type != IS_UNDEF)) {
22642 				break;
22643 			}
22644 			p++;
22645 		}
22646 		Z_FE_POS_P(array) = pos;
22647 		if (RETURN_VALUE_USED(opline)) {
22648 			if (!p->key) {
22649 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
22650 			} else {
22651 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
22652 			}
22653 		}
22654 	}
22655 	if (EXPECTED(opline->op2_type == IS_CV)) {
22656 		zval *variable_ptr = EX_VAR(opline->op2.var);
22657 		SAVE_OPLINE();
22658 		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
22659 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22660 	} else {
22661 		zval *res = EX_VAR(opline->op2.var);
22662 		zend_refcounted *gc = Z_COUNTED_P(value);
22663 
22664 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
22665 		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
22666 			GC_ADDREF(gc);
22667 		}
22668 		ZEND_VM_NEXT_OPCODE();
22669 	}
22670 }
22671 
ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22673 {
22674 	USE_OPLINE
22675 	zval *array;
22676 	zval *value;
22677 	uint32_t value_type;
22678 	HashTable *fe_ht;
22679 	HashPosition pos;
22680 	Bucket *p;
22681 
22682 	array = EX_VAR(opline->op1.var);
22683 	SAVE_OPLINE();
22684 
22685 	ZVAL_DEREF(array);
22686 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
22687 		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
22688 		fe_ht = Z_ARRVAL_P(array);
22689 		if (HT_IS_PACKED(fe_ht)) {
22690 			value = fe_ht->arPacked + pos;
22691 			while (1) {
22692 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22693 					/* reached end of iteration */
22694 					goto fe_fetch_w_exit;
22695 				}
22696 				value_type = Z_TYPE_INFO_P(value);
22697 				ZEND_ASSERT(value_type != IS_INDIRECT);
22698 				if (EXPECTED(value_type != IS_UNDEF)) {
22699 					break;
22700 				}
22701 				pos++;
22702 				value++;
22703 			}
22704 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
22705 			if (RETURN_VALUE_USED(opline)) {
22706 				ZVAL_LONG(EX_VAR(opline->result.var), pos);
22707 			}
22708 		} else {
22709 			p = fe_ht->arData + pos;
22710 			while (1) {
22711 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22712 					/* reached end of iteration */
22713 					goto fe_fetch_w_exit;
22714 				}
22715 				pos++;
22716 				value = &p->val;
22717 				value_type = Z_TYPE_INFO_P(value);
22718 				ZEND_ASSERT(value_type != IS_INDIRECT);
22719 				if (EXPECTED(value_type != IS_UNDEF)) {
22720 					break;
22721 				}
22722 				p++;
22723 			}
22724 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
22725 			if (RETURN_VALUE_USED(opline)) {
22726 				if (!p->key) {
22727 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
22728 				} else {
22729 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
22730 				}
22731 			}
22732 		}
22733 	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
22734 		zend_object_iterator *iter;
22735 
22736 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
22737 			/* plain object */
22738 
22739 			fe_ht = Z_OBJPROP_P(array);
22740 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
22741 			p = fe_ht->arData + pos;
22742 			while (1) {
22743 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22744 					/* reached end of iteration */
22745 					goto fe_fetch_w_exit;
22746 				}
22747 				pos++;
22748 				value = &p->val;
22749 				value_type = Z_TYPE_INFO_P(value);
22750 				if (EXPECTED(value_type != IS_UNDEF)) {
22751 					if (UNEXPECTED(value_type == IS_INDIRECT)) {
22752 						value = Z_INDIRECT_P(value);
22753 						value_type = Z_TYPE_INFO_P(value);
22754 						if (EXPECTED(value_type != IS_UNDEF)
22755 						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
22756 							if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
22757 								zend_property_info *prop_info =
22758 									zend_get_property_info_for_slot(Z_OBJ_P(array), value);
22759 								if (prop_info) {
22760 									if (UNEXPECTED(prop_info->flags & ZEND_ACC_READONLY)) {
22761 										zend_throw_error(NULL,
22762 											"Cannot acquire reference to readonly property %s::$%s",
22763 											ZSTR_VAL(prop_info->ce->name), ZSTR_VAL(p->key));
22764 										UNDEF_RESULT();
22765 										HANDLE_EXCEPTION();
22766 									}
22767 									if (ZEND_TYPE_IS_SET(prop_info->type)) {
22768 										ZVAL_NEW_REF(value, value);
22769 										ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
22770 										value_type = IS_REFERENCE_EX;
22771 									}
22772 								}
22773 							}
22774 							break;
22775 						}
22776 					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
22777 							|| !p->key
22778 							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
22779 						break;
22780 					}
22781 				}
22782 				p++;
22783 			}
22784 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
22785 			if (RETURN_VALUE_USED(opline)) {
22786 				if (UNEXPECTED(!p->key)) {
22787 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
22788 				} else if (ZSTR_VAL(p->key)[0]) {
22789 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
22790 				} else {
22791 					const char *class_name, *prop_name;
22792 					size_t prop_name_len;
22793 					zend_unmangle_property_name_ex(
22794 						p->key, &class_name, &prop_name, &prop_name_len);
22795 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
22796 				}
22797 			}
22798 		} else {
22799 			const zend_object_iterator_funcs *funcs = iter->funcs;
22800 			if (++iter->index > 0) {
22801 				/* This could cause an endless loop if index becomes zero again.
22802 				 * In case that ever happens we need an additional flag. */
22803 				funcs->move_forward(iter);
22804 				if (UNEXPECTED(EG(exception) != NULL)) {
22805 					UNDEF_RESULT();
22806 					HANDLE_EXCEPTION();
22807 				}
22808 				if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
22809 					/* reached end of iteration */
22810 					if (UNEXPECTED(EG(exception) != NULL)) {
22811 						UNDEF_RESULT();
22812 						HANDLE_EXCEPTION();
22813 					}
22814 					goto fe_fetch_w_exit;
22815 				}
22816 			}
22817 			value = funcs->get_current_data(iter);
22818 			if (UNEXPECTED(EG(exception) != NULL)) {
22819 				UNDEF_RESULT();
22820 				HANDLE_EXCEPTION();
22821 			}
22822 			if (!value) {
22823 				/* failure in get_current_data */
22824 				goto fe_fetch_w_exit;
22825 			}
22826 			if (RETURN_VALUE_USED(opline)) {
22827 				if (funcs->get_current_key) {
22828 					funcs->get_current_key(iter, EX_VAR(opline->result.var));
22829 					if (UNEXPECTED(EG(exception) != NULL)) {
22830 						UNDEF_RESULT();
22831 						HANDLE_EXCEPTION();
22832 					}
22833 				} else {
22834 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
22835 				}
22836 			}
22837 			value_type = Z_TYPE_INFO_P(value);
22838 		}
22839 	} else {
22840 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array));
22841 		if (UNEXPECTED(EG(exception))) {
22842 			UNDEF_RESULT();
22843 			HANDLE_EXCEPTION();
22844 		}
22845 fe_fetch_w_exit:
22846 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
22847 		ZEND_VM_CONTINUE();
22848 	}
22849 
22850 	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
22851 		zend_refcounted *gc = Z_COUNTED_P(value);
22852 		zval *ref;
22853 		ZVAL_NEW_EMPTY_REF(value);
22854 		ref = Z_REFVAL_P(value);
22855 		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
22856 	}
22857 	if (EXPECTED(opline->op2_type == IS_CV)) {
22858 		zval *variable_ptr = EX_VAR(opline->op2.var);
22859 		if (EXPECTED(variable_ptr != value)) {
22860 			zend_reference *ref;
22861 
22862 			ref = Z_REF_P(value);
22863 			GC_ADDREF(ref);
22864 			i_zval_ptr_dtor(variable_ptr);
22865 			ZVAL_REF(variable_ptr, ref);
22866 		}
22867 	} else {
22868 		Z_ADDREF_P(value);
22869 		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
22870 	}
22871 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22872 }
22873 
ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22874 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22875 {
22876 	USE_OPLINE
22877 	zval *value;
22878 	zend_reference *ref = NULL;
22879 	bool ret;
22880 
22881 	SAVE_OPLINE();
22882 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22883 
22884 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
22885 		if (IS_VAR == IS_VAR) {
22886 			ref = Z_REF_P(value);
22887 		}
22888 		value = Z_REFVAL_P(value);
22889 	}
22890 
22891 	ret = i_zend_is_true(value);
22892 
22893 	if (UNEXPECTED(EG(exception))) {
22894 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22895 		ZVAL_UNDEF(EX_VAR(opline->result.var));
22896 		HANDLE_EXCEPTION();
22897 	}
22898 
22899 	if (ret) {
22900 		zval *result = EX_VAR(opline->result.var);
22901 
22902 		ZVAL_COPY_VALUE(result, value);
22903 		if (IS_VAR == IS_CONST) {
22904 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22905 		} else if (IS_VAR == IS_CV) {
22906 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22907 		} else if (IS_VAR == IS_VAR && ref) {
22908 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22909 				efree_size(ref, sizeof(zend_reference));
22910 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22911 				Z_ADDREF_P(result);
22912 			}
22913 		}
22914 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22915 	}
22916 
22917 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22918 	ZEND_VM_NEXT_OPCODE();
22919 }
22920 
ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22921 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22922 {
22923 	USE_OPLINE
22924 	zval *value;
22925 	zend_reference *ref = NULL;
22926 
22927 	SAVE_OPLINE();
22928 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22929 
22930 	if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
22931 		if (IS_VAR & IS_VAR) {
22932 			ref = Z_REF_P(value);
22933 		}
22934 		value = Z_REFVAL_P(value);
22935 	}
22936 
22937 	if (Z_TYPE_P(value) > IS_NULL) {
22938 		zval *result = EX_VAR(opline->result.var);
22939 		ZVAL_COPY_VALUE(result, value);
22940 		if (IS_VAR == IS_CONST) {
22941 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22942 		} else if (IS_VAR == IS_CV) {
22943 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22944 		} else if ((IS_VAR & IS_VAR) && ref) {
22945 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22946 				efree_size(ref, sizeof(zend_reference));
22947 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22948 				Z_ADDREF_P(result);
22949 			}
22950 		}
22951 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22952 	}
22953 
22954 	if ((IS_VAR & IS_VAR) && ref) {
22955 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22956 			efree_size(ref, sizeof(zend_reference));
22957 		}
22958 	}
22959 	ZEND_VM_NEXT_OPCODE();
22960 }
22961 
ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22962 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22963 {
22964 	USE_OPLINE
22965 	zval *val, *result;
22966 
22967 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22968 
22969 	if (Z_TYPE_P(val) > IS_NULL) {
22970 		do {
22971 			if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
22972 				val = Z_REFVAL_P(val);
22973 				if (Z_TYPE_P(val) <= IS_NULL) {
22974 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22975 					break;
22976 				}
22977 			}
22978 			ZEND_VM_NEXT_OPCODE();
22979 		} while (0);
22980 	}
22981 
22982 	result = EX_VAR(opline->result.var);
22983 	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
22984 	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
22985 		ZVAL_NULL(result);
22986 		if (IS_VAR == IS_CV
22987 			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
22988 			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
22989 		) {
22990 			SAVE_OPLINE();
22991 			ZVAL_UNDEFINED_OP1();
22992 			if (UNEXPECTED(EG(exception) != NULL)) {
22993 				HANDLE_EXCEPTION();
22994 			}
22995 		}
22996 	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
22997 		ZVAL_FALSE(result);
22998 	} else {
22999 		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
23000 		ZVAL_TRUE(result);
23001 	}
23002 
23003 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
23004 }
23005 
ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23006 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23007 {
23008 	USE_OPLINE
23009 	zval *value;
23010 	zval *result = EX_VAR(opline->result.var);
23011 
23012 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23013 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23014 		SAVE_OPLINE();
23015 		ZVAL_UNDEFINED_OP1();
23016 		ZVAL_NULL(result);
23017 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23018 	}
23019 
23020 	if (IS_VAR == IS_CV) {
23021 		ZVAL_COPY_DEREF(result, value);
23022 	} else if (IS_VAR == IS_VAR) {
23023 		if (UNEXPECTED(Z_ISREF_P(value))) {
23024 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
23025 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
23026 				efree_size(Z_REF_P(value), sizeof(zend_reference));
23027 			} else if (Z_OPT_REFCOUNTED_P(result)) {
23028 				Z_ADDREF_P(result);
23029 			}
23030 		} else {
23031 			ZVAL_COPY_VALUE(result, value);
23032 		}
23033 	} else {
23034 		ZVAL_COPY_VALUE(result, value);
23035 		if (IS_VAR == IS_CONST) {
23036 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
23037 				Z_ADDREF_P(result);
23038 			}
23039 		}
23040 	}
23041 	ZEND_VM_NEXT_OPCODE();
23042 }
23043 
ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23044 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23045 {
23046 	USE_OPLINE
23047 	zval *varptr, *arg;
23048 
23049 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23050 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
23051 
23052 	if (IS_VAR == IS_CV) {
23053 		ZVAL_COPY(arg, varptr);
23054 	} else /* if (IS_VAR == IS_VAR) */ {
23055 		ZVAL_COPY_VALUE(arg, varptr);
23056 	}
23057 
23058 	ZEND_VM_NEXT_OPCODE();
23059 }
23060 
ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23061 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23062 {
23063 	USE_OPLINE
23064 	zval *op1, *op2;
23065 	bool result;
23066 
23067 	SAVE_OPLINE();
23068 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
23069 	op2 = RT_CONSTANT(opline, opline->op2);
23070 	result = fast_is_identical_function(op1, op2);
23071 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23072 
23073 	ZEND_VM_SMART_BRANCH(result, 1);
23074 }
23075 
ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23077 {
23078 	USE_OPLINE
23079 	zval *op1, *op2;
23080 	bool result;
23081 
23082 	SAVE_OPLINE();
23083 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
23084 	op2 = RT_CONSTANT(opline, opline->op2);
23085 	result = fast_is_identical_function(op1, op2);
23086 
23087 	ZEND_VM_SMART_BRANCH(result, 1);
23088 }
23089 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23090 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23091 {
23092 	USE_OPLINE
23093 	zval *op1, *op2;
23094 	bool result;
23095 
23096 	SAVE_OPLINE();
23097 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
23098 	op2 = RT_CONSTANT(opline, opline->op2);
23099 	result = fast_is_not_identical_function(op1, op2);
23100 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23101 
23102 	ZEND_VM_SMART_BRANCH(result, 1);
23103 }
23104 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23105 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23106 {
23107 	USE_OPLINE
23108 	zval *object;
23109 	zval *property;
23110 	zval *value;
23111 	zval *zptr;
23112 	void **cache_slot;
23113 	zend_property_info *prop_info;
23114 	zend_object *zobj;
23115 	zend_string *name, *tmp_name;
23116 
23117 	SAVE_OPLINE();
23118 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23119 	property = RT_CONSTANT(opline, opline->op2);
23120 
23121 	do {
23122 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
23123 
23124 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23125 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23126 				object = Z_REFVAL_P(object);
23127 				goto assign_op_object;
23128 			}
23129 			if (IS_VAR == IS_CV
23130 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23131 				ZVAL_UNDEFINED_OP1();
23132 			}
23133 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
23134 			break;
23135 		}
23136 
23137 assign_op_object:
23138 		/* here we are sure we are dealing with an object */
23139 		zobj = Z_OBJ_P(object);
23140 		if (IS_CONST == IS_CONST) {
23141 			name = Z_STR_P(property);
23142 		} else {
23143 			name = zval_try_get_tmp_string(property, &tmp_name);
23144 			if (UNEXPECTED(!name)) {
23145 				UNDEF_RESULT();
23146 				break;
23147 			}
23148 		}
23149 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
23150 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
23151 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
23152 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23153 					ZVAL_NULL(EX_VAR(opline->result.var));
23154 				}
23155 			} else {
23156 				zval *orig_zptr = zptr;
23157 				zend_reference *ref;
23158 
23159 				do {
23160 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
23161 						ref = Z_REF_P(zptr);
23162 						zptr = Z_REFVAL_P(zptr);
23163 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
23164 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
23165 							break;
23166 						}
23167 					}
23168 
23169 					if (IS_CONST == IS_CONST) {
23170 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
23171 					} else {
23172 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
23173 					}
23174 					if (prop_info) {
23175 						/* special case for typed properties */
23176 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
23177 					} else {
23178 						zend_binary_op(zptr, zptr, value OPLINE_CC);
23179 					}
23180 				} while (0);
23181 
23182 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23183 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
23184 				}
23185 			}
23186 		} else {
23187 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
23188 		}
23189 		if (IS_CONST != IS_CONST) {
23190 			zend_tmp_string_release(tmp_name);
23191 		}
23192 	} while (0);
23193 
23194 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
23195 
23196 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23197 	/* assign_obj has two opcodes! */
23198 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23199 }
23200 
23201 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23203 {
23204 	USE_OPLINE
23205 	zval *var_ptr;
23206 	zval *value, *container, *dim;
23207 	HashTable *ht;
23208 
23209 	SAVE_OPLINE();
23210 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23211 
23212 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
23213 assign_dim_op_array:
23214 		SEPARATE_ARRAY(container);
23215 		ht = Z_ARRVAL_P(container);
23216 assign_dim_op_new_array:
23217 		dim = RT_CONSTANT(opline, opline->op2);
23218 		if (IS_CONST == IS_UNUSED) {
23219 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
23220 			if (UNEXPECTED(!var_ptr)) {
23221 				zend_cannot_add_element();
23222 				goto assign_dim_op_ret_null;
23223 			}
23224 		} else {
23225 			if (IS_CONST == IS_CONST) {
23226 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
23227 			} else {
23228 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
23229 			}
23230 			if (UNEXPECTED(!var_ptr)) {
23231 				goto assign_dim_op_ret_null;
23232 			}
23233 		}
23234 
23235 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
23236 
23237 		do {
23238 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
23239 				zend_reference *ref = Z_REF_P(var_ptr);
23240 				var_ptr = Z_REFVAL_P(var_ptr);
23241 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
23242 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
23243 					break;
23244 				}
23245 			}
23246 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
23247 		} while (0);
23248 
23249 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23250 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
23251 		}
23252 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
23253 	} else {
23254 		if (EXPECTED(Z_ISREF_P(container))) {
23255 			container = Z_REFVAL_P(container);
23256 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
23257 				goto assign_dim_op_array;
23258 			}
23259 		}
23260 
23261 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
23262 			zend_object *obj = Z_OBJ_P(container);
23263 
23264 			dim = RT_CONSTANT(opline, opline->op2);
23265 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23266 				dim++;
23267 			}
23268 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
23269 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
23270 			uint8_t old_type;
23271 
23272 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
23273 				ZVAL_UNDEFINED_OP1();
23274 			}
23275 			ht = zend_new_array(8);
23276 			old_type = Z_TYPE_P(container);
23277 			ZVAL_ARR(container, ht);
23278 			if (UNEXPECTED(old_type == IS_FALSE)) {
23279 				GC_ADDREF(ht);
23280 				zend_false_to_array_deprecated();
23281 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
23282 					zend_array_destroy(ht);
23283 					goto assign_dim_op_ret_null;
23284 				}
23285 			}
23286 			goto assign_dim_op_new_array;
23287 		} else {
23288 			dim = RT_CONSTANT(opline, opline->op2);
23289 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
23290 assign_dim_op_ret_null:
23291 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
23292 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23293 				ZVAL_NULL(EX_VAR(opline->result.var));
23294 			}
23295 		}
23296 	}
23297 
23298 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23299 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23300 }
23301 
ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23302 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23303 {
23304 	USE_OPLINE
23305 	zval *var_ptr;
23306 	zval *value;
23307 
23308 	SAVE_OPLINE();
23309 	value = RT_CONSTANT(opline, opline->op2);
23310 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23311 
23312 	do {
23313 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
23314 			zend_reference *ref = Z_REF_P(var_ptr);
23315 			var_ptr = Z_REFVAL_P(var_ptr);
23316 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
23317 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
23318 				break;
23319 			}
23320 		}
23321 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
23322 	} while (0);
23323 
23324 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23325 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
23326 	}
23327 
23328 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23329 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23330 }
23331 
ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23332 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23333 {
23334 	USE_OPLINE
23335 	zval *object;
23336 	zval *property;
23337 	zval *zptr;
23338 	void **cache_slot;
23339 	zend_property_info *prop_info;
23340 	zend_object *zobj;
23341 	zend_string *name, *tmp_name;
23342 
23343 	SAVE_OPLINE();
23344 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23345 	property = RT_CONSTANT(opline, opline->op2);
23346 
23347 	do {
23348 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23349 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23350 				object = Z_REFVAL_P(object);
23351 				goto pre_incdec_object;
23352 			}
23353 			if (IS_VAR == IS_CV
23354 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23355 				ZVAL_UNDEFINED_OP1();
23356 			}
23357 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
23358 			break;
23359 		}
23360 
23361 pre_incdec_object:
23362 		/* here we are sure we are dealing with an object */
23363 		zobj = Z_OBJ_P(object);
23364 		if (IS_CONST == IS_CONST) {
23365 			name = Z_STR_P(property);
23366 		} else {
23367 			name = zval_try_get_tmp_string(property, &tmp_name);
23368 			if (UNEXPECTED(!name)) {
23369 				UNDEF_RESULT();
23370 				break;
23371 			}
23372 		}
23373 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
23374 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
23375 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
23376 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23377 					ZVAL_NULL(EX_VAR(opline->result.var));
23378 				}
23379 			} else {
23380 				if (IS_CONST == IS_CONST) {
23381 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
23382 				} else {
23383 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
23384 				}
23385 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
23386 			}
23387 		} else {
23388 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
23389 		}
23390 		if (IS_CONST != IS_CONST) {
23391 			zend_tmp_string_release(tmp_name);
23392 		}
23393 	} while (0);
23394 
23395 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23396 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23397 }
23398 
ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23399 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23400 {
23401 	USE_OPLINE
23402 	zval *object;
23403 	zval *property;
23404 	zval *zptr;
23405 	void **cache_slot;
23406 	zend_property_info *prop_info;
23407 	zend_object *zobj;
23408 	zend_string *name, *tmp_name;
23409 
23410 	SAVE_OPLINE();
23411 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23412 	property = RT_CONSTANT(opline, opline->op2);
23413 
23414 	do {
23415 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23416 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23417 				object = Z_REFVAL_P(object);
23418 				goto post_incdec_object;
23419 			}
23420 			if (IS_VAR == IS_CV
23421 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23422 				ZVAL_UNDEFINED_OP1();
23423 			}
23424 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
23425 			break;
23426 		}
23427 
23428 post_incdec_object:
23429 		/* here we are sure we are dealing with an object */
23430 		zobj = Z_OBJ_P(object);
23431 		if (IS_CONST == IS_CONST) {
23432 			name = Z_STR_P(property);
23433 		} else {
23434 			name = zval_try_get_tmp_string(property, &tmp_name);
23435 			if (UNEXPECTED(!name)) {
23436 				ZVAL_UNDEF(EX_VAR(opline->result.var));
23437 				break;
23438 			}
23439 		}
23440 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
23441 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
23442 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
23443 				ZVAL_NULL(EX_VAR(opline->result.var));
23444 			} else {
23445 				if (IS_CONST == IS_CONST) {
23446 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
23447 				} else {
23448 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
23449 				}
23450 
23451 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
23452 			}
23453 		} else {
23454 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
23455 		}
23456 		if (IS_CONST != IS_CONST) {
23457 			zend_tmp_string_release(tmp_name);
23458 		}
23459 	} while (0);
23460 
23461 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23462 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23463 }
23464 
ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23465 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23466 {
23467 	USE_OPLINE
23468 	zval *container;
23469 
23470 	SAVE_OPLINE();
23471 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23472 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23473 
23474 	if (IS_VAR == IS_VAR) {
23475 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23476 	}
23477 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23478 }
23479 
ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23480 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23481 {
23482 	USE_OPLINE
23483 	zval *container;
23484 
23485 	SAVE_OPLINE();
23486 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23487 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23488 
23489 	if (IS_VAR == IS_VAR) {
23490 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23491 	}
23492 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23493 }
23494 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23495 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23496 {
23497 #if 0
23498 	USE_OPLINE
23499 #endif
23500 
23501 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
23502 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
23503 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23504 		}
23505 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23506 	} else {
23507 		if (IS_CONST == IS_UNUSED) {
23508 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23509 		}
23510 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23511 	}
23512 }
23513 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23514 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23515 {
23516 	USE_OPLINE
23517 	zval *container;
23518 
23519 	SAVE_OPLINE();
23520 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23521 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23522 
23523 	if (IS_VAR == IS_VAR) {
23524 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23525 	}
23526 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23527 }
23528 
ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23530 {
23531 	USE_OPLINE
23532 	zval *property, *container, *result;
23533 
23534 	SAVE_OPLINE();
23535 
23536 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23537 	property = RT_CONSTANT(opline, opline->op2);
23538 	result = EX_VAR(opline->result.var);
23539 	zend_fetch_property_address(
23540 		result, container, IS_VAR, property, IS_CONST,
23541 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
23542 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
23543 
23544 	if (IS_VAR == IS_VAR) {
23545 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23546 	}
23547 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23548 }
23549 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23550 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23551 {
23552 	USE_OPLINE
23553 	zval *property, *container, *result;
23554 
23555 	SAVE_OPLINE();
23556 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23557 	property = RT_CONSTANT(opline, opline->op2);
23558 	result = EX_VAR(opline->result.var);
23559 	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 OPLINE_CC EXECUTE_DATA_CC);
23560 
23561 	if (IS_VAR == IS_VAR) {
23562 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23563 	}
23564 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23565 }
23566 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23567 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23568 {
23569 #if 0
23570 	USE_OPLINE
23571 #endif
23572 
23573 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
23574 		/* Behave like FETCH_OBJ_W */
23575 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
23576 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23577 		}
23578 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23579 	} else {
23580 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23581 	}
23582 }
23583 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23584 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23585 {
23586 	USE_OPLINE
23587 	zval *container, *property, *result;
23588 
23589 	SAVE_OPLINE();
23590 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23591 	property = RT_CONSTANT(opline, opline->op2);
23592 	result = EX_VAR(opline->result.var);
23593 	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 OPLINE_CC EXECUTE_DATA_CC);
23594 
23595 	if (IS_VAR == IS_VAR) {
23596 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23597 	}
23598 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23599 }
23600 
ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23601 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23602 {
23603 	USE_OPLINE
23604 	zval *container, *dim;
23605 
23606 	SAVE_OPLINE();
23607 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23608 	dim = RT_CONSTANT(opline, opline->op2);
23609 
23610 	if (IS_VAR == IS_VAR
23611 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
23612 		&& UNEXPECTED(!Z_ISREF_P(container))
23613 	) {
23614 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
23615 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23616 	} else {
23617 		zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23618 	}
23619 
23620 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23621 }
23622 
ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23623 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23624 {
23625 	USE_OPLINE
23626 	zval *object, *value, tmp;
23627 	zend_object *zobj;
23628 	zend_string *name, *tmp_name;
23629 	zend_refcounted *garbage = NULL;
23630 
23631 	SAVE_OPLINE();
23632 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23633 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
23634 
23635 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23636 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23637 			object = Z_REFVAL_P(object);
23638 			goto assign_object;
23639 		}
23640 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23641 		value = &EG(uninitialized_zval);
23642 		goto free_and_exit_assign_obj;
23643 	}
23644 
23645 assign_object:
23646 	zobj = Z_OBJ_P(object);
23647 	if (IS_CONST == IS_CONST) {
23648 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23649 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23650 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23651 			zval *property_val;
23652 
23653 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23654 				property_val = OBJ_PROP(zobj, prop_offset);
23655 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23656 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23657 
23658 					if (prop_info != NULL) {
23659 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
23660 						goto free_and_exit_assign_obj;
23661 					} else {
23662 fast_assign_obj:
23663 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
23664 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23665 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23666 						}
23667 						goto exit_assign_obj;
23668 					}
23669 				}
23670 			} else {
23671 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23672 				if (EXPECTED(zobj->properties != NULL)) {
23673 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23674 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23675 							GC_DELREF(zobj->properties);
23676 						}
23677 						zobj->properties = zend_array_dup(zobj->properties);
23678 					}
23679 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23680 					if (property_val) {
23681 						goto fast_assign_obj;
23682 					}
23683 				}
23684 
23685 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
23686 					if (EXPECTED(zobj->properties == NULL)) {
23687 						rebuild_object_properties(zobj);
23688 					}
23689 					if (IS_CONST == IS_CONST) {
23690 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23691 							Z_ADDREF_P(value);
23692 						}
23693 					} else if (IS_CONST != IS_TMP_VAR) {
23694 						if (Z_ISREF_P(value)) {
23695 							if (IS_CONST == IS_VAR) {
23696 								zend_reference *ref = Z_REF_P(value);
23697 								if (GC_DELREF(ref) == 0) {
23698 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23699 									efree_size(ref, sizeof(zend_reference));
23700 									value = &tmp;
23701 								} else {
23702 									value = Z_REFVAL_P(value);
23703 									Z_TRY_ADDREF_P(value);
23704 								}
23705 							} else {
23706 								value = Z_REFVAL_P(value);
23707 								Z_TRY_ADDREF_P(value);
23708 							}
23709 						} else if (IS_CONST == IS_CV) {
23710 							Z_TRY_ADDREF_P(value);
23711 						}
23712 						}
23713 					zend_hash_add_new(zobj->properties, name, value);
23714 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23715 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23716 					}
23717 					goto exit_assign_obj;
23718 				}
23719 			}
23720 		}
23721 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23722 	} else {
23723 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23724 		if (UNEXPECTED(!name)) {
23725 
23726 			UNDEF_RESULT();
23727 			goto exit_assign_obj;
23728 		}
23729 	}
23730 
23731 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
23732 		ZVAL_DEREF(value);
23733 	}
23734 
23735 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23736 
23737 	if (IS_CONST != IS_CONST) {
23738 		zend_tmp_string_release(tmp_name);
23739 	}
23740 
23741 free_and_exit_assign_obj:
23742 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
23743 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23744 	}
23745 
23746 exit_assign_obj:
23747 	if (garbage) {
23748 		GC_DTOR_NO_REF(garbage);
23749 	}
23750 
23751 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23752 	/* assign_obj has two opcodes! */
23753 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23754 }
23755 
23756 /* 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)23757 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23758 {
23759 	USE_OPLINE
23760 	zval *object, *value, tmp;
23761 	zend_object *zobj;
23762 	zend_string *name, *tmp_name;
23763 	zend_refcounted *garbage = NULL;
23764 
23765 	SAVE_OPLINE();
23766 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23767 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23768 
23769 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23770 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23771 			object = Z_REFVAL_P(object);
23772 			goto assign_object;
23773 		}
23774 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23775 		value = &EG(uninitialized_zval);
23776 		goto free_and_exit_assign_obj;
23777 	}
23778 
23779 assign_object:
23780 	zobj = Z_OBJ_P(object);
23781 	if (IS_CONST == IS_CONST) {
23782 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23783 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23784 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23785 			zval *property_val;
23786 
23787 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23788 				property_val = OBJ_PROP(zobj, prop_offset);
23789 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23790 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23791 
23792 					if (prop_info != NULL) {
23793 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
23794 						goto free_and_exit_assign_obj;
23795 					} else {
23796 fast_assign_obj:
23797 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
23798 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23799 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23800 						}
23801 						goto exit_assign_obj;
23802 					}
23803 				}
23804 			} else {
23805 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23806 				if (EXPECTED(zobj->properties != NULL)) {
23807 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23808 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23809 							GC_DELREF(zobj->properties);
23810 						}
23811 						zobj->properties = zend_array_dup(zobj->properties);
23812 					}
23813 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23814 					if (property_val) {
23815 						goto fast_assign_obj;
23816 					}
23817 				}
23818 
23819 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
23820 					if (EXPECTED(zobj->properties == NULL)) {
23821 						rebuild_object_properties(zobj);
23822 					}
23823 					if (IS_TMP_VAR == IS_CONST) {
23824 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23825 							Z_ADDREF_P(value);
23826 						}
23827 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
23828 						if (Z_ISREF_P(value)) {
23829 							if (IS_TMP_VAR == IS_VAR) {
23830 								zend_reference *ref = Z_REF_P(value);
23831 								if (GC_DELREF(ref) == 0) {
23832 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23833 									efree_size(ref, sizeof(zend_reference));
23834 									value = &tmp;
23835 								} else {
23836 									value = Z_REFVAL_P(value);
23837 									Z_TRY_ADDREF_P(value);
23838 								}
23839 							} else {
23840 								value = Z_REFVAL_P(value);
23841 								Z_TRY_ADDREF_P(value);
23842 							}
23843 						} else if (IS_TMP_VAR == IS_CV) {
23844 							Z_TRY_ADDREF_P(value);
23845 						}
23846 						}
23847 					zend_hash_add_new(zobj->properties, name, value);
23848 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23849 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23850 					}
23851 					goto exit_assign_obj;
23852 				}
23853 			}
23854 		}
23855 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23856 	} else {
23857 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23858 		if (UNEXPECTED(!name)) {
23859 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23860 			UNDEF_RESULT();
23861 			goto exit_assign_obj;
23862 		}
23863 	}
23864 
23865 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
23866 		ZVAL_DEREF(value);
23867 	}
23868 
23869 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23870 
23871 	if (IS_CONST != IS_CONST) {
23872 		zend_tmp_string_release(tmp_name);
23873 	}
23874 
23875 free_and_exit_assign_obj:
23876 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
23877 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23878 	}
23879 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23880 exit_assign_obj:
23881 	if (garbage) {
23882 		GC_DTOR_NO_REF(garbage);
23883 	}
23884 
23885 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23886 	/* assign_obj has two opcodes! */
23887 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23888 }
23889 
23890 /* 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)23891 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23892 {
23893 	USE_OPLINE
23894 	zval *object, *value, tmp;
23895 	zend_object *zobj;
23896 	zend_string *name, *tmp_name;
23897 	zend_refcounted *garbage = NULL;
23898 
23899 	SAVE_OPLINE();
23900 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23901 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23902 
23903 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23904 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23905 			object = Z_REFVAL_P(object);
23906 			goto assign_object;
23907 		}
23908 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23909 		value = &EG(uninitialized_zval);
23910 		goto free_and_exit_assign_obj;
23911 	}
23912 
23913 assign_object:
23914 	zobj = Z_OBJ_P(object);
23915 	if (IS_CONST == IS_CONST) {
23916 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23917 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23918 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23919 			zval *property_val;
23920 
23921 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23922 				property_val = OBJ_PROP(zobj, prop_offset);
23923 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23924 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23925 
23926 					if (prop_info != NULL) {
23927 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
23928 						goto free_and_exit_assign_obj;
23929 					} else {
23930 fast_assign_obj:
23931 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
23932 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23933 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23934 						}
23935 						goto exit_assign_obj;
23936 					}
23937 				}
23938 			} else {
23939 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23940 				if (EXPECTED(zobj->properties != NULL)) {
23941 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23942 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23943 							GC_DELREF(zobj->properties);
23944 						}
23945 						zobj->properties = zend_array_dup(zobj->properties);
23946 					}
23947 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23948 					if (property_val) {
23949 						goto fast_assign_obj;
23950 					}
23951 				}
23952 
23953 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
23954 					if (EXPECTED(zobj->properties == NULL)) {
23955 						rebuild_object_properties(zobj);
23956 					}
23957 					if (IS_VAR == IS_CONST) {
23958 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23959 							Z_ADDREF_P(value);
23960 						}
23961 					} else if (IS_VAR != IS_TMP_VAR) {
23962 						if (Z_ISREF_P(value)) {
23963 							if (IS_VAR == IS_VAR) {
23964 								zend_reference *ref = Z_REF_P(value);
23965 								if (GC_DELREF(ref) == 0) {
23966 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23967 									efree_size(ref, sizeof(zend_reference));
23968 									value = &tmp;
23969 								} else {
23970 									value = Z_REFVAL_P(value);
23971 									Z_TRY_ADDREF_P(value);
23972 								}
23973 							} else {
23974 								value = Z_REFVAL_P(value);
23975 								Z_TRY_ADDREF_P(value);
23976 							}
23977 						} else if (IS_VAR == IS_CV) {
23978 							Z_TRY_ADDREF_P(value);
23979 						}
23980 						}
23981 					zend_hash_add_new(zobj->properties, name, value);
23982 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23983 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23984 					}
23985 					goto exit_assign_obj;
23986 				}
23987 			}
23988 		}
23989 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23990 	} else {
23991 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23992 		if (UNEXPECTED(!name)) {
23993 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23994 			UNDEF_RESULT();
23995 			goto exit_assign_obj;
23996 		}
23997 	}
23998 
23999 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
24000 		ZVAL_DEREF(value);
24001 	}
24002 
24003 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
24004 
24005 	if (IS_CONST != IS_CONST) {
24006 		zend_tmp_string_release(tmp_name);
24007 	}
24008 
24009 free_and_exit_assign_obj:
24010 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
24011 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
24012 	}
24013 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24014 exit_assign_obj:
24015 	if (garbage) {
24016 		GC_DTOR_NO_REF(garbage);
24017 	}
24018 
24019 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24020 	/* assign_obj has two opcodes! */
24021 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24022 }
24023 
24024 /* 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)24025 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24026 {
24027 	USE_OPLINE
24028 	zval *object, *value, tmp;
24029 	zend_object *zobj;
24030 	zend_string *name, *tmp_name;
24031 	zend_refcounted *garbage = NULL;
24032 
24033 	SAVE_OPLINE();
24034 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24035 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
24036 
24037 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
24038 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
24039 			object = Z_REFVAL_P(object);
24040 			goto assign_object;
24041 		}
24042 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
24043 		value = &EG(uninitialized_zval);
24044 		goto free_and_exit_assign_obj;
24045 	}
24046 
24047 assign_object:
24048 	zobj = Z_OBJ_P(object);
24049 	if (IS_CONST == IS_CONST) {
24050 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
24051 			void **cache_slot = CACHE_ADDR(opline->extended_value);
24052 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
24053 			zval *property_val;
24054 
24055 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
24056 				property_val = OBJ_PROP(zobj, prop_offset);
24057 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
24058 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
24059 
24060 					if (prop_info != NULL) {
24061 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
24062 						goto free_and_exit_assign_obj;
24063 					} else {
24064 fast_assign_obj:
24065 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
24066 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24067 							ZVAL_COPY(EX_VAR(opline->result.var), value);
24068 						}
24069 						goto exit_assign_obj;
24070 					}
24071 				}
24072 			} else {
24073 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24074 				if (EXPECTED(zobj->properties != NULL)) {
24075 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
24076 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
24077 							GC_DELREF(zobj->properties);
24078 						}
24079 						zobj->properties = zend_array_dup(zobj->properties);
24080 					}
24081 					property_val = zend_hash_find_known_hash(zobj->properties, name);
24082 					if (property_val) {
24083 						goto fast_assign_obj;
24084 					}
24085 				}
24086 
24087 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
24088 					if (EXPECTED(zobj->properties == NULL)) {
24089 						rebuild_object_properties(zobj);
24090 					}
24091 					if (IS_CV == IS_CONST) {
24092 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
24093 							Z_ADDREF_P(value);
24094 						}
24095 					} else if (IS_CV != IS_TMP_VAR) {
24096 						if (Z_ISREF_P(value)) {
24097 							if (IS_CV == IS_VAR) {
24098 								zend_reference *ref = Z_REF_P(value);
24099 								if (GC_DELREF(ref) == 0) {
24100 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
24101 									efree_size(ref, sizeof(zend_reference));
24102 									value = &tmp;
24103 								} else {
24104 									value = Z_REFVAL_P(value);
24105 									Z_TRY_ADDREF_P(value);
24106 								}
24107 							} else {
24108 								value = Z_REFVAL_P(value);
24109 								Z_TRY_ADDREF_P(value);
24110 							}
24111 						} else if (IS_CV == IS_CV) {
24112 							Z_TRY_ADDREF_P(value);
24113 						}
24114 						}
24115 					zend_hash_add_new(zobj->properties, name, value);
24116 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24117 						ZVAL_COPY(EX_VAR(opline->result.var), value);
24118 					}
24119 					goto exit_assign_obj;
24120 				}
24121 			}
24122 		}
24123 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24124 	} else {
24125 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
24126 		if (UNEXPECTED(!name)) {
24127 
24128 			UNDEF_RESULT();
24129 			goto exit_assign_obj;
24130 		}
24131 	}
24132 
24133 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
24134 		ZVAL_DEREF(value);
24135 	}
24136 
24137 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
24138 
24139 	if (IS_CONST != IS_CONST) {
24140 		zend_tmp_string_release(tmp_name);
24141 	}
24142 
24143 free_and_exit_assign_obj:
24144 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
24145 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
24146 	}
24147 
24148 exit_assign_obj:
24149 	if (garbage) {
24150 		GC_DTOR_NO_REF(garbage);
24151 	}
24152 
24153 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24154 	/* assign_obj has two opcodes! */
24155 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24156 }
24157 
24158 /* 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)24159 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24160 {
24161 	USE_OPLINE
24162 	zval *object_ptr, *orig_object_ptr;
24163 	zval *value;
24164 	zval *variable_ptr;
24165 	zval *dim;
24166 	zend_refcounted *garbage = NULL;
24167 
24168 	SAVE_OPLINE();
24169 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24170 
24171 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24172 try_assign_dim_array:
24173 		SEPARATE_ARRAY(object_ptr);
24174 		if (IS_CONST == IS_UNUSED) {
24175 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
24176 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
24177 				HashTable *ht = Z_ARRVAL_P(object_ptr);
24178 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
24179 					GC_ADDREF(ht);
24180 				}
24181 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24182 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
24183 					zend_array_destroy(ht);
24184 					goto assign_dim_error;
24185 				}
24186 			}
24187 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
24188 				ZVAL_DEREF(value);
24189 			}
24190 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
24191 			if (UNEXPECTED(value == NULL)) {
24192 				zend_cannot_add_element();
24193 				goto assign_dim_error;
24194 			} else if (IS_CONST == IS_CV) {
24195 				if (Z_REFCOUNTED_P(value)) {
24196 					Z_ADDREF_P(value);
24197 				}
24198 			} else if (IS_CONST == IS_VAR) {
24199 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
24200 				if (Z_ISREF_P(free_op_data)) {
24201 					if (Z_REFCOUNTED_P(value)) {
24202 						Z_ADDREF_P(value);
24203 					}
24204 					zval_ptr_dtor_nogc(free_op_data);
24205 				}
24206 			} else if (IS_CONST == IS_CONST) {
24207 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
24208 					Z_ADDREF_P(value);
24209 				}
24210 			}
24211 		} else {
24212 			dim = RT_CONSTANT(opline, opline->op2);
24213 			if (IS_CONST == IS_CONST) {
24214 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24215 			} else {
24216 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24217 			}
24218 			if (UNEXPECTED(variable_ptr == NULL)) {
24219 				goto assign_dim_error;
24220 			}
24221 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
24222 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
24223 		}
24224 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24225 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24226 		}
24227 		if (garbage) {
24228 			GC_DTOR_NO_REF(garbage);
24229 		}
24230 	} else {
24231 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24232 			object_ptr = Z_REFVAL_P(object_ptr);
24233 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24234 				goto try_assign_dim_array;
24235 			}
24236 		}
24237 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24238 			zend_object *obj = Z_OBJ_P(object_ptr);
24239 
24240 			GC_ADDREF(obj);
24241 			dim = RT_CONSTANT(opline, opline->op2);
24242 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
24243 				dim = ZVAL_UNDEFINED_OP2();
24244 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
24245 				dim++;
24246 			}
24247 
24248 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
24249 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
24250 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24251 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
24252 				ZVAL_DEREF(value);
24253 			}
24254 
24255 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
24256 
24257 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24258 				zend_objects_store_del(obj);
24259 			}
24260 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24261 			if (IS_CONST == IS_UNUSED) {
24262 				zend_use_new_element_for_string();
24263 
24264 				UNDEF_RESULT();
24265 			} else {
24266 				dim = RT_CONSTANT(opline, opline->op2);
24267 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
24268 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
24269 
24270 			}
24271 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24272 			if (Z_ISREF_P(orig_object_ptr)
24273 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
24274 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
24275 				dim = RT_CONSTANT(opline, opline->op2);
24276 
24277 				UNDEF_RESULT();
24278 			} else {
24279 				HashTable *ht = zend_new_array(8);
24280 				uint8_t old_type = Z_TYPE_P(object_ptr);
24281 
24282 				ZVAL_ARR(object_ptr, ht);
24283 				if (UNEXPECTED(old_type == IS_FALSE)) {
24284 					GC_ADDREF(ht);
24285 					zend_false_to_array_deprecated();
24286 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
24287 						zend_array_destroy(ht);
24288 						goto assign_dim_error;
24289 					}
24290 				}
24291 				goto try_assign_dim_array;
24292 			}
24293 		} else {
24294 			zend_use_scalar_as_array();
24295 			dim = RT_CONSTANT(opline, opline->op2);
24296 assign_dim_error:
24297 
24298 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24299 				ZVAL_NULL(EX_VAR(opline->result.var));
24300 			}
24301 		}
24302 	}
24303 	if (IS_CONST != IS_UNUSED) {
24304 
24305 	}
24306 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24307 	/* assign_dim has two opcodes! */
24308 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24309 }
24310 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24312 {
24313 	USE_OPLINE
24314 	zval *object_ptr, *orig_object_ptr;
24315 	zval *value;
24316 	zval *variable_ptr;
24317 	zval *dim;
24318 	zend_refcounted *garbage = NULL;
24319 
24320 	SAVE_OPLINE();
24321 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24322 
24323 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24324 try_assign_dim_array:
24325 		SEPARATE_ARRAY(object_ptr);
24326 		if (IS_CONST == IS_UNUSED) {
24327 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
24328 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
24329 				HashTable *ht = Z_ARRVAL_P(object_ptr);
24330 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
24331 					GC_ADDREF(ht);
24332 				}
24333 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24334 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
24335 					zend_array_destroy(ht);
24336 					goto assign_dim_error;
24337 				}
24338 			}
24339 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
24340 				ZVAL_DEREF(value);
24341 			}
24342 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
24343 			if (UNEXPECTED(value == NULL)) {
24344 				zend_cannot_add_element();
24345 				goto assign_dim_error;
24346 			} else if (IS_TMP_VAR == IS_CV) {
24347 				if (Z_REFCOUNTED_P(value)) {
24348 					Z_ADDREF_P(value);
24349 				}
24350 			} else if (IS_TMP_VAR == IS_VAR) {
24351 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
24352 				if (Z_ISREF_P(free_op_data)) {
24353 					if (Z_REFCOUNTED_P(value)) {
24354 						Z_ADDREF_P(value);
24355 					}
24356 					zval_ptr_dtor_nogc(free_op_data);
24357 				}
24358 			} else if (IS_TMP_VAR == IS_CONST) {
24359 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
24360 					Z_ADDREF_P(value);
24361 				}
24362 			}
24363 		} else {
24364 			dim = RT_CONSTANT(opline, opline->op2);
24365 			if (IS_CONST == IS_CONST) {
24366 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24367 			} else {
24368 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24369 			}
24370 			if (UNEXPECTED(variable_ptr == NULL)) {
24371 				goto assign_dim_error;
24372 			}
24373 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
24374 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
24375 		}
24376 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24377 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24378 		}
24379 		if (garbage) {
24380 			GC_DTOR_NO_REF(garbage);
24381 		}
24382 	} else {
24383 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24384 			object_ptr = Z_REFVAL_P(object_ptr);
24385 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24386 				goto try_assign_dim_array;
24387 			}
24388 		}
24389 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24390 			zend_object *obj = Z_OBJ_P(object_ptr);
24391 
24392 			GC_ADDREF(obj);
24393 			dim = RT_CONSTANT(opline, opline->op2);
24394 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
24395 				dim = ZVAL_UNDEFINED_OP2();
24396 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
24397 				dim++;
24398 			}
24399 
24400 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
24401 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
24402 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24403 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
24404 				ZVAL_DEREF(value);
24405 			}
24406 
24407 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
24408 
24409 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24410 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24411 				zend_objects_store_del(obj);
24412 			}
24413 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24414 			if (IS_CONST == IS_UNUSED) {
24415 				zend_use_new_element_for_string();
24416 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24417 				UNDEF_RESULT();
24418 			} else {
24419 				dim = RT_CONSTANT(opline, opline->op2);
24420 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
24421 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
24422 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24423 			}
24424 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24425 			if (Z_ISREF_P(orig_object_ptr)
24426 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
24427 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
24428 				dim = RT_CONSTANT(opline, opline->op2);
24429 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24430 				UNDEF_RESULT();
24431 			} else {
24432 				HashTable *ht = zend_new_array(8);
24433 				uint8_t old_type = Z_TYPE_P(object_ptr);
24434 
24435 				ZVAL_ARR(object_ptr, ht);
24436 				if (UNEXPECTED(old_type == IS_FALSE)) {
24437 					GC_ADDREF(ht);
24438 					zend_false_to_array_deprecated();
24439 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
24440 						zend_array_destroy(ht);
24441 						goto assign_dim_error;
24442 					}
24443 				}
24444 				goto try_assign_dim_array;
24445 			}
24446 		} else {
24447 			zend_use_scalar_as_array();
24448 			dim = RT_CONSTANT(opline, opline->op2);
24449 assign_dim_error:
24450 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24451 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24452 				ZVAL_NULL(EX_VAR(opline->result.var));
24453 			}
24454 		}
24455 	}
24456 	if (IS_CONST != IS_UNUSED) {
24457 
24458 	}
24459 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24460 	/* assign_dim has two opcodes! */
24461 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24462 }
24463 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24464 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24465 {
24466 	USE_OPLINE
24467 	zval *object_ptr, *orig_object_ptr;
24468 	zval *value;
24469 	zval *variable_ptr;
24470 	zval *dim;
24471 	zend_refcounted *garbage = NULL;
24472 
24473 	SAVE_OPLINE();
24474 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24475 
24476 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24477 try_assign_dim_array:
24478 		SEPARATE_ARRAY(object_ptr);
24479 		if (IS_CONST == IS_UNUSED) {
24480 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24481 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
24482 				HashTable *ht = Z_ARRVAL_P(object_ptr);
24483 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
24484 					GC_ADDREF(ht);
24485 				}
24486 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24487 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
24488 					zend_array_destroy(ht);
24489 					goto assign_dim_error;
24490 				}
24491 			}
24492 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
24493 				ZVAL_DEREF(value);
24494 			}
24495 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
24496 			if (UNEXPECTED(value == NULL)) {
24497 				zend_cannot_add_element();
24498 				goto assign_dim_error;
24499 			} else if (IS_VAR == IS_CV) {
24500 				if (Z_REFCOUNTED_P(value)) {
24501 					Z_ADDREF_P(value);
24502 				}
24503 			} else if (IS_VAR == IS_VAR) {
24504 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
24505 				if (Z_ISREF_P(free_op_data)) {
24506 					if (Z_REFCOUNTED_P(value)) {
24507 						Z_ADDREF_P(value);
24508 					}
24509 					zval_ptr_dtor_nogc(free_op_data);
24510 				}
24511 			} else if (IS_VAR == IS_CONST) {
24512 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
24513 					Z_ADDREF_P(value);
24514 				}
24515 			}
24516 		} else {
24517 			dim = RT_CONSTANT(opline, opline->op2);
24518 			if (IS_CONST == IS_CONST) {
24519 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24520 			} else {
24521 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24522 			}
24523 			if (UNEXPECTED(variable_ptr == NULL)) {
24524 				goto assign_dim_error;
24525 			}
24526 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24527 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
24528 		}
24529 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24530 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24531 		}
24532 		if (garbage) {
24533 			GC_DTOR_NO_REF(garbage);
24534 		}
24535 	} else {
24536 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24537 			object_ptr = Z_REFVAL_P(object_ptr);
24538 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24539 				goto try_assign_dim_array;
24540 			}
24541 		}
24542 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24543 			zend_object *obj = Z_OBJ_P(object_ptr);
24544 
24545 			GC_ADDREF(obj);
24546 			dim = RT_CONSTANT(opline, opline->op2);
24547 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
24548 				dim = ZVAL_UNDEFINED_OP2();
24549 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
24550 				dim++;
24551 			}
24552 
24553 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24554 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
24555 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24556 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
24557 				ZVAL_DEREF(value);
24558 			}
24559 
24560 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
24561 
24562 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24563 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24564 				zend_objects_store_del(obj);
24565 			}
24566 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24567 			if (IS_CONST == IS_UNUSED) {
24568 				zend_use_new_element_for_string();
24569 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24570 				UNDEF_RESULT();
24571 			} else {
24572 				dim = RT_CONSTANT(opline, opline->op2);
24573 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24574 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
24575 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24576 			}
24577 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24578 			if (Z_ISREF_P(orig_object_ptr)
24579 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
24580 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
24581 				dim = RT_CONSTANT(opline, opline->op2);
24582 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24583 				UNDEF_RESULT();
24584 			} else {
24585 				HashTable *ht = zend_new_array(8);
24586 				uint8_t old_type = Z_TYPE_P(object_ptr);
24587 
24588 				ZVAL_ARR(object_ptr, ht);
24589 				if (UNEXPECTED(old_type == IS_FALSE)) {
24590 					GC_ADDREF(ht);
24591 					zend_false_to_array_deprecated();
24592 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
24593 						zend_array_destroy(ht);
24594 						goto assign_dim_error;
24595 					}
24596 				}
24597 				goto try_assign_dim_array;
24598 			}
24599 		} else {
24600 			zend_use_scalar_as_array();
24601 			dim = RT_CONSTANT(opline, opline->op2);
24602 assign_dim_error:
24603 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24604 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24605 				ZVAL_NULL(EX_VAR(opline->result.var));
24606 			}
24607 		}
24608 	}
24609 	if (IS_CONST != IS_UNUSED) {
24610 
24611 	}
24612 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24613 	/* assign_dim has two opcodes! */
24614 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24615 }
24616 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24617 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24618 {
24619 	USE_OPLINE
24620 	zval *object_ptr, *orig_object_ptr;
24621 	zval *value;
24622 	zval *variable_ptr;
24623 	zval *dim;
24624 	zend_refcounted *garbage = NULL;
24625 
24626 	SAVE_OPLINE();
24627 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24628 
24629 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24630 try_assign_dim_array:
24631 		SEPARATE_ARRAY(object_ptr);
24632 		if (IS_CONST == IS_UNUSED) {
24633 			value = EX_VAR((opline+1)->op1.var);
24634 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
24635 				HashTable *ht = Z_ARRVAL_P(object_ptr);
24636 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
24637 					GC_ADDREF(ht);
24638 				}
24639 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24640 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
24641 					zend_array_destroy(ht);
24642 					goto assign_dim_error;
24643 				}
24644 			}
24645 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
24646 				ZVAL_DEREF(value);
24647 			}
24648 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
24649 			if (UNEXPECTED(value == NULL)) {
24650 				zend_cannot_add_element();
24651 				goto assign_dim_error;
24652 			} else if (IS_CV == IS_CV) {
24653 				if (Z_REFCOUNTED_P(value)) {
24654 					Z_ADDREF_P(value);
24655 				}
24656 			} else if (IS_CV == IS_VAR) {
24657 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
24658 				if (Z_ISREF_P(free_op_data)) {
24659 					if (Z_REFCOUNTED_P(value)) {
24660 						Z_ADDREF_P(value);
24661 					}
24662 					zval_ptr_dtor_nogc(free_op_data);
24663 				}
24664 			} else if (IS_CV == IS_CONST) {
24665 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
24666 					Z_ADDREF_P(value);
24667 				}
24668 			}
24669 		} else {
24670 			dim = RT_CONSTANT(opline, opline->op2);
24671 			if (IS_CONST == IS_CONST) {
24672 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24673 			} else {
24674 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24675 			}
24676 			if (UNEXPECTED(variable_ptr == NULL)) {
24677 				goto assign_dim_error;
24678 			}
24679 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
24680 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
24681 		}
24682 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24683 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24684 		}
24685 		if (garbage) {
24686 			GC_DTOR_NO_REF(garbage);
24687 		}
24688 	} else {
24689 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24690 			object_ptr = Z_REFVAL_P(object_ptr);
24691 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24692 				goto try_assign_dim_array;
24693 			}
24694 		}
24695 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24696 			zend_object *obj = Z_OBJ_P(object_ptr);
24697 
24698 			GC_ADDREF(obj);
24699 			dim = RT_CONSTANT(opline, opline->op2);
24700 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
24701 				dim = ZVAL_UNDEFINED_OP2();
24702 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
24703 				dim++;
24704 			}
24705 
24706 			value = EX_VAR((opline+1)->op1.var);
24707 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
24708 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24709 			} else if (IS_CV & (IS_CV|IS_VAR)) {
24710 				ZVAL_DEREF(value);
24711 			}
24712 
24713 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
24714 
24715 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24716 				zend_objects_store_del(obj);
24717 			}
24718 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24719 			if (IS_CONST == IS_UNUSED) {
24720 				zend_use_new_element_for_string();
24721 
24722 				UNDEF_RESULT();
24723 			} else {
24724 				dim = RT_CONSTANT(opline, opline->op2);
24725 				value = EX_VAR((opline+1)->op1.var);
24726 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
24727 
24728 			}
24729 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24730 			if (Z_ISREF_P(orig_object_ptr)
24731 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
24732 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
24733 				dim = RT_CONSTANT(opline, opline->op2);
24734 
24735 				UNDEF_RESULT();
24736 			} else {
24737 				HashTable *ht = zend_new_array(8);
24738 				uint8_t old_type = Z_TYPE_P(object_ptr);
24739 
24740 				ZVAL_ARR(object_ptr, ht);
24741 				if (UNEXPECTED(old_type == IS_FALSE)) {
24742 					GC_ADDREF(ht);
24743 					zend_false_to_array_deprecated();
24744 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
24745 						zend_array_destroy(ht);
24746 						goto assign_dim_error;
24747 					}
24748 				}
24749 				goto try_assign_dim_array;
24750 			}
24751 		} else {
24752 			zend_use_scalar_as_array();
24753 			dim = RT_CONSTANT(opline, opline->op2);
24754 assign_dim_error:
24755 
24756 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24757 				ZVAL_NULL(EX_VAR(opline->result.var));
24758 			}
24759 		}
24760 	}
24761 	if (IS_CONST != IS_UNUSED) {
24762 
24763 	}
24764 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24765 	/* assign_dim has two opcodes! */
24766 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24767 }
24768 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24770 {
24771 	USE_OPLINE
24772 	zval *value;
24773 	zval *variable_ptr;
24774 
24775 	SAVE_OPLINE();
24776 	value = RT_CONSTANT(opline, opline->op2);
24777 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24778 
24779 	if (0 || UNEXPECTED(0)) {
24780 		zend_refcounted *garbage = NULL;
24781 
24782 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
24783 		if (UNEXPECTED(0)) {
24784 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24785 		}
24786 		if (garbage) {
24787 			GC_DTOR_NO_REF(garbage);
24788 		}
24789 	} else {
24790 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
24791 	}
24792 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24793 	/* zend_assign_to_variable() always takes care of op2, never free it! */
24794 
24795 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24796 }
24797 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24798 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24799 {
24800 	USE_OPLINE
24801 	zval *value;
24802 	zval *variable_ptr;
24803 
24804 	SAVE_OPLINE();
24805 	value = RT_CONSTANT(opline, opline->op2);
24806 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24807 
24808 	if (0 || UNEXPECTED(1)) {
24809 		zend_refcounted *garbage = NULL;
24810 
24811 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
24812 		if (UNEXPECTED(1)) {
24813 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24814 		}
24815 		if (garbage) {
24816 			GC_DTOR_NO_REF(garbage);
24817 		}
24818 	} else {
24819 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
24820 	}
24821 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24822 	/* zend_assign_to_variable() always takes care of op2, never free it! */
24823 
24824 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24825 }
24826 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24827 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24828 {
24829 	USE_OPLINE
24830 	zval *property, *container, *value_ptr;
24831 
24832 	SAVE_OPLINE();
24833 
24834 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24835 	property = RT_CONSTANT(opline, opline->op2);
24836 
24837 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24838 
24839 	if (1) {
24840 		if (IS_VAR == IS_UNUSED) {
24841 			if (IS_CONST == IS_CONST) {
24842 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24843 			} else {
24844 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24845 			}
24846 		} else {
24847 			if (IS_CONST == IS_CONST) {
24848 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24849 			} else {
24850 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24851 			}
24852 		}
24853 	} else {
24854 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24855 	}
24856 
24857 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24858 
24859 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24860 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24861 }
24862 
24863 /* 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)24864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24865 {
24866 	USE_OPLINE
24867 	zval *property, *container, *value_ptr;
24868 
24869 	SAVE_OPLINE();
24870 
24871 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24872 	property = RT_CONSTANT(opline, opline->op2);
24873 
24874 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
24875 
24876 	if (1) {
24877 		if (IS_VAR == IS_UNUSED) {
24878 			if (IS_CONST == IS_CONST) {
24879 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24880 			} else {
24881 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24882 			}
24883 		} else {
24884 			if (IS_CONST == IS_CONST) {
24885 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24886 			} else {
24887 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24888 			}
24889 		}
24890 	} else {
24891 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24892 	}
24893 
24894 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24895 
24896 
24897 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24898 }
24899 
24900 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24901 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24902 {
24903 	USE_OPLINE
24904 	zval *function_name;
24905 	zend_class_entry *ce;
24906 	uint32_t call_info;
24907 	zend_function *fbc;
24908 	zend_execute_data *call;
24909 
24910 	SAVE_OPLINE();
24911 
24912 	if (IS_VAR == IS_CONST) {
24913 		/* no function found. try a static method in class */
24914 		ce = CACHED_PTR(opline->result.num);
24915 		if (UNEXPECTED(ce == NULL)) {
24916 			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);
24917 			if (UNEXPECTED(ce == NULL)) {
24918 
24919 				HANDLE_EXCEPTION();
24920 			}
24921 			if (IS_CONST != IS_CONST) {
24922 				CACHE_PTR(opline->result.num, ce);
24923 			}
24924 		}
24925 	} else if (IS_VAR == IS_UNUSED) {
24926 		ce = zend_fetch_class(NULL, opline->op1.num);
24927 		if (UNEXPECTED(ce == NULL)) {
24928 
24929 			HANDLE_EXCEPTION();
24930 		}
24931 	} else {
24932 		ce = Z_CE_P(EX_VAR(opline->op1.var));
24933 	}
24934 
24935 	if (IS_VAR == IS_CONST &&
24936 	    IS_CONST == IS_CONST &&
24937 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
24938 		/* nothing to do */
24939 	} else if (IS_VAR != IS_CONST &&
24940 	           IS_CONST == IS_CONST &&
24941 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
24942 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
24943 	} else if (IS_CONST != IS_UNUSED) {
24944 		function_name = RT_CONSTANT(opline, opline->op2);
24945 		if (IS_CONST != IS_CONST) {
24946 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
24947 				do {
24948 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
24949 						function_name = Z_REFVAL_P(function_name);
24950 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
24951 							break;
24952 						}
24953 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
24954 						ZVAL_UNDEFINED_OP2();
24955 						if (UNEXPECTED(EG(exception) != NULL)) {
24956 							HANDLE_EXCEPTION();
24957 						}
24958 					}
24959 					zend_throw_error(NULL, "Method name must be a string");
24960 
24961 					HANDLE_EXCEPTION();
24962 				} while (0);
24963 			}
24964 		}
24965 
24966 		if (ce->get_static_method) {
24967 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
24968 		} else {
24969 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
24970 		}
24971 		if (UNEXPECTED(fbc == NULL)) {
24972 			if (EXPECTED(!EG(exception))) {
24973 				zend_undefined_method(ce, Z_STR_P(function_name));
24974 			}
24975 
24976 			HANDLE_EXCEPTION();
24977 		}
24978 		if (IS_CONST == IS_CONST &&
24979 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
24980 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
24981 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
24982 		}
24983 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
24984 			init_func_run_time_cache(&fbc->op_array);
24985 		}
24986 		if (IS_CONST != IS_CONST) {
24987 
24988 		}
24989 	} else {
24990 		if (UNEXPECTED(ce->constructor == NULL)) {
24991 			zend_throw_error(NULL, "Cannot call constructor");
24992 			HANDLE_EXCEPTION();
24993 		}
24994 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
24995 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
24996 			HANDLE_EXCEPTION();
24997 		}
24998 		fbc = ce->constructor;
24999 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
25000 			init_func_run_time_cache(&fbc->op_array);
25001 		}
25002 	}
25003 
25004 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
25005 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
25006 			ce = (zend_class_entry*)Z_OBJ(EX(This));
25007 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
25008 		} else {
25009 			zend_non_static_method_call(fbc);
25010 			HANDLE_EXCEPTION();
25011 		}
25012 	} else {
25013 		/* previous opcode is ZEND_FETCH_CLASS */
25014 		if (IS_VAR == IS_UNUSED
25015 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
25016 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
25017 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
25018 				ce = Z_OBJCE(EX(This));
25019 			} else {
25020 				ce = Z_CE(EX(This));
25021 			}
25022 		}
25023 		call_info = ZEND_CALL_NESTED_FUNCTION;
25024 	}
25025 
25026 	call = zend_vm_stack_push_call_frame(call_info,
25027 		fbc, opline->extended_value, ce);
25028 	call->prev_execute_data = EX(call);
25029 	EX(call) = call;
25030 
25031 	ZEND_VM_NEXT_OPCODE();
25032 }
25033 
ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25034 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25035 {
25036 	USE_OPLINE
25037 	zval *varptr, *arg;
25038 
25039 	if (IS_CONST == IS_CONST) {
25040 		SAVE_OPLINE();
25041 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
25042 		uint32_t arg_num;
25043 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
25044 		if (UNEXPECTED(!arg)) {
25045 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25046 			HANDLE_EXCEPTION();
25047 		}
25048 	} else {
25049 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
25050 	}
25051 
25052 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25053 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
25054 		SAVE_OPLINE();
25055 		ZVAL_UNDEFINED_OP1();
25056 		ZVAL_NULL(arg);
25057 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25058 	}
25059 
25060 	if (IS_VAR == IS_CV) {
25061 		ZVAL_COPY_DEREF(arg, varptr);
25062 	} else /* if (IS_VAR == IS_VAR) */ {
25063 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
25064 			zend_refcounted *ref = Z_COUNTED_P(varptr);
25065 
25066 			varptr = Z_REFVAL_P(varptr);
25067 			ZVAL_COPY_VALUE(arg, varptr);
25068 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
25069 				efree_size(ref, sizeof(zend_reference));
25070 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
25071 				Z_ADDREF_P(arg);
25072 			}
25073 		} else {
25074 			ZVAL_COPY_VALUE(arg, varptr);
25075 		}
25076 	}
25077 
25078 	ZEND_VM_NEXT_OPCODE();
25079 }
25080 
ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25081 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25082 {
25083 	USE_OPLINE
25084 	zval *varptr, *arg;
25085 
25086 	if (IS_CONST == IS_CONST) {
25087 		SAVE_OPLINE();
25088 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
25089 		uint32_t arg_num;
25090 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
25091 		if (UNEXPECTED(!arg)) {
25092 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25093 			HANDLE_EXCEPTION();
25094 		}
25095 	} else {
25096 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
25097 	}
25098 
25099 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25100 	ZVAL_COPY_VALUE(arg, varptr);
25101 
25102 	if (EXPECTED(Z_ISREF_P(varptr))) {
25103 		ZEND_VM_NEXT_OPCODE();
25104 	}
25105 
25106 	SAVE_OPLINE();
25107 	ZVAL_NEW_REF(arg, arg);
25108 	zend_error(E_NOTICE, "Only variables should be passed by reference");
25109 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25110 }
25111 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25112 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25113 {
25114 	USE_OPLINE
25115 	zval *varptr, *arg;
25116 	uint32_t arg_num;
25117 
25118 	if (IS_CONST == IS_CONST) {
25119 		SAVE_OPLINE();
25120 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
25121 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
25122 		if (UNEXPECTED(!arg)) {
25123 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25124 			HANDLE_EXCEPTION();
25125 		}
25126 	} else {
25127 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
25128 		arg_num = opline->op2.num;
25129 	}
25130 
25131 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
25132 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
25133 			goto send_var;
25134 		}
25135 
25136 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25137 		ZVAL_COPY_VALUE(arg, varptr);
25138 
25139 		if (EXPECTED(Z_ISREF_P(varptr) ||
25140 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
25141 			ZEND_VM_NEXT_OPCODE();
25142 		}
25143 	} else {
25144 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
25145 			goto send_var;
25146 		}
25147 
25148 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25149 		ZVAL_COPY_VALUE(arg, varptr);
25150 
25151 		if (EXPECTED(Z_ISREF_P(varptr) ||
25152 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
25153 			ZEND_VM_NEXT_OPCODE();
25154 		}
25155 	}
25156 
25157 	SAVE_OPLINE();
25158 	ZVAL_NEW_REF(arg, arg);
25159 	zend_error(E_NOTICE, "Only variables should be passed by reference");
25160 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25161 
25162 send_var:
25163 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25164 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
25165 		zend_refcounted *ref = Z_COUNTED_P(varptr);
25166 
25167 		varptr = Z_REFVAL_P(varptr);
25168 		ZVAL_COPY_VALUE(arg, varptr);
25169 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
25170 			efree_size(ref, sizeof(zend_reference));
25171 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
25172 			Z_ADDREF_P(arg);
25173 		}
25174 	} else {
25175 		ZVAL_COPY_VALUE(arg, varptr);
25176 	}
25177 	ZEND_VM_NEXT_OPCODE();
25178 }
25179 
ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25180 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25181 {
25182 	USE_OPLINE
25183 	zval *varptr, *arg;
25184 
25185 	SAVE_OPLINE();
25186 	if (IS_CONST == IS_CONST) {
25187 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
25188 		uint32_t arg_num;
25189 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
25190 		if (UNEXPECTED(!arg)) {
25191 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25192 			HANDLE_EXCEPTION();
25193 		}
25194 	} else {
25195 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
25196 	}
25197 
25198 	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25199 	if (Z_ISREF_P(varptr)) {
25200 		Z_ADDREF_P(varptr);
25201 	} else {
25202 		ZVAL_MAKE_REF_EX(varptr, 2);
25203 	}
25204 	ZVAL_REF(arg, Z_REF_P(varptr));
25205 
25206 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25207 	ZEND_VM_NEXT_OPCODE();
25208 }
25209 
ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25210 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25211 {
25212 	USE_OPLINE
25213 	zval *varptr, *arg;
25214 	uint32_t arg_num;
25215 
25216 	if (IS_CONST == IS_CONST) {
25217 		SAVE_OPLINE();
25218 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
25219 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
25220 		if (UNEXPECTED(!arg)) {
25221 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25222 			HANDLE_EXCEPTION();
25223 		}
25224 	} else {
25225 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
25226 		arg_num = opline->op2.num;
25227 	}
25228 
25229 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
25230 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
25231 			goto send_var_by_ref;
25232 		}
25233 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
25234 send_var_by_ref:
25235 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25236 		if (Z_ISREF_P(varptr)) {
25237 			Z_ADDREF_P(varptr);
25238 		} else {
25239 			ZVAL_MAKE_REF_EX(varptr, 2);
25240 		}
25241 		ZVAL_REF(arg, Z_REF_P(varptr));
25242 
25243 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25244 		ZEND_VM_NEXT_OPCODE();
25245 	}
25246 
25247 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25248 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
25249 		SAVE_OPLINE();
25250 		ZVAL_UNDEFINED_OP1();
25251 		ZVAL_NULL(arg);
25252 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25253 	}
25254 
25255 	if (IS_VAR == IS_CV) {
25256 		ZVAL_COPY_DEREF(arg, varptr);
25257 	} else /* if (IS_VAR == IS_VAR) */ {
25258 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
25259 			zend_refcounted *ref = Z_COUNTED_P(varptr);
25260 
25261 			varptr = Z_REFVAL_P(varptr);
25262 			ZVAL_COPY_VALUE(arg, varptr);
25263 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
25264 				efree_size(ref, sizeof(zend_reference));
25265 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
25266 				Z_ADDREF_P(arg);
25267 			}
25268 		} else {
25269 			ZVAL_COPY_VALUE(arg, varptr);
25270 		}
25271 	}
25272 
25273 	ZEND_VM_NEXT_OPCODE();
25274 }
25275 
ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25276 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25277 {
25278 	USE_OPLINE
25279 	zval *varptr, *arg;
25280 
25281 	if (IS_CONST == IS_CONST) {
25282 		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
25283 		SAVE_OPLINE();
25284 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
25285 		uint32_t arg_num;
25286 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
25287 		if (UNEXPECTED(!arg)) {
25288 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25289 			HANDLE_EXCEPTION();
25290 		}
25291 	} else {
25292 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
25293 	}
25294 
25295 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
25296 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25297 		if (Z_ISREF_P(varptr)) {
25298 			Z_ADDREF_P(varptr);
25299 		} else {
25300 			ZVAL_MAKE_REF_EX(varptr, 2);
25301 		}
25302 		ZVAL_REF(arg, Z_REF_P(varptr));
25303 
25304 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25305 		ZEND_VM_NEXT_OPCODE();
25306 	}
25307 
25308 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25309 
25310 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
25311 		zend_refcounted *ref = Z_COUNTED_P(varptr);
25312 
25313 		varptr = Z_REFVAL_P(varptr);
25314 		ZVAL_COPY_VALUE(arg, varptr);
25315 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
25316 			efree_size(ref, sizeof(zend_reference));
25317 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
25318 			Z_ADDREF_P(arg);
25319 		}
25320 	} else {
25321 		ZVAL_COPY_VALUE(arg, varptr);
25322 	}
25323 
25324 	ZEND_VM_NEXT_OPCODE();
25325 }
25326 
ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25327 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25328 {
25329 	zend_class_entry *ce, *scope;
25330 	zend_class_constant *c;
25331 	zval *value, *zv, *constant_zv;
25332 	zend_string *constant_name;
25333 	USE_OPLINE
25334 
25335 	SAVE_OPLINE();
25336 
25337 	do {
25338 		if (IS_VAR == IS_CONST && IS_CONST == IS_CONST) {
25339 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
25340 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
25341 				break;
25342 			}
25343 		}
25344 		if (IS_VAR == IS_CONST) {
25345 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
25346 				ce = CACHED_PTR(opline->extended_value);
25347 			} else {
25348 				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);
25349 				if (UNEXPECTED(ce == NULL)) {
25350 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25351 
25352 					HANDLE_EXCEPTION();
25353 				}
25354 				CACHE_PTR(opline->extended_value, ce);
25355 			}
25356 		} else if (IS_VAR == IS_UNUSED) {
25357 			ce = zend_fetch_class(NULL, opline->op1.num);
25358 			if (UNEXPECTED(ce == NULL)) {
25359 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25360 
25361 				HANDLE_EXCEPTION();
25362 			}
25363 		} else {
25364 			ce = Z_CE_P(EX_VAR(opline->op1.var));
25365 		}
25366 		if (IS_VAR != IS_CONST
25367 			&& IS_CONST == IS_CONST
25368 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
25369 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
25370 			break;
25371 		}
25372 
25373 		constant_zv = RT_CONSTANT(opline, opline->op2);
25374 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
25375 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
25376 			ZVAL_UNDEF(EX_VAR(opline->result.var));
25377 
25378 			HANDLE_EXCEPTION();
25379 		}
25380 		constant_name = Z_STR_P(constant_zv);
25381 		/* Magic 'class' for constant OP2 is caught at compile-time */
25382 		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
25383 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
25384 
25385 			ZEND_VM_NEXT_OPCODE();
25386 		}
25387 		zv = IS_CONST == IS_CONST
25388 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
25389 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
25390 
25391 		if (EXPECTED(zv != NULL)) {
25392 			c = Z_PTR_P(zv);
25393 			scope = EX(func)->op_array.scope;
25394 			if (!zend_verify_const_access(c, scope)) {
25395 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25396 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25397 
25398 				HANDLE_EXCEPTION();
25399 			}
25400 
25401 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
25402 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25403 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25404 
25405 				HANDLE_EXCEPTION();
25406 			}
25407 
25408 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
25409 			if (UNEXPECTED(is_constant_deprecated)) {
25410 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25411 
25412 				if (EG(exception)) {
25413 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25414 
25415 					HANDLE_EXCEPTION();
25416 				}
25417 			}
25418 
25419 			value = &c->value;
25420 			// Enums require loading of all class constants to build the backed enum table
25421 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
25422 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
25423 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25424 
25425 					HANDLE_EXCEPTION();
25426 				}
25427 			}
25428 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
25429 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
25430 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25431 
25432 					HANDLE_EXCEPTION();
25433 				}
25434 			}
25435 			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
25436 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
25437 			}
25438 		} else {
25439 			zend_throw_error(NULL, "Undefined constant %s::%s",
25440 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25441 			ZVAL_UNDEF(EX_VAR(opline->result.var));
25442 
25443 			HANDLE_EXCEPTION();
25444 		}
25445 	} while (0);
25446 
25447 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
25448 
25449 	ZEND_VM_NEXT_OPCODE();
25450 }
25451 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25452 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25453 {
25454 	USE_OPLINE
25455 	zval *expr_ptr, new_expr;
25456 
25457 	SAVE_OPLINE();
25458 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
25459 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
25460 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25461 		if (Z_ISREF_P(expr_ptr)) {
25462 			Z_ADDREF_P(expr_ptr);
25463 		} else {
25464 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
25465 		}
25466 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25467 	} else {
25468 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25469 		if (IS_VAR == IS_TMP_VAR) {
25470 			/* pass */
25471 		} else if (IS_VAR == IS_CONST) {
25472 			Z_TRY_ADDREF_P(expr_ptr);
25473 		} else if (IS_VAR == IS_CV) {
25474 			ZVAL_DEREF(expr_ptr);
25475 			Z_TRY_ADDREF_P(expr_ptr);
25476 		} else /* if (IS_VAR == IS_VAR) */ {
25477 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
25478 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
25479 
25480 				expr_ptr = Z_REFVAL_P(expr_ptr);
25481 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
25482 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
25483 					expr_ptr = &new_expr;
25484 					efree_size(ref, sizeof(zend_reference));
25485 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
25486 					Z_ADDREF_P(expr_ptr);
25487 				}
25488 			}
25489 		}
25490 	}
25491 
25492 	if (IS_CONST != IS_UNUSED) {
25493 		zval *offset = RT_CONSTANT(opline, opline->op2);
25494 		zend_string *str;
25495 		zend_ulong hval;
25496 
25497 add_again:
25498 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
25499 			str = Z_STR_P(offset);
25500 			if (IS_CONST != IS_CONST) {
25501 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
25502 					goto num_index;
25503 				}
25504 			}
25505 str_index:
25506 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
25507 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
25508 			hval = Z_LVAL_P(offset);
25509 num_index:
25510 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
25511 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
25512 			offset = Z_REFVAL_P(offset);
25513 			goto add_again;
25514 		} else if (Z_TYPE_P(offset) == IS_NULL) {
25515 			str = ZSTR_EMPTY_ALLOC();
25516 			goto str_index;
25517 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
25518 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
25519 			goto num_index;
25520 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
25521 			hval = 0;
25522 			goto num_index;
25523 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
25524 			hval = 1;
25525 			goto num_index;
25526 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
25527 			zend_use_resource_as_offset(offset);
25528 			hval = Z_RES_HANDLE_P(offset);
25529 			goto num_index;
25530 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
25531 			ZVAL_UNDEFINED_OP2();
25532 			str = ZSTR_EMPTY_ALLOC();
25533 			goto str_index;
25534 		} else {
25535 			zend_illegal_array_offset_access(offset);
25536 			zval_ptr_dtor_nogc(expr_ptr);
25537 		}
25538 
25539 	} else {
25540 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
25541 			zend_cannot_add_element();
25542 			zval_ptr_dtor_nogc(expr_ptr);
25543 		}
25544 	}
25545 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25546 }
25547 
ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25548 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25549 {
25550 	zval *array;
25551 	uint32_t size;
25552 	USE_OPLINE
25553 
25554 	array = EX_VAR(opline->result.var);
25555 	if (IS_VAR != IS_UNUSED) {
25556 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
25557 		ZVAL_ARR(array, zend_new_array(size));
25558 		/* Explicitly initialize array as not-packed if flag is set */
25559 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
25560 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
25561 		}
25562 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25563 	} else {
25564 		ZVAL_ARR(array, zend_new_array(0));
25565 		ZEND_VM_NEXT_OPCODE();
25566 	}
25567 }
25568 
ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25569 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25570 {
25571 	USE_OPLINE
25572 	zval *container;
25573 	zval *offset;
25574 	zend_ulong hval;
25575 	zend_string *key;
25576 
25577 	SAVE_OPLINE();
25578 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25579 	offset = RT_CONSTANT(opline, opline->op2);
25580 
25581 	do {
25582 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25583 			HashTable *ht;
25584 
25585 unset_dim_array:
25586 			SEPARATE_ARRAY(container);
25587 			ht = Z_ARRVAL_P(container);
25588 offset_again:
25589 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
25590 				key = Z_STR_P(offset);
25591 				if (IS_CONST != IS_CONST) {
25592 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
25593 						goto num_index_dim;
25594 					}
25595 				}
25596 str_index_dim:
25597 				ZEND_ASSERT(ht != &EG(symbol_table));
25598 				zend_hash_del(ht, key);
25599 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
25600 				hval = Z_LVAL_P(offset);
25601 num_index_dim:
25602 				zend_hash_index_del(ht, hval);
25603 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
25604 				offset = Z_REFVAL_P(offset);
25605 				goto offset_again;
25606 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
25607 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
25608 				goto num_index_dim;
25609 			} else if (Z_TYPE_P(offset) == IS_NULL) {
25610 				key = ZSTR_EMPTY_ALLOC();
25611 				goto str_index_dim;
25612 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
25613 				hval = 0;
25614 				goto num_index_dim;
25615 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
25616 				hval = 1;
25617 				goto num_index_dim;
25618 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
25619 				zend_use_resource_as_offset(offset);
25620 				hval = Z_RES_HANDLE_P(offset);
25621 				goto num_index_dim;
25622 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
25623 				ZVAL_UNDEFINED_OP2();
25624 				key = ZSTR_EMPTY_ALLOC();
25625 				goto str_index_dim;
25626 			} else {
25627 				zend_illegal_array_offset_unset(offset);
25628 			}
25629 			break;
25630 		} else if (Z_ISREF_P(container)) {
25631 			container = Z_REFVAL_P(container);
25632 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25633 				goto unset_dim_array;
25634 			}
25635 		}
25636 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
25637 			container = ZVAL_UNDEFINED_OP1();
25638 		}
25639 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
25640 			offset = ZVAL_UNDEFINED_OP2();
25641 		}
25642 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
25643 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
25644 				offset++;
25645 			}
25646 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
25647 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
25648 			zend_throw_error(NULL, "Cannot unset string offsets");
25649 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
25650 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
25651 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
25652 			zend_false_to_array_deprecated();
25653 		}
25654 	} while (0);
25655 
25656 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25657 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25658 }
25659 
ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25660 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25661 {
25662 	USE_OPLINE
25663 	zval *container;
25664 	zval *offset;
25665 	zend_string *name, *tmp_name;
25666 
25667 	SAVE_OPLINE();
25668 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25669 	offset = RT_CONSTANT(opline, opline->op2);
25670 
25671 	do {
25672 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
25673 			if (Z_ISREF_P(container)) {
25674 				container = Z_REFVAL_P(container);
25675 				if (Z_TYPE_P(container) != IS_OBJECT) {
25676 					if (IS_VAR == IS_CV
25677 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
25678 						ZVAL_UNDEFINED_OP1();
25679 					}
25680 					break;
25681 				}
25682 			} else {
25683 				break;
25684 			}
25685 		}
25686 		if (IS_CONST == IS_CONST) {
25687 			name = Z_STR_P(offset);
25688 		} else {
25689 			name = zval_try_get_tmp_string(offset, &tmp_name);
25690 			if (UNEXPECTED(!name)) {
25691 				break;
25692 			}
25693 		}
25694 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
25695 		if (IS_CONST != IS_CONST) {
25696 			zend_tmp_string_release(tmp_name);
25697 		}
25698 	} while (0);
25699 
25700 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25701 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25702 }
25703 
ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25704 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25705 {
25706 	USE_OPLINE
25707 
25708 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
25709 
25710 	SAVE_OPLINE();
25711 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
25712 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25713 	}
25714 
25715 	/* Destroy the previously yielded value */
25716 	zval_ptr_dtor(&generator->value);
25717 
25718 	/* Destroy the previously yielded key */
25719 	zval_ptr_dtor(&generator->key);
25720 
25721 	/* Set the new yielded value */
25722 	if (IS_VAR != IS_UNUSED) {
25723 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
25724 			/* Constants and temporary variables aren't yieldable by reference,
25725 			 * but we still allow them with a notice. */
25726 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
25727 				zval *value;
25728 
25729 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
25730 
25731 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25732 				ZVAL_COPY_VALUE(&generator->value, value);
25733 				if (IS_VAR == IS_CONST) {
25734 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
25735 						Z_ADDREF(generator->value);
25736 					}
25737 				}
25738 			} else {
25739 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25740 
25741 				/* If a function call result is yielded and the function did
25742 				 * not return by reference we throw a notice. */
25743 				do {
25744 					if (IS_VAR == IS_VAR) {
25745 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
25746 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
25747 						 && !Z_ISREF_P(value_ptr)) {
25748 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
25749 							ZVAL_COPY(&generator->value, value_ptr);
25750 							break;
25751 						}
25752 					}
25753 					if (Z_ISREF_P(value_ptr)) {
25754 						Z_ADDREF_P(value_ptr);
25755 					} else {
25756 						ZVAL_MAKE_REF_EX(value_ptr, 2);
25757 					}
25758 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
25759 				} while (0);
25760 
25761 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25762 			}
25763 		} else {
25764 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25765 
25766 			/* Consts, temporary variables and references need copying */
25767 			if (IS_VAR == IS_CONST) {
25768 				ZVAL_COPY_VALUE(&generator->value, value);
25769 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
25770 					Z_ADDREF(generator->value);
25771 				}
25772 			} else if (IS_VAR == IS_TMP_VAR) {
25773 				ZVAL_COPY_VALUE(&generator->value, value);
25774 			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
25775 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
25776 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25777 			} else {
25778 				ZVAL_COPY_VALUE(&generator->value, value);
25779 				if (IS_VAR == IS_CV) {
25780 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
25781 				}
25782 			}
25783 		}
25784 	} else {
25785 		/* If no value was specified yield null */
25786 		ZVAL_NULL(&generator->value);
25787 	}
25788 
25789 	/* Set the new yielded key */
25790 	if (IS_CONST != IS_UNUSED) {
25791 		zval *key = RT_CONSTANT(opline, opline->op2);
25792 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
25793 			key = Z_REFVAL_P(key);
25794 		}
25795 		ZVAL_COPY(&generator->key, key);
25796 
25797 		if (Z_TYPE(generator->key) == IS_LONG
25798 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
25799 		) {
25800 			generator->largest_used_integer_key = Z_LVAL(generator->key);
25801 		}
25802 	} else {
25803 		/* If no key was specified we use auto-increment keys */
25804 		generator->largest_used_integer_key++;
25805 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
25806 	}
25807 
25808 	if (RETURN_VALUE_USED(opline)) {
25809 		/* If the return value of yield is used set the send
25810 		 * target and initialize it to NULL */
25811 		generator->send_target = EX_VAR(opline->result.var);
25812 		ZVAL_NULL(generator->send_target);
25813 	} else {
25814 		generator->send_target = NULL;
25815 	}
25816 
25817 	/* We increment to the next op, so we are at the correct position when the
25818 	 * generator is resumed. */
25819 	ZEND_VM_INC_OPCODE();
25820 
25821 	/* The GOTO VM uses a local opline variable. We need to set the opline
25822 	 * variable in execute_data so we don't resume at an old position. */
25823 	SAVE_OPLINE();
25824 
25825 	ZEND_VM_RETURN();
25826 }
25827 
ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25829 {
25830 	USE_OPLINE
25831 	zval *op1;
25832 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
25833 	zval *result;
25834 
25835 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25836 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
25837 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_VAR == IS_CONST);
25838 		if (IS_VAR & (IS_TMP_VAR|IS_VAR)) {
25839 			zval_ptr_dtor_str(op1);
25840 		}
25841 		ZEND_VM_SMART_BRANCH(result, 0);
25842 	}
25843 
25844 	if (opline->extended_value) {
25845 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
25846 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
25847 			ZEND_VM_SMART_BRANCH(result, 0);
25848 		}
25849 		SAVE_OPLINE();
25850 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
25851 			op1 = Z_REFVAL_P(op1);
25852 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
25853 				result = zend_hash_find(ht, Z_STR_P(op1));
25854 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25855 				ZEND_VM_SMART_BRANCH(result, 0);
25856 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
25857 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
25858 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25859 				ZEND_VM_SMART_BRANCH(result, 0);
25860 			}
25861 		} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
25862 			ZVAL_UNDEFINED_OP1();
25863 		}
25864 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
25865 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
25866 			SAVE_OPLINE();
25867 			ZVAL_UNDEFINED_OP1();
25868 			if (UNEXPECTED(EG(exception) != NULL)) {
25869 				HANDLE_EXCEPTION();
25870 			}
25871 		}
25872 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
25873 		ZEND_VM_SMART_BRANCH(result, 0);
25874 	} else {
25875 		zend_string *key;
25876 		zval key_tmp;
25877 
25878 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
25879 			op1 = Z_REFVAL_P(op1);
25880 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
25881 				result = zend_hash_find(ht, Z_STR_P(op1));
25882 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25883 				ZEND_VM_SMART_BRANCH(result, 0);
25884 			}
25885 		}
25886 
25887 		SAVE_OPLINE();
25888 		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
25889 			ZVAL_STR(&key_tmp, key);
25890 			if (zend_compare(op1, &key_tmp) == 0) {
25891 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25892 				ZEND_VM_SMART_BRANCH(1, 1);
25893 			}
25894 		} ZEND_HASH_FOREACH_END();
25895 	}
25896 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25897 	ZEND_VM_SMART_BRANCH(0, 1);
25898 }
25899 
ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25901 {
25902 	zend_class_entry *ce, *scope;
25903 	zend_class_constant *c;
25904 	zval *value, *zv, *constant_zv;
25905 	zend_string *constant_name;
25906 	USE_OPLINE
25907 
25908 	SAVE_OPLINE();
25909 
25910 	do {
25911 		if (IS_VAR == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
25912 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
25913 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
25914 				break;
25915 			}
25916 		}
25917 		if (IS_VAR == IS_CONST) {
25918 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
25919 				ce = CACHED_PTR(opline->extended_value);
25920 			} else {
25921 				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);
25922 				if (UNEXPECTED(ce == NULL)) {
25923 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25924 					FREE_OP(opline->op2_type, opline->op2.var);
25925 					HANDLE_EXCEPTION();
25926 				}
25927 				CACHE_PTR(opline->extended_value, ce);
25928 			}
25929 		} else if (IS_VAR == IS_UNUSED) {
25930 			ce = zend_fetch_class(NULL, opline->op1.num);
25931 			if (UNEXPECTED(ce == NULL)) {
25932 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25933 				FREE_OP(opline->op2_type, opline->op2.var);
25934 				HANDLE_EXCEPTION();
25935 			}
25936 		} else {
25937 			ce = Z_CE_P(EX_VAR(opline->op1.var));
25938 		}
25939 		if (IS_VAR != IS_CONST
25940 			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
25941 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
25942 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
25943 			break;
25944 		}
25945 
25946 		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
25947 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
25948 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
25949 			ZVAL_UNDEF(EX_VAR(opline->result.var));
25950 			FREE_OP(opline->op2_type, opline->op2.var);
25951 			HANDLE_EXCEPTION();
25952 		}
25953 		constant_name = Z_STR_P(constant_zv);
25954 		/* Magic 'class' for constant OP2 is caught at compile-time */
25955 		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
25956 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
25957 			FREE_OP(opline->op2_type, opline->op2.var);
25958 			ZEND_VM_NEXT_OPCODE();
25959 		}
25960 		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
25961 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
25962 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
25963 
25964 		if (EXPECTED(zv != NULL)) {
25965 			c = Z_PTR_P(zv);
25966 			scope = EX(func)->op_array.scope;
25967 			if (!zend_verify_const_access(c, scope)) {
25968 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25969 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25970 				FREE_OP(opline->op2_type, opline->op2.var);
25971 				HANDLE_EXCEPTION();
25972 			}
25973 
25974 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
25975 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25976 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25977 				FREE_OP(opline->op2_type, opline->op2.var);
25978 				HANDLE_EXCEPTION();
25979 			}
25980 
25981 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
25982 			if (UNEXPECTED(is_constant_deprecated)) {
25983 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25984 
25985 				if (EG(exception)) {
25986 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25987 					FREE_OP(opline->op2_type, opline->op2.var);
25988 					HANDLE_EXCEPTION();
25989 				}
25990 			}
25991 
25992 			value = &c->value;
25993 			// Enums require loading of all class constants to build the backed enum table
25994 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
25995 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
25996 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25997 					FREE_OP(opline->op2_type, opline->op2.var);
25998 					HANDLE_EXCEPTION();
25999 				}
26000 			}
26001 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
26002 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
26003 					ZVAL_UNDEF(EX_VAR(opline->result.var));
26004 					FREE_OP(opline->op2_type, opline->op2.var);
26005 					HANDLE_EXCEPTION();
26006 				}
26007 			}
26008 			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
26009 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
26010 			}
26011 		} else {
26012 			zend_throw_error(NULL, "Undefined constant %s::%s",
26013 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
26014 			ZVAL_UNDEF(EX_VAR(opline->result.var));
26015 			FREE_OP(opline->op2_type, opline->op2.var);
26016 			HANDLE_EXCEPTION();
26017 		}
26018 	} while (0);
26019 
26020 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
26021 
26022 	FREE_OP(opline->op2_type, opline->op2.var);
26023 	ZEND_VM_NEXT_OPCODE();
26024 }
26025 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26027 {
26028 	USE_OPLINE
26029 	zval *object;
26030 	zval *property;
26031 	zval *value;
26032 	zval *zptr;
26033 	void **cache_slot;
26034 	zend_property_info *prop_info;
26035 	zend_object *zobj;
26036 	zend_string *name, *tmp_name;
26037 
26038 	SAVE_OPLINE();
26039 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26040 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26041 
26042 	do {
26043 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
26044 
26045 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26046 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26047 				object = Z_REFVAL_P(object);
26048 				goto assign_op_object;
26049 			}
26050 			if (IS_VAR == IS_CV
26051 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26052 				ZVAL_UNDEFINED_OP1();
26053 			}
26054 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
26055 			break;
26056 		}
26057 
26058 assign_op_object:
26059 		/* here we are sure we are dealing with an object */
26060 		zobj = Z_OBJ_P(object);
26061 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26062 			name = Z_STR_P(property);
26063 		} else {
26064 			name = zval_try_get_tmp_string(property, &tmp_name);
26065 			if (UNEXPECTED(!name)) {
26066 				UNDEF_RESULT();
26067 				break;
26068 			}
26069 		}
26070 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
26071 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
26072 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
26073 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26074 					ZVAL_NULL(EX_VAR(opline->result.var));
26075 				}
26076 			} else {
26077 				zval *orig_zptr = zptr;
26078 				zend_reference *ref;
26079 
26080 				do {
26081 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
26082 						ref = Z_REF_P(zptr);
26083 						zptr = Z_REFVAL_P(zptr);
26084 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
26085 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
26086 							break;
26087 						}
26088 					}
26089 
26090 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26091 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
26092 					} else {
26093 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
26094 					}
26095 					if (prop_info) {
26096 						/* special case for typed properties */
26097 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
26098 					} else {
26099 						zend_binary_op(zptr, zptr, value OPLINE_CC);
26100 					}
26101 				} while (0);
26102 
26103 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26104 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
26105 				}
26106 			}
26107 		} else {
26108 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
26109 		}
26110 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26111 			zend_tmp_string_release(tmp_name);
26112 		}
26113 	} while (0);
26114 
26115 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
26116 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26117 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26118 	/* assign_obj has two opcodes! */
26119 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26120 }
26121 
26122 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26123 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26124 {
26125 	USE_OPLINE
26126 	zval *var_ptr;
26127 	zval *value, *container, *dim;
26128 	HashTable *ht;
26129 
26130 	SAVE_OPLINE();
26131 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26132 
26133 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26134 assign_dim_op_array:
26135 		SEPARATE_ARRAY(container);
26136 		ht = Z_ARRVAL_P(container);
26137 assign_dim_op_new_array:
26138 		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26139 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26140 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
26141 			if (UNEXPECTED(!var_ptr)) {
26142 				zend_cannot_add_element();
26143 				goto assign_dim_op_ret_null;
26144 			}
26145 		} else {
26146 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26147 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
26148 			} else {
26149 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
26150 			}
26151 			if (UNEXPECTED(!var_ptr)) {
26152 				goto assign_dim_op_ret_null;
26153 			}
26154 		}
26155 
26156 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
26157 
26158 		do {
26159 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
26160 				zend_reference *ref = Z_REF_P(var_ptr);
26161 				var_ptr = Z_REFVAL_P(var_ptr);
26162 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
26163 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
26164 					break;
26165 				}
26166 			}
26167 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
26168 		} while (0);
26169 
26170 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26171 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
26172 		}
26173 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
26174 	} else {
26175 		if (EXPECTED(Z_ISREF_P(container))) {
26176 			container = Z_REFVAL_P(container);
26177 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26178 				goto assign_dim_op_array;
26179 			}
26180 		}
26181 
26182 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
26183 			zend_object *obj = Z_OBJ_P(container);
26184 
26185 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26186 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26187 				dim++;
26188 			}
26189 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
26190 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
26191 			uint8_t old_type;
26192 
26193 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
26194 				ZVAL_UNDEFINED_OP1();
26195 			}
26196 			ht = zend_new_array(8);
26197 			old_type = Z_TYPE_P(container);
26198 			ZVAL_ARR(container, ht);
26199 			if (UNEXPECTED(old_type == IS_FALSE)) {
26200 				GC_ADDREF(ht);
26201 				zend_false_to_array_deprecated();
26202 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
26203 					zend_array_destroy(ht);
26204 					goto assign_dim_op_ret_null;
26205 				}
26206 			}
26207 			goto assign_dim_op_new_array;
26208 		} else {
26209 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26210 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
26211 assign_dim_op_ret_null:
26212 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
26213 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26214 				ZVAL_NULL(EX_VAR(opline->result.var));
26215 			}
26216 		}
26217 	}
26218 
26219 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26220 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26221 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26222 }
26223 
ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26224 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26225 {
26226 	USE_OPLINE
26227 	zval *var_ptr;
26228 	zval *value;
26229 
26230 	SAVE_OPLINE();
26231 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26232 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26233 
26234 	do {
26235 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
26236 			zend_reference *ref = Z_REF_P(var_ptr);
26237 			var_ptr = Z_REFVAL_P(var_ptr);
26238 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
26239 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
26240 				break;
26241 			}
26242 		}
26243 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
26244 	} while (0);
26245 
26246 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26247 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
26248 	}
26249 
26250 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26251 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26252 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26253 }
26254 
ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26255 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26256 {
26257 	USE_OPLINE
26258 	zval *object;
26259 	zval *property;
26260 	zval *zptr;
26261 	void **cache_slot;
26262 	zend_property_info *prop_info;
26263 	zend_object *zobj;
26264 	zend_string *name, *tmp_name;
26265 
26266 	SAVE_OPLINE();
26267 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26268 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26269 
26270 	do {
26271 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26272 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26273 				object = Z_REFVAL_P(object);
26274 				goto pre_incdec_object;
26275 			}
26276 			if (IS_VAR == IS_CV
26277 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26278 				ZVAL_UNDEFINED_OP1();
26279 			}
26280 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
26281 			break;
26282 		}
26283 
26284 pre_incdec_object:
26285 		/* here we are sure we are dealing with an object */
26286 		zobj = Z_OBJ_P(object);
26287 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26288 			name = Z_STR_P(property);
26289 		} else {
26290 			name = zval_try_get_tmp_string(property, &tmp_name);
26291 			if (UNEXPECTED(!name)) {
26292 				UNDEF_RESULT();
26293 				break;
26294 			}
26295 		}
26296 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
26297 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
26298 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
26299 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26300 					ZVAL_NULL(EX_VAR(opline->result.var));
26301 				}
26302 			} else {
26303 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26304 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
26305 				} else {
26306 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
26307 				}
26308 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
26309 			}
26310 		} else {
26311 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
26312 		}
26313 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26314 			zend_tmp_string_release(tmp_name);
26315 		}
26316 	} while (0);
26317 
26318 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26319 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26320 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26321 }
26322 
ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26323 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26324 {
26325 	USE_OPLINE
26326 	zval *object;
26327 	zval *property;
26328 	zval *zptr;
26329 	void **cache_slot;
26330 	zend_property_info *prop_info;
26331 	zend_object *zobj;
26332 	zend_string *name, *tmp_name;
26333 
26334 	SAVE_OPLINE();
26335 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26336 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26337 
26338 	do {
26339 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26340 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26341 				object = Z_REFVAL_P(object);
26342 				goto post_incdec_object;
26343 			}
26344 			if (IS_VAR == IS_CV
26345 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26346 				ZVAL_UNDEFINED_OP1();
26347 			}
26348 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
26349 			break;
26350 		}
26351 
26352 post_incdec_object:
26353 		/* here we are sure we are dealing with an object */
26354 		zobj = Z_OBJ_P(object);
26355 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26356 			name = Z_STR_P(property);
26357 		} else {
26358 			name = zval_try_get_tmp_string(property, &tmp_name);
26359 			if (UNEXPECTED(!name)) {
26360 				ZVAL_UNDEF(EX_VAR(opline->result.var));
26361 				break;
26362 			}
26363 		}
26364 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
26365 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
26366 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
26367 				ZVAL_NULL(EX_VAR(opline->result.var));
26368 			} else {
26369 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26370 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
26371 				} else {
26372 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
26373 				}
26374 
26375 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
26376 			}
26377 		} else {
26378 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
26379 		}
26380 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26381 			zend_tmp_string_release(tmp_name);
26382 		}
26383 	} while (0);
26384 
26385 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26386 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26387 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26388 }
26389 
ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26390 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26391 {
26392 	USE_OPLINE
26393 	zval *container;
26394 
26395 	SAVE_OPLINE();
26396 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26397 	zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
26398 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26399 	if (IS_VAR == IS_VAR) {
26400 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26401 	}
26402 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26403 }
26404 
ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26405 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26406 {
26407 	USE_OPLINE
26408 	zval *container;
26409 
26410 	SAVE_OPLINE();
26411 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26412 	zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
26413 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26414 	if (IS_VAR == IS_VAR) {
26415 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26416 	}
26417 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26418 }
26419 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26420 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26421 {
26422 #if 0
26423 	USE_OPLINE
26424 #endif
26425 
26426 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
26427 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
26428 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26429 		}
26430 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26431 	} else {
26432 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26433 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26434 		}
26435 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26436 	}
26437 }
26438 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26439 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26440 {
26441 	USE_OPLINE
26442 	zval *container;
26443 
26444 	SAVE_OPLINE();
26445 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26446 	zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
26447 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26448 	if (IS_VAR == IS_VAR) {
26449 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26450 	}
26451 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26452 }
26453 
ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26454 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26455 {
26456 	USE_OPLINE
26457 	zval *property, *container, *result;
26458 
26459 	SAVE_OPLINE();
26460 
26461 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26462 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26463 	result = EX_VAR(opline->result.var);
26464 	zend_fetch_property_address(
26465 		result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
26466 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
26467 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
26468 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26469 	if (IS_VAR == IS_VAR) {
26470 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26471 	}
26472 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26473 }
26474 
ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26475 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26476 {
26477 	USE_OPLINE
26478 	zval *property, *container, *result;
26479 
26480 	SAVE_OPLINE();
26481 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26482 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26483 	result = EX_VAR(opline->result.var);
26484 	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 OPLINE_CC EXECUTE_DATA_CC);
26485 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26486 	if (IS_VAR == IS_VAR) {
26487 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26488 	}
26489 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26490 }
26491 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26492 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26493 {
26494 #if 0
26495 	USE_OPLINE
26496 #endif
26497 
26498 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
26499 		/* Behave like FETCH_OBJ_W */
26500 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
26501 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26502 		}
26503 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26504 	} else {
26505 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26506 	}
26507 }
26508 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26509 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26510 {
26511 	USE_OPLINE
26512 	zval *container, *property, *result;
26513 
26514 	SAVE_OPLINE();
26515 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26516 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26517 	result = EX_VAR(opline->result.var);
26518 	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 OPLINE_CC EXECUTE_DATA_CC);
26519 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26520 	if (IS_VAR == IS_VAR) {
26521 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26522 	}
26523 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26524 }
26525 
ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26526 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26527 {
26528 	USE_OPLINE
26529 	zval *container, *dim;
26530 
26531 	SAVE_OPLINE();
26532 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26533 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26534 
26535 	if (IS_VAR == IS_VAR
26536 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
26537 		&& UNEXPECTED(!Z_ISREF_P(container))
26538 	) {
26539 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
26540 		zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
26541 	} else {
26542 		zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
26543 	}
26544 
26545 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26546 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26547 }
26548 
ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26549 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26550 {
26551 	USE_OPLINE
26552 	zval *object, *value, tmp;
26553 	zend_object *zobj;
26554 	zend_string *name, *tmp_name;
26555 	zend_refcounted *garbage = NULL;
26556 
26557 	SAVE_OPLINE();
26558 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26559 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
26560 
26561 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26562 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26563 			object = Z_REFVAL_P(object);
26564 			goto assign_object;
26565 		}
26566 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
26567 		value = &EG(uninitialized_zval);
26568 		goto free_and_exit_assign_obj;
26569 	}
26570 
26571 assign_object:
26572 	zobj = Z_OBJ_P(object);
26573 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26574 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
26575 			void **cache_slot = CACHE_ADDR(opline->extended_value);
26576 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
26577 			zval *property_val;
26578 
26579 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
26580 				property_val = OBJ_PROP(zobj, prop_offset);
26581 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
26582 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
26583 
26584 					if (prop_info != NULL) {
26585 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
26586 						goto free_and_exit_assign_obj;
26587 					} else {
26588 fast_assign_obj:
26589 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
26590 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26591 							ZVAL_COPY(EX_VAR(opline->result.var), value);
26592 						}
26593 						goto exit_assign_obj;
26594 					}
26595 				}
26596 			} else {
26597 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26598 				if (EXPECTED(zobj->properties != NULL)) {
26599 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26600 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26601 							GC_DELREF(zobj->properties);
26602 						}
26603 						zobj->properties = zend_array_dup(zobj->properties);
26604 					}
26605 					property_val = zend_hash_find_known_hash(zobj->properties, name);
26606 					if (property_val) {
26607 						goto fast_assign_obj;
26608 					}
26609 				}
26610 
26611 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
26612 					if (EXPECTED(zobj->properties == NULL)) {
26613 						rebuild_object_properties(zobj);
26614 					}
26615 					if (IS_CONST == IS_CONST) {
26616 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26617 							Z_ADDREF_P(value);
26618 						}
26619 					} else if (IS_CONST != IS_TMP_VAR) {
26620 						if (Z_ISREF_P(value)) {
26621 							if (IS_CONST == IS_VAR) {
26622 								zend_reference *ref = Z_REF_P(value);
26623 								if (GC_DELREF(ref) == 0) {
26624 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26625 									efree_size(ref, sizeof(zend_reference));
26626 									value = &tmp;
26627 								} else {
26628 									value = Z_REFVAL_P(value);
26629 									Z_TRY_ADDREF_P(value);
26630 								}
26631 							} else {
26632 								value = Z_REFVAL_P(value);
26633 								Z_TRY_ADDREF_P(value);
26634 							}
26635 						} else if (IS_CONST == IS_CV) {
26636 							Z_TRY_ADDREF_P(value);
26637 						}
26638 						}
26639 					zend_hash_add_new(zobj->properties, name, value);
26640 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26641 						ZVAL_COPY(EX_VAR(opline->result.var), value);
26642 					}
26643 					goto exit_assign_obj;
26644 				}
26645 			}
26646 		}
26647 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26648 	} else {
26649 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
26650 		if (UNEXPECTED(!name)) {
26651 
26652 			UNDEF_RESULT();
26653 			goto exit_assign_obj;
26654 		}
26655 	}
26656 
26657 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
26658 		ZVAL_DEREF(value);
26659 	}
26660 
26661 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
26662 
26663 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26664 		zend_tmp_string_release(tmp_name);
26665 	}
26666 
26667 free_and_exit_assign_obj:
26668 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
26669 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
26670 	}
26671 
26672 exit_assign_obj:
26673 	if (garbage) {
26674 		GC_DTOR_NO_REF(garbage);
26675 	}
26676 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26677 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26678 	/* assign_obj has two opcodes! */
26679 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26680 }
26681 
26682 /* 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)26683 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26684 {
26685 	USE_OPLINE
26686 	zval *object, *value, tmp;
26687 	zend_object *zobj;
26688 	zend_string *name, *tmp_name;
26689 	zend_refcounted *garbage = NULL;
26690 
26691 	SAVE_OPLINE();
26692 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26693 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26694 
26695 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26696 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26697 			object = Z_REFVAL_P(object);
26698 			goto assign_object;
26699 		}
26700 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
26701 		value = &EG(uninitialized_zval);
26702 		goto free_and_exit_assign_obj;
26703 	}
26704 
26705 assign_object:
26706 	zobj = Z_OBJ_P(object);
26707 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26708 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
26709 			void **cache_slot = CACHE_ADDR(opline->extended_value);
26710 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
26711 			zval *property_val;
26712 
26713 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
26714 				property_val = OBJ_PROP(zobj, prop_offset);
26715 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
26716 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
26717 
26718 					if (prop_info != NULL) {
26719 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
26720 						goto free_and_exit_assign_obj;
26721 					} else {
26722 fast_assign_obj:
26723 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
26724 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26725 							ZVAL_COPY(EX_VAR(opline->result.var), value);
26726 						}
26727 						goto exit_assign_obj;
26728 					}
26729 				}
26730 			} else {
26731 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26732 				if (EXPECTED(zobj->properties != NULL)) {
26733 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26734 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26735 							GC_DELREF(zobj->properties);
26736 						}
26737 						zobj->properties = zend_array_dup(zobj->properties);
26738 					}
26739 					property_val = zend_hash_find_known_hash(zobj->properties, name);
26740 					if (property_val) {
26741 						goto fast_assign_obj;
26742 					}
26743 				}
26744 
26745 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
26746 					if (EXPECTED(zobj->properties == NULL)) {
26747 						rebuild_object_properties(zobj);
26748 					}
26749 					if (IS_TMP_VAR == IS_CONST) {
26750 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26751 							Z_ADDREF_P(value);
26752 						}
26753 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
26754 						if (Z_ISREF_P(value)) {
26755 							if (IS_TMP_VAR == IS_VAR) {
26756 								zend_reference *ref = Z_REF_P(value);
26757 								if (GC_DELREF(ref) == 0) {
26758 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26759 									efree_size(ref, sizeof(zend_reference));
26760 									value = &tmp;
26761 								} else {
26762 									value = Z_REFVAL_P(value);
26763 									Z_TRY_ADDREF_P(value);
26764 								}
26765 							} else {
26766 								value = Z_REFVAL_P(value);
26767 								Z_TRY_ADDREF_P(value);
26768 							}
26769 						} else if (IS_TMP_VAR == IS_CV) {
26770 							Z_TRY_ADDREF_P(value);
26771 						}
26772 						}
26773 					zend_hash_add_new(zobj->properties, name, value);
26774 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26775 						ZVAL_COPY(EX_VAR(opline->result.var), value);
26776 					}
26777 					goto exit_assign_obj;
26778 				}
26779 			}
26780 		}
26781 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26782 	} else {
26783 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
26784 		if (UNEXPECTED(!name)) {
26785 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26786 			UNDEF_RESULT();
26787 			goto exit_assign_obj;
26788 		}
26789 	}
26790 
26791 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
26792 		ZVAL_DEREF(value);
26793 	}
26794 
26795 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
26796 
26797 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26798 		zend_tmp_string_release(tmp_name);
26799 	}
26800 
26801 free_and_exit_assign_obj:
26802 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
26803 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
26804 	}
26805 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26806 exit_assign_obj:
26807 	if (garbage) {
26808 		GC_DTOR_NO_REF(garbage);
26809 	}
26810 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26811 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26812 	/* assign_obj has two opcodes! */
26813 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26814 }
26815 
26816 /* 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)26817 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26818 {
26819 	USE_OPLINE
26820 	zval *object, *value, tmp;
26821 	zend_object *zobj;
26822 	zend_string *name, *tmp_name;
26823 	zend_refcounted *garbage = NULL;
26824 
26825 	SAVE_OPLINE();
26826 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26827 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26828 
26829 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26830 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26831 			object = Z_REFVAL_P(object);
26832 			goto assign_object;
26833 		}
26834 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
26835 		value = &EG(uninitialized_zval);
26836 		goto free_and_exit_assign_obj;
26837 	}
26838 
26839 assign_object:
26840 	zobj = Z_OBJ_P(object);
26841 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26842 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
26843 			void **cache_slot = CACHE_ADDR(opline->extended_value);
26844 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
26845 			zval *property_val;
26846 
26847 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
26848 				property_val = OBJ_PROP(zobj, prop_offset);
26849 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
26850 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
26851 
26852 					if (prop_info != NULL) {
26853 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
26854 						goto free_and_exit_assign_obj;
26855 					} else {
26856 fast_assign_obj:
26857 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
26858 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26859 							ZVAL_COPY(EX_VAR(opline->result.var), value);
26860 						}
26861 						goto exit_assign_obj;
26862 					}
26863 				}
26864 			} else {
26865 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26866 				if (EXPECTED(zobj->properties != NULL)) {
26867 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26868 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26869 							GC_DELREF(zobj->properties);
26870 						}
26871 						zobj->properties = zend_array_dup(zobj->properties);
26872 					}
26873 					property_val = zend_hash_find_known_hash(zobj->properties, name);
26874 					if (property_val) {
26875 						goto fast_assign_obj;
26876 					}
26877 				}
26878 
26879 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
26880 					if (EXPECTED(zobj->properties == NULL)) {
26881 						rebuild_object_properties(zobj);
26882 					}
26883 					if (IS_VAR == IS_CONST) {
26884 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26885 							Z_ADDREF_P(value);
26886 						}
26887 					} else if (IS_VAR != IS_TMP_VAR) {
26888 						if (Z_ISREF_P(value)) {
26889 							if (IS_VAR == IS_VAR) {
26890 								zend_reference *ref = Z_REF_P(value);
26891 								if (GC_DELREF(ref) == 0) {
26892 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26893 									efree_size(ref, sizeof(zend_reference));
26894 									value = &tmp;
26895 								} else {
26896 									value = Z_REFVAL_P(value);
26897 									Z_TRY_ADDREF_P(value);
26898 								}
26899 							} else {
26900 								value = Z_REFVAL_P(value);
26901 								Z_TRY_ADDREF_P(value);
26902 							}
26903 						} else if (IS_VAR == IS_CV) {
26904 							Z_TRY_ADDREF_P(value);
26905 						}
26906 						}
26907 					zend_hash_add_new(zobj->properties, name, value);
26908 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26909 						ZVAL_COPY(EX_VAR(opline->result.var), value);
26910 					}
26911 					goto exit_assign_obj;
26912 				}
26913 			}
26914 		}
26915 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26916 	} else {
26917 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
26918 		if (UNEXPECTED(!name)) {
26919 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26920 			UNDEF_RESULT();
26921 			goto exit_assign_obj;
26922 		}
26923 	}
26924 
26925 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
26926 		ZVAL_DEREF(value);
26927 	}
26928 
26929 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
26930 
26931 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26932 		zend_tmp_string_release(tmp_name);
26933 	}
26934 
26935 free_and_exit_assign_obj:
26936 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
26937 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
26938 	}
26939 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26940 exit_assign_obj:
26941 	if (garbage) {
26942 		GC_DTOR_NO_REF(garbage);
26943 	}
26944 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26945 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26946 	/* assign_obj has two opcodes! */
26947 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26948 }
26949 
26950 /* 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)26951 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26952 {
26953 	USE_OPLINE
26954 	zval *object, *value, tmp;
26955 	zend_object *zobj;
26956 	zend_string *name, *tmp_name;
26957 	zend_refcounted *garbage = NULL;
26958 
26959 	SAVE_OPLINE();
26960 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26961 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
26962 
26963 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26964 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26965 			object = Z_REFVAL_P(object);
26966 			goto assign_object;
26967 		}
26968 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
26969 		value = &EG(uninitialized_zval);
26970 		goto free_and_exit_assign_obj;
26971 	}
26972 
26973 assign_object:
26974 	zobj = Z_OBJ_P(object);
26975 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26976 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
26977 			void **cache_slot = CACHE_ADDR(opline->extended_value);
26978 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
26979 			zval *property_val;
26980 
26981 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
26982 				property_val = OBJ_PROP(zobj, prop_offset);
26983 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
26984 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
26985 
26986 					if (prop_info != NULL) {
26987 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
26988 						goto free_and_exit_assign_obj;
26989 					} else {
26990 fast_assign_obj:
26991 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
26992 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26993 							ZVAL_COPY(EX_VAR(opline->result.var), value);
26994 						}
26995 						goto exit_assign_obj;
26996 					}
26997 				}
26998 			} else {
26999 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
27000 				if (EXPECTED(zobj->properties != NULL)) {
27001 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
27002 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
27003 							GC_DELREF(zobj->properties);
27004 						}
27005 						zobj->properties = zend_array_dup(zobj->properties);
27006 					}
27007 					property_val = zend_hash_find_known_hash(zobj->properties, name);
27008 					if (property_val) {
27009 						goto fast_assign_obj;
27010 					}
27011 				}
27012 
27013 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
27014 					if (EXPECTED(zobj->properties == NULL)) {
27015 						rebuild_object_properties(zobj);
27016 					}
27017 					if (IS_CV == IS_CONST) {
27018 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
27019 							Z_ADDREF_P(value);
27020 						}
27021 					} else if (IS_CV != IS_TMP_VAR) {
27022 						if (Z_ISREF_P(value)) {
27023 							if (IS_CV == IS_VAR) {
27024 								zend_reference *ref = Z_REF_P(value);
27025 								if (GC_DELREF(ref) == 0) {
27026 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
27027 									efree_size(ref, sizeof(zend_reference));
27028 									value = &tmp;
27029 								} else {
27030 									value = Z_REFVAL_P(value);
27031 									Z_TRY_ADDREF_P(value);
27032 								}
27033 							} else {
27034 								value = Z_REFVAL_P(value);
27035 								Z_TRY_ADDREF_P(value);
27036 							}
27037 						} else if (IS_CV == IS_CV) {
27038 							Z_TRY_ADDREF_P(value);
27039 						}
27040 						}
27041 					zend_hash_add_new(zobj->properties, name, value);
27042 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27043 						ZVAL_COPY(EX_VAR(opline->result.var), value);
27044 					}
27045 					goto exit_assign_obj;
27046 				}
27047 			}
27048 		}
27049 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
27050 	} else {
27051 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
27052 		if (UNEXPECTED(!name)) {
27053 
27054 			UNDEF_RESULT();
27055 			goto exit_assign_obj;
27056 		}
27057 	}
27058 
27059 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
27060 		ZVAL_DEREF(value);
27061 	}
27062 
27063 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
27064 
27065 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27066 		zend_tmp_string_release(tmp_name);
27067 	}
27068 
27069 free_and_exit_assign_obj:
27070 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
27071 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
27072 	}
27073 
27074 exit_assign_obj:
27075 	if (garbage) {
27076 		GC_DTOR_NO_REF(garbage);
27077 	}
27078 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27079 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27080 	/* assign_obj has two opcodes! */
27081 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27082 }
27083 
27084 /* 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)27085 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27086 {
27087 	USE_OPLINE
27088 	zval *object_ptr, *orig_object_ptr;
27089 	zval *value;
27090 	zval *variable_ptr;
27091 	zval *dim;
27092 	zend_refcounted *garbage = NULL;
27093 
27094 	SAVE_OPLINE();
27095 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27096 
27097 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27098 try_assign_dim_array:
27099 		SEPARATE_ARRAY(object_ptr);
27100 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27101 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27102 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27103 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27104 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27105 					GC_ADDREF(ht);
27106 				}
27107 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27108 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27109 					zend_array_destroy(ht);
27110 					goto assign_dim_error;
27111 				}
27112 			}
27113 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
27114 				ZVAL_DEREF(value);
27115 			}
27116 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27117 			if (UNEXPECTED(value == NULL)) {
27118 				zend_cannot_add_element();
27119 				goto assign_dim_error;
27120 			} else if (IS_CONST == IS_CV) {
27121 				if (Z_REFCOUNTED_P(value)) {
27122 					Z_ADDREF_P(value);
27123 				}
27124 			} else if (IS_CONST == IS_VAR) {
27125 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27126 				if (Z_ISREF_P(free_op_data)) {
27127 					if (Z_REFCOUNTED_P(value)) {
27128 						Z_ADDREF_P(value);
27129 					}
27130 					zval_ptr_dtor_nogc(free_op_data);
27131 				}
27132 			} else if (IS_CONST == IS_CONST) {
27133 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27134 					Z_ADDREF_P(value);
27135 				}
27136 			}
27137 		} else {
27138 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27139 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27140 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27141 			} else {
27142 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27143 			}
27144 			if (UNEXPECTED(variable_ptr == NULL)) {
27145 				goto assign_dim_error;
27146 			}
27147 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27148 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
27149 		}
27150 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27151 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27152 		}
27153 		if (garbage) {
27154 			GC_DTOR_NO_REF(garbage);
27155 		}
27156 	} else {
27157 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27158 			object_ptr = Z_REFVAL_P(object_ptr);
27159 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27160 				goto try_assign_dim_array;
27161 			}
27162 		}
27163 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27164 			zend_object *obj = Z_OBJ_P(object_ptr);
27165 
27166 			GC_ADDREF(obj);
27167 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27168 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27169 				dim = ZVAL_UNDEFINED_OP2();
27170 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27171 				dim++;
27172 			}
27173 
27174 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27175 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27176 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27177 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
27178 				ZVAL_DEREF(value);
27179 			}
27180 
27181 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27182 
27183 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27184 				zend_objects_store_del(obj);
27185 			}
27186 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27187 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27188 				zend_use_new_element_for_string();
27189 
27190 				UNDEF_RESULT();
27191 			} else {
27192 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27193 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
27194 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27195 
27196 			}
27197 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27198 			if (Z_ISREF_P(orig_object_ptr)
27199 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27200 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27201 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27202 
27203 				UNDEF_RESULT();
27204 			} else {
27205 				HashTable *ht = zend_new_array(8);
27206 				uint8_t old_type = Z_TYPE_P(object_ptr);
27207 
27208 				ZVAL_ARR(object_ptr, ht);
27209 				if (UNEXPECTED(old_type == IS_FALSE)) {
27210 					GC_ADDREF(ht);
27211 					zend_false_to_array_deprecated();
27212 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27213 						zend_array_destroy(ht);
27214 						goto assign_dim_error;
27215 					}
27216 				}
27217 				goto try_assign_dim_array;
27218 			}
27219 		} else {
27220 			zend_use_scalar_as_array();
27221 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27222 assign_dim_error:
27223 
27224 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27225 				ZVAL_NULL(EX_VAR(opline->result.var));
27226 			}
27227 		}
27228 	}
27229 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27230 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27231 	}
27232 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27233 	/* assign_dim has two opcodes! */
27234 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27235 }
27236 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27237 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27238 {
27239 	USE_OPLINE
27240 	zval *object_ptr, *orig_object_ptr;
27241 	zval *value;
27242 	zval *variable_ptr;
27243 	zval *dim;
27244 	zend_refcounted *garbage = NULL;
27245 
27246 	SAVE_OPLINE();
27247 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27248 
27249 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27250 try_assign_dim_array:
27251 		SEPARATE_ARRAY(object_ptr);
27252 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27253 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27254 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27255 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27256 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27257 					GC_ADDREF(ht);
27258 				}
27259 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27260 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27261 					zend_array_destroy(ht);
27262 					goto assign_dim_error;
27263 				}
27264 			}
27265 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
27266 				ZVAL_DEREF(value);
27267 			}
27268 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27269 			if (UNEXPECTED(value == NULL)) {
27270 				zend_cannot_add_element();
27271 				goto assign_dim_error;
27272 			} else if (IS_TMP_VAR == IS_CV) {
27273 				if (Z_REFCOUNTED_P(value)) {
27274 					Z_ADDREF_P(value);
27275 				}
27276 			} else if (IS_TMP_VAR == IS_VAR) {
27277 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27278 				if (Z_ISREF_P(free_op_data)) {
27279 					if (Z_REFCOUNTED_P(value)) {
27280 						Z_ADDREF_P(value);
27281 					}
27282 					zval_ptr_dtor_nogc(free_op_data);
27283 				}
27284 			} else if (IS_TMP_VAR == IS_CONST) {
27285 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27286 					Z_ADDREF_P(value);
27287 				}
27288 			}
27289 		} else {
27290 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27291 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27292 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27293 			} else {
27294 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27295 			}
27296 			if (UNEXPECTED(variable_ptr == NULL)) {
27297 				goto assign_dim_error;
27298 			}
27299 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27300 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
27301 		}
27302 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27303 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27304 		}
27305 		if (garbage) {
27306 			GC_DTOR_NO_REF(garbage);
27307 		}
27308 	} else {
27309 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27310 			object_ptr = Z_REFVAL_P(object_ptr);
27311 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27312 				goto try_assign_dim_array;
27313 			}
27314 		}
27315 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27316 			zend_object *obj = Z_OBJ_P(object_ptr);
27317 
27318 			GC_ADDREF(obj);
27319 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27320 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27321 				dim = ZVAL_UNDEFINED_OP2();
27322 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27323 				dim++;
27324 			}
27325 
27326 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27327 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27328 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27329 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
27330 				ZVAL_DEREF(value);
27331 			}
27332 
27333 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27334 
27335 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27336 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27337 				zend_objects_store_del(obj);
27338 			}
27339 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27340 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27341 				zend_use_new_element_for_string();
27342 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27343 				UNDEF_RESULT();
27344 			} else {
27345 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27346 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27347 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27348 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27349 			}
27350 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27351 			if (Z_ISREF_P(orig_object_ptr)
27352 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27353 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27354 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27355 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27356 				UNDEF_RESULT();
27357 			} else {
27358 				HashTable *ht = zend_new_array(8);
27359 				uint8_t old_type = Z_TYPE_P(object_ptr);
27360 
27361 				ZVAL_ARR(object_ptr, ht);
27362 				if (UNEXPECTED(old_type == IS_FALSE)) {
27363 					GC_ADDREF(ht);
27364 					zend_false_to_array_deprecated();
27365 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27366 						zend_array_destroy(ht);
27367 						goto assign_dim_error;
27368 					}
27369 				}
27370 				goto try_assign_dim_array;
27371 			}
27372 		} else {
27373 			zend_use_scalar_as_array();
27374 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27375 assign_dim_error:
27376 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27377 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27378 				ZVAL_NULL(EX_VAR(opline->result.var));
27379 			}
27380 		}
27381 	}
27382 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27383 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27384 	}
27385 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27386 	/* assign_dim has two opcodes! */
27387 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27388 }
27389 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27390 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27391 {
27392 	USE_OPLINE
27393 	zval *object_ptr, *orig_object_ptr;
27394 	zval *value;
27395 	zval *variable_ptr;
27396 	zval *dim;
27397 	zend_refcounted *garbage = NULL;
27398 
27399 	SAVE_OPLINE();
27400 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27401 
27402 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27403 try_assign_dim_array:
27404 		SEPARATE_ARRAY(object_ptr);
27405 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27406 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27407 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27408 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27409 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27410 					GC_ADDREF(ht);
27411 				}
27412 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27413 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27414 					zend_array_destroy(ht);
27415 					goto assign_dim_error;
27416 				}
27417 			}
27418 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
27419 				ZVAL_DEREF(value);
27420 			}
27421 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27422 			if (UNEXPECTED(value == NULL)) {
27423 				zend_cannot_add_element();
27424 				goto assign_dim_error;
27425 			} else if (IS_VAR == IS_CV) {
27426 				if (Z_REFCOUNTED_P(value)) {
27427 					Z_ADDREF_P(value);
27428 				}
27429 			} else if (IS_VAR == IS_VAR) {
27430 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27431 				if (Z_ISREF_P(free_op_data)) {
27432 					if (Z_REFCOUNTED_P(value)) {
27433 						Z_ADDREF_P(value);
27434 					}
27435 					zval_ptr_dtor_nogc(free_op_data);
27436 				}
27437 			} else if (IS_VAR == IS_CONST) {
27438 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27439 					Z_ADDREF_P(value);
27440 				}
27441 			}
27442 		} else {
27443 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27444 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27445 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27446 			} else {
27447 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27448 			}
27449 			if (UNEXPECTED(variable_ptr == NULL)) {
27450 				goto assign_dim_error;
27451 			}
27452 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27453 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
27454 		}
27455 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27456 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27457 		}
27458 		if (garbage) {
27459 			GC_DTOR_NO_REF(garbage);
27460 		}
27461 	} else {
27462 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27463 			object_ptr = Z_REFVAL_P(object_ptr);
27464 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27465 				goto try_assign_dim_array;
27466 			}
27467 		}
27468 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27469 			zend_object *obj = Z_OBJ_P(object_ptr);
27470 
27471 			GC_ADDREF(obj);
27472 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27473 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27474 				dim = ZVAL_UNDEFINED_OP2();
27475 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27476 				dim++;
27477 			}
27478 
27479 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27480 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27481 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27482 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
27483 				ZVAL_DEREF(value);
27484 			}
27485 
27486 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27487 
27488 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27489 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27490 				zend_objects_store_del(obj);
27491 			}
27492 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27493 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27494 				zend_use_new_element_for_string();
27495 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27496 				UNDEF_RESULT();
27497 			} else {
27498 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27499 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27500 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27501 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27502 			}
27503 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27504 			if (Z_ISREF_P(orig_object_ptr)
27505 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27506 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27507 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27508 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27509 				UNDEF_RESULT();
27510 			} else {
27511 				HashTable *ht = zend_new_array(8);
27512 				uint8_t old_type = Z_TYPE_P(object_ptr);
27513 
27514 				ZVAL_ARR(object_ptr, ht);
27515 				if (UNEXPECTED(old_type == IS_FALSE)) {
27516 					GC_ADDREF(ht);
27517 					zend_false_to_array_deprecated();
27518 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27519 						zend_array_destroy(ht);
27520 						goto assign_dim_error;
27521 					}
27522 				}
27523 				goto try_assign_dim_array;
27524 			}
27525 		} else {
27526 			zend_use_scalar_as_array();
27527 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27528 assign_dim_error:
27529 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27530 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27531 				ZVAL_NULL(EX_VAR(opline->result.var));
27532 			}
27533 		}
27534 	}
27535 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27536 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27537 	}
27538 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27539 	/* assign_dim has two opcodes! */
27540 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27541 }
27542 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27543 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27544 {
27545 	USE_OPLINE
27546 	zval *object_ptr, *orig_object_ptr;
27547 	zval *value;
27548 	zval *variable_ptr;
27549 	zval *dim;
27550 	zend_refcounted *garbage = NULL;
27551 
27552 	SAVE_OPLINE();
27553 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27554 
27555 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27556 try_assign_dim_array:
27557 		SEPARATE_ARRAY(object_ptr);
27558 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27559 			value = EX_VAR((opline+1)->op1.var);
27560 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27561 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27562 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27563 					GC_ADDREF(ht);
27564 				}
27565 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27566 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27567 					zend_array_destroy(ht);
27568 					goto assign_dim_error;
27569 				}
27570 			}
27571 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
27572 				ZVAL_DEREF(value);
27573 			}
27574 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27575 			if (UNEXPECTED(value == NULL)) {
27576 				zend_cannot_add_element();
27577 				goto assign_dim_error;
27578 			} else if (IS_CV == IS_CV) {
27579 				if (Z_REFCOUNTED_P(value)) {
27580 					Z_ADDREF_P(value);
27581 				}
27582 			} else if (IS_CV == IS_VAR) {
27583 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27584 				if (Z_ISREF_P(free_op_data)) {
27585 					if (Z_REFCOUNTED_P(value)) {
27586 						Z_ADDREF_P(value);
27587 					}
27588 					zval_ptr_dtor_nogc(free_op_data);
27589 				}
27590 			} else if (IS_CV == IS_CONST) {
27591 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27592 					Z_ADDREF_P(value);
27593 				}
27594 			}
27595 		} else {
27596 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27597 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27598 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27599 			} else {
27600 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27601 			}
27602 			if (UNEXPECTED(variable_ptr == NULL)) {
27603 				goto assign_dim_error;
27604 			}
27605 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
27606 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
27607 		}
27608 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27609 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27610 		}
27611 		if (garbage) {
27612 			GC_DTOR_NO_REF(garbage);
27613 		}
27614 	} else {
27615 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27616 			object_ptr = Z_REFVAL_P(object_ptr);
27617 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27618 				goto try_assign_dim_array;
27619 			}
27620 		}
27621 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27622 			zend_object *obj = Z_OBJ_P(object_ptr);
27623 
27624 			GC_ADDREF(obj);
27625 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27626 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27627 				dim = ZVAL_UNDEFINED_OP2();
27628 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27629 				dim++;
27630 			}
27631 
27632 			value = EX_VAR((opline+1)->op1.var);
27633 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27634 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27635 			} else if (IS_CV & (IS_CV|IS_VAR)) {
27636 				ZVAL_DEREF(value);
27637 			}
27638 
27639 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27640 
27641 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27642 				zend_objects_store_del(obj);
27643 			}
27644 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27645 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27646 				zend_use_new_element_for_string();
27647 
27648 				UNDEF_RESULT();
27649 			} else {
27650 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27651 				value = EX_VAR((opline+1)->op1.var);
27652 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27653 
27654 			}
27655 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27656 			if (Z_ISREF_P(orig_object_ptr)
27657 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27658 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27659 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27660 
27661 				UNDEF_RESULT();
27662 			} else {
27663 				HashTable *ht = zend_new_array(8);
27664 				uint8_t old_type = Z_TYPE_P(object_ptr);
27665 
27666 				ZVAL_ARR(object_ptr, ht);
27667 				if (UNEXPECTED(old_type == IS_FALSE)) {
27668 					GC_ADDREF(ht);
27669 					zend_false_to_array_deprecated();
27670 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27671 						zend_array_destroy(ht);
27672 						goto assign_dim_error;
27673 					}
27674 				}
27675 				goto try_assign_dim_array;
27676 			}
27677 		} else {
27678 			zend_use_scalar_as_array();
27679 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27680 assign_dim_error:
27681 
27682 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27683 				ZVAL_NULL(EX_VAR(opline->result.var));
27684 			}
27685 		}
27686 	}
27687 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27688 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27689 	}
27690 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27691 	/* assign_dim has two opcodes! */
27692 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27693 }
27694 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27695 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27696 {
27697 	USE_OPLINE
27698 	zval *property, *container, *value_ptr;
27699 
27700 	SAVE_OPLINE();
27701 
27702 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27703 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27704 
27705 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27706 
27707 	if (1) {
27708 		if (IS_VAR == IS_UNUSED) {
27709 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27710 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27711 			} else {
27712 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27713 			}
27714 		} else {
27715 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27716 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27717 			} else {
27718 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27719 			}
27720 		}
27721 	} else {
27722 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
27723 	}
27724 
27725 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27726 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27727 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27728 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27729 }
27730 
27731 /* 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)27732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27733 {
27734 	USE_OPLINE
27735 	zval *property, *container, *value_ptr;
27736 
27737 	SAVE_OPLINE();
27738 
27739 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27740 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27741 
27742 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
27743 
27744 	if (1) {
27745 		if (IS_VAR == IS_UNUSED) {
27746 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27747 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27748 			} else {
27749 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27750 			}
27751 		} else {
27752 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27753 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27754 			} else {
27755 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27756 			}
27757 		}
27758 	} else {
27759 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
27760 	}
27761 
27762 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27763 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27764 
27765 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27766 }
27767 
27768 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27770 {
27771 	USE_OPLINE
27772 	zval *function_name;
27773 	zend_class_entry *ce;
27774 	uint32_t call_info;
27775 	zend_function *fbc;
27776 	zend_execute_data *call;
27777 
27778 	SAVE_OPLINE();
27779 
27780 	if (IS_VAR == IS_CONST) {
27781 		/* no function found. try a static method in class */
27782 		ce = CACHED_PTR(opline->result.num);
27783 		if (UNEXPECTED(ce == NULL)) {
27784 			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);
27785 			if (UNEXPECTED(ce == NULL)) {
27786 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27787 				HANDLE_EXCEPTION();
27788 			}
27789 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27790 				CACHE_PTR(opline->result.num, ce);
27791 			}
27792 		}
27793 	} else if (IS_VAR == IS_UNUSED) {
27794 		ce = zend_fetch_class(NULL, opline->op1.num);
27795 		if (UNEXPECTED(ce == NULL)) {
27796 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27797 			HANDLE_EXCEPTION();
27798 		}
27799 	} else {
27800 		ce = Z_CE_P(EX_VAR(opline->op1.var));
27801 	}
27802 
27803 	if (IS_VAR == IS_CONST &&
27804 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
27805 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
27806 		/* nothing to do */
27807 	} else if (IS_VAR != IS_CONST &&
27808 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
27809 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
27810 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
27811 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27812 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27813 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27814 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
27815 				do {
27816 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
27817 						function_name = Z_REFVAL_P(function_name);
27818 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
27819 							break;
27820 						}
27821 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
27822 						ZVAL_UNDEFINED_OP2();
27823 						if (UNEXPECTED(EG(exception) != NULL)) {
27824 							HANDLE_EXCEPTION();
27825 						}
27826 					}
27827 					zend_throw_error(NULL, "Method name must be a string");
27828 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27829 					HANDLE_EXCEPTION();
27830 				} while (0);
27831 			}
27832 		}
27833 
27834 		if (ce->get_static_method) {
27835 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
27836 		} else {
27837 			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));
27838 		}
27839 		if (UNEXPECTED(fbc == NULL)) {
27840 			if (EXPECTED(!EG(exception))) {
27841 				zend_undefined_method(ce, Z_STR_P(function_name));
27842 			}
27843 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27844 			HANDLE_EXCEPTION();
27845 		}
27846 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
27847 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
27848 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
27849 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
27850 		}
27851 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
27852 			init_func_run_time_cache(&fbc->op_array);
27853 		}
27854 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27855 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27856 		}
27857 	} else {
27858 		if (UNEXPECTED(ce->constructor == NULL)) {
27859 			zend_throw_error(NULL, "Cannot call constructor");
27860 			HANDLE_EXCEPTION();
27861 		}
27862 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
27863 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
27864 			HANDLE_EXCEPTION();
27865 		}
27866 		fbc = ce->constructor;
27867 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
27868 			init_func_run_time_cache(&fbc->op_array);
27869 		}
27870 	}
27871 
27872 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
27873 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
27874 			ce = (zend_class_entry*)Z_OBJ(EX(This));
27875 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
27876 		} else {
27877 			zend_non_static_method_call(fbc);
27878 			HANDLE_EXCEPTION();
27879 		}
27880 	} else {
27881 		/* previous opcode is ZEND_FETCH_CLASS */
27882 		if (IS_VAR == IS_UNUSED
27883 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
27884 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
27885 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
27886 				ce = Z_OBJCE(EX(This));
27887 			} else {
27888 				ce = Z_CE(EX(This));
27889 			}
27890 		}
27891 		call_info = ZEND_CALL_NESTED_FUNCTION;
27892 	}
27893 
27894 	call = zend_vm_stack_push_call_frame(call_info,
27895 		fbc, opline->extended_value, ce);
27896 	call->prev_execute_data = EX(call);
27897 	EX(call) = call;
27898 
27899 	ZEND_VM_NEXT_OPCODE();
27900 }
27901 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27903 {
27904 	USE_OPLINE
27905 	zval *expr_ptr, new_expr;
27906 
27907 	SAVE_OPLINE();
27908 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
27909 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
27910 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27911 		if (Z_ISREF_P(expr_ptr)) {
27912 			Z_ADDREF_P(expr_ptr);
27913 		} else {
27914 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
27915 		}
27916 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27917 	} else {
27918 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27919 		if (IS_VAR == IS_TMP_VAR) {
27920 			/* pass */
27921 		} else if (IS_VAR == IS_CONST) {
27922 			Z_TRY_ADDREF_P(expr_ptr);
27923 		} else if (IS_VAR == IS_CV) {
27924 			ZVAL_DEREF(expr_ptr);
27925 			Z_TRY_ADDREF_P(expr_ptr);
27926 		} else /* if (IS_VAR == IS_VAR) */ {
27927 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
27928 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
27929 
27930 				expr_ptr = Z_REFVAL_P(expr_ptr);
27931 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
27932 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
27933 					expr_ptr = &new_expr;
27934 					efree_size(ref, sizeof(zend_reference));
27935 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
27936 					Z_ADDREF_P(expr_ptr);
27937 				}
27938 			}
27939 		}
27940 	}
27941 
27942 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27943 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27944 		zend_string *str;
27945 		zend_ulong hval;
27946 
27947 add_again:
27948 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
27949 			str = Z_STR_P(offset);
27950 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27951 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
27952 					goto num_index;
27953 				}
27954 			}
27955 str_index:
27956 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
27957 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
27958 			hval = Z_LVAL_P(offset);
27959 num_index:
27960 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
27961 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
27962 			offset = Z_REFVAL_P(offset);
27963 			goto add_again;
27964 		} else if (Z_TYPE_P(offset) == IS_NULL) {
27965 			str = ZSTR_EMPTY_ALLOC();
27966 			goto str_index;
27967 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
27968 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
27969 			goto num_index;
27970 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
27971 			hval = 0;
27972 			goto num_index;
27973 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
27974 			hval = 1;
27975 			goto num_index;
27976 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
27977 			zend_use_resource_as_offset(offset);
27978 			hval = Z_RES_HANDLE_P(offset);
27979 			goto num_index;
27980 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
27981 			ZVAL_UNDEFINED_OP2();
27982 			str = ZSTR_EMPTY_ALLOC();
27983 			goto str_index;
27984 		} else {
27985 			zend_illegal_array_offset_access(offset);
27986 			zval_ptr_dtor_nogc(expr_ptr);
27987 		}
27988 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27989 	} else {
27990 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
27991 			zend_cannot_add_element();
27992 			zval_ptr_dtor_nogc(expr_ptr);
27993 		}
27994 	}
27995 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27996 }
27997 
ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27998 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27999 {
28000 	zval *array;
28001 	uint32_t size;
28002 	USE_OPLINE
28003 
28004 	array = EX_VAR(opline->result.var);
28005 	if (IS_VAR != IS_UNUSED) {
28006 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
28007 		ZVAL_ARR(array, zend_new_array(size));
28008 		/* Explicitly initialize array as not-packed if flag is set */
28009 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
28010 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
28011 		}
28012 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28013 	} else {
28014 		ZVAL_ARR(array, zend_new_array(0));
28015 		ZEND_VM_NEXT_OPCODE();
28016 	}
28017 }
28018 
ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28020 {
28021 	USE_OPLINE
28022 	zval *container;
28023 	zval *offset;
28024 	zend_ulong hval;
28025 	zend_string *key;
28026 
28027 	SAVE_OPLINE();
28028 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28029 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
28030 
28031 	do {
28032 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28033 			HashTable *ht;
28034 
28035 unset_dim_array:
28036 			SEPARATE_ARRAY(container);
28037 			ht = Z_ARRVAL_P(container);
28038 offset_again:
28039 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
28040 				key = Z_STR_P(offset);
28041 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
28042 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
28043 						goto num_index_dim;
28044 					}
28045 				}
28046 str_index_dim:
28047 				ZEND_ASSERT(ht != &EG(symbol_table));
28048 				zend_hash_del(ht, key);
28049 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
28050 				hval = Z_LVAL_P(offset);
28051 num_index_dim:
28052 				zend_hash_index_del(ht, hval);
28053 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
28054 				offset = Z_REFVAL_P(offset);
28055 				goto offset_again;
28056 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
28057 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
28058 				goto num_index_dim;
28059 			} else if (Z_TYPE_P(offset) == IS_NULL) {
28060 				key = ZSTR_EMPTY_ALLOC();
28061 				goto str_index_dim;
28062 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
28063 				hval = 0;
28064 				goto num_index_dim;
28065 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
28066 				hval = 1;
28067 				goto num_index_dim;
28068 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
28069 				zend_use_resource_as_offset(offset);
28070 				hval = Z_RES_HANDLE_P(offset);
28071 				goto num_index_dim;
28072 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
28073 				ZVAL_UNDEFINED_OP2();
28074 				key = ZSTR_EMPTY_ALLOC();
28075 				goto str_index_dim;
28076 			} else {
28077 				zend_illegal_array_offset_unset(offset);
28078 			}
28079 			break;
28080 		} else if (Z_ISREF_P(container)) {
28081 			container = Z_REFVAL_P(container);
28082 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28083 				goto unset_dim_array;
28084 			}
28085 		}
28086 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28087 			container = ZVAL_UNDEFINED_OP1();
28088 		}
28089 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
28090 			offset = ZVAL_UNDEFINED_OP2();
28091 		}
28092 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
28093 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
28094 				offset++;
28095 			}
28096 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
28097 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
28098 			zend_throw_error(NULL, "Cannot unset string offsets");
28099 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
28100 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
28101 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
28102 			zend_false_to_array_deprecated();
28103 		}
28104 	} while (0);
28105 
28106 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28107 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28108 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28109 }
28110 
ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28112 {
28113 	USE_OPLINE
28114 	zval *container;
28115 	zval *offset;
28116 	zend_string *name, *tmp_name;
28117 
28118 	SAVE_OPLINE();
28119 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28120 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
28121 
28122 	do {
28123 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
28124 			if (Z_ISREF_P(container)) {
28125 				container = Z_REFVAL_P(container);
28126 				if (Z_TYPE_P(container) != IS_OBJECT) {
28127 					if (IS_VAR == IS_CV
28128 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28129 						ZVAL_UNDEFINED_OP1();
28130 					}
28131 					break;
28132 				}
28133 			} else {
28134 				break;
28135 			}
28136 		}
28137 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
28138 			name = Z_STR_P(offset);
28139 		} else {
28140 			name = zval_try_get_tmp_string(offset, &tmp_name);
28141 			if (UNEXPECTED(!name)) {
28142 				break;
28143 			}
28144 		}
28145 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
28146 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
28147 			zend_tmp_string_release(tmp_name);
28148 		}
28149 	} while (0);
28150 
28151 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28152 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28153 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28154 }
28155 
ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28156 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28157 {
28158 	USE_OPLINE
28159 
28160 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
28161 
28162 	SAVE_OPLINE();
28163 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
28164 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28165 	}
28166 
28167 	/* Destroy the previously yielded value */
28168 	zval_ptr_dtor(&generator->value);
28169 
28170 	/* Destroy the previously yielded key */
28171 	zval_ptr_dtor(&generator->key);
28172 
28173 	/* Set the new yielded value */
28174 	if (IS_VAR != IS_UNUSED) {
28175 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
28176 			/* Constants and temporary variables aren't yieldable by reference,
28177 			 * but we still allow them with a notice. */
28178 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
28179 				zval *value;
28180 
28181 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
28182 
28183 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28184 				ZVAL_COPY_VALUE(&generator->value, value);
28185 				if (IS_VAR == IS_CONST) {
28186 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
28187 						Z_ADDREF(generator->value);
28188 					}
28189 				}
28190 			} else {
28191 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28192 
28193 				/* If a function call result is yielded and the function did
28194 				 * not return by reference we throw a notice. */
28195 				do {
28196 					if (IS_VAR == IS_VAR) {
28197 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
28198 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
28199 						 && !Z_ISREF_P(value_ptr)) {
28200 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
28201 							ZVAL_COPY(&generator->value, value_ptr);
28202 							break;
28203 						}
28204 					}
28205 					if (Z_ISREF_P(value_ptr)) {
28206 						Z_ADDREF_P(value_ptr);
28207 					} else {
28208 						ZVAL_MAKE_REF_EX(value_ptr, 2);
28209 					}
28210 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
28211 				} while (0);
28212 
28213 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28214 			}
28215 		} else {
28216 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28217 
28218 			/* Consts, temporary variables and references need copying */
28219 			if (IS_VAR == IS_CONST) {
28220 				ZVAL_COPY_VALUE(&generator->value, value);
28221 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
28222 					Z_ADDREF(generator->value);
28223 				}
28224 			} else if (IS_VAR == IS_TMP_VAR) {
28225 				ZVAL_COPY_VALUE(&generator->value, value);
28226 			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
28227 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
28228 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28229 			} else {
28230 				ZVAL_COPY_VALUE(&generator->value, value);
28231 				if (IS_VAR == IS_CV) {
28232 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
28233 				}
28234 			}
28235 		}
28236 	} else {
28237 		/* If no value was specified yield null */
28238 		ZVAL_NULL(&generator->value);
28239 	}
28240 
28241 	/* Set the new yielded key */
28242 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
28243 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
28244 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
28245 			key = Z_REFVAL_P(key);
28246 		}
28247 		ZVAL_COPY(&generator->key, key);
28248 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28249 
28250 		if (Z_TYPE(generator->key) == IS_LONG
28251 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
28252 		) {
28253 			generator->largest_used_integer_key = Z_LVAL(generator->key);
28254 		}
28255 	} else {
28256 		/* If no key was specified we use auto-increment keys */
28257 		generator->largest_used_integer_key++;
28258 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
28259 	}
28260 
28261 	if (RETURN_VALUE_USED(opline)) {
28262 		/* If the return value of yield is used set the send
28263 		 * target and initialize it to NULL */
28264 		generator->send_target = EX_VAR(opline->result.var);
28265 		ZVAL_NULL(generator->send_target);
28266 	} else {
28267 		generator->send_target = NULL;
28268 	}
28269 
28270 	/* We increment to the next op, so we are at the correct position when the
28271 	 * generator is resumed. */
28272 	ZEND_VM_INC_OPCODE();
28273 
28274 	/* The GOTO VM uses a local opline variable. We need to set the opline
28275 	 * variable in execute_data so we don't resume at an old position. */
28276 	SAVE_OPLINE();
28277 
28278 	ZEND_VM_RETURN();
28279 }
28280 
ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28282 {
28283 	USE_OPLINE
28284 	zval *op1, *op2;
28285 	bool result;
28286 
28287 	SAVE_OPLINE();
28288 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28289 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28290 	result = fast_is_identical_function(op1, op2);
28291 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28292 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28293 	ZEND_VM_SMART_BRANCH(result, 1);
28294 }
28295 
ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28296 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28297 {
28298 	USE_OPLINE
28299 	zval *op1, *op2;
28300 	bool result;
28301 
28302 	SAVE_OPLINE();
28303 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28304 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28305 	result = fast_is_identical_function(op1, op2);
28306 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28307 	ZEND_VM_SMART_BRANCH(result, 1);
28308 }
28309 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28310 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28311 {
28312 	USE_OPLINE
28313 	zval *op1, *op2;
28314 	bool result;
28315 
28316 	SAVE_OPLINE();
28317 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28318 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28319 	result = fast_is_not_identical_function(op1, op2);
28320 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28321 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28322 	ZEND_VM_SMART_BRANCH(result, 1);
28323 }
28324 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28325 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28326 {
28327 	USE_OPLINE
28328 	zval *value;
28329 	zval *variable_ptr;
28330 
28331 	SAVE_OPLINE();
28332 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28333 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28334 
28335 	if (0 || UNEXPECTED(0)) {
28336 		zend_refcounted *garbage = NULL;
28337 
28338 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
28339 		if (UNEXPECTED(0)) {
28340 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28341 		}
28342 		if (garbage) {
28343 			GC_DTOR_NO_REF(garbage);
28344 		}
28345 	} else {
28346 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
28347 	}
28348 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28349 	/* zend_assign_to_variable() always takes care of op2, never free it! */
28350 
28351 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28352 }
28353 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28354 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28355 {
28356 	USE_OPLINE
28357 	zval *value;
28358 	zval *variable_ptr;
28359 
28360 	SAVE_OPLINE();
28361 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28362 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28363 
28364 	if (0 || UNEXPECTED(1)) {
28365 		zend_refcounted *garbage = NULL;
28366 
28367 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
28368 		if (UNEXPECTED(1)) {
28369 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28370 		}
28371 		if (garbage) {
28372 			GC_DTOR_NO_REF(garbage);
28373 		}
28374 	} else {
28375 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
28376 	}
28377 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28378 	/* zend_assign_to_variable() always takes care of op2, never free it! */
28379 
28380 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28381 }
28382 
ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28383 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28384 {
28385 	USE_OPLINE
28386 	zval *op1, *op2;
28387 	bool result;
28388 
28389 	SAVE_OPLINE();
28390 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28391 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
28392 	result = fast_is_identical_function(op1, op2);
28393 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28394 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28395 	ZEND_VM_SMART_BRANCH(result, 1);
28396 }
28397 
ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28398 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28399 {
28400 	USE_OPLINE
28401 	zval *op1, *op2;
28402 	bool result;
28403 
28404 	SAVE_OPLINE();
28405 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28406 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
28407 	result = fast_is_identical_function(op1, op2);
28408 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28409 	ZEND_VM_SMART_BRANCH(result, 1);
28410 }
28411 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28412 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28413 {
28414 	USE_OPLINE
28415 	zval *op1, *op2;
28416 	bool result;
28417 
28418 	SAVE_OPLINE();
28419 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28420 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
28421 	result = fast_is_not_identical_function(op1, op2);
28422 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28423 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28424 	ZEND_VM_SMART_BRANCH(result, 1);
28425 }
28426 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28427 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28428 {
28429 	USE_OPLINE
28430 	zval *value;
28431 	zval *variable_ptr;
28432 
28433 	SAVE_OPLINE();
28434 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
28435 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28436 
28437 	if (0 || UNEXPECTED(0)) {
28438 		zend_refcounted *garbage = NULL;
28439 
28440 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
28441 		if (UNEXPECTED(0)) {
28442 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28443 		}
28444 		if (garbage) {
28445 			GC_DTOR_NO_REF(garbage);
28446 		}
28447 	} else {
28448 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
28449 	}
28450 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28451 	/* zend_assign_to_variable() always takes care of op2, never free it! */
28452 
28453 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28454 }
28455 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28456 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28457 {
28458 	USE_OPLINE
28459 	zval *value;
28460 	zval *variable_ptr;
28461 
28462 	SAVE_OPLINE();
28463 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
28464 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28465 
28466 	if (0 || UNEXPECTED(1)) {
28467 		zend_refcounted *garbage = NULL;
28468 
28469 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
28470 		if (UNEXPECTED(1)) {
28471 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28472 		}
28473 		if (garbage) {
28474 			GC_DTOR_NO_REF(garbage);
28475 		}
28476 	} else {
28477 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
28478 	}
28479 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28480 	/* zend_assign_to_variable() always takes care of op2, never free it! */
28481 
28482 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28483 }
28484 
ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28485 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28486 {
28487 	USE_OPLINE
28488 	zval *variable_ptr;
28489 	zval *value_ptr;
28490 	zend_refcounted *garbage = NULL;
28491 
28492 	SAVE_OPLINE();
28493 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
28494 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28495 
28496 	if (IS_VAR == IS_VAR &&
28497 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
28498 
28499 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
28500 		variable_ptr = &EG(uninitialized_zval);
28501 	} else if (IS_VAR == IS_VAR &&
28502 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
28503 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
28504 
28505 		variable_ptr = zend_wrong_assign_to_variable_reference(
28506 			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
28507 	} else {
28508 		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
28509 	}
28510 
28511 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28512 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
28513 	}
28514 
28515 	if (garbage) {
28516 		GC_DTOR(garbage);
28517 	}
28518 
28519 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28520 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28521 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28522 }
28523 
ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28524 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28525 {
28526 	USE_OPLINE
28527 	zval *var_ptr;
28528 	zval *value, *container, *dim;
28529 	HashTable *ht;
28530 
28531 	SAVE_OPLINE();
28532 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28533 
28534 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28535 assign_dim_op_array:
28536 		SEPARATE_ARRAY(container);
28537 		ht = Z_ARRVAL_P(container);
28538 assign_dim_op_new_array:
28539 		dim = NULL;
28540 		if (IS_UNUSED == IS_UNUSED) {
28541 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
28542 			if (UNEXPECTED(!var_ptr)) {
28543 				zend_cannot_add_element();
28544 				goto assign_dim_op_ret_null;
28545 			}
28546 		} else {
28547 			if (IS_UNUSED == IS_CONST) {
28548 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
28549 			} else {
28550 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
28551 			}
28552 			if (UNEXPECTED(!var_ptr)) {
28553 				goto assign_dim_op_ret_null;
28554 			}
28555 		}
28556 
28557 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
28558 
28559 		do {
28560 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
28561 				zend_reference *ref = Z_REF_P(var_ptr);
28562 				var_ptr = Z_REFVAL_P(var_ptr);
28563 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
28564 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
28565 					break;
28566 				}
28567 			}
28568 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
28569 		} while (0);
28570 
28571 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28572 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
28573 		}
28574 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
28575 	} else {
28576 		if (EXPECTED(Z_ISREF_P(container))) {
28577 			container = Z_REFVAL_P(container);
28578 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28579 				goto assign_dim_op_array;
28580 			}
28581 		}
28582 
28583 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
28584 			zend_object *obj = Z_OBJ_P(container);
28585 
28586 			dim = NULL;
28587 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28588 				dim++;
28589 			}
28590 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
28591 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
28592 			uint8_t old_type;
28593 
28594 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
28595 				ZVAL_UNDEFINED_OP1();
28596 			}
28597 			ht = zend_new_array(8);
28598 			old_type = Z_TYPE_P(container);
28599 			ZVAL_ARR(container, ht);
28600 			if (UNEXPECTED(old_type == IS_FALSE)) {
28601 				GC_ADDREF(ht);
28602 				zend_false_to_array_deprecated();
28603 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
28604 					zend_array_destroy(ht);
28605 					goto assign_dim_op_ret_null;
28606 				}
28607 			}
28608 			goto assign_dim_op_new_array;
28609 		} else {
28610 			dim = NULL;
28611 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
28612 assign_dim_op_ret_null:
28613 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
28614 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28615 				ZVAL_NULL(EX_VAR(opline->result.var));
28616 			}
28617 		}
28618 	}
28619 
28620 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28621 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28622 }
28623 
ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28624 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28625 {
28626 	USE_OPLINE
28627 	zval *container;
28628 
28629 	SAVE_OPLINE();
28630 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28631 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
28632 
28633 	if (IS_VAR == IS_VAR) {
28634 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
28635 	}
28636 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28637 }
28638 
ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28639 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28640 {
28641 	USE_OPLINE
28642 	zval *container;
28643 
28644 	SAVE_OPLINE();
28645 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28646 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
28647 
28648 	if (IS_VAR == IS_VAR) {
28649 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
28650 	}
28651 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28652 }
28653 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28654 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28655 {
28656 #if 0
28657 	USE_OPLINE
28658 #endif
28659 
28660 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
28661 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
28662 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28663 		}
28664 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28665 	} else {
28666 		if (IS_UNUSED == IS_UNUSED) {
28667 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28668 		}
28669 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28670 	}
28671 }
28672 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28673 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28674 {
28675 	USE_OPLINE
28676 	zval *object_ptr, *orig_object_ptr;
28677 	zval *value;
28678 	zval *variable_ptr;
28679 	zval *dim;
28680 	zend_refcounted *garbage = NULL;
28681 
28682 	SAVE_OPLINE();
28683 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28684 
28685 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28686 try_assign_dim_array:
28687 		SEPARATE_ARRAY(object_ptr);
28688 		if (IS_UNUSED == IS_UNUSED) {
28689 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
28690 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
28691 				HashTable *ht = Z_ARRVAL_P(object_ptr);
28692 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
28693 					GC_ADDREF(ht);
28694 				}
28695 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28696 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
28697 					zend_array_destroy(ht);
28698 					goto assign_dim_error;
28699 				}
28700 			}
28701 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
28702 				ZVAL_DEREF(value);
28703 			}
28704 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
28705 			if (UNEXPECTED(value == NULL)) {
28706 				zend_cannot_add_element();
28707 				goto assign_dim_error;
28708 			} else if (IS_CONST == IS_CV) {
28709 				if (Z_REFCOUNTED_P(value)) {
28710 					Z_ADDREF_P(value);
28711 				}
28712 			} else if (IS_CONST == IS_VAR) {
28713 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
28714 				if (Z_ISREF_P(free_op_data)) {
28715 					if (Z_REFCOUNTED_P(value)) {
28716 						Z_ADDREF_P(value);
28717 					}
28718 					zval_ptr_dtor_nogc(free_op_data);
28719 				}
28720 			} else if (IS_CONST == IS_CONST) {
28721 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
28722 					Z_ADDREF_P(value);
28723 				}
28724 			}
28725 		} else {
28726 			dim = NULL;
28727 			if (IS_UNUSED == IS_CONST) {
28728 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28729 			} else {
28730 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28731 			}
28732 			if (UNEXPECTED(variable_ptr == NULL)) {
28733 				goto assign_dim_error;
28734 			}
28735 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
28736 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
28737 		}
28738 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28739 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28740 		}
28741 		if (garbage) {
28742 			GC_DTOR_NO_REF(garbage);
28743 		}
28744 	} else {
28745 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
28746 			object_ptr = Z_REFVAL_P(object_ptr);
28747 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28748 				goto try_assign_dim_array;
28749 			}
28750 		}
28751 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
28752 			zend_object *obj = Z_OBJ_P(object_ptr);
28753 
28754 			GC_ADDREF(obj);
28755 			dim = NULL;
28756 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
28757 				dim = ZVAL_UNDEFINED_OP2();
28758 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28759 				dim++;
28760 			}
28761 
28762 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
28763 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
28764 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28765 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
28766 				ZVAL_DEREF(value);
28767 			}
28768 
28769 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
28770 
28771 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28772 				zend_objects_store_del(obj);
28773 			}
28774 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
28775 			if (IS_UNUSED == IS_UNUSED) {
28776 				zend_use_new_element_for_string();
28777 
28778 				UNDEF_RESULT();
28779 			} else {
28780 				dim = NULL;
28781 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
28782 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
28783 
28784 			}
28785 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
28786 			if (Z_ISREF_P(orig_object_ptr)
28787 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
28788 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
28789 				dim = NULL;
28790 
28791 				UNDEF_RESULT();
28792 			} else {
28793 				HashTable *ht = zend_new_array(8);
28794 				uint8_t old_type = Z_TYPE_P(object_ptr);
28795 
28796 				ZVAL_ARR(object_ptr, ht);
28797 				if (UNEXPECTED(old_type == IS_FALSE)) {
28798 					GC_ADDREF(ht);
28799 					zend_false_to_array_deprecated();
28800 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
28801 						zend_array_destroy(ht);
28802 						goto assign_dim_error;
28803 					}
28804 				}
28805 				goto try_assign_dim_array;
28806 			}
28807 		} else {
28808 			zend_use_scalar_as_array();
28809 			dim = NULL;
28810 assign_dim_error:
28811 
28812 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28813 				ZVAL_NULL(EX_VAR(opline->result.var));
28814 			}
28815 		}
28816 	}
28817 	if (IS_UNUSED != IS_UNUSED) {
28818 
28819 	}
28820 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28821 	/* assign_dim has two opcodes! */
28822 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28823 }
28824 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28825 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28826 {
28827 	USE_OPLINE
28828 	zval *object_ptr, *orig_object_ptr;
28829 	zval *value;
28830 	zval *variable_ptr;
28831 	zval *dim;
28832 	zend_refcounted *garbage = NULL;
28833 
28834 	SAVE_OPLINE();
28835 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28836 
28837 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28838 try_assign_dim_array:
28839 		SEPARATE_ARRAY(object_ptr);
28840 		if (IS_UNUSED == IS_UNUSED) {
28841 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
28842 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
28843 				HashTable *ht = Z_ARRVAL_P(object_ptr);
28844 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
28845 					GC_ADDREF(ht);
28846 				}
28847 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28848 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
28849 					zend_array_destroy(ht);
28850 					goto assign_dim_error;
28851 				}
28852 			}
28853 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
28854 				ZVAL_DEREF(value);
28855 			}
28856 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
28857 			if (UNEXPECTED(value == NULL)) {
28858 				zend_cannot_add_element();
28859 				goto assign_dim_error;
28860 			} else if (IS_TMP_VAR == IS_CV) {
28861 				if (Z_REFCOUNTED_P(value)) {
28862 					Z_ADDREF_P(value);
28863 				}
28864 			} else if (IS_TMP_VAR == IS_VAR) {
28865 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
28866 				if (Z_ISREF_P(free_op_data)) {
28867 					if (Z_REFCOUNTED_P(value)) {
28868 						Z_ADDREF_P(value);
28869 					}
28870 					zval_ptr_dtor_nogc(free_op_data);
28871 				}
28872 			} else if (IS_TMP_VAR == IS_CONST) {
28873 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
28874 					Z_ADDREF_P(value);
28875 				}
28876 			}
28877 		} else {
28878 			dim = NULL;
28879 			if (IS_UNUSED == IS_CONST) {
28880 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28881 			} else {
28882 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28883 			}
28884 			if (UNEXPECTED(variable_ptr == NULL)) {
28885 				goto assign_dim_error;
28886 			}
28887 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
28888 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
28889 		}
28890 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28891 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28892 		}
28893 		if (garbage) {
28894 			GC_DTOR_NO_REF(garbage);
28895 		}
28896 	} else {
28897 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
28898 			object_ptr = Z_REFVAL_P(object_ptr);
28899 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28900 				goto try_assign_dim_array;
28901 			}
28902 		}
28903 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
28904 			zend_object *obj = Z_OBJ_P(object_ptr);
28905 
28906 			GC_ADDREF(obj);
28907 			dim = NULL;
28908 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
28909 				dim = ZVAL_UNDEFINED_OP2();
28910 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28911 				dim++;
28912 			}
28913 
28914 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
28915 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
28916 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28917 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
28918 				ZVAL_DEREF(value);
28919 			}
28920 
28921 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
28922 
28923 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28924 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28925 				zend_objects_store_del(obj);
28926 			}
28927 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
28928 			if (IS_UNUSED == IS_UNUSED) {
28929 				zend_use_new_element_for_string();
28930 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28931 				UNDEF_RESULT();
28932 			} else {
28933 				dim = NULL;
28934 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
28935 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
28936 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28937 			}
28938 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
28939 			if (Z_ISREF_P(orig_object_ptr)
28940 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
28941 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
28942 				dim = NULL;
28943 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28944 				UNDEF_RESULT();
28945 			} else {
28946 				HashTable *ht = zend_new_array(8);
28947 				uint8_t old_type = Z_TYPE_P(object_ptr);
28948 
28949 				ZVAL_ARR(object_ptr, ht);
28950 				if (UNEXPECTED(old_type == IS_FALSE)) {
28951 					GC_ADDREF(ht);
28952 					zend_false_to_array_deprecated();
28953 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
28954 						zend_array_destroy(ht);
28955 						goto assign_dim_error;
28956 					}
28957 				}
28958 				goto try_assign_dim_array;
28959 			}
28960 		} else {
28961 			zend_use_scalar_as_array();
28962 			dim = NULL;
28963 assign_dim_error:
28964 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28965 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28966 				ZVAL_NULL(EX_VAR(opline->result.var));
28967 			}
28968 		}
28969 	}
28970 	if (IS_UNUSED != IS_UNUSED) {
28971 
28972 	}
28973 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28974 	/* assign_dim has two opcodes! */
28975 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28976 }
28977 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28978 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28979 {
28980 	USE_OPLINE
28981 	zval *object_ptr, *orig_object_ptr;
28982 	zval *value;
28983 	zval *variable_ptr;
28984 	zval *dim;
28985 	zend_refcounted *garbage = NULL;
28986 
28987 	SAVE_OPLINE();
28988 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28989 
28990 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28991 try_assign_dim_array:
28992 		SEPARATE_ARRAY(object_ptr);
28993 		if (IS_UNUSED == IS_UNUSED) {
28994 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
28995 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
28996 				HashTable *ht = Z_ARRVAL_P(object_ptr);
28997 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
28998 					GC_ADDREF(ht);
28999 				}
29000 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
29001 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
29002 					zend_array_destroy(ht);
29003 					goto assign_dim_error;
29004 				}
29005 			}
29006 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
29007 				ZVAL_DEREF(value);
29008 			}
29009 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
29010 			if (UNEXPECTED(value == NULL)) {
29011 				zend_cannot_add_element();
29012 				goto assign_dim_error;
29013 			} else if (IS_VAR == IS_CV) {
29014 				if (Z_REFCOUNTED_P(value)) {
29015 					Z_ADDREF_P(value);
29016 				}
29017 			} else if (IS_VAR == IS_VAR) {
29018 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
29019 				if (Z_ISREF_P(free_op_data)) {
29020 					if (Z_REFCOUNTED_P(value)) {
29021 						Z_ADDREF_P(value);
29022 					}
29023 					zval_ptr_dtor_nogc(free_op_data);
29024 				}
29025 			} else if (IS_VAR == IS_CONST) {
29026 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
29027 					Z_ADDREF_P(value);
29028 				}
29029 			}
29030 		} else {
29031 			dim = NULL;
29032 			if (IS_UNUSED == IS_CONST) {
29033 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29034 			} else {
29035 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29036 			}
29037 			if (UNEXPECTED(variable_ptr == NULL)) {
29038 				goto assign_dim_error;
29039 			}
29040 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
29041 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
29042 		}
29043 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29044 			ZVAL_COPY(EX_VAR(opline->result.var), value);
29045 		}
29046 		if (garbage) {
29047 			GC_DTOR_NO_REF(garbage);
29048 		}
29049 	} else {
29050 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
29051 			object_ptr = Z_REFVAL_P(object_ptr);
29052 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29053 				goto try_assign_dim_array;
29054 			}
29055 		}
29056 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
29057 			zend_object *obj = Z_OBJ_P(object_ptr);
29058 
29059 			GC_ADDREF(obj);
29060 			dim = NULL;
29061 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
29062 				dim = ZVAL_UNDEFINED_OP2();
29063 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
29064 				dim++;
29065 			}
29066 
29067 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
29068 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
29069 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
29070 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
29071 				ZVAL_DEREF(value);
29072 			}
29073 
29074 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
29075 
29076 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29077 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
29078 				zend_objects_store_del(obj);
29079 			}
29080 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
29081 			if (IS_UNUSED == IS_UNUSED) {
29082 				zend_use_new_element_for_string();
29083 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29084 				UNDEF_RESULT();
29085 			} else {
29086 				dim = NULL;
29087 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
29088 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29089 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29090 			}
29091 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
29092 			if (Z_ISREF_P(orig_object_ptr)
29093 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
29094 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
29095 				dim = NULL;
29096 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29097 				UNDEF_RESULT();
29098 			} else {
29099 				HashTable *ht = zend_new_array(8);
29100 				uint8_t old_type = Z_TYPE_P(object_ptr);
29101 
29102 				ZVAL_ARR(object_ptr, ht);
29103 				if (UNEXPECTED(old_type == IS_FALSE)) {
29104 					GC_ADDREF(ht);
29105 					zend_false_to_array_deprecated();
29106 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
29107 						zend_array_destroy(ht);
29108 						goto assign_dim_error;
29109 					}
29110 				}
29111 				goto try_assign_dim_array;
29112 			}
29113 		} else {
29114 			zend_use_scalar_as_array();
29115 			dim = NULL;
29116 assign_dim_error:
29117 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29118 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29119 				ZVAL_NULL(EX_VAR(opline->result.var));
29120 			}
29121 		}
29122 	}
29123 	if (IS_UNUSED != IS_UNUSED) {
29124 
29125 	}
29126 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29127 	/* assign_dim has two opcodes! */
29128 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29129 }
29130 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29131 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29132 {
29133 	USE_OPLINE
29134 	zval *object_ptr, *orig_object_ptr;
29135 	zval *value;
29136 	zval *variable_ptr;
29137 	zval *dim;
29138 	zend_refcounted *garbage = NULL;
29139 
29140 	SAVE_OPLINE();
29141 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29142 
29143 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29144 try_assign_dim_array:
29145 		SEPARATE_ARRAY(object_ptr);
29146 		if (IS_UNUSED == IS_UNUSED) {
29147 			value = EX_VAR((opline+1)->op1.var);
29148 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
29149 				HashTable *ht = Z_ARRVAL_P(object_ptr);
29150 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
29151 					GC_ADDREF(ht);
29152 				}
29153 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
29154 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
29155 					zend_array_destroy(ht);
29156 					goto assign_dim_error;
29157 				}
29158 			}
29159 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
29160 				ZVAL_DEREF(value);
29161 			}
29162 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
29163 			if (UNEXPECTED(value == NULL)) {
29164 				zend_cannot_add_element();
29165 				goto assign_dim_error;
29166 			} else if (IS_CV == IS_CV) {
29167 				if (Z_REFCOUNTED_P(value)) {
29168 					Z_ADDREF_P(value);
29169 				}
29170 			} else if (IS_CV == IS_VAR) {
29171 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
29172 				if (Z_ISREF_P(free_op_data)) {
29173 					if (Z_REFCOUNTED_P(value)) {
29174 						Z_ADDREF_P(value);
29175 					}
29176 					zval_ptr_dtor_nogc(free_op_data);
29177 				}
29178 			} else if (IS_CV == IS_CONST) {
29179 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
29180 					Z_ADDREF_P(value);
29181 				}
29182 			}
29183 		} else {
29184 			dim = NULL;
29185 			if (IS_UNUSED == IS_CONST) {
29186 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29187 			} else {
29188 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29189 			}
29190 			if (UNEXPECTED(variable_ptr == NULL)) {
29191 				goto assign_dim_error;
29192 			}
29193 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
29194 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
29195 		}
29196 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29197 			ZVAL_COPY(EX_VAR(opline->result.var), value);
29198 		}
29199 		if (garbage) {
29200 			GC_DTOR_NO_REF(garbage);
29201 		}
29202 	} else {
29203 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
29204 			object_ptr = Z_REFVAL_P(object_ptr);
29205 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29206 				goto try_assign_dim_array;
29207 			}
29208 		}
29209 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
29210 			zend_object *obj = Z_OBJ_P(object_ptr);
29211 
29212 			GC_ADDREF(obj);
29213 			dim = NULL;
29214 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
29215 				dim = ZVAL_UNDEFINED_OP2();
29216 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
29217 				dim++;
29218 			}
29219 
29220 			value = EX_VAR((opline+1)->op1.var);
29221 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
29222 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
29223 			} else if (IS_CV & (IS_CV|IS_VAR)) {
29224 				ZVAL_DEREF(value);
29225 			}
29226 
29227 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
29228 
29229 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
29230 				zend_objects_store_del(obj);
29231 			}
29232 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
29233 			if (IS_UNUSED == IS_UNUSED) {
29234 				zend_use_new_element_for_string();
29235 
29236 				UNDEF_RESULT();
29237 			} else {
29238 				dim = NULL;
29239 				value = EX_VAR((opline+1)->op1.var);
29240 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29241 
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 = NULL;
29248 
29249 				UNDEF_RESULT();
29250 			} else {
29251 				HashTable *ht = zend_new_array(8);
29252 				uint8_t old_type = Z_TYPE_P(object_ptr);
29253 
29254 				ZVAL_ARR(object_ptr, ht);
29255 				if (UNEXPECTED(old_type == IS_FALSE)) {
29256 					GC_ADDREF(ht);
29257 					zend_false_to_array_deprecated();
29258 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
29259 						zend_array_destroy(ht);
29260 						goto assign_dim_error;
29261 					}
29262 				}
29263 				goto try_assign_dim_array;
29264 			}
29265 		} else {
29266 			zend_use_scalar_as_array();
29267 			dim = NULL;
29268 assign_dim_error:
29269 
29270 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29271 				ZVAL_NULL(EX_VAR(opline->result.var));
29272 			}
29273 		}
29274 	}
29275 	if (IS_UNUSED != IS_UNUSED) {
29276 
29277 	}
29278 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29279 	/* assign_dim has two opcodes! */
29280 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29281 }
29282 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29283 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29284 {
29285 	USE_OPLINE
29286 	zval *function_name;
29287 	zend_class_entry *ce;
29288 	uint32_t call_info;
29289 	zend_function *fbc;
29290 	zend_execute_data *call;
29291 
29292 	SAVE_OPLINE();
29293 
29294 	if (IS_VAR == IS_CONST) {
29295 		/* no function found. try a static method in class */
29296 		ce = CACHED_PTR(opline->result.num);
29297 		if (UNEXPECTED(ce == NULL)) {
29298 			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);
29299 			if (UNEXPECTED(ce == NULL)) {
29300 
29301 				HANDLE_EXCEPTION();
29302 			}
29303 			if (IS_UNUSED != IS_CONST) {
29304 				CACHE_PTR(opline->result.num, ce);
29305 			}
29306 		}
29307 	} else if (IS_VAR == IS_UNUSED) {
29308 		ce = zend_fetch_class(NULL, opline->op1.num);
29309 		if (UNEXPECTED(ce == NULL)) {
29310 
29311 			HANDLE_EXCEPTION();
29312 		}
29313 	} else {
29314 		ce = Z_CE_P(EX_VAR(opline->op1.var));
29315 	}
29316 
29317 	if (IS_VAR == IS_CONST &&
29318 	    IS_UNUSED == IS_CONST &&
29319 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
29320 		/* nothing to do */
29321 	} else if (IS_VAR != IS_CONST &&
29322 	           IS_UNUSED == IS_CONST &&
29323 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
29324 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
29325 	} else if (IS_UNUSED != IS_UNUSED) {
29326 		function_name = NULL;
29327 		if (IS_UNUSED != IS_CONST) {
29328 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
29329 				do {
29330 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
29331 						function_name = Z_REFVAL_P(function_name);
29332 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
29333 							break;
29334 						}
29335 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
29336 						ZVAL_UNDEFINED_OP2();
29337 						if (UNEXPECTED(EG(exception) != NULL)) {
29338 							HANDLE_EXCEPTION();
29339 						}
29340 					}
29341 					zend_throw_error(NULL, "Method name must be a string");
29342 
29343 					HANDLE_EXCEPTION();
29344 				} while (0);
29345 			}
29346 		}
29347 
29348 		if (ce->get_static_method) {
29349 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
29350 		} else {
29351 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
29352 		}
29353 		if (UNEXPECTED(fbc == NULL)) {
29354 			if (EXPECTED(!EG(exception))) {
29355 				zend_undefined_method(ce, Z_STR_P(function_name));
29356 			}
29357 
29358 			HANDLE_EXCEPTION();
29359 		}
29360 		if (IS_UNUSED == IS_CONST &&
29361 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
29362 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
29363 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
29364 		}
29365 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
29366 			init_func_run_time_cache(&fbc->op_array);
29367 		}
29368 		if (IS_UNUSED != IS_CONST) {
29369 
29370 		}
29371 	} else {
29372 		if (UNEXPECTED(ce->constructor == NULL)) {
29373 			zend_throw_error(NULL, "Cannot call constructor");
29374 			HANDLE_EXCEPTION();
29375 		}
29376 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
29377 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
29378 			HANDLE_EXCEPTION();
29379 		}
29380 		fbc = ce->constructor;
29381 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
29382 			init_func_run_time_cache(&fbc->op_array);
29383 		}
29384 	}
29385 
29386 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
29387 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
29388 			ce = (zend_class_entry*)Z_OBJ(EX(This));
29389 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
29390 		} else {
29391 			zend_non_static_method_call(fbc);
29392 			HANDLE_EXCEPTION();
29393 		}
29394 	} else {
29395 		/* previous opcode is ZEND_FETCH_CLASS */
29396 		if (IS_VAR == IS_UNUSED
29397 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
29398 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
29399 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
29400 				ce = Z_OBJCE(EX(This));
29401 			} else {
29402 				ce = Z_CE(EX(This));
29403 			}
29404 		}
29405 		call_info = ZEND_CALL_NESTED_FUNCTION;
29406 	}
29407 
29408 	call = zend_vm_stack_push_call_frame(call_info,
29409 		fbc, opline->extended_value, ce);
29410 	call->prev_execute_data = EX(call);
29411 	EX(call) = call;
29412 
29413 	ZEND_VM_NEXT_OPCODE();
29414 }
29415 
ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29416 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29417 {
29418 	if (IS_VAR == IS_UNUSED) {
29419 		SAVE_OPLINE();
29420 		zend_verify_missing_return_type(EX(func));
29421 		HANDLE_EXCEPTION();
29422 	} else {
29423 /* prevents "undefined variable opline" errors */
29424 #if 0 || (IS_VAR != IS_UNUSED)
29425 		USE_OPLINE
29426 		zval *retval_ref, *retval_ptr;
29427 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
29428 		retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29429 
29430 		if (IS_VAR == IS_CONST) {
29431 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
29432 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
29433 		} else if (IS_VAR == IS_VAR) {
29434 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
29435 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
29436 			}
29437 			ZVAL_DEREF(retval_ptr);
29438 		} else if (IS_VAR == IS_CV) {
29439 			ZVAL_DEREF(retval_ptr);
29440 		}
29441 
29442 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
29443 			ZEND_VM_NEXT_OPCODE();
29444 		}
29445 
29446 		if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
29447 			SAVE_OPLINE();
29448 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
29449 			if (UNEXPECTED(EG(exception))) {
29450 				HANDLE_EXCEPTION();
29451 			}
29452 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
29453 				ZEND_VM_NEXT_OPCODE();
29454 			}
29455 		}
29456 
29457 		zend_reference *ref = NULL;
29458 		void *cache_slot = CACHE_ADDR(opline->op2.num);
29459 		if (UNEXPECTED(retval_ref != retval_ptr)) {
29460 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
29461 				ref = Z_REF_P(retval_ref);
29462 			} else {
29463 				/* A cast might happen - unwrap the reference if this is a by-value return */
29464 				if (Z_REFCOUNT_P(retval_ref) == 1) {
29465 					ZVAL_UNREF(retval_ref);
29466 				} else {
29467 					Z_DELREF_P(retval_ref);
29468 					ZVAL_COPY(retval_ref, retval_ptr);
29469 				}
29470 				retval_ptr = retval_ref;
29471 			}
29472 		}
29473 
29474 		SAVE_OPLINE();
29475 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
29476 			zend_verify_return_error(EX(func), retval_ptr);
29477 			HANDLE_EXCEPTION();
29478 		}
29479 		ZEND_VM_NEXT_OPCODE();
29480 #endif
29481 	}
29482 }
29483 
ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29484 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29485 {
29486 	USE_OPLINE
29487 	zval *varptr, *arg;
29488 
29489 	if (IS_UNUSED == IS_CONST) {
29490 		SAVE_OPLINE();
29491 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29492 		uint32_t arg_num;
29493 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29494 		if (UNEXPECTED(!arg)) {
29495 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29496 			HANDLE_EXCEPTION();
29497 		}
29498 	} else {
29499 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29500 	}
29501 
29502 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29503 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
29504 		SAVE_OPLINE();
29505 		ZVAL_UNDEFINED_OP1();
29506 		ZVAL_NULL(arg);
29507 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29508 	}
29509 
29510 	if (IS_VAR == IS_CV) {
29511 		ZVAL_COPY_DEREF(arg, varptr);
29512 	} else /* if (IS_VAR == IS_VAR) */ {
29513 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
29514 			zend_refcounted *ref = Z_COUNTED_P(varptr);
29515 
29516 			varptr = Z_REFVAL_P(varptr);
29517 			ZVAL_COPY_VALUE(arg, varptr);
29518 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29519 				efree_size(ref, sizeof(zend_reference));
29520 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
29521 				Z_ADDREF_P(arg);
29522 			}
29523 		} else {
29524 			ZVAL_COPY_VALUE(arg, varptr);
29525 		}
29526 	}
29527 
29528 	ZEND_VM_NEXT_OPCODE();
29529 }
29530 
ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29531 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29532 {
29533 	USE_OPLINE
29534 	zval *varptr, *arg;
29535 
29536 	if (IS_UNUSED == IS_CONST) {
29537 		SAVE_OPLINE();
29538 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29539 		uint32_t arg_num;
29540 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29541 		if (UNEXPECTED(!arg)) {
29542 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29543 			HANDLE_EXCEPTION();
29544 		}
29545 	} else {
29546 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29547 	}
29548 
29549 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29550 	ZVAL_COPY_VALUE(arg, varptr);
29551 
29552 	if (EXPECTED(Z_ISREF_P(varptr))) {
29553 		ZEND_VM_NEXT_OPCODE();
29554 	}
29555 
29556 	SAVE_OPLINE();
29557 	ZVAL_NEW_REF(arg, arg);
29558 	zend_error(E_NOTICE, "Only variables should be passed by reference");
29559 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29560 }
29561 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29562 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29563 {
29564 	USE_OPLINE
29565 	zval *varptr, *arg;
29566 	uint32_t arg_num;
29567 
29568 	if (IS_UNUSED == IS_CONST) {
29569 		SAVE_OPLINE();
29570 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29571 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29572 		if (UNEXPECTED(!arg)) {
29573 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29574 			HANDLE_EXCEPTION();
29575 		}
29576 	} else {
29577 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29578 		arg_num = opline->op2.num;
29579 	}
29580 
29581 	if (EXPECTED(0)) {
29582 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29583 			goto send_var;
29584 		}
29585 
29586 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29587 		ZVAL_COPY_VALUE(arg, varptr);
29588 
29589 		if (EXPECTED(Z_ISREF_P(varptr) ||
29590 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
29591 			ZEND_VM_NEXT_OPCODE();
29592 		}
29593 	} else {
29594 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29595 			goto send_var;
29596 		}
29597 
29598 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29599 		ZVAL_COPY_VALUE(arg, varptr);
29600 
29601 		if (EXPECTED(Z_ISREF_P(varptr) ||
29602 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
29603 			ZEND_VM_NEXT_OPCODE();
29604 		}
29605 	}
29606 
29607 	SAVE_OPLINE();
29608 	ZVAL_NEW_REF(arg, arg);
29609 	zend_error(E_NOTICE, "Only variables should be passed by reference");
29610 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29611 
29612 send_var:
29613 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29614 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
29615 		zend_refcounted *ref = Z_COUNTED_P(varptr);
29616 
29617 		varptr = Z_REFVAL_P(varptr);
29618 		ZVAL_COPY_VALUE(arg, varptr);
29619 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29620 			efree_size(ref, sizeof(zend_reference));
29621 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
29622 			Z_ADDREF_P(arg);
29623 		}
29624 	} else {
29625 		ZVAL_COPY_VALUE(arg, varptr);
29626 	}
29627 	ZEND_VM_NEXT_OPCODE();
29628 }
29629 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29630 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29631 {
29632 	USE_OPLINE
29633 	zval *varptr, *arg;
29634 	uint32_t arg_num;
29635 
29636 	if (IS_UNUSED == IS_CONST) {
29637 		SAVE_OPLINE();
29638 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29639 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29640 		if (UNEXPECTED(!arg)) {
29641 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29642 			HANDLE_EXCEPTION();
29643 		}
29644 	} else {
29645 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29646 		arg_num = opline->op2.num;
29647 	}
29648 
29649 	if (EXPECTED(1)) {
29650 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29651 			goto send_var;
29652 		}
29653 
29654 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29655 		ZVAL_COPY_VALUE(arg, varptr);
29656 
29657 		if (EXPECTED(Z_ISREF_P(varptr) ||
29658 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
29659 			ZEND_VM_NEXT_OPCODE();
29660 		}
29661 	} else {
29662 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29663 			goto send_var;
29664 		}
29665 
29666 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29667 		ZVAL_COPY_VALUE(arg, varptr);
29668 
29669 		if (EXPECTED(Z_ISREF_P(varptr) ||
29670 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
29671 			ZEND_VM_NEXT_OPCODE();
29672 		}
29673 	}
29674 
29675 	SAVE_OPLINE();
29676 	ZVAL_NEW_REF(arg, arg);
29677 	zend_error(E_NOTICE, "Only variables should be passed by reference");
29678 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29679 
29680 send_var:
29681 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29682 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
29683 		zend_refcounted *ref = Z_COUNTED_P(varptr);
29684 
29685 		varptr = Z_REFVAL_P(varptr);
29686 		ZVAL_COPY_VALUE(arg, varptr);
29687 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29688 			efree_size(ref, sizeof(zend_reference));
29689 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
29690 			Z_ADDREF_P(arg);
29691 		}
29692 	} else {
29693 		ZVAL_COPY_VALUE(arg, varptr);
29694 	}
29695 	ZEND_VM_NEXT_OPCODE();
29696 }
29697 
ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29698 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29699 {
29700 	USE_OPLINE
29701 	zval *varptr, *arg;
29702 
29703 	SAVE_OPLINE();
29704 	if (IS_UNUSED == IS_CONST) {
29705 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29706 		uint32_t arg_num;
29707 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29708 		if (UNEXPECTED(!arg)) {
29709 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29710 			HANDLE_EXCEPTION();
29711 		}
29712 	} else {
29713 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29714 	}
29715 
29716 	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29717 	if (Z_ISREF_P(varptr)) {
29718 		Z_ADDREF_P(varptr);
29719 	} else {
29720 		ZVAL_MAKE_REF_EX(varptr, 2);
29721 	}
29722 	ZVAL_REF(arg, Z_REF_P(varptr));
29723 
29724 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29725 	ZEND_VM_NEXT_OPCODE();
29726 }
29727 
ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29728 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29729 {
29730 	USE_OPLINE
29731 	zval *varptr, *arg;
29732 	uint32_t arg_num;
29733 
29734 	if (IS_UNUSED == IS_CONST) {
29735 		SAVE_OPLINE();
29736 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29737 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29738 		if (UNEXPECTED(!arg)) {
29739 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29740 			HANDLE_EXCEPTION();
29741 		}
29742 	} else {
29743 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29744 		arg_num = opline->op2.num;
29745 	}
29746 
29747 	if (EXPECTED(0)) {
29748 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29749 			goto send_var_by_ref;
29750 		}
29751 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29752 send_var_by_ref:
29753 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29754 		if (Z_ISREF_P(varptr)) {
29755 			Z_ADDREF_P(varptr);
29756 		} else {
29757 			ZVAL_MAKE_REF_EX(varptr, 2);
29758 		}
29759 		ZVAL_REF(arg, Z_REF_P(varptr));
29760 
29761 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29762 		ZEND_VM_NEXT_OPCODE();
29763 	}
29764 
29765 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29766 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
29767 		SAVE_OPLINE();
29768 		ZVAL_UNDEFINED_OP1();
29769 		ZVAL_NULL(arg);
29770 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29771 	}
29772 
29773 	if (IS_VAR == IS_CV) {
29774 		ZVAL_COPY_DEREF(arg, varptr);
29775 	} else /* if (IS_VAR == IS_VAR) */ {
29776 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
29777 			zend_refcounted *ref = Z_COUNTED_P(varptr);
29778 
29779 			varptr = Z_REFVAL_P(varptr);
29780 			ZVAL_COPY_VALUE(arg, varptr);
29781 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29782 				efree_size(ref, sizeof(zend_reference));
29783 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
29784 				Z_ADDREF_P(arg);
29785 			}
29786 		} else {
29787 			ZVAL_COPY_VALUE(arg, varptr);
29788 		}
29789 	}
29790 
29791 	ZEND_VM_NEXT_OPCODE();
29792 }
29793 
ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29794 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29795 {
29796 	USE_OPLINE
29797 	zval *varptr, *arg;
29798 	uint32_t arg_num;
29799 
29800 	if (IS_UNUSED == IS_CONST) {
29801 		SAVE_OPLINE();
29802 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29803 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29804 		if (UNEXPECTED(!arg)) {
29805 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29806 			HANDLE_EXCEPTION();
29807 		}
29808 	} else {
29809 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29810 		arg_num = opline->op2.num;
29811 	}
29812 
29813 	if (EXPECTED(1)) {
29814 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29815 			goto send_var_by_ref;
29816 		}
29817 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29818 send_var_by_ref:
29819 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29820 		if (Z_ISREF_P(varptr)) {
29821 			Z_ADDREF_P(varptr);
29822 		} else {
29823 			ZVAL_MAKE_REF_EX(varptr, 2);
29824 		}
29825 		ZVAL_REF(arg, Z_REF_P(varptr));
29826 
29827 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29828 		ZEND_VM_NEXT_OPCODE();
29829 	}
29830 
29831 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29832 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
29833 		SAVE_OPLINE();
29834 		ZVAL_UNDEFINED_OP1();
29835 		ZVAL_NULL(arg);
29836 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29837 	}
29838 
29839 	if (IS_VAR == IS_CV) {
29840 		ZVAL_COPY_DEREF(arg, varptr);
29841 	} else /* if (IS_VAR == IS_VAR) */ {
29842 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
29843 			zend_refcounted *ref = Z_COUNTED_P(varptr);
29844 
29845 			varptr = Z_REFVAL_P(varptr);
29846 			ZVAL_COPY_VALUE(arg, varptr);
29847 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29848 				efree_size(ref, sizeof(zend_reference));
29849 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
29850 				Z_ADDREF_P(arg);
29851 			}
29852 		} else {
29853 			ZVAL_COPY_VALUE(arg, varptr);
29854 		}
29855 	}
29856 
29857 	ZEND_VM_NEXT_OPCODE();
29858 }
29859 
ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29860 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29861 {
29862 	USE_OPLINE
29863 	zval *varptr, *arg;
29864 
29865 	if (IS_UNUSED == IS_CONST) {
29866 		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
29867 		SAVE_OPLINE();
29868 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29869 		uint32_t arg_num;
29870 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29871 		if (UNEXPECTED(!arg)) {
29872 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29873 			HANDLE_EXCEPTION();
29874 		}
29875 	} else {
29876 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29877 	}
29878 
29879 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
29880 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29881 		if (Z_ISREF_P(varptr)) {
29882 			Z_ADDREF_P(varptr);
29883 		} else {
29884 			ZVAL_MAKE_REF_EX(varptr, 2);
29885 		}
29886 		ZVAL_REF(arg, Z_REF_P(varptr));
29887 
29888 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29889 		ZEND_VM_NEXT_OPCODE();
29890 	}
29891 
29892 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29893 
29894 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
29895 		zend_refcounted *ref = Z_COUNTED_P(varptr);
29896 
29897 		varptr = Z_REFVAL_P(varptr);
29898 		ZVAL_COPY_VALUE(arg, varptr);
29899 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29900 			efree_size(ref, sizeof(zend_reference));
29901 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
29902 			Z_ADDREF_P(arg);
29903 		}
29904 	} else {
29905 		ZVAL_COPY_VALUE(arg, varptr);
29906 	}
29907 
29908 	ZEND_VM_NEXT_OPCODE();
29909 }
29910 
ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29911 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29912 {
29913 	USE_OPLINE
29914 	zval *result;
29915 	zend_function *constructor;
29916 	zend_class_entry *ce;
29917 	zend_execute_data *call;
29918 
29919 	SAVE_OPLINE();
29920 	if (IS_VAR == IS_CONST) {
29921 		ce = CACHED_PTR(opline->op2.num);
29922 		if (UNEXPECTED(ce == NULL)) {
29923 			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);
29924 			if (UNEXPECTED(ce == NULL)) {
29925 				ZVAL_UNDEF(EX_VAR(opline->result.var));
29926 				HANDLE_EXCEPTION();
29927 			}
29928 			CACHE_PTR(opline->op2.num, ce);
29929 		}
29930 	} else if (IS_VAR == IS_UNUSED) {
29931 		ce = zend_fetch_class(NULL, opline->op1.num);
29932 		if (UNEXPECTED(ce == NULL)) {
29933 			ZVAL_UNDEF(EX_VAR(opline->result.var));
29934 			HANDLE_EXCEPTION();
29935 		}
29936 	} else {
29937 		ce = Z_CE_P(EX_VAR(opline->op1.var));
29938 	}
29939 
29940 	result = EX_VAR(opline->result.var);
29941 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
29942 		ZVAL_UNDEF(result);
29943 		HANDLE_EXCEPTION();
29944 	}
29945 
29946 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
29947 	if (constructor == NULL) {
29948 		if (UNEXPECTED(EG(exception))) {
29949 			HANDLE_EXCEPTION();
29950 		}
29951 
29952 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
29953 		 * opcode is DO_FCALL in case EXT instructions are used. */
29954 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
29955 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
29956 		}
29957 
29958 		/* Perform a dummy function call */
29959 		call = zend_vm_stack_push_call_frame(
29960 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
29961 			opline->extended_value, NULL);
29962 	} else {
29963 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
29964 			init_func_run_time_cache(&constructor->op_array);
29965 		}
29966 		/* We are not handling overloaded classes right now */
29967 		call = zend_vm_stack_push_call_frame(
29968 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
29969 			constructor,
29970 			opline->extended_value,
29971 			Z_OBJ_P(result));
29972 		Z_ADDREF_P(result);
29973 	}
29974 
29975 	call->prev_execute_data = EX(call);
29976 	EX(call) = call;
29977 	ZEND_VM_NEXT_OPCODE();
29978 }
29979 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29980 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29981 {
29982 	USE_OPLINE
29983 	zval *expr_ptr, new_expr;
29984 
29985 	SAVE_OPLINE();
29986 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
29987 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
29988 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29989 		if (Z_ISREF_P(expr_ptr)) {
29990 			Z_ADDREF_P(expr_ptr);
29991 		} else {
29992 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
29993 		}
29994 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29995 	} else {
29996 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29997 		if (IS_VAR == IS_TMP_VAR) {
29998 			/* pass */
29999 		} else if (IS_VAR == IS_CONST) {
30000 			Z_TRY_ADDREF_P(expr_ptr);
30001 		} else if (IS_VAR == IS_CV) {
30002 			ZVAL_DEREF(expr_ptr);
30003 			Z_TRY_ADDREF_P(expr_ptr);
30004 		} else /* if (IS_VAR == IS_VAR) */ {
30005 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
30006 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
30007 
30008 				expr_ptr = Z_REFVAL_P(expr_ptr);
30009 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
30010 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
30011 					expr_ptr = &new_expr;
30012 					efree_size(ref, sizeof(zend_reference));
30013 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
30014 					Z_ADDREF_P(expr_ptr);
30015 				}
30016 			}
30017 		}
30018 	}
30019 
30020 	if (IS_UNUSED != IS_UNUSED) {
30021 		zval *offset = NULL;
30022 		zend_string *str;
30023 		zend_ulong hval;
30024 
30025 add_again:
30026 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
30027 			str = Z_STR_P(offset);
30028 			if (IS_UNUSED != IS_CONST) {
30029 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
30030 					goto num_index;
30031 				}
30032 			}
30033 str_index:
30034 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
30035 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
30036 			hval = Z_LVAL_P(offset);
30037 num_index:
30038 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
30039 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
30040 			offset = Z_REFVAL_P(offset);
30041 			goto add_again;
30042 		} else if (Z_TYPE_P(offset) == IS_NULL) {
30043 			str = ZSTR_EMPTY_ALLOC();
30044 			goto str_index;
30045 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
30046 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
30047 			goto num_index;
30048 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
30049 			hval = 0;
30050 			goto num_index;
30051 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
30052 			hval = 1;
30053 			goto num_index;
30054 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
30055 			zend_use_resource_as_offset(offset);
30056 			hval = Z_RES_HANDLE_P(offset);
30057 			goto num_index;
30058 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
30059 			ZVAL_UNDEFINED_OP2();
30060 			str = ZSTR_EMPTY_ALLOC();
30061 			goto str_index;
30062 		} else {
30063 			zend_illegal_array_offset_access(offset);
30064 			zval_ptr_dtor_nogc(expr_ptr);
30065 		}
30066 
30067 	} else {
30068 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
30069 			zend_cannot_add_element();
30070 			zval_ptr_dtor_nogc(expr_ptr);
30071 		}
30072 	}
30073 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30074 }
30075 
ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30077 {
30078 	zval *array;
30079 	uint32_t size;
30080 	USE_OPLINE
30081 
30082 	array = EX_VAR(opline->result.var);
30083 	if (IS_VAR != IS_UNUSED) {
30084 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
30085 		ZVAL_ARR(array, zend_new_array(size));
30086 		/* Explicitly initialize array as not-packed if flag is set */
30087 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
30088 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
30089 		}
30090 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30091 	} else {
30092 		ZVAL_ARR(array, zend_new_array(0));
30093 		ZEND_VM_NEXT_OPCODE();
30094 	}
30095 }
30096 
ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30097 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30098 {
30099 	USE_OPLINE
30100 	zval *var_ptr;
30101 
30102 	var_ptr = EX_VAR(opline->op1.var);
30103 	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
30104 		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
30105 			ZVAL_UNREF(var_ptr);
30106 		}
30107 	}
30108 
30109 	ZEND_VM_NEXT_OPCODE();
30110 }
30111 
ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30112 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30113 {
30114 	USE_OPLINE
30115 
30116 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
30117 
30118 	SAVE_OPLINE();
30119 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
30120 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30121 	}
30122 
30123 	/* Destroy the previously yielded value */
30124 	zval_ptr_dtor(&generator->value);
30125 
30126 	/* Destroy the previously yielded key */
30127 	zval_ptr_dtor(&generator->key);
30128 
30129 	/* Set the new yielded value */
30130 	if (IS_VAR != IS_UNUSED) {
30131 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
30132 			/* Constants and temporary variables aren't yieldable by reference,
30133 			 * but we still allow them with a notice. */
30134 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
30135 				zval *value;
30136 
30137 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30138 
30139 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30140 				ZVAL_COPY_VALUE(&generator->value, value);
30141 				if (IS_VAR == IS_CONST) {
30142 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30143 						Z_ADDREF(generator->value);
30144 					}
30145 				}
30146 			} else {
30147 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30148 
30149 				/* If a function call result is yielded and the function did
30150 				 * not return by reference we throw a notice. */
30151 				do {
30152 					if (IS_VAR == IS_VAR) {
30153 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
30154 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
30155 						 && !Z_ISREF_P(value_ptr)) {
30156 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30157 							ZVAL_COPY(&generator->value, value_ptr);
30158 							break;
30159 						}
30160 					}
30161 					if (Z_ISREF_P(value_ptr)) {
30162 						Z_ADDREF_P(value_ptr);
30163 					} else {
30164 						ZVAL_MAKE_REF_EX(value_ptr, 2);
30165 					}
30166 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
30167 				} while (0);
30168 
30169 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30170 			}
30171 		} else {
30172 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30173 
30174 			/* Consts, temporary variables and references need copying */
30175 			if (IS_VAR == IS_CONST) {
30176 				ZVAL_COPY_VALUE(&generator->value, value);
30177 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30178 					Z_ADDREF(generator->value);
30179 				}
30180 			} else if (IS_VAR == IS_TMP_VAR) {
30181 				ZVAL_COPY_VALUE(&generator->value, value);
30182 			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
30183 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
30184 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30185 			} else {
30186 				ZVAL_COPY_VALUE(&generator->value, value);
30187 				if (IS_VAR == IS_CV) {
30188 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
30189 				}
30190 			}
30191 		}
30192 	} else {
30193 		/* If no value was specified yield null */
30194 		ZVAL_NULL(&generator->value);
30195 	}
30196 
30197 	/* Set the new yielded key */
30198 	if (IS_UNUSED != IS_UNUSED) {
30199 		zval *key = NULL;
30200 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
30201 			key = Z_REFVAL_P(key);
30202 		}
30203 		ZVAL_COPY(&generator->key, key);
30204 
30205 		if (Z_TYPE(generator->key) == IS_LONG
30206 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
30207 		) {
30208 			generator->largest_used_integer_key = Z_LVAL(generator->key);
30209 		}
30210 	} else {
30211 		/* If no key was specified we use auto-increment keys */
30212 		generator->largest_used_integer_key++;
30213 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
30214 	}
30215 
30216 	if (RETURN_VALUE_USED(opline)) {
30217 		/* If the return value of yield is used set the send
30218 		 * target and initialize it to NULL */
30219 		generator->send_target = EX_VAR(opline->result.var);
30220 		ZVAL_NULL(generator->send_target);
30221 	} else {
30222 		generator->send_target = NULL;
30223 	}
30224 
30225 	/* We increment to the next op, so we are at the correct position when the
30226 	 * generator is resumed. */
30227 	ZEND_VM_INC_OPCODE();
30228 
30229 	/* The GOTO VM uses a local opline variable. We need to set the opline
30230 	 * variable in execute_data so we don't resume at an old position. */
30231 	SAVE_OPLINE();
30232 
30233 	ZEND_VM_RETURN();
30234 }
30235 
ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30236 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30237 {
30238 	USE_OPLINE
30239 	zval *op1 = EX_VAR(opline->op1.var);
30240 
30241 	if (IS_VAR == IS_CV) {
30242 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
30243 			ZVAL_NEW_EMPTY_REF(op1);
30244 			Z_SET_REFCOUNT_P(op1, 2);
30245 			ZVAL_NULL(Z_REFVAL_P(op1));
30246 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
30247 		} else {
30248 			if (Z_ISREF_P(op1)) {
30249 				Z_ADDREF_P(op1);
30250 			} else {
30251 				ZVAL_MAKE_REF_EX(op1, 2);
30252 			}
30253 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
30254 		}
30255 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
30256 		op1 = Z_INDIRECT_P(op1);
30257 		if (EXPECTED(!Z_ISREF_P(op1))) {
30258 			ZVAL_MAKE_REF_EX(op1, 2);
30259 		} else {
30260 			GC_ADDREF(Z_REF_P(op1));
30261 		}
30262 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
30263 	} else {
30264 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
30265 	}
30266 	ZEND_VM_NEXT_OPCODE();
30267 }
30268 
ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30269 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30270 {
30271 	USE_OPLINE
30272 	zval *op1;
30273 	zend_string *type;
30274 
30275 	SAVE_OPLINE();
30276 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
30277 	type = zend_zval_get_legacy_type(op1);
30278 	if (EXPECTED(type)) {
30279 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
30280 	} else {
30281 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
30282 	}
30283 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30284 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30285 }
30286 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30287 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30288 {
30289 	USE_OPLINE
30290 	zval *varptr, *arg;
30291 	uint32_t arg_num = opline->op2.num;
30292 
30293 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
30294 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30295 	}
30296 
30297 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30298 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
30299 
30300 	if (IS_VAR == IS_CV) {
30301 		ZVAL_COPY(arg, varptr);
30302 	} else /* if (IS_VAR == IS_VAR) */ {
30303 		ZVAL_COPY_VALUE(arg, varptr);
30304 	}
30305 
30306 	ZEND_VM_NEXT_OPCODE();
30307 }
30308 
ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30309 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30310 {
30311 	USE_OPLINE
30312 	zval *op1, *op2;
30313 	bool result;
30314 
30315 	SAVE_OPLINE();
30316 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
30317 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30318 	result = fast_is_identical_function(op1, op2);
30319 
30320 	ZEND_VM_SMART_BRANCH(result, 1);
30321 }
30322 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30323 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30324 {
30325 	USE_OPLINE
30326 	zval *object;
30327 	zval *property;
30328 	zval *value;
30329 	zval *zptr;
30330 	void **cache_slot;
30331 	zend_property_info *prop_info;
30332 	zend_object *zobj;
30333 	zend_string *name, *tmp_name;
30334 
30335 	SAVE_OPLINE();
30336 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30337 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30338 
30339 	do {
30340 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
30341 
30342 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30343 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30344 				object = Z_REFVAL_P(object);
30345 				goto assign_op_object;
30346 			}
30347 			if (IS_VAR == IS_CV
30348 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30349 				ZVAL_UNDEFINED_OP1();
30350 			}
30351 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
30352 			break;
30353 		}
30354 
30355 assign_op_object:
30356 		/* here we are sure we are dealing with an object */
30357 		zobj = Z_OBJ_P(object);
30358 		if (IS_CV == IS_CONST) {
30359 			name = Z_STR_P(property);
30360 		} else {
30361 			name = zval_try_get_tmp_string(property, &tmp_name);
30362 			if (UNEXPECTED(!name)) {
30363 				UNDEF_RESULT();
30364 				break;
30365 			}
30366 		}
30367 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
30368 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
30369 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30370 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30371 					ZVAL_NULL(EX_VAR(opline->result.var));
30372 				}
30373 			} else {
30374 				zval *orig_zptr = zptr;
30375 				zend_reference *ref;
30376 
30377 				do {
30378 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
30379 						ref = Z_REF_P(zptr);
30380 						zptr = Z_REFVAL_P(zptr);
30381 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
30382 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
30383 							break;
30384 						}
30385 					}
30386 
30387 					if (IS_CV == IS_CONST) {
30388 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
30389 					} else {
30390 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
30391 					}
30392 					if (prop_info) {
30393 						/* special case for typed properties */
30394 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
30395 					} else {
30396 						zend_binary_op(zptr, zptr, value OPLINE_CC);
30397 					}
30398 				} while (0);
30399 
30400 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30401 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
30402 				}
30403 			}
30404 		} else {
30405 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
30406 		}
30407 		if (IS_CV != IS_CONST) {
30408 			zend_tmp_string_release(tmp_name);
30409 		}
30410 	} while (0);
30411 
30412 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
30413 
30414 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30415 	/* assign_obj has two opcodes! */
30416 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30417 }
30418 
30419 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30420 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30421 {
30422 	USE_OPLINE
30423 	zval *var_ptr;
30424 	zval *value, *container, *dim;
30425 	HashTable *ht;
30426 
30427 	SAVE_OPLINE();
30428 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30429 
30430 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
30431 assign_dim_op_array:
30432 		SEPARATE_ARRAY(container);
30433 		ht = Z_ARRVAL_P(container);
30434 assign_dim_op_new_array:
30435 		dim = EX_VAR(opline->op2.var);
30436 		if (IS_CV == IS_UNUSED) {
30437 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
30438 			if (UNEXPECTED(!var_ptr)) {
30439 				zend_cannot_add_element();
30440 				goto assign_dim_op_ret_null;
30441 			}
30442 		} else {
30443 			if (IS_CV == IS_CONST) {
30444 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
30445 			} else {
30446 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
30447 			}
30448 			if (UNEXPECTED(!var_ptr)) {
30449 				goto assign_dim_op_ret_null;
30450 			}
30451 		}
30452 
30453 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
30454 
30455 		do {
30456 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
30457 				zend_reference *ref = Z_REF_P(var_ptr);
30458 				var_ptr = Z_REFVAL_P(var_ptr);
30459 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
30460 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
30461 					break;
30462 				}
30463 			}
30464 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
30465 		} while (0);
30466 
30467 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30468 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
30469 		}
30470 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
30471 	} else {
30472 		if (EXPECTED(Z_ISREF_P(container))) {
30473 			container = Z_REFVAL_P(container);
30474 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
30475 				goto assign_dim_op_array;
30476 			}
30477 		}
30478 
30479 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
30480 			zend_object *obj = Z_OBJ_P(container);
30481 
30482 			dim = EX_VAR(opline->op2.var);
30483 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30484 				dim++;
30485 			}
30486 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
30487 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
30488 			uint8_t old_type;
30489 
30490 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
30491 				ZVAL_UNDEFINED_OP1();
30492 			}
30493 			ht = zend_new_array(8);
30494 			old_type = Z_TYPE_P(container);
30495 			ZVAL_ARR(container, ht);
30496 			if (UNEXPECTED(old_type == IS_FALSE)) {
30497 				GC_ADDREF(ht);
30498 				zend_false_to_array_deprecated();
30499 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
30500 					zend_array_destroy(ht);
30501 					goto assign_dim_op_ret_null;
30502 				}
30503 			}
30504 			goto assign_dim_op_new_array;
30505 		} else {
30506 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30507 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
30508 assign_dim_op_ret_null:
30509 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
30510 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30511 				ZVAL_NULL(EX_VAR(opline->result.var));
30512 			}
30513 		}
30514 	}
30515 
30516 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30517 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30518 }
30519 
ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30520 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30521 {
30522 	USE_OPLINE
30523 	zval *var_ptr;
30524 	zval *value;
30525 
30526 	SAVE_OPLINE();
30527 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30528 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30529 
30530 	do {
30531 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
30532 			zend_reference *ref = Z_REF_P(var_ptr);
30533 			var_ptr = Z_REFVAL_P(var_ptr);
30534 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
30535 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
30536 				break;
30537 			}
30538 		}
30539 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
30540 	} while (0);
30541 
30542 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30543 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
30544 	}
30545 
30546 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30547 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30548 }
30549 
ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30550 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30551 {
30552 	USE_OPLINE
30553 	zval *object;
30554 	zval *property;
30555 	zval *zptr;
30556 	void **cache_slot;
30557 	zend_property_info *prop_info;
30558 	zend_object *zobj;
30559 	zend_string *name, *tmp_name;
30560 
30561 	SAVE_OPLINE();
30562 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30563 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30564 
30565 	do {
30566 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30567 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30568 				object = Z_REFVAL_P(object);
30569 				goto pre_incdec_object;
30570 			}
30571 			if (IS_VAR == IS_CV
30572 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30573 				ZVAL_UNDEFINED_OP1();
30574 			}
30575 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
30576 			break;
30577 		}
30578 
30579 pre_incdec_object:
30580 		/* here we are sure we are dealing with an object */
30581 		zobj = Z_OBJ_P(object);
30582 		if (IS_CV == IS_CONST) {
30583 			name = Z_STR_P(property);
30584 		} else {
30585 			name = zval_try_get_tmp_string(property, &tmp_name);
30586 			if (UNEXPECTED(!name)) {
30587 				UNDEF_RESULT();
30588 				break;
30589 			}
30590 		}
30591 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
30592 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
30593 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30594 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30595 					ZVAL_NULL(EX_VAR(opline->result.var));
30596 				}
30597 			} else {
30598 				if (IS_CV == IS_CONST) {
30599 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
30600 				} else {
30601 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
30602 				}
30603 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
30604 			}
30605 		} else {
30606 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
30607 		}
30608 		if (IS_CV != IS_CONST) {
30609 			zend_tmp_string_release(tmp_name);
30610 		}
30611 	} while (0);
30612 
30613 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30614 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30615 }
30616 
ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30617 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30618 {
30619 	USE_OPLINE
30620 	zval *object;
30621 	zval *property;
30622 	zval *zptr;
30623 	void **cache_slot;
30624 	zend_property_info *prop_info;
30625 	zend_object *zobj;
30626 	zend_string *name, *tmp_name;
30627 
30628 	SAVE_OPLINE();
30629 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30630 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30631 
30632 	do {
30633 		if (IS_VAR != 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_VAR == IS_CV
30639 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30640 				ZVAL_UNDEFINED_OP1();
30641 			}
30642 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
30643 			break;
30644 		}
30645 
30646 post_incdec_object:
30647 		/* here we are sure we are dealing with an object */
30648 		zobj = Z_OBJ_P(object);
30649 		if (IS_CV == IS_CONST) {
30650 			name = Z_STR_P(property);
30651 		} else {
30652 			name = zval_try_get_tmp_string(property, &tmp_name);
30653 			if (UNEXPECTED(!name)) {
30654 				ZVAL_UNDEF(EX_VAR(opline->result.var));
30655 				break;
30656 			}
30657 		}
30658 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
30659 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
30660 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30661 				ZVAL_NULL(EX_VAR(opline->result.var));
30662 			} else {
30663 				if (IS_CV == IS_CONST) {
30664 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
30665 				} else {
30666 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
30667 				}
30668 
30669 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
30670 			}
30671 		} else {
30672 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
30673 		}
30674 		if (IS_CV != IS_CONST) {
30675 			zend_tmp_string_release(tmp_name);
30676 		}
30677 	} while (0);
30678 
30679 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30680 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30681 }
30682 
ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30683 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30684 {
30685 	USE_OPLINE
30686 	zval *container;
30687 
30688 	SAVE_OPLINE();
30689 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30690 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
30691 
30692 	if (IS_VAR == IS_VAR) {
30693 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30694 	}
30695 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30696 }
30697 
ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30698 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30699 {
30700 	USE_OPLINE
30701 	zval *container;
30702 
30703 	SAVE_OPLINE();
30704 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30705 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
30706 
30707 	if (IS_VAR == IS_VAR) {
30708 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30709 	}
30710 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30711 }
30712 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30713 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30714 {
30715 #if 0
30716 	USE_OPLINE
30717 #endif
30718 
30719 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
30720 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
30721 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30722 		}
30723 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30724 	} else {
30725 		if (IS_CV == IS_UNUSED) {
30726 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30727 		}
30728 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30729 	}
30730 }
30731 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30733 {
30734 	USE_OPLINE
30735 	zval *container;
30736 
30737 	SAVE_OPLINE();
30738 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30739 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
30740 
30741 	if (IS_VAR == IS_VAR) {
30742 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30743 	}
30744 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30745 }
30746 
ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30747 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30748 {
30749 	USE_OPLINE
30750 	zval *property, *container, *result;
30751 
30752 	SAVE_OPLINE();
30753 
30754 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30755 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30756 	result = EX_VAR(opline->result.var);
30757 	zend_fetch_property_address(
30758 		result, container, IS_VAR, property, IS_CV,
30759 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
30760 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
30761 
30762 	if (IS_VAR == IS_VAR) {
30763 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30764 	}
30765 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30766 }
30767 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30768 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30769 {
30770 	USE_OPLINE
30771 	zval *property, *container, *result;
30772 
30773 	SAVE_OPLINE();
30774 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30775 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30776 	result = EX_VAR(opline->result.var);
30777 	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 OPLINE_CC EXECUTE_DATA_CC);
30778 
30779 	if (IS_VAR == IS_VAR) {
30780 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30781 	}
30782 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30783 }
30784 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30786 {
30787 #if 0
30788 	USE_OPLINE
30789 #endif
30790 
30791 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
30792 		/* Behave like FETCH_OBJ_W */
30793 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
30794 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30795 		}
30796 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30797 	} else {
30798 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30799 	}
30800 }
30801 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30803 {
30804 	USE_OPLINE
30805 	zval *container, *property, *result;
30806 
30807 	SAVE_OPLINE();
30808 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30809 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30810 	result = EX_VAR(opline->result.var);
30811 	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 OPLINE_CC EXECUTE_DATA_CC);
30812 
30813 	if (IS_VAR == IS_VAR) {
30814 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30815 	}
30816 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30817 }
30818 
ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30819 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30820 {
30821 	USE_OPLINE
30822 	zval *container, *dim;
30823 
30824 	SAVE_OPLINE();
30825 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30826 	dim = EX_VAR(opline->op2.var);
30827 
30828 	if (IS_VAR == IS_VAR
30829 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
30830 		&& UNEXPECTED(!Z_ISREF_P(container))
30831 	) {
30832 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
30833 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
30834 	} else {
30835 		zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
30836 	}
30837 
30838 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30839 }
30840 
ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30841 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30842 {
30843 	USE_OPLINE
30844 	zval *object, *value, tmp;
30845 	zend_object *zobj;
30846 	zend_string *name, *tmp_name;
30847 	zend_refcounted *garbage = NULL;
30848 
30849 	SAVE_OPLINE();
30850 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30851 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
30852 
30853 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30854 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30855 			object = Z_REFVAL_P(object);
30856 			goto assign_object;
30857 		}
30858 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
30859 		value = &EG(uninitialized_zval);
30860 		goto free_and_exit_assign_obj;
30861 	}
30862 
30863 assign_object:
30864 	zobj = Z_OBJ_P(object);
30865 	if (IS_CV == IS_CONST) {
30866 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
30867 			void **cache_slot = CACHE_ADDR(opline->extended_value);
30868 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
30869 			zval *property_val;
30870 
30871 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
30872 				property_val = OBJ_PROP(zobj, prop_offset);
30873 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
30874 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
30875 
30876 					if (prop_info != NULL) {
30877 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
30878 						goto free_and_exit_assign_obj;
30879 					} else {
30880 fast_assign_obj:
30881 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
30882 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30883 							ZVAL_COPY(EX_VAR(opline->result.var), value);
30884 						}
30885 						goto exit_assign_obj;
30886 					}
30887 				}
30888 			} else {
30889 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30890 				if (EXPECTED(zobj->properties != NULL)) {
30891 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
30892 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
30893 							GC_DELREF(zobj->properties);
30894 						}
30895 						zobj->properties = zend_array_dup(zobj->properties);
30896 					}
30897 					property_val = zend_hash_find_known_hash(zobj->properties, name);
30898 					if (property_val) {
30899 						goto fast_assign_obj;
30900 					}
30901 				}
30902 
30903 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
30904 					if (EXPECTED(zobj->properties == NULL)) {
30905 						rebuild_object_properties(zobj);
30906 					}
30907 					if (IS_CONST == IS_CONST) {
30908 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
30909 							Z_ADDREF_P(value);
30910 						}
30911 					} else if (IS_CONST != IS_TMP_VAR) {
30912 						if (Z_ISREF_P(value)) {
30913 							if (IS_CONST == IS_VAR) {
30914 								zend_reference *ref = Z_REF_P(value);
30915 								if (GC_DELREF(ref) == 0) {
30916 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
30917 									efree_size(ref, sizeof(zend_reference));
30918 									value = &tmp;
30919 								} else {
30920 									value = Z_REFVAL_P(value);
30921 									Z_TRY_ADDREF_P(value);
30922 								}
30923 							} else {
30924 								value = Z_REFVAL_P(value);
30925 								Z_TRY_ADDREF_P(value);
30926 							}
30927 						} else if (IS_CONST == IS_CV) {
30928 							Z_TRY_ADDREF_P(value);
30929 						}
30930 						}
30931 					zend_hash_add_new(zobj->properties, name, value);
30932 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30933 						ZVAL_COPY(EX_VAR(opline->result.var), value);
30934 					}
30935 					goto exit_assign_obj;
30936 				}
30937 			}
30938 		}
30939 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30940 	} else {
30941 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
30942 		if (UNEXPECTED(!name)) {
30943 
30944 			UNDEF_RESULT();
30945 			goto exit_assign_obj;
30946 		}
30947 	}
30948 
30949 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
30950 		ZVAL_DEREF(value);
30951 	}
30952 
30953 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
30954 
30955 	if (IS_CV != IS_CONST) {
30956 		zend_tmp_string_release(tmp_name);
30957 	}
30958 
30959 free_and_exit_assign_obj:
30960 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
30961 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
30962 	}
30963 
30964 exit_assign_obj:
30965 	if (garbage) {
30966 		GC_DTOR_NO_REF(garbage);
30967 	}
30968 
30969 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30970 	/* assign_obj has two opcodes! */
30971 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30972 }
30973 
30974 /* 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)30975 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30976 {
30977 	USE_OPLINE
30978 	zval *object, *value, tmp;
30979 	zend_object *zobj;
30980 	zend_string *name, *tmp_name;
30981 	zend_refcounted *garbage = NULL;
30982 
30983 	SAVE_OPLINE();
30984 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30985 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30986 
30987 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30988 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30989 			object = Z_REFVAL_P(object);
30990 			goto assign_object;
30991 		}
30992 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
30993 		value = &EG(uninitialized_zval);
30994 		goto free_and_exit_assign_obj;
30995 	}
30996 
30997 assign_object:
30998 	zobj = Z_OBJ_P(object);
30999 	if (IS_CV == IS_CONST) {
31000 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
31001 			void **cache_slot = CACHE_ADDR(opline->extended_value);
31002 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31003 			zval *property_val;
31004 
31005 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31006 				property_val = OBJ_PROP(zobj, prop_offset);
31007 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
31008 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
31009 
31010 					if (prop_info != NULL) {
31011 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
31012 						goto free_and_exit_assign_obj;
31013 					} else {
31014 fast_assign_obj:
31015 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
31016 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31017 							ZVAL_COPY(EX_VAR(opline->result.var), value);
31018 						}
31019 						goto exit_assign_obj;
31020 					}
31021 				}
31022 			} else {
31023 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
31024 				if (EXPECTED(zobj->properties != NULL)) {
31025 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31026 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31027 							GC_DELREF(zobj->properties);
31028 						}
31029 						zobj->properties = zend_array_dup(zobj->properties);
31030 					}
31031 					property_val = zend_hash_find_known_hash(zobj->properties, name);
31032 					if (property_val) {
31033 						goto fast_assign_obj;
31034 					}
31035 				}
31036 
31037 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
31038 					if (EXPECTED(zobj->properties == NULL)) {
31039 						rebuild_object_properties(zobj);
31040 					}
31041 					if (IS_TMP_VAR == IS_CONST) {
31042 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31043 							Z_ADDREF_P(value);
31044 						}
31045 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
31046 						if (Z_ISREF_P(value)) {
31047 							if (IS_TMP_VAR == IS_VAR) {
31048 								zend_reference *ref = Z_REF_P(value);
31049 								if (GC_DELREF(ref) == 0) {
31050 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31051 									efree_size(ref, sizeof(zend_reference));
31052 									value = &tmp;
31053 								} else {
31054 									value = Z_REFVAL_P(value);
31055 									Z_TRY_ADDREF_P(value);
31056 								}
31057 							} else {
31058 								value = Z_REFVAL_P(value);
31059 								Z_TRY_ADDREF_P(value);
31060 							}
31061 						} else if (IS_TMP_VAR == IS_CV) {
31062 							Z_TRY_ADDREF_P(value);
31063 						}
31064 						}
31065 					zend_hash_add_new(zobj->properties, name, value);
31066 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31067 						ZVAL_COPY(EX_VAR(opline->result.var), value);
31068 					}
31069 					goto exit_assign_obj;
31070 				}
31071 			}
31072 		}
31073 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
31074 	} else {
31075 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
31076 		if (UNEXPECTED(!name)) {
31077 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31078 			UNDEF_RESULT();
31079 			goto exit_assign_obj;
31080 		}
31081 	}
31082 
31083 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
31084 		ZVAL_DEREF(value);
31085 	}
31086 
31087 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
31088 
31089 	if (IS_CV != IS_CONST) {
31090 		zend_tmp_string_release(tmp_name);
31091 	}
31092 
31093 free_and_exit_assign_obj:
31094 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
31095 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
31096 	}
31097 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31098 exit_assign_obj:
31099 	if (garbage) {
31100 		GC_DTOR_NO_REF(garbage);
31101 	}
31102 
31103 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31104 	/* assign_obj has two opcodes! */
31105 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31106 }
31107 
31108 /* 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)31109 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31110 {
31111 	USE_OPLINE
31112 	zval *object, *value, tmp;
31113 	zend_object *zobj;
31114 	zend_string *name, *tmp_name;
31115 	zend_refcounted *garbage = NULL;
31116 
31117 	SAVE_OPLINE();
31118 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31119 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31120 
31121 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31122 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31123 			object = Z_REFVAL_P(object);
31124 			goto assign_object;
31125 		}
31126 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
31127 		value = &EG(uninitialized_zval);
31128 		goto free_and_exit_assign_obj;
31129 	}
31130 
31131 assign_object:
31132 	zobj = Z_OBJ_P(object);
31133 	if (IS_CV == IS_CONST) {
31134 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
31135 			void **cache_slot = CACHE_ADDR(opline->extended_value);
31136 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31137 			zval *property_val;
31138 
31139 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31140 				property_val = OBJ_PROP(zobj, prop_offset);
31141 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
31142 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
31143 
31144 					if (prop_info != NULL) {
31145 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
31146 						goto free_and_exit_assign_obj;
31147 					} else {
31148 fast_assign_obj:
31149 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
31150 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31151 							ZVAL_COPY(EX_VAR(opline->result.var), value);
31152 						}
31153 						goto exit_assign_obj;
31154 					}
31155 				}
31156 			} else {
31157 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
31158 				if (EXPECTED(zobj->properties != NULL)) {
31159 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31160 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31161 							GC_DELREF(zobj->properties);
31162 						}
31163 						zobj->properties = zend_array_dup(zobj->properties);
31164 					}
31165 					property_val = zend_hash_find_known_hash(zobj->properties, name);
31166 					if (property_val) {
31167 						goto fast_assign_obj;
31168 					}
31169 				}
31170 
31171 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
31172 					if (EXPECTED(zobj->properties == NULL)) {
31173 						rebuild_object_properties(zobj);
31174 					}
31175 					if (IS_VAR == IS_CONST) {
31176 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31177 							Z_ADDREF_P(value);
31178 						}
31179 					} else if (IS_VAR != IS_TMP_VAR) {
31180 						if (Z_ISREF_P(value)) {
31181 							if (IS_VAR == IS_VAR) {
31182 								zend_reference *ref = Z_REF_P(value);
31183 								if (GC_DELREF(ref) == 0) {
31184 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31185 									efree_size(ref, sizeof(zend_reference));
31186 									value = &tmp;
31187 								} else {
31188 									value = Z_REFVAL_P(value);
31189 									Z_TRY_ADDREF_P(value);
31190 								}
31191 							} else {
31192 								value = Z_REFVAL_P(value);
31193 								Z_TRY_ADDREF_P(value);
31194 							}
31195 						} else if (IS_VAR == IS_CV) {
31196 							Z_TRY_ADDREF_P(value);
31197 						}
31198 						}
31199 					zend_hash_add_new(zobj->properties, name, value);
31200 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31201 						ZVAL_COPY(EX_VAR(opline->result.var), value);
31202 					}
31203 					goto exit_assign_obj;
31204 				}
31205 			}
31206 		}
31207 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
31208 	} else {
31209 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
31210 		if (UNEXPECTED(!name)) {
31211 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31212 			UNDEF_RESULT();
31213 			goto exit_assign_obj;
31214 		}
31215 	}
31216 
31217 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
31218 		ZVAL_DEREF(value);
31219 	}
31220 
31221 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
31222 
31223 	if (IS_CV != IS_CONST) {
31224 		zend_tmp_string_release(tmp_name);
31225 	}
31226 
31227 free_and_exit_assign_obj:
31228 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
31229 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
31230 	}
31231 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31232 exit_assign_obj:
31233 	if (garbage) {
31234 		GC_DTOR_NO_REF(garbage);
31235 	}
31236 
31237 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31238 	/* assign_obj has two opcodes! */
31239 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31240 }
31241 
31242 /* 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)31243 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31244 {
31245 	USE_OPLINE
31246 	zval *object, *value, tmp;
31247 	zend_object *zobj;
31248 	zend_string *name, *tmp_name;
31249 	zend_refcounted *garbage = NULL;
31250 
31251 	SAVE_OPLINE();
31252 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31253 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
31254 
31255 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31256 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31257 			object = Z_REFVAL_P(object);
31258 			goto assign_object;
31259 		}
31260 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
31261 		value = &EG(uninitialized_zval);
31262 		goto free_and_exit_assign_obj;
31263 	}
31264 
31265 assign_object:
31266 	zobj = Z_OBJ_P(object);
31267 	if (IS_CV == IS_CONST) {
31268 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
31269 			void **cache_slot = CACHE_ADDR(opline->extended_value);
31270 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31271 			zval *property_val;
31272 
31273 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31274 				property_val = OBJ_PROP(zobj, prop_offset);
31275 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
31276 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
31277 
31278 					if (prop_info != NULL) {
31279 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
31280 						goto free_and_exit_assign_obj;
31281 					} else {
31282 fast_assign_obj:
31283 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
31284 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31285 							ZVAL_COPY(EX_VAR(opline->result.var), value);
31286 						}
31287 						goto exit_assign_obj;
31288 					}
31289 				}
31290 			} else {
31291 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
31292 				if (EXPECTED(zobj->properties != NULL)) {
31293 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31294 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31295 							GC_DELREF(zobj->properties);
31296 						}
31297 						zobj->properties = zend_array_dup(zobj->properties);
31298 					}
31299 					property_val = zend_hash_find_known_hash(zobj->properties, name);
31300 					if (property_val) {
31301 						goto fast_assign_obj;
31302 					}
31303 				}
31304 
31305 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
31306 					if (EXPECTED(zobj->properties == NULL)) {
31307 						rebuild_object_properties(zobj);
31308 					}
31309 					if (IS_CV == IS_CONST) {
31310 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31311 							Z_ADDREF_P(value);
31312 						}
31313 					} else if (IS_CV != IS_TMP_VAR) {
31314 						if (Z_ISREF_P(value)) {
31315 							if (IS_CV == IS_VAR) {
31316 								zend_reference *ref = Z_REF_P(value);
31317 								if (GC_DELREF(ref) == 0) {
31318 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31319 									efree_size(ref, sizeof(zend_reference));
31320 									value = &tmp;
31321 								} else {
31322 									value = Z_REFVAL_P(value);
31323 									Z_TRY_ADDREF_P(value);
31324 								}
31325 							} else {
31326 								value = Z_REFVAL_P(value);
31327 								Z_TRY_ADDREF_P(value);
31328 							}
31329 						} else if (IS_CV == IS_CV) {
31330 							Z_TRY_ADDREF_P(value);
31331 						}
31332 						}
31333 					zend_hash_add_new(zobj->properties, name, value);
31334 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31335 						ZVAL_COPY(EX_VAR(opline->result.var), value);
31336 					}
31337 					goto exit_assign_obj;
31338 				}
31339 			}
31340 		}
31341 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
31342 	} else {
31343 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
31344 		if (UNEXPECTED(!name)) {
31345 
31346 			UNDEF_RESULT();
31347 			goto exit_assign_obj;
31348 		}
31349 	}
31350 
31351 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
31352 		ZVAL_DEREF(value);
31353 	}
31354 
31355 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
31356 
31357 	if (IS_CV != IS_CONST) {
31358 		zend_tmp_string_release(tmp_name);
31359 	}
31360 
31361 free_and_exit_assign_obj:
31362 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
31363 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
31364 	}
31365 
31366 exit_assign_obj:
31367 	if (garbage) {
31368 		GC_DTOR_NO_REF(garbage);
31369 	}
31370 
31371 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31372 	/* assign_obj has two opcodes! */
31373 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31374 }
31375 
31376 /* 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)31377 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31378 {
31379 	USE_OPLINE
31380 	zval *object_ptr, *orig_object_ptr;
31381 	zval *value;
31382 	zval *variable_ptr;
31383 	zval *dim;
31384 	zend_refcounted *garbage = NULL;
31385 
31386 	SAVE_OPLINE();
31387 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31388 
31389 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31390 try_assign_dim_array:
31391 		SEPARATE_ARRAY(object_ptr);
31392 		if (IS_CV == IS_UNUSED) {
31393 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
31394 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
31395 				HashTable *ht = Z_ARRVAL_P(object_ptr);
31396 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
31397 					GC_ADDREF(ht);
31398 				}
31399 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31400 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
31401 					zend_array_destroy(ht);
31402 					goto assign_dim_error;
31403 				}
31404 			}
31405 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
31406 				ZVAL_DEREF(value);
31407 			}
31408 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
31409 			if (UNEXPECTED(value == NULL)) {
31410 				zend_cannot_add_element();
31411 				goto assign_dim_error;
31412 			} else if (IS_CONST == IS_CV) {
31413 				if (Z_REFCOUNTED_P(value)) {
31414 					Z_ADDREF_P(value);
31415 				}
31416 			} else if (IS_CONST == IS_VAR) {
31417 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
31418 				if (Z_ISREF_P(free_op_data)) {
31419 					if (Z_REFCOUNTED_P(value)) {
31420 						Z_ADDREF_P(value);
31421 					}
31422 					zval_ptr_dtor_nogc(free_op_data);
31423 				}
31424 			} else if (IS_CONST == IS_CONST) {
31425 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
31426 					Z_ADDREF_P(value);
31427 				}
31428 			}
31429 		} else {
31430 			dim = EX_VAR(opline->op2.var);
31431 			if (IS_CV == IS_CONST) {
31432 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31433 			} else {
31434 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31435 			}
31436 			if (UNEXPECTED(variable_ptr == NULL)) {
31437 				goto assign_dim_error;
31438 			}
31439 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
31440 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
31441 		}
31442 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31443 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31444 		}
31445 		if (garbage) {
31446 			GC_DTOR_NO_REF(garbage);
31447 		}
31448 	} else {
31449 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
31450 			object_ptr = Z_REFVAL_P(object_ptr);
31451 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31452 				goto try_assign_dim_array;
31453 			}
31454 		}
31455 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
31456 			zend_object *obj = Z_OBJ_P(object_ptr);
31457 
31458 			GC_ADDREF(obj);
31459 			dim = EX_VAR(opline->op2.var);
31460 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
31461 				dim = ZVAL_UNDEFINED_OP2();
31462 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
31463 				dim++;
31464 			}
31465 
31466 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
31467 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
31468 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31469 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
31470 				ZVAL_DEREF(value);
31471 			}
31472 
31473 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
31474 
31475 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
31476 				zend_objects_store_del(obj);
31477 			}
31478 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
31479 			if (IS_CV == IS_UNUSED) {
31480 				zend_use_new_element_for_string();
31481 
31482 				UNDEF_RESULT();
31483 			} else {
31484 				dim = EX_VAR(opline->op2.var);
31485 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
31486 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
31487 
31488 			}
31489 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
31490 			if (Z_ISREF_P(orig_object_ptr)
31491 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
31492 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
31493 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31494 
31495 				UNDEF_RESULT();
31496 			} else {
31497 				HashTable *ht = zend_new_array(8);
31498 				uint8_t old_type = Z_TYPE_P(object_ptr);
31499 
31500 				ZVAL_ARR(object_ptr, ht);
31501 				if (UNEXPECTED(old_type == IS_FALSE)) {
31502 					GC_ADDREF(ht);
31503 					zend_false_to_array_deprecated();
31504 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
31505 						zend_array_destroy(ht);
31506 						goto assign_dim_error;
31507 					}
31508 				}
31509 				goto try_assign_dim_array;
31510 			}
31511 		} else {
31512 			zend_use_scalar_as_array();
31513 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31514 assign_dim_error:
31515 
31516 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31517 				ZVAL_NULL(EX_VAR(opline->result.var));
31518 			}
31519 		}
31520 	}
31521 	if (IS_CV != IS_UNUSED) {
31522 
31523 	}
31524 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31525 	/* assign_dim has two opcodes! */
31526 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31527 }
31528 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31530 {
31531 	USE_OPLINE
31532 	zval *object_ptr, *orig_object_ptr;
31533 	zval *value;
31534 	zval *variable_ptr;
31535 	zval *dim;
31536 	zend_refcounted *garbage = NULL;
31537 
31538 	SAVE_OPLINE();
31539 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31540 
31541 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31542 try_assign_dim_array:
31543 		SEPARATE_ARRAY(object_ptr);
31544 		if (IS_CV == IS_UNUSED) {
31545 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
31546 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
31547 				HashTable *ht = Z_ARRVAL_P(object_ptr);
31548 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
31549 					GC_ADDREF(ht);
31550 				}
31551 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31552 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
31553 					zend_array_destroy(ht);
31554 					goto assign_dim_error;
31555 				}
31556 			}
31557 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
31558 				ZVAL_DEREF(value);
31559 			}
31560 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
31561 			if (UNEXPECTED(value == NULL)) {
31562 				zend_cannot_add_element();
31563 				goto assign_dim_error;
31564 			} else if (IS_TMP_VAR == IS_CV) {
31565 				if (Z_REFCOUNTED_P(value)) {
31566 					Z_ADDREF_P(value);
31567 				}
31568 			} else if (IS_TMP_VAR == IS_VAR) {
31569 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
31570 				if (Z_ISREF_P(free_op_data)) {
31571 					if (Z_REFCOUNTED_P(value)) {
31572 						Z_ADDREF_P(value);
31573 					}
31574 					zval_ptr_dtor_nogc(free_op_data);
31575 				}
31576 			} else if (IS_TMP_VAR == IS_CONST) {
31577 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
31578 					Z_ADDREF_P(value);
31579 				}
31580 			}
31581 		} else {
31582 			dim = EX_VAR(opline->op2.var);
31583 			if (IS_CV == IS_CONST) {
31584 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31585 			} else {
31586 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31587 			}
31588 			if (UNEXPECTED(variable_ptr == NULL)) {
31589 				goto assign_dim_error;
31590 			}
31591 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
31592 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
31593 		}
31594 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31595 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31596 		}
31597 		if (garbage) {
31598 			GC_DTOR_NO_REF(garbage);
31599 		}
31600 	} else {
31601 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
31602 			object_ptr = Z_REFVAL_P(object_ptr);
31603 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31604 				goto try_assign_dim_array;
31605 			}
31606 		}
31607 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
31608 			zend_object *obj = Z_OBJ_P(object_ptr);
31609 
31610 			GC_ADDREF(obj);
31611 			dim = EX_VAR(opline->op2.var);
31612 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
31613 				dim = ZVAL_UNDEFINED_OP2();
31614 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
31615 				dim++;
31616 			}
31617 
31618 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
31619 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
31620 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31621 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
31622 				ZVAL_DEREF(value);
31623 			}
31624 
31625 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
31626 
31627 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31628 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
31629 				zend_objects_store_del(obj);
31630 			}
31631 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
31632 			if (IS_CV == IS_UNUSED) {
31633 				zend_use_new_element_for_string();
31634 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31635 				UNDEF_RESULT();
31636 			} else {
31637 				dim = EX_VAR(opline->op2.var);
31638 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
31639 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
31640 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31641 			}
31642 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
31643 			if (Z_ISREF_P(orig_object_ptr)
31644 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
31645 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
31646 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31647 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31648 				UNDEF_RESULT();
31649 			} else {
31650 				HashTable *ht = zend_new_array(8);
31651 				uint8_t old_type = Z_TYPE_P(object_ptr);
31652 
31653 				ZVAL_ARR(object_ptr, ht);
31654 				if (UNEXPECTED(old_type == IS_FALSE)) {
31655 					GC_ADDREF(ht);
31656 					zend_false_to_array_deprecated();
31657 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
31658 						zend_array_destroy(ht);
31659 						goto assign_dim_error;
31660 					}
31661 				}
31662 				goto try_assign_dim_array;
31663 			}
31664 		} else {
31665 			zend_use_scalar_as_array();
31666 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31667 assign_dim_error:
31668 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31669 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31670 				ZVAL_NULL(EX_VAR(opline->result.var));
31671 			}
31672 		}
31673 	}
31674 	if (IS_CV != IS_UNUSED) {
31675 
31676 	}
31677 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31678 	/* assign_dim has two opcodes! */
31679 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31680 }
31681 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31683 {
31684 	USE_OPLINE
31685 	zval *object_ptr, *orig_object_ptr;
31686 	zval *value;
31687 	zval *variable_ptr;
31688 	zval *dim;
31689 	zend_refcounted *garbage = NULL;
31690 
31691 	SAVE_OPLINE();
31692 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31693 
31694 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31695 try_assign_dim_array:
31696 		SEPARATE_ARRAY(object_ptr);
31697 		if (IS_CV == IS_UNUSED) {
31698 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31699 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
31700 				HashTable *ht = Z_ARRVAL_P(object_ptr);
31701 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
31702 					GC_ADDREF(ht);
31703 				}
31704 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31705 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
31706 					zend_array_destroy(ht);
31707 					goto assign_dim_error;
31708 				}
31709 			}
31710 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
31711 				ZVAL_DEREF(value);
31712 			}
31713 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
31714 			if (UNEXPECTED(value == NULL)) {
31715 				zend_cannot_add_element();
31716 				goto assign_dim_error;
31717 			} else if (IS_VAR == IS_CV) {
31718 				if (Z_REFCOUNTED_P(value)) {
31719 					Z_ADDREF_P(value);
31720 				}
31721 			} else if (IS_VAR == IS_VAR) {
31722 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
31723 				if (Z_ISREF_P(free_op_data)) {
31724 					if (Z_REFCOUNTED_P(value)) {
31725 						Z_ADDREF_P(value);
31726 					}
31727 					zval_ptr_dtor_nogc(free_op_data);
31728 				}
31729 			} else if (IS_VAR == IS_CONST) {
31730 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
31731 					Z_ADDREF_P(value);
31732 				}
31733 			}
31734 		} else {
31735 			dim = EX_VAR(opline->op2.var);
31736 			if (IS_CV == IS_CONST) {
31737 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31738 			} else {
31739 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31740 			}
31741 			if (UNEXPECTED(variable_ptr == NULL)) {
31742 				goto assign_dim_error;
31743 			}
31744 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31745 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
31746 		}
31747 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31748 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31749 		}
31750 		if (garbage) {
31751 			GC_DTOR_NO_REF(garbage);
31752 		}
31753 	} else {
31754 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
31755 			object_ptr = Z_REFVAL_P(object_ptr);
31756 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31757 				goto try_assign_dim_array;
31758 			}
31759 		}
31760 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
31761 			zend_object *obj = Z_OBJ_P(object_ptr);
31762 
31763 			GC_ADDREF(obj);
31764 			dim = EX_VAR(opline->op2.var);
31765 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
31766 				dim = ZVAL_UNDEFINED_OP2();
31767 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
31768 				dim++;
31769 			}
31770 
31771 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31772 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
31773 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31774 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
31775 				ZVAL_DEREF(value);
31776 			}
31777 
31778 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
31779 
31780 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31781 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
31782 				zend_objects_store_del(obj);
31783 			}
31784 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
31785 			if (IS_CV == IS_UNUSED) {
31786 				zend_use_new_element_for_string();
31787 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31788 				UNDEF_RESULT();
31789 			} else {
31790 				dim = EX_VAR(opline->op2.var);
31791 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31792 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
31793 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31794 			}
31795 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
31796 			if (Z_ISREF_P(orig_object_ptr)
31797 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
31798 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
31799 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31800 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31801 				UNDEF_RESULT();
31802 			} else {
31803 				HashTable *ht = zend_new_array(8);
31804 				uint8_t old_type = Z_TYPE_P(object_ptr);
31805 
31806 				ZVAL_ARR(object_ptr, ht);
31807 				if (UNEXPECTED(old_type == IS_FALSE)) {
31808 					GC_ADDREF(ht);
31809 					zend_false_to_array_deprecated();
31810 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
31811 						zend_array_destroy(ht);
31812 						goto assign_dim_error;
31813 					}
31814 				}
31815 				goto try_assign_dim_array;
31816 			}
31817 		} else {
31818 			zend_use_scalar_as_array();
31819 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31820 assign_dim_error:
31821 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31822 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31823 				ZVAL_NULL(EX_VAR(opline->result.var));
31824 			}
31825 		}
31826 	}
31827 	if (IS_CV != IS_UNUSED) {
31828 
31829 	}
31830 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31831 	/* assign_dim has two opcodes! */
31832 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31833 }
31834 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31835 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31836 {
31837 	USE_OPLINE
31838 	zval *object_ptr, *orig_object_ptr;
31839 	zval *value;
31840 	zval *variable_ptr;
31841 	zval *dim;
31842 	zend_refcounted *garbage = NULL;
31843 
31844 	SAVE_OPLINE();
31845 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31846 
31847 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31848 try_assign_dim_array:
31849 		SEPARATE_ARRAY(object_ptr);
31850 		if (IS_CV == IS_UNUSED) {
31851 			value = EX_VAR((opline+1)->op1.var);
31852 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
31853 				HashTable *ht = Z_ARRVAL_P(object_ptr);
31854 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
31855 					GC_ADDREF(ht);
31856 				}
31857 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31858 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
31859 					zend_array_destroy(ht);
31860 					goto assign_dim_error;
31861 				}
31862 			}
31863 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
31864 				ZVAL_DEREF(value);
31865 			}
31866 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
31867 			if (UNEXPECTED(value == NULL)) {
31868 				zend_cannot_add_element();
31869 				goto assign_dim_error;
31870 			} else if (IS_CV == IS_CV) {
31871 				if (Z_REFCOUNTED_P(value)) {
31872 					Z_ADDREF_P(value);
31873 				}
31874 			} else if (IS_CV == IS_VAR) {
31875 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
31876 				if (Z_ISREF_P(free_op_data)) {
31877 					if (Z_REFCOUNTED_P(value)) {
31878 						Z_ADDREF_P(value);
31879 					}
31880 					zval_ptr_dtor_nogc(free_op_data);
31881 				}
31882 			} else if (IS_CV == IS_CONST) {
31883 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
31884 					Z_ADDREF_P(value);
31885 				}
31886 			}
31887 		} else {
31888 			dim = EX_VAR(opline->op2.var);
31889 			if (IS_CV == IS_CONST) {
31890 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31891 			} else {
31892 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31893 			}
31894 			if (UNEXPECTED(variable_ptr == NULL)) {
31895 				goto assign_dim_error;
31896 			}
31897 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
31898 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
31899 		}
31900 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31901 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31902 		}
31903 		if (garbage) {
31904 			GC_DTOR_NO_REF(garbage);
31905 		}
31906 	} else {
31907 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
31908 			object_ptr = Z_REFVAL_P(object_ptr);
31909 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31910 				goto try_assign_dim_array;
31911 			}
31912 		}
31913 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
31914 			zend_object *obj = Z_OBJ_P(object_ptr);
31915 
31916 			GC_ADDREF(obj);
31917 			dim = EX_VAR(opline->op2.var);
31918 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
31919 				dim = ZVAL_UNDEFINED_OP2();
31920 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
31921 				dim++;
31922 			}
31923 
31924 			value = EX_VAR((opline+1)->op1.var);
31925 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
31926 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31927 			} else if (IS_CV & (IS_CV|IS_VAR)) {
31928 				ZVAL_DEREF(value);
31929 			}
31930 
31931 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
31932 
31933 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
31934 				zend_objects_store_del(obj);
31935 			}
31936 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
31937 			if (IS_CV == IS_UNUSED) {
31938 				zend_use_new_element_for_string();
31939 
31940 				UNDEF_RESULT();
31941 			} else {
31942 				dim = EX_VAR(opline->op2.var);
31943 				value = EX_VAR((opline+1)->op1.var);
31944 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
31945 
31946 			}
31947 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
31948 			if (Z_ISREF_P(orig_object_ptr)
31949 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
31950 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
31951 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31952 
31953 				UNDEF_RESULT();
31954 			} else {
31955 				HashTable *ht = zend_new_array(8);
31956 				uint8_t old_type = Z_TYPE_P(object_ptr);
31957 
31958 				ZVAL_ARR(object_ptr, ht);
31959 				if (UNEXPECTED(old_type == IS_FALSE)) {
31960 					GC_ADDREF(ht);
31961 					zend_false_to_array_deprecated();
31962 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
31963 						zend_array_destroy(ht);
31964 						goto assign_dim_error;
31965 					}
31966 				}
31967 				goto try_assign_dim_array;
31968 			}
31969 		} else {
31970 			zend_use_scalar_as_array();
31971 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31972 assign_dim_error:
31973 
31974 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31975 				ZVAL_NULL(EX_VAR(opline->result.var));
31976 			}
31977 		}
31978 	}
31979 	if (IS_CV != IS_UNUSED) {
31980 
31981 	}
31982 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31983 	/* assign_dim has two opcodes! */
31984 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31985 }
31986 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31987 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31988 {
31989 	USE_OPLINE
31990 	zval *value;
31991 	zval *variable_ptr;
31992 
31993 	SAVE_OPLINE();
31994 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31995 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31996 
31997 	if (0 || UNEXPECTED(0)) {
31998 		zend_refcounted *garbage = NULL;
31999 
32000 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
32001 		if (UNEXPECTED(0)) {
32002 			ZVAL_COPY(EX_VAR(opline->result.var), value);
32003 		}
32004 		if (garbage) {
32005 			GC_DTOR_NO_REF(garbage);
32006 		}
32007 	} else {
32008 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
32009 	}
32010 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32011 	/* zend_assign_to_variable() always takes care of op2, never free it! */
32012 
32013 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32014 }
32015 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32016 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32017 {
32018 	USE_OPLINE
32019 	zval *value;
32020 	zval *variable_ptr;
32021 
32022 	SAVE_OPLINE();
32023 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
32024 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32025 
32026 	if (0 || UNEXPECTED(1)) {
32027 		zend_refcounted *garbage = NULL;
32028 
32029 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
32030 		if (UNEXPECTED(1)) {
32031 			ZVAL_COPY(EX_VAR(opline->result.var), value);
32032 		}
32033 		if (garbage) {
32034 			GC_DTOR_NO_REF(garbage);
32035 		}
32036 	} else {
32037 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
32038 	}
32039 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32040 	/* zend_assign_to_variable() always takes care of op2, never free it! */
32041 
32042 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32043 }
32044 
ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32046 {
32047 	USE_OPLINE
32048 	zval *variable_ptr;
32049 	zval *value_ptr;
32050 	zend_refcounted *garbage = NULL;
32051 
32052 	SAVE_OPLINE();
32053 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
32054 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32055 
32056 	if (IS_VAR == IS_VAR &&
32057 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
32058 
32059 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
32060 		variable_ptr = &EG(uninitialized_zval);
32061 	} else if (IS_CV == IS_VAR &&
32062 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
32063 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
32064 
32065 		variable_ptr = zend_wrong_assign_to_variable_reference(
32066 			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
32067 	} else {
32068 		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
32069 	}
32070 
32071 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32072 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
32073 	}
32074 
32075 	if (garbage) {
32076 		GC_DTOR(garbage);
32077 	}
32078 
32079 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32080 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32081 }
32082 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32084 {
32085 	USE_OPLINE
32086 	zval *property, *container, *value_ptr;
32087 
32088 	SAVE_OPLINE();
32089 
32090 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32091 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
32092 
32093 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
32094 
32095 	if (1) {
32096 		if (IS_VAR == IS_UNUSED) {
32097 			if (IS_CV == IS_CONST) {
32098 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32099 			} else {
32100 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32101 			}
32102 		} else {
32103 			if (IS_CV == IS_CONST) {
32104 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32105 			} else {
32106 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32107 			}
32108 		}
32109 	} else {
32110 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32111 	}
32112 
32113 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32114 
32115 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
32116 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32117 }
32118 
32119 /* 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)32120 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32121 {
32122 	USE_OPLINE
32123 	zval *property, *container, *value_ptr;
32124 
32125 	SAVE_OPLINE();
32126 
32127 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32128 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
32129 
32130 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
32131 
32132 	if (1) {
32133 		if (IS_VAR == IS_UNUSED) {
32134 			if (IS_CV == IS_CONST) {
32135 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32136 			} else {
32137 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32138 			}
32139 		} else {
32140 			if (IS_CV == IS_CONST) {
32141 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32142 			} else {
32143 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32144 			}
32145 		}
32146 	} else {
32147 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32148 	}
32149 
32150 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32151 
32152 
32153 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32154 }
32155 
32156 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32157 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32158 {
32159 	USE_OPLINE
32160 	zval *function_name;
32161 	zend_class_entry *ce;
32162 	uint32_t call_info;
32163 	zend_function *fbc;
32164 	zend_execute_data *call;
32165 
32166 	SAVE_OPLINE();
32167 
32168 	if (IS_VAR == IS_CONST) {
32169 		/* no function found. try a static method in class */
32170 		ce = CACHED_PTR(opline->result.num);
32171 		if (UNEXPECTED(ce == NULL)) {
32172 			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);
32173 			if (UNEXPECTED(ce == NULL)) {
32174 
32175 				HANDLE_EXCEPTION();
32176 			}
32177 			if (IS_CV != IS_CONST) {
32178 				CACHE_PTR(opline->result.num, ce);
32179 			}
32180 		}
32181 	} else if (IS_VAR == IS_UNUSED) {
32182 		ce = zend_fetch_class(NULL, opline->op1.num);
32183 		if (UNEXPECTED(ce == NULL)) {
32184 
32185 			HANDLE_EXCEPTION();
32186 		}
32187 	} else {
32188 		ce = Z_CE_P(EX_VAR(opline->op1.var));
32189 	}
32190 
32191 	if (IS_VAR == IS_CONST &&
32192 	    IS_CV == IS_CONST &&
32193 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
32194 		/* nothing to do */
32195 	} else if (IS_VAR != IS_CONST &&
32196 	           IS_CV == IS_CONST &&
32197 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
32198 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
32199 	} else if (IS_CV != IS_UNUSED) {
32200 		function_name = EX_VAR(opline->op2.var);
32201 		if (IS_CV != IS_CONST) {
32202 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
32203 				do {
32204 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
32205 						function_name = Z_REFVAL_P(function_name);
32206 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
32207 							break;
32208 						}
32209 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
32210 						ZVAL_UNDEFINED_OP2();
32211 						if (UNEXPECTED(EG(exception) != NULL)) {
32212 							HANDLE_EXCEPTION();
32213 						}
32214 					}
32215 					zend_throw_error(NULL, "Method name must be a string");
32216 
32217 					HANDLE_EXCEPTION();
32218 				} while (0);
32219 			}
32220 		}
32221 
32222 		if (ce->get_static_method) {
32223 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
32224 		} else {
32225 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
32226 		}
32227 		if (UNEXPECTED(fbc == NULL)) {
32228 			if (EXPECTED(!EG(exception))) {
32229 				zend_undefined_method(ce, Z_STR_P(function_name));
32230 			}
32231 
32232 			HANDLE_EXCEPTION();
32233 		}
32234 		if (IS_CV == IS_CONST &&
32235 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
32236 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
32237 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
32238 		}
32239 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
32240 			init_func_run_time_cache(&fbc->op_array);
32241 		}
32242 		if (IS_CV != IS_CONST) {
32243 
32244 		}
32245 	} else {
32246 		if (UNEXPECTED(ce->constructor == NULL)) {
32247 			zend_throw_error(NULL, "Cannot call constructor");
32248 			HANDLE_EXCEPTION();
32249 		}
32250 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
32251 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
32252 			HANDLE_EXCEPTION();
32253 		}
32254 		fbc = ce->constructor;
32255 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
32256 			init_func_run_time_cache(&fbc->op_array);
32257 		}
32258 	}
32259 
32260 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
32261 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
32262 			ce = (zend_class_entry*)Z_OBJ(EX(This));
32263 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
32264 		} else {
32265 			zend_non_static_method_call(fbc);
32266 			HANDLE_EXCEPTION();
32267 		}
32268 	} else {
32269 		/* previous opcode is ZEND_FETCH_CLASS */
32270 		if (IS_VAR == IS_UNUSED
32271 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
32272 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
32273 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
32274 				ce = Z_OBJCE(EX(This));
32275 			} else {
32276 				ce = Z_CE(EX(This));
32277 			}
32278 		}
32279 		call_info = ZEND_CALL_NESTED_FUNCTION;
32280 	}
32281 
32282 	call = zend_vm_stack_push_call_frame(call_info,
32283 		fbc, opline->extended_value, ce);
32284 	call->prev_execute_data = EX(call);
32285 	EX(call) = call;
32286 
32287 	ZEND_VM_NEXT_OPCODE();
32288 }
32289 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32290 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32291 {
32292 	USE_OPLINE
32293 	zval *expr_ptr, new_expr;
32294 
32295 	SAVE_OPLINE();
32296 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
32297 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
32298 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32299 		if (Z_ISREF_P(expr_ptr)) {
32300 			Z_ADDREF_P(expr_ptr);
32301 		} else {
32302 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
32303 		}
32304 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32305 	} else {
32306 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32307 		if (IS_VAR == IS_TMP_VAR) {
32308 			/* pass */
32309 		} else if (IS_VAR == IS_CONST) {
32310 			Z_TRY_ADDREF_P(expr_ptr);
32311 		} else if (IS_VAR == IS_CV) {
32312 			ZVAL_DEREF(expr_ptr);
32313 			Z_TRY_ADDREF_P(expr_ptr);
32314 		} else /* if (IS_VAR == IS_VAR) */ {
32315 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
32316 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
32317 
32318 				expr_ptr = Z_REFVAL_P(expr_ptr);
32319 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
32320 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
32321 					expr_ptr = &new_expr;
32322 					efree_size(ref, sizeof(zend_reference));
32323 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
32324 					Z_ADDREF_P(expr_ptr);
32325 				}
32326 			}
32327 		}
32328 	}
32329 
32330 	if (IS_CV != IS_UNUSED) {
32331 		zval *offset = EX_VAR(opline->op2.var);
32332 		zend_string *str;
32333 		zend_ulong hval;
32334 
32335 add_again:
32336 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
32337 			str = Z_STR_P(offset);
32338 			if (IS_CV != IS_CONST) {
32339 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
32340 					goto num_index;
32341 				}
32342 			}
32343 str_index:
32344 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
32345 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
32346 			hval = Z_LVAL_P(offset);
32347 num_index:
32348 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
32349 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
32350 			offset = Z_REFVAL_P(offset);
32351 			goto add_again;
32352 		} else if (Z_TYPE_P(offset) == IS_NULL) {
32353 			str = ZSTR_EMPTY_ALLOC();
32354 			goto str_index;
32355 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
32356 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
32357 			goto num_index;
32358 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
32359 			hval = 0;
32360 			goto num_index;
32361 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
32362 			hval = 1;
32363 			goto num_index;
32364 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
32365 			zend_use_resource_as_offset(offset);
32366 			hval = Z_RES_HANDLE_P(offset);
32367 			goto num_index;
32368 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
32369 			ZVAL_UNDEFINED_OP2();
32370 			str = ZSTR_EMPTY_ALLOC();
32371 			goto str_index;
32372 		} else {
32373 			zend_illegal_array_offset_access(offset);
32374 			zval_ptr_dtor_nogc(expr_ptr);
32375 		}
32376 
32377 	} else {
32378 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
32379 			zend_cannot_add_element();
32380 			zval_ptr_dtor_nogc(expr_ptr);
32381 		}
32382 	}
32383 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32384 }
32385 
ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32386 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32387 {
32388 	zval *array;
32389 	uint32_t size;
32390 	USE_OPLINE
32391 
32392 	array = EX_VAR(opline->result.var);
32393 	if (IS_VAR != IS_UNUSED) {
32394 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
32395 		ZVAL_ARR(array, zend_new_array(size));
32396 		/* Explicitly initialize array as not-packed if flag is set */
32397 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
32398 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
32399 		}
32400 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32401 	} else {
32402 		ZVAL_ARR(array, zend_new_array(0));
32403 		ZEND_VM_NEXT_OPCODE();
32404 	}
32405 }
32406 
ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32408 {
32409 	USE_OPLINE
32410 	zval *container;
32411 	zval *offset;
32412 	zend_ulong hval;
32413 	zend_string *key;
32414 
32415 	SAVE_OPLINE();
32416 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32417 	offset = EX_VAR(opline->op2.var);
32418 
32419 	do {
32420 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
32421 			HashTable *ht;
32422 
32423 unset_dim_array:
32424 			SEPARATE_ARRAY(container);
32425 			ht = Z_ARRVAL_P(container);
32426 offset_again:
32427 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
32428 				key = Z_STR_P(offset);
32429 				if (IS_CV != IS_CONST) {
32430 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
32431 						goto num_index_dim;
32432 					}
32433 				}
32434 str_index_dim:
32435 				ZEND_ASSERT(ht != &EG(symbol_table));
32436 				zend_hash_del(ht, key);
32437 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
32438 				hval = Z_LVAL_P(offset);
32439 num_index_dim:
32440 				zend_hash_index_del(ht, hval);
32441 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
32442 				offset = Z_REFVAL_P(offset);
32443 				goto offset_again;
32444 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
32445 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
32446 				goto num_index_dim;
32447 			} else if (Z_TYPE_P(offset) == IS_NULL) {
32448 				key = ZSTR_EMPTY_ALLOC();
32449 				goto str_index_dim;
32450 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
32451 				hval = 0;
32452 				goto num_index_dim;
32453 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
32454 				hval = 1;
32455 				goto num_index_dim;
32456 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
32457 				zend_use_resource_as_offset(offset);
32458 				hval = Z_RES_HANDLE_P(offset);
32459 				goto num_index_dim;
32460 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
32461 				ZVAL_UNDEFINED_OP2();
32462 				key = ZSTR_EMPTY_ALLOC();
32463 				goto str_index_dim;
32464 			} else {
32465 				zend_illegal_array_offset_unset(offset);
32466 			}
32467 			break;
32468 		} else if (Z_ISREF_P(container)) {
32469 			container = Z_REFVAL_P(container);
32470 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
32471 				goto unset_dim_array;
32472 			}
32473 		}
32474 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32475 			container = ZVAL_UNDEFINED_OP1();
32476 		}
32477 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
32478 			offset = ZVAL_UNDEFINED_OP2();
32479 		}
32480 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
32481 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
32482 				offset++;
32483 			}
32484 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
32485 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
32486 			zend_throw_error(NULL, "Cannot unset string offsets");
32487 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
32488 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
32489 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
32490 			zend_false_to_array_deprecated();
32491 		}
32492 	} while (0);
32493 
32494 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32495 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32496 }
32497 
ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32498 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32499 {
32500 	USE_OPLINE
32501 	zval *container;
32502 	zval *offset;
32503 	zend_string *name, *tmp_name;
32504 
32505 	SAVE_OPLINE();
32506 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32507 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
32508 
32509 	do {
32510 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
32511 			if (Z_ISREF_P(container)) {
32512 				container = Z_REFVAL_P(container);
32513 				if (Z_TYPE_P(container) != IS_OBJECT) {
32514 					if (IS_VAR == IS_CV
32515 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32516 						ZVAL_UNDEFINED_OP1();
32517 					}
32518 					break;
32519 				}
32520 			} else {
32521 				break;
32522 			}
32523 		}
32524 		if (IS_CV == IS_CONST) {
32525 			name = Z_STR_P(offset);
32526 		} else {
32527 			name = zval_try_get_tmp_string(offset, &tmp_name);
32528 			if (UNEXPECTED(!name)) {
32529 				break;
32530 			}
32531 		}
32532 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
32533 		if (IS_CV != IS_CONST) {
32534 			zend_tmp_string_release(tmp_name);
32535 		}
32536 	} while (0);
32537 
32538 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32539 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32540 }
32541 
ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32542 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32543 {
32544 	USE_OPLINE
32545 
32546 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
32547 
32548 	SAVE_OPLINE();
32549 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
32550 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32551 	}
32552 
32553 	/* Destroy the previously yielded value */
32554 	zval_ptr_dtor(&generator->value);
32555 
32556 	/* Destroy the previously yielded key */
32557 	zval_ptr_dtor(&generator->key);
32558 
32559 	/* Set the new yielded value */
32560 	if (IS_VAR != IS_UNUSED) {
32561 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
32562 			/* Constants and temporary variables aren't yieldable by reference,
32563 			 * but we still allow them with a notice. */
32564 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
32565 				zval *value;
32566 
32567 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
32568 
32569 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32570 				ZVAL_COPY_VALUE(&generator->value, value);
32571 				if (IS_VAR == IS_CONST) {
32572 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
32573 						Z_ADDREF(generator->value);
32574 					}
32575 				}
32576 			} else {
32577 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32578 
32579 				/* If a function call result is yielded and the function did
32580 				 * not return by reference we throw a notice. */
32581 				do {
32582 					if (IS_VAR == IS_VAR) {
32583 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
32584 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
32585 						 && !Z_ISREF_P(value_ptr)) {
32586 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
32587 							ZVAL_COPY(&generator->value, value_ptr);
32588 							break;
32589 						}
32590 					}
32591 					if (Z_ISREF_P(value_ptr)) {
32592 						Z_ADDREF_P(value_ptr);
32593 					} else {
32594 						ZVAL_MAKE_REF_EX(value_ptr, 2);
32595 					}
32596 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
32597 				} while (0);
32598 
32599 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32600 			}
32601 		} else {
32602 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32603 
32604 			/* Consts, temporary variables and references need copying */
32605 			if (IS_VAR == IS_CONST) {
32606 				ZVAL_COPY_VALUE(&generator->value, value);
32607 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
32608 					Z_ADDREF(generator->value);
32609 				}
32610 			} else if (IS_VAR == IS_TMP_VAR) {
32611 				ZVAL_COPY_VALUE(&generator->value, value);
32612 			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
32613 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
32614 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32615 			} else {
32616 				ZVAL_COPY_VALUE(&generator->value, value);
32617 				if (IS_VAR == IS_CV) {
32618 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
32619 				}
32620 			}
32621 		}
32622 	} else {
32623 		/* If no value was specified yield null */
32624 		ZVAL_NULL(&generator->value);
32625 	}
32626 
32627 	/* Set the new yielded key */
32628 	if (IS_CV != IS_UNUSED) {
32629 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
32630 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
32631 			key = Z_REFVAL_P(key);
32632 		}
32633 		ZVAL_COPY(&generator->key, key);
32634 
32635 		if (Z_TYPE(generator->key) == IS_LONG
32636 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
32637 		) {
32638 			generator->largest_used_integer_key = Z_LVAL(generator->key);
32639 		}
32640 	} else {
32641 		/* If no key was specified we use auto-increment keys */
32642 		generator->largest_used_integer_key++;
32643 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
32644 	}
32645 
32646 	if (RETURN_VALUE_USED(opline)) {
32647 		/* If the return value of yield is used set the send
32648 		 * target and initialize it to NULL */
32649 		generator->send_target = EX_VAR(opline->result.var);
32650 		ZVAL_NULL(generator->send_target);
32651 	} else {
32652 		generator->send_target = NULL;
32653 	}
32654 
32655 	/* We increment to the next op, so we are at the correct position when the
32656 	 * generator is resumed. */
32657 	ZEND_VM_INC_OPCODE();
32658 
32659 	/* The GOTO VM uses a local opline variable. We need to set the opline
32660 	 * variable in execute_data so we don't resume at an old position. */
32661 	SAVE_OPLINE();
32662 
32663 	ZEND_VM_RETURN();
32664 }
32665 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32666 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)
32667 {
32668 	USE_OPLINE
32669 	zval *array;
32670 	zval *value, *variable_ptr;
32671 	uint32_t value_type;
32672 	HashTable *fe_ht;
32673 	HashPosition pos;
32674 
32675 	array = EX_VAR(opline->op1.var);
32676 	SAVE_OPLINE();
32677 	fe_ht = Z_ARRVAL_P(array);
32678 	pos = Z_FE_POS_P(array);
32679 	if (HT_IS_PACKED(fe_ht)) {
32680 		value = fe_ht->arPacked + pos;
32681 		while (1) {
32682 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
32683 				/* reached end of iteration */
32684 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
32685 				ZEND_VM_CONTINUE();
32686 			}
32687 			value_type = Z_TYPE_INFO_P(value);
32688 			ZEND_ASSERT(value_type != IS_INDIRECT);
32689 			if (EXPECTED(value_type != IS_UNDEF)) {
32690 				break;
32691 			}
32692 			pos++;
32693 			value++;
32694 		}
32695 		Z_FE_POS_P(array) = pos + 1;
32696 		if (0) {
32697 			ZVAL_LONG(EX_VAR(opline->result.var), pos);
32698 		}
32699 	} else {
32700 		Bucket *p;
32701 
32702 		p = fe_ht->arData + pos;
32703 		while (1) {
32704 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
32705 				/* reached end of iteration */
32706 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
32707 				ZEND_VM_CONTINUE();
32708 			}
32709 			pos++;
32710 			value = &p->val;
32711 			value_type = Z_TYPE_INFO_P(value);
32712 			ZEND_ASSERT(value_type != IS_INDIRECT);
32713 			if (EXPECTED(value_type != IS_UNDEF)) {
32714 				break;
32715 			}
32716 			p++;
32717 		}
32718 		Z_FE_POS_P(array) = pos;
32719 		if (0) {
32720 			if (!p->key) {
32721 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
32722 			} else {
32723 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
32724 			}
32725 		}
32726 	}
32727 
32728 	variable_ptr = EX_VAR(opline->op2.var);
32729 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
32730 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32731 }
32732 
32733 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32734 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)
32735 {
32736 	USE_OPLINE
32737 	zval *array;
32738 	zval *value, *variable_ptr;
32739 	uint32_t value_type;
32740 	HashTable *fe_ht;
32741 	HashPosition pos;
32742 
32743 	array = EX_VAR(opline->op1.var);
32744 	SAVE_OPLINE();
32745 	fe_ht = Z_ARRVAL_P(array);
32746 	pos = Z_FE_POS_P(array);
32747 	if (HT_IS_PACKED(fe_ht)) {
32748 		value = fe_ht->arPacked + pos;
32749 		while (1) {
32750 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
32751 				/* reached end of iteration */
32752 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
32753 				ZEND_VM_CONTINUE();
32754 			}
32755 			value_type = Z_TYPE_INFO_P(value);
32756 			ZEND_ASSERT(value_type != IS_INDIRECT);
32757 			if (EXPECTED(value_type != IS_UNDEF)) {
32758 				break;
32759 			}
32760 			pos++;
32761 			value++;
32762 		}
32763 		Z_FE_POS_P(array) = pos + 1;
32764 		if (1) {
32765 			ZVAL_LONG(EX_VAR(opline->result.var), pos);
32766 		}
32767 	} else {
32768 		Bucket *p;
32769 
32770 		p = fe_ht->arData + pos;
32771 		while (1) {
32772 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
32773 				/* reached end of iteration */
32774 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
32775 				ZEND_VM_CONTINUE();
32776 			}
32777 			pos++;
32778 			value = &p->val;
32779 			value_type = Z_TYPE_INFO_P(value);
32780 			ZEND_ASSERT(value_type != IS_INDIRECT);
32781 			if (EXPECTED(value_type != IS_UNDEF)) {
32782 				break;
32783 			}
32784 			p++;
32785 		}
32786 		Z_FE_POS_P(array) = pos;
32787 		if (1) {
32788 			if (!p->key) {
32789 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
32790 			} else {
32791 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
32792 			}
32793 		}
32794 	}
32795 
32796 	variable_ptr = EX_VAR(opline->op2.var);
32797 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
32798 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32799 }
32800 
32801 
ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32803 {
32804 	USE_OPLINE
32805 	zval *obj;
32806 	zend_object *zobj;
32807 	zend_class_entry *ce, *scope;
32808 	zend_function *clone;
32809 	zend_object_clone_obj_t clone_call;
32810 
32811 	SAVE_OPLINE();
32812 	obj = &EX(This);
32813 
32814 	do {
32815 		if (IS_UNUSED == IS_CONST ||
32816 		    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
32817 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
32818 				obj = Z_REFVAL_P(obj);
32819 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
32820 					break;
32821 				}
32822 			}
32823 			ZVAL_UNDEF(EX_VAR(opline->result.var));
32824 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
32825 				ZVAL_UNDEFINED_OP1();
32826 				if (UNEXPECTED(EG(exception) != NULL)) {
32827 					HANDLE_EXCEPTION();
32828 				}
32829 			}
32830 			zend_throw_error(NULL, "__clone method called on non-object");
32831 
32832 			HANDLE_EXCEPTION();
32833 		}
32834 	} while (0);
32835 
32836 	zobj = Z_OBJ_P(obj);
32837 	ce = zobj->ce;
32838 	clone = ce->clone;
32839 	clone_call = zobj->handlers->clone_obj;
32840 	if (UNEXPECTED(clone_call == NULL)) {
32841 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
32842 
32843 		ZVAL_UNDEF(EX_VAR(opline->result.var));
32844 		HANDLE_EXCEPTION();
32845 	}
32846 
32847 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
32848 		scope = EX(func)->op_array.scope;
32849 		if (clone->common.scope != scope) {
32850 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
32851 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
32852 				zend_wrong_clone_call(clone, scope);
32853 
32854 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32855 				HANDLE_EXCEPTION();
32856 			}
32857 		}
32858 	}
32859 
32860 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
32861 
32862 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32863 }
32864 
ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32865 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32866 {
32867 	uint32_t fetch_type;
32868 	zend_class_entry *called_scope, *scope;
32869 	USE_OPLINE
32870 
32871 	if (IS_UNUSED != IS_UNUSED) {
32872 		SAVE_OPLINE();
32873 		zval *op = NULL;
32874 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
32875 			ZVAL_DEREF(op);
32876 			if (Z_TYPE_P(op) != IS_OBJECT) {
32877 				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
32878 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32879 
32880 				HANDLE_EXCEPTION();
32881 			}
32882 		}
32883 
32884 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
32885 
32886 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32887 	}
32888 
32889 	fetch_type = opline->op1.num;
32890 	scope = EX(func)->op_array.scope;
32891 	if (UNEXPECTED(scope == NULL)) {
32892 		SAVE_OPLINE();
32893 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
32894 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
32895 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
32896 		ZVAL_UNDEF(EX_VAR(opline->result.var));
32897 		HANDLE_EXCEPTION();
32898 	}
32899 
32900 	switch (fetch_type) {
32901 		case ZEND_FETCH_CLASS_SELF:
32902 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
32903 			break;
32904 		case ZEND_FETCH_CLASS_PARENT:
32905 			if (UNEXPECTED(scope->parent == NULL)) {
32906 				SAVE_OPLINE();
32907 				zend_throw_error(NULL,
32908 					"Cannot use \"parent\" when current class scope has no parent");
32909 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32910 				HANDLE_EXCEPTION();
32911 			}
32912 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
32913 			break;
32914 		case ZEND_FETCH_CLASS_STATIC:
32915 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
32916 				called_scope = Z_OBJCE(EX(This));
32917 			} else {
32918 				called_scope = Z_CE(EX(This));
32919 			}
32920 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
32921 			break;
32922 		EMPTY_SWITCH_DEFAULT_CASE()
32923 	}
32924 	ZEND_VM_NEXT_OPCODE();
32925 }
32926 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32927 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32928 {
32929 	USE_OPLINE
32930 	zval *object;
32931 	zval *property;
32932 	zval *value;
32933 	zval *zptr;
32934 	void **cache_slot;
32935 	zend_property_info *prop_info;
32936 	zend_object *zobj;
32937 	zend_string *name, *tmp_name;
32938 
32939 	SAVE_OPLINE();
32940 	object = &EX(This);
32941 	property = RT_CONSTANT(opline, opline->op2);
32942 
32943 	do {
32944 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
32945 
32946 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32947 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32948 				object = Z_REFVAL_P(object);
32949 				goto assign_op_object;
32950 			}
32951 			if (IS_UNUSED == IS_CV
32952 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32953 				ZVAL_UNDEFINED_OP1();
32954 			}
32955 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
32956 			break;
32957 		}
32958 
32959 assign_op_object:
32960 		/* here we are sure we are dealing with an object */
32961 		zobj = Z_OBJ_P(object);
32962 		if (IS_CONST == IS_CONST) {
32963 			name = Z_STR_P(property);
32964 		} else {
32965 			name = zval_try_get_tmp_string(property, &tmp_name);
32966 			if (UNEXPECTED(!name)) {
32967 				UNDEF_RESULT();
32968 				break;
32969 			}
32970 		}
32971 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
32972 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
32973 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
32974 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32975 					ZVAL_NULL(EX_VAR(opline->result.var));
32976 				}
32977 			} else {
32978 				zval *orig_zptr = zptr;
32979 				zend_reference *ref;
32980 
32981 				do {
32982 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
32983 						ref = Z_REF_P(zptr);
32984 						zptr = Z_REFVAL_P(zptr);
32985 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
32986 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
32987 							break;
32988 						}
32989 					}
32990 
32991 					if (IS_CONST == IS_CONST) {
32992 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
32993 					} else {
32994 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
32995 					}
32996 					if (prop_info) {
32997 						/* special case for typed properties */
32998 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
32999 					} else {
33000 						zend_binary_op(zptr, zptr, value OPLINE_CC);
33001 					}
33002 				} while (0);
33003 
33004 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33005 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
33006 				}
33007 			}
33008 		} else {
33009 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
33010 		}
33011 		if (IS_CONST != IS_CONST) {
33012 			zend_tmp_string_release(tmp_name);
33013 		}
33014 	} while (0);
33015 
33016 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
33017 
33018 
33019 	/* assign_obj has two opcodes! */
33020 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33021 }
33022 
33023 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33024 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33025 {
33026 	USE_OPLINE
33027 	zval *object;
33028 	zval *property;
33029 	zval *zptr;
33030 	void **cache_slot;
33031 	zend_property_info *prop_info;
33032 	zend_object *zobj;
33033 	zend_string *name, *tmp_name;
33034 
33035 	SAVE_OPLINE();
33036 	object = &EX(This);
33037 	property = RT_CONSTANT(opline, opline->op2);
33038 
33039 	do {
33040 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33041 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33042 				object = Z_REFVAL_P(object);
33043 				goto pre_incdec_object;
33044 			}
33045 			if (IS_UNUSED == IS_CV
33046 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33047 				ZVAL_UNDEFINED_OP1();
33048 			}
33049 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33050 			break;
33051 		}
33052 
33053 pre_incdec_object:
33054 		/* here we are sure we are dealing with an object */
33055 		zobj = Z_OBJ_P(object);
33056 		if (IS_CONST == IS_CONST) {
33057 			name = Z_STR_P(property);
33058 		} else {
33059 			name = zval_try_get_tmp_string(property, &tmp_name);
33060 			if (UNEXPECTED(!name)) {
33061 				UNDEF_RESULT();
33062 				break;
33063 			}
33064 		}
33065 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
33066 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
33067 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33068 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33069 					ZVAL_NULL(EX_VAR(opline->result.var));
33070 				}
33071 			} else {
33072 				if (IS_CONST == IS_CONST) {
33073 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
33074 				} else {
33075 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
33076 				}
33077 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
33078 			}
33079 		} else {
33080 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
33081 		}
33082 		if (IS_CONST != IS_CONST) {
33083 			zend_tmp_string_release(tmp_name);
33084 		}
33085 	} while (0);
33086 
33087 
33088 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33089 }
33090 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33091 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33092 {
33093 	USE_OPLINE
33094 	zval *object;
33095 	zval *property;
33096 	zval *zptr;
33097 	void **cache_slot;
33098 	zend_property_info *prop_info;
33099 	zend_object *zobj;
33100 	zend_string *name, *tmp_name;
33101 
33102 	SAVE_OPLINE();
33103 	object = &EX(This);
33104 	property = RT_CONSTANT(opline, opline->op2);
33105 
33106 	do {
33107 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33108 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33109 				object = Z_REFVAL_P(object);
33110 				goto post_incdec_object;
33111 			}
33112 			if (IS_UNUSED == IS_CV
33113 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33114 				ZVAL_UNDEFINED_OP1();
33115 			}
33116 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33117 			break;
33118 		}
33119 
33120 post_incdec_object:
33121 		/* here we are sure we are dealing with an object */
33122 		zobj = Z_OBJ_P(object);
33123 		if (IS_CONST == IS_CONST) {
33124 			name = Z_STR_P(property);
33125 		} else {
33126 			name = zval_try_get_tmp_string(property, &tmp_name);
33127 			if (UNEXPECTED(!name)) {
33128 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33129 				break;
33130 			}
33131 		}
33132 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
33133 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
33134 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33135 				ZVAL_NULL(EX_VAR(opline->result.var));
33136 			} else {
33137 				if (IS_CONST == IS_CONST) {
33138 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
33139 				} else {
33140 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
33141 				}
33142 
33143 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
33144 			}
33145 		} else {
33146 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
33147 		}
33148 		if (IS_CONST != IS_CONST) {
33149 			zend_tmp_string_release(tmp_name);
33150 		}
33151 	} while (0);
33152 
33153 
33154 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33155 }
33156 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33157 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33158 {
33159 	USE_OPLINE
33160 	zval *container;
33161 	void **cache_slot = NULL;
33162 
33163 	SAVE_OPLINE();
33164 	container = &EX(This);
33165 
33166 	if (IS_UNUSED == IS_CONST ||
33167 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33168 		do {
33169 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33170 				container = Z_REFVAL_P(container);
33171 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
33172 					break;
33173 				}
33174 			}
33175 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33176 				ZVAL_UNDEFINED_OP1();
33177 			}
33178 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
33179 			ZVAL_NULL(EX_VAR(opline->result.var));
33180 			goto fetch_obj_r_finish;
33181 		} while (0);
33182 	}
33183 
33184 	/* here we are sure we are dealing with an object */
33185 	do {
33186 		zend_object *zobj = Z_OBJ_P(container);
33187 		zend_string *name, *tmp_name;
33188 		zval *retval;
33189 
33190 		if (IS_CONST == IS_CONST) {
33191 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
33192 
33193 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
33194 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33195 
33196 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33197 					retval = OBJ_PROP(zobj, prop_offset);
33198 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
33199 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33200 							goto fetch_obj_r_copy;
33201 						} else {
33202 fetch_obj_r_fast_copy:
33203 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33204 							ZEND_VM_NEXT_OPCODE();
33205 						}
33206 					}
33207 				} else if (EXPECTED(zobj->properties != NULL)) {
33208 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33209 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
33210 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
33211 
33212 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
33213 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
33214 
33215 							if (EXPECTED(p->key == name) ||
33216 							    (EXPECTED(p->h == ZSTR_H(name)) &&
33217 							     EXPECTED(p->key != NULL) &&
33218 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
33219 								retval = &p->val;
33220 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33221 									goto fetch_obj_r_copy;
33222 								} else {
33223 									goto fetch_obj_r_fast_copy;
33224 								}
33225 							}
33226 						}
33227 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
33228 					}
33229 					retval = zend_hash_find_known_hash(zobj->properties, name);
33230 					if (EXPECTED(retval)) {
33231 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
33232 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
33233 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33234 							goto fetch_obj_r_copy;
33235 						} else {
33236 							goto fetch_obj_r_fast_copy;
33237 						}
33238 					}
33239 				}
33240 			}
33241 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33242 		} else {
33243 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33244 			if (UNEXPECTED(!name)) {
33245 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33246 				break;
33247 			}
33248 		}
33249 
33250 #if ZEND_DEBUG
33251 		/* For non-standard object handlers, verify a declared property type in debug builds.
33252 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
33253 		zend_property_info *prop_info = NULL;
33254 		if (zobj->handlers->read_property != zend_std_read_property) {
33255 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
33256 		}
33257 #endif
33258 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
33259 #if ZEND_DEBUG
33260 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
33261 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
33262 			ZVAL_OPT_DEREF(retval);
33263 			zend_verify_property_type(prop_info, retval, /* strict */ true);
33264 		}
33265 #endif
33266 
33267 		if (IS_CONST != IS_CONST) {
33268 			zend_tmp_string_release(tmp_name);
33269 		}
33270 
33271 		if (retval != EX_VAR(opline->result.var)) {
33272 fetch_obj_r_copy:
33273 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33274 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
33275 			zend_unwrap_reference(retval);
33276 		}
33277 	} while (0);
33278 
33279 fetch_obj_r_finish:
33280 
33281 
33282 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33283 }
33284 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33285 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33286 {
33287 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33288 }
33289 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33290 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33291 {
33292 	USE_OPLINE
33293 	zval *property, *container, *result;
33294 
33295 	SAVE_OPLINE();
33296 
33297 	container = &EX(This);
33298 	property = RT_CONSTANT(opline, opline->op2);
33299 	result = EX_VAR(opline->result.var);
33300 	zend_fetch_property_address(
33301 		result, container, IS_UNUSED, property, IS_CONST,
33302 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
33303 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
33304 
33305 	if (IS_UNUSED == IS_VAR) {
33306 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
33307 	}
33308 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33309 }
33310 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33312 {
33313 	USE_OPLINE
33314 	zval *property, *container, *result;
33315 
33316 	SAVE_OPLINE();
33317 	container = &EX(This);
33318 	property = RT_CONSTANT(opline, opline->op2);
33319 	result = EX_VAR(opline->result.var);
33320 	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 OPLINE_CC EXECUTE_DATA_CC);
33321 
33322 	if (IS_UNUSED == IS_VAR) {
33323 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
33324 	}
33325 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33326 }
33327 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33328 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33329 {
33330 	USE_OPLINE
33331 	zval *container;
33332 	void **cache_slot = NULL;
33333 
33334 	SAVE_OPLINE();
33335 	container = &EX(This);
33336 
33337 	if (IS_UNUSED == IS_CONST ||
33338 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33339 		do {
33340 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33341 				container = Z_REFVAL_P(container);
33342 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
33343 					break;
33344 				}
33345 			}
33346 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
33347 				ZVAL_UNDEFINED_OP2();
33348 			}
33349 			ZVAL_NULL(EX_VAR(opline->result.var));
33350 			goto fetch_obj_is_finish;
33351 		} while (0);
33352 	}
33353 
33354 	/* here we are sure we are dealing with an object */
33355 	do {
33356 		zend_object *zobj = Z_OBJ_P(container);
33357 		zend_string *name, *tmp_name;
33358 		zval *retval;
33359 
33360 		if (IS_CONST == IS_CONST) {
33361 			cache_slot = CACHE_ADDR(opline->extended_value);
33362 
33363 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
33364 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33365 
33366 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33367 					retval = OBJ_PROP(zobj, prop_offset);
33368 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
33369 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33370 							goto fetch_obj_is_copy;
33371 						} else {
33372 fetch_obj_is_fast_copy:
33373 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33374 							ZEND_VM_NEXT_OPCODE();
33375 						}
33376 					}
33377 				} else if (EXPECTED(zobj->properties != NULL)) {
33378 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33379 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
33380 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
33381 
33382 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
33383 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
33384 
33385 							if (EXPECTED(p->key == name) ||
33386 							    (EXPECTED(p->h == ZSTR_H(name)) &&
33387 							     EXPECTED(p->key != NULL) &&
33388 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
33389 								retval = &p->val;
33390 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33391 									goto fetch_obj_is_copy;
33392 								} else {
33393 									goto fetch_obj_is_fast_copy;
33394 								}
33395 							}
33396 						}
33397 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
33398 					}
33399 					retval = zend_hash_find_known_hash(zobj->properties, name);
33400 					if (EXPECTED(retval)) {
33401 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
33402 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
33403 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33404 							goto fetch_obj_is_copy;
33405 						} else {
33406 							goto fetch_obj_is_fast_copy;
33407 						}
33408 					}
33409 				}
33410 			}
33411 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33412 		} else {
33413 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33414 			if (UNEXPECTED(!name)) {
33415 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33416 				break;
33417 			}
33418 		}
33419 
33420 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
33421 
33422 		if (IS_CONST != IS_CONST) {
33423 			zend_tmp_string_release(tmp_name);
33424 		}
33425 
33426 		if (retval != EX_VAR(opline->result.var)) {
33427 fetch_obj_is_copy:
33428 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33429 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
33430 			zend_unwrap_reference(retval);
33431 		}
33432 	} while (0);
33433 
33434 fetch_obj_is_finish:
33435 
33436 
33437 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33438 }
33439 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33440 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33441 {
33442 #if 0
33443 	USE_OPLINE
33444 #endif
33445 
33446 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
33447 		/* Behave like FETCH_OBJ_W */
33448 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
33449 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33450 		}
33451 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33452 	} else {
33453 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33454 	}
33455 }
33456 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33457 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33458 {
33459 	USE_OPLINE
33460 	zval *container, *property, *result;
33461 
33462 	SAVE_OPLINE();
33463 	container = &EX(This);
33464 	property = RT_CONSTANT(opline, opline->op2);
33465 	result = EX_VAR(opline->result.var);
33466 	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 OPLINE_CC EXECUTE_DATA_CC);
33467 
33468 	if (IS_UNUSED == IS_VAR) {
33469 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
33470 	}
33471 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33472 }
33473 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33474 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33475 {
33476 	USE_OPLINE
33477 	zval *object, *value, tmp;
33478 	zend_object *zobj;
33479 	zend_string *name, *tmp_name;
33480 	zend_refcounted *garbage = NULL;
33481 
33482 	SAVE_OPLINE();
33483 	object = &EX(This);
33484 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
33485 
33486 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33487 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33488 			object = Z_REFVAL_P(object);
33489 			goto assign_object;
33490 		}
33491 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
33492 		value = &EG(uninitialized_zval);
33493 		goto free_and_exit_assign_obj;
33494 	}
33495 
33496 assign_object:
33497 	zobj = Z_OBJ_P(object);
33498 	if (IS_CONST == IS_CONST) {
33499 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33500 			void **cache_slot = CACHE_ADDR(opline->extended_value);
33501 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33502 			zval *property_val;
33503 
33504 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33505 				property_val = OBJ_PROP(zobj, prop_offset);
33506 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
33507 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33508 
33509 					if (prop_info != NULL) {
33510 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
33511 						goto free_and_exit_assign_obj;
33512 					} else {
33513 fast_assign_obj:
33514 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
33515 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33516 							ZVAL_COPY(EX_VAR(opline->result.var), value);
33517 						}
33518 						goto exit_assign_obj;
33519 					}
33520 				}
33521 			} else {
33522 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33523 				if (EXPECTED(zobj->properties != NULL)) {
33524 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33525 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33526 							GC_DELREF(zobj->properties);
33527 						}
33528 						zobj->properties = zend_array_dup(zobj->properties);
33529 					}
33530 					property_val = zend_hash_find_known_hash(zobj->properties, name);
33531 					if (property_val) {
33532 						goto fast_assign_obj;
33533 					}
33534 				}
33535 
33536 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
33537 					if (EXPECTED(zobj->properties == NULL)) {
33538 						rebuild_object_properties(zobj);
33539 					}
33540 					if (IS_CONST == IS_CONST) {
33541 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33542 							Z_ADDREF_P(value);
33543 						}
33544 					} else if (IS_CONST != IS_TMP_VAR) {
33545 						if (Z_ISREF_P(value)) {
33546 							if (IS_CONST == IS_VAR) {
33547 								zend_reference *ref = Z_REF_P(value);
33548 								if (GC_DELREF(ref) == 0) {
33549 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33550 									efree_size(ref, sizeof(zend_reference));
33551 									value = &tmp;
33552 								} else {
33553 									value = Z_REFVAL_P(value);
33554 									Z_TRY_ADDREF_P(value);
33555 								}
33556 							} else {
33557 								value = Z_REFVAL_P(value);
33558 								Z_TRY_ADDREF_P(value);
33559 							}
33560 						} else if (IS_CONST == IS_CV) {
33561 							Z_TRY_ADDREF_P(value);
33562 						}
33563 						}
33564 					zend_hash_add_new(zobj->properties, name, value);
33565 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33566 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33567 					}
33568 					goto exit_assign_obj;
33569 				}
33570 			}
33571 		}
33572 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33573 	} else {
33574 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33575 		if (UNEXPECTED(!name)) {
33576 
33577 			UNDEF_RESULT();
33578 			goto exit_assign_obj;
33579 		}
33580 	}
33581 
33582 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
33583 		ZVAL_DEREF(value);
33584 	}
33585 
33586 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33587 
33588 	if (IS_CONST != IS_CONST) {
33589 		zend_tmp_string_release(tmp_name);
33590 	}
33591 
33592 free_and_exit_assign_obj:
33593 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
33594 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
33595 	}
33596 
33597 exit_assign_obj:
33598 	if (garbage) {
33599 		GC_DTOR_NO_REF(garbage);
33600 	}
33601 
33602 
33603 	/* assign_obj has two opcodes! */
33604 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33605 }
33606 
33607 /* 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)33608 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33609 {
33610 	USE_OPLINE
33611 	zval *object, *value, tmp;
33612 	zend_object *zobj;
33613 	zend_string *name, *tmp_name;
33614 	zend_refcounted *garbage = NULL;
33615 
33616 	SAVE_OPLINE();
33617 	object = &EX(This);
33618 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
33619 
33620 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33621 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33622 			object = Z_REFVAL_P(object);
33623 			goto assign_object;
33624 		}
33625 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
33626 		value = &EG(uninitialized_zval);
33627 		goto free_and_exit_assign_obj;
33628 	}
33629 
33630 assign_object:
33631 	zobj = Z_OBJ_P(object);
33632 	if (IS_CONST == IS_CONST) {
33633 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33634 			void **cache_slot = CACHE_ADDR(opline->extended_value);
33635 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33636 			zval *property_val;
33637 
33638 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33639 				property_val = OBJ_PROP(zobj, prop_offset);
33640 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
33641 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33642 
33643 					if (prop_info != NULL) {
33644 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
33645 						goto free_and_exit_assign_obj;
33646 					} else {
33647 fast_assign_obj:
33648 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
33649 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33650 							ZVAL_COPY(EX_VAR(opline->result.var), value);
33651 						}
33652 						goto exit_assign_obj;
33653 					}
33654 				}
33655 			} else {
33656 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33657 				if (EXPECTED(zobj->properties != NULL)) {
33658 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33659 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33660 							GC_DELREF(zobj->properties);
33661 						}
33662 						zobj->properties = zend_array_dup(zobj->properties);
33663 					}
33664 					property_val = zend_hash_find_known_hash(zobj->properties, name);
33665 					if (property_val) {
33666 						goto fast_assign_obj;
33667 					}
33668 				}
33669 
33670 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
33671 					if (EXPECTED(zobj->properties == NULL)) {
33672 						rebuild_object_properties(zobj);
33673 					}
33674 					if (IS_TMP_VAR == IS_CONST) {
33675 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33676 							Z_ADDREF_P(value);
33677 						}
33678 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
33679 						if (Z_ISREF_P(value)) {
33680 							if (IS_TMP_VAR == IS_VAR) {
33681 								zend_reference *ref = Z_REF_P(value);
33682 								if (GC_DELREF(ref) == 0) {
33683 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33684 									efree_size(ref, sizeof(zend_reference));
33685 									value = &tmp;
33686 								} else {
33687 									value = Z_REFVAL_P(value);
33688 									Z_TRY_ADDREF_P(value);
33689 								}
33690 							} else {
33691 								value = Z_REFVAL_P(value);
33692 								Z_TRY_ADDREF_P(value);
33693 							}
33694 						} else if (IS_TMP_VAR == IS_CV) {
33695 							Z_TRY_ADDREF_P(value);
33696 						}
33697 						}
33698 					zend_hash_add_new(zobj->properties, name, value);
33699 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33700 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33701 					}
33702 					goto exit_assign_obj;
33703 				}
33704 			}
33705 		}
33706 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33707 	} else {
33708 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33709 		if (UNEXPECTED(!name)) {
33710 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33711 			UNDEF_RESULT();
33712 			goto exit_assign_obj;
33713 		}
33714 	}
33715 
33716 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
33717 		ZVAL_DEREF(value);
33718 	}
33719 
33720 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33721 
33722 	if (IS_CONST != IS_CONST) {
33723 		zend_tmp_string_release(tmp_name);
33724 	}
33725 
33726 free_and_exit_assign_obj:
33727 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
33728 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
33729 	}
33730 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33731 exit_assign_obj:
33732 	if (garbage) {
33733 		GC_DTOR_NO_REF(garbage);
33734 	}
33735 
33736 
33737 	/* assign_obj has two opcodes! */
33738 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33739 }
33740 
33741 /* 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)33742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33743 {
33744 	USE_OPLINE
33745 	zval *object, *value, tmp;
33746 	zend_object *zobj;
33747 	zend_string *name, *tmp_name;
33748 	zend_refcounted *garbage = NULL;
33749 
33750 	SAVE_OPLINE();
33751 	object = &EX(This);
33752 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
33753 
33754 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33755 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33756 			object = Z_REFVAL_P(object);
33757 			goto assign_object;
33758 		}
33759 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
33760 		value = &EG(uninitialized_zval);
33761 		goto free_and_exit_assign_obj;
33762 	}
33763 
33764 assign_object:
33765 	zobj = Z_OBJ_P(object);
33766 	if (IS_CONST == IS_CONST) {
33767 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33768 			void **cache_slot = CACHE_ADDR(opline->extended_value);
33769 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33770 			zval *property_val;
33771 
33772 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33773 				property_val = OBJ_PROP(zobj, prop_offset);
33774 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
33775 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33776 
33777 					if (prop_info != NULL) {
33778 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
33779 						goto free_and_exit_assign_obj;
33780 					} else {
33781 fast_assign_obj:
33782 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
33783 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33784 							ZVAL_COPY(EX_VAR(opline->result.var), value);
33785 						}
33786 						goto exit_assign_obj;
33787 					}
33788 				}
33789 			} else {
33790 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33791 				if (EXPECTED(zobj->properties != NULL)) {
33792 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33793 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33794 							GC_DELREF(zobj->properties);
33795 						}
33796 						zobj->properties = zend_array_dup(zobj->properties);
33797 					}
33798 					property_val = zend_hash_find_known_hash(zobj->properties, name);
33799 					if (property_val) {
33800 						goto fast_assign_obj;
33801 					}
33802 				}
33803 
33804 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
33805 					if (EXPECTED(zobj->properties == NULL)) {
33806 						rebuild_object_properties(zobj);
33807 					}
33808 					if (IS_VAR == IS_CONST) {
33809 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33810 							Z_ADDREF_P(value);
33811 						}
33812 					} else if (IS_VAR != IS_TMP_VAR) {
33813 						if (Z_ISREF_P(value)) {
33814 							if (IS_VAR == IS_VAR) {
33815 								zend_reference *ref = Z_REF_P(value);
33816 								if (GC_DELREF(ref) == 0) {
33817 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33818 									efree_size(ref, sizeof(zend_reference));
33819 									value = &tmp;
33820 								} else {
33821 									value = Z_REFVAL_P(value);
33822 									Z_TRY_ADDREF_P(value);
33823 								}
33824 							} else {
33825 								value = Z_REFVAL_P(value);
33826 								Z_TRY_ADDREF_P(value);
33827 							}
33828 						} else if (IS_VAR == IS_CV) {
33829 							Z_TRY_ADDREF_P(value);
33830 						}
33831 						}
33832 					zend_hash_add_new(zobj->properties, name, value);
33833 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33834 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33835 					}
33836 					goto exit_assign_obj;
33837 				}
33838 			}
33839 		}
33840 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33841 	} else {
33842 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33843 		if (UNEXPECTED(!name)) {
33844 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33845 			UNDEF_RESULT();
33846 			goto exit_assign_obj;
33847 		}
33848 	}
33849 
33850 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
33851 		ZVAL_DEREF(value);
33852 	}
33853 
33854 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33855 
33856 	if (IS_CONST != IS_CONST) {
33857 		zend_tmp_string_release(tmp_name);
33858 	}
33859 
33860 free_and_exit_assign_obj:
33861 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
33862 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
33863 	}
33864 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33865 exit_assign_obj:
33866 	if (garbage) {
33867 		GC_DTOR_NO_REF(garbage);
33868 	}
33869 
33870 
33871 	/* assign_obj has two opcodes! */
33872 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33873 }
33874 
33875 /* 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)33876 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33877 {
33878 	USE_OPLINE
33879 	zval *object, *value, tmp;
33880 	zend_object *zobj;
33881 	zend_string *name, *tmp_name;
33882 	zend_refcounted *garbage = NULL;
33883 
33884 	SAVE_OPLINE();
33885 	object = &EX(This);
33886 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
33887 
33888 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33889 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33890 			object = Z_REFVAL_P(object);
33891 			goto assign_object;
33892 		}
33893 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
33894 		value = &EG(uninitialized_zval);
33895 		goto free_and_exit_assign_obj;
33896 	}
33897 
33898 assign_object:
33899 	zobj = Z_OBJ_P(object);
33900 	if (IS_CONST == IS_CONST) {
33901 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33902 			void **cache_slot = CACHE_ADDR(opline->extended_value);
33903 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33904 			zval *property_val;
33905 
33906 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33907 				property_val = OBJ_PROP(zobj, prop_offset);
33908 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
33909 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33910 
33911 					if (prop_info != NULL) {
33912 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
33913 						goto free_and_exit_assign_obj;
33914 					} else {
33915 fast_assign_obj:
33916 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
33917 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33918 							ZVAL_COPY(EX_VAR(opline->result.var), value);
33919 						}
33920 						goto exit_assign_obj;
33921 					}
33922 				}
33923 			} else {
33924 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33925 				if (EXPECTED(zobj->properties != NULL)) {
33926 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33927 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33928 							GC_DELREF(zobj->properties);
33929 						}
33930 						zobj->properties = zend_array_dup(zobj->properties);
33931 					}
33932 					property_val = zend_hash_find_known_hash(zobj->properties, name);
33933 					if (property_val) {
33934 						goto fast_assign_obj;
33935 					}
33936 				}
33937 
33938 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
33939 					if (EXPECTED(zobj->properties == NULL)) {
33940 						rebuild_object_properties(zobj);
33941 					}
33942 					if (IS_CV == IS_CONST) {
33943 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33944 							Z_ADDREF_P(value);
33945 						}
33946 					} else if (IS_CV != IS_TMP_VAR) {
33947 						if (Z_ISREF_P(value)) {
33948 							if (IS_CV == IS_VAR) {
33949 								zend_reference *ref = Z_REF_P(value);
33950 								if (GC_DELREF(ref) == 0) {
33951 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33952 									efree_size(ref, sizeof(zend_reference));
33953 									value = &tmp;
33954 								} else {
33955 									value = Z_REFVAL_P(value);
33956 									Z_TRY_ADDREF_P(value);
33957 								}
33958 							} else {
33959 								value = Z_REFVAL_P(value);
33960 								Z_TRY_ADDREF_P(value);
33961 							}
33962 						} else if (IS_CV == IS_CV) {
33963 							Z_TRY_ADDREF_P(value);
33964 						}
33965 						}
33966 					zend_hash_add_new(zobj->properties, name, value);
33967 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33968 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33969 					}
33970 					goto exit_assign_obj;
33971 				}
33972 			}
33973 		}
33974 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33975 	} else {
33976 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33977 		if (UNEXPECTED(!name)) {
33978 
33979 			UNDEF_RESULT();
33980 			goto exit_assign_obj;
33981 		}
33982 	}
33983 
33984 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
33985 		ZVAL_DEREF(value);
33986 	}
33987 
33988 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33989 
33990 	if (IS_CONST != IS_CONST) {
33991 		zend_tmp_string_release(tmp_name);
33992 	}
33993 
33994 free_and_exit_assign_obj:
33995 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
33996 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
33997 	}
33998 
33999 exit_assign_obj:
34000 	if (garbage) {
34001 		GC_DTOR_NO_REF(garbage);
34002 	}
34003 
34004 
34005 	/* assign_obj has two opcodes! */
34006 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34007 }
34008 
34009 /* 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)34010 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34011 {
34012 	USE_OPLINE
34013 	zval *property, *container, *value_ptr;
34014 
34015 	SAVE_OPLINE();
34016 
34017 	container = &EX(This);
34018 	property = RT_CONSTANT(opline, opline->op2);
34019 
34020 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
34021 
34022 	if (1) {
34023 		if (IS_UNUSED == IS_UNUSED) {
34024 			if (IS_CONST == IS_CONST) {
34025 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34026 			} else {
34027 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34028 			}
34029 		} else {
34030 			if (IS_CONST == IS_CONST) {
34031 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34032 			} else {
34033 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34034 			}
34035 		}
34036 	} else {
34037 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34038 	}
34039 
34040 
34041 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
34042 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34043 }
34044 
34045 /* 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)34046 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34047 {
34048 	USE_OPLINE
34049 	zval *property, *container, *value_ptr;
34050 
34051 	SAVE_OPLINE();
34052 
34053 	container = &EX(This);
34054 	property = RT_CONSTANT(opline, opline->op2);
34055 
34056 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
34057 
34058 	if (1) {
34059 		if (IS_UNUSED == IS_UNUSED) {
34060 			if (IS_CONST == IS_CONST) {
34061 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34062 			} else {
34063 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34064 			}
34065 		} else {
34066 			if (IS_CONST == IS_CONST) {
34067 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34068 			} else {
34069 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34070 			}
34071 		}
34072 	} else {
34073 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34074 	}
34075 
34076 
34077 
34078 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34079 }
34080 
34081 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34082 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34083 {
34084 	USE_OPLINE
34085 	zend_string **rope;
34086 	zval *var;
34087 
34088 	/* Compiler allocates the necessary number of zval slots to keep the rope */
34089 	rope = (zend_string**)EX_VAR(opline->result.var);
34090 	if (IS_CONST == IS_CONST) {
34091 		var = RT_CONSTANT(opline, opline->op2);
34092 		rope[0] = Z_STR_P(var);
34093 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
34094 			Z_ADDREF_P(var);
34095 		}
34096 	} else {
34097 		var = RT_CONSTANT(opline, opline->op2);
34098 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
34099 			if (IS_CONST == IS_CV) {
34100 				rope[0] = zend_string_copy(Z_STR_P(var));
34101 			} else {
34102 				rope[0] = Z_STR_P(var);
34103 			}
34104 		} else {
34105 			SAVE_OPLINE();
34106 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
34107 				ZVAL_UNDEFINED_OP2();
34108 			}
34109 			rope[0] = zval_get_string_func(var);
34110 
34111 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34112 		}
34113 	}
34114 	ZEND_VM_NEXT_OPCODE();
34115 }
34116 
ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34117 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34118 {
34119 	zval *class_name;
34120 	USE_OPLINE
34121 
34122 	SAVE_OPLINE();
34123 	if (IS_CONST == IS_UNUSED) {
34124 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
34125 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34126 	} else if (IS_CONST == IS_CONST) {
34127 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
34128 
34129 		if (UNEXPECTED(ce == NULL)) {
34130 			class_name = RT_CONSTANT(opline, opline->op2);
34131 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
34132 			CACHE_PTR(opline->extended_value, ce);
34133 		}
34134 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
34135 	} else {
34136 		class_name = RT_CONSTANT(opline, opline->op2);
34137 try_class_name:
34138 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
34139 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
34140 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
34141 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
34142 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
34143 			class_name = Z_REFVAL_P(class_name);
34144 			goto try_class_name;
34145 		} else {
34146 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
34147 				ZVAL_UNDEFINED_OP2();
34148 				if (UNEXPECTED(EG(exception) != NULL)) {
34149 					HANDLE_EXCEPTION();
34150 				}
34151 			}
34152 			zend_throw_error(NULL, "Class name must be a valid object or a string");
34153 		}
34154 	}
34155 
34156 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34157 }
34158 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34159 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34160 {
34161 	USE_OPLINE
34162 	zval *function_name;
34163 	zval *object;
34164 	zend_function *fbc;
34165 	zend_class_entry *called_scope;
34166 	zend_object *obj;
34167 	zend_execute_data *call;
34168 	uint32_t call_info;
34169 
34170 	SAVE_OPLINE();
34171 
34172 	object = &EX(This);
34173 
34174 	if (IS_CONST != IS_CONST) {
34175 		function_name = RT_CONSTANT(opline, opline->op2);
34176 	}
34177 
34178 	if (IS_CONST != IS_CONST &&
34179 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
34180 		do {
34181 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
34182 				function_name = Z_REFVAL_P(function_name);
34183 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
34184 					break;
34185 				}
34186 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
34187 				ZVAL_UNDEFINED_OP2();
34188 				if (UNEXPECTED(EG(exception) != NULL)) {
34189 
34190 					HANDLE_EXCEPTION();
34191 				}
34192 			}
34193 			zend_throw_error(NULL, "Method name must be a string");
34194 
34195 
34196 			HANDLE_EXCEPTION();
34197 		} while (0);
34198 	}
34199 
34200 	if (IS_UNUSED == IS_UNUSED) {
34201 		obj = Z_OBJ_P(object);
34202 	} else {
34203 		do {
34204 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
34205 				obj = Z_OBJ_P(object);
34206 			} else {
34207 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
34208 					zend_reference *ref = Z_REF_P(object);
34209 
34210 					object = &ref->val;
34211 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
34212 						obj = Z_OBJ_P(object);
34213 						if (IS_UNUSED & IS_VAR) {
34214 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
34215 								efree_size(ref, sizeof(zend_reference));
34216 							} else {
34217 								Z_ADDREF_P(object);
34218 							}
34219 						}
34220 						break;
34221 					}
34222 				}
34223 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34224 					object = ZVAL_UNDEFINED_OP1();
34225 					if (UNEXPECTED(EG(exception) != NULL)) {
34226 						if (IS_CONST != IS_CONST) {
34227 
34228 						}
34229 						HANDLE_EXCEPTION();
34230 					}
34231 				}
34232 				if (IS_CONST == IS_CONST) {
34233 					function_name = RT_CONSTANT(opline, opline->op2);
34234 				}
34235 				zend_invalid_method_call(object, function_name);
34236 
34237 
34238 				HANDLE_EXCEPTION();
34239 			}
34240 		} while (0);
34241 	}
34242 
34243 	called_scope = obj->ce;
34244 
34245 	if (IS_CONST == IS_CONST &&
34246 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
34247 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
34248 	} else {
34249 		zend_object *orig_obj = obj;
34250 
34251 		if (IS_CONST == IS_CONST) {
34252 			function_name = RT_CONSTANT(opline, opline->op2);
34253 		}
34254 
34255 		/* First, locate the function. */
34256 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
34257 		if (UNEXPECTED(fbc == NULL)) {
34258 			if (EXPECTED(!EG(exception))) {
34259 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
34260 			}
34261 
34262 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
34263 				zend_objects_store_del(orig_obj);
34264 			}
34265 			HANDLE_EXCEPTION();
34266 		}
34267 		if (IS_CONST == IS_CONST &&
34268 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
34269 		    EXPECTED(obj == orig_obj)) {
34270 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
34271 		}
34272 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
34273 			GC_ADDREF(obj); /* For $this pointer */
34274 			if (GC_DELREF(orig_obj) == 0) {
34275 				zend_objects_store_del(orig_obj);
34276 			}
34277 		}
34278 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34279 			init_func_run_time_cache(&fbc->op_array);
34280 		}
34281 	}
34282 
34283 	if (IS_CONST != IS_CONST) {
34284 
34285 	}
34286 
34287 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
34288 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
34289 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
34290 			zend_objects_store_del(obj);
34291 			if (UNEXPECTED(EG(exception))) {
34292 				HANDLE_EXCEPTION();
34293 			}
34294 		}
34295 		/* call static method */
34296 		obj = (zend_object*)called_scope;
34297 		call_info = ZEND_CALL_NESTED_FUNCTION;
34298 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
34299 		if (IS_UNUSED == IS_CV) {
34300 			GC_ADDREF(obj); /* For $this pointer */
34301 		}
34302 		/* CV may be changed indirectly (e.g. when it's a reference) */
34303 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
34304 	}
34305 
34306 	call = zend_vm_stack_push_call_frame(call_info,
34307 		fbc, opline->extended_value, obj);
34308 	call->prev_execute_data = EX(call);
34309 	EX(call) = call;
34310 
34311 	ZEND_VM_NEXT_OPCODE();
34312 }
34313 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34314 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34315 {
34316 	USE_OPLINE
34317 	zval *function_name;
34318 	zend_class_entry *ce;
34319 	uint32_t call_info;
34320 	zend_function *fbc;
34321 	zend_execute_data *call;
34322 
34323 	SAVE_OPLINE();
34324 
34325 	if (IS_UNUSED == IS_CONST) {
34326 		/* no function found. try a static method in class */
34327 		ce = CACHED_PTR(opline->result.num);
34328 		if (UNEXPECTED(ce == NULL)) {
34329 			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);
34330 			if (UNEXPECTED(ce == NULL)) {
34331 
34332 				HANDLE_EXCEPTION();
34333 			}
34334 			if (IS_CONST != IS_CONST) {
34335 				CACHE_PTR(opline->result.num, ce);
34336 			}
34337 		}
34338 	} else if (IS_UNUSED == IS_UNUSED) {
34339 		ce = zend_fetch_class(NULL, opline->op1.num);
34340 		if (UNEXPECTED(ce == NULL)) {
34341 
34342 			HANDLE_EXCEPTION();
34343 		}
34344 	} else {
34345 		ce = Z_CE_P(EX_VAR(opline->op1.var));
34346 	}
34347 
34348 	if (IS_UNUSED == IS_CONST &&
34349 	    IS_CONST == IS_CONST &&
34350 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
34351 		/* nothing to do */
34352 	} else if (IS_UNUSED != IS_CONST &&
34353 	           IS_CONST == IS_CONST &&
34354 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
34355 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
34356 	} else if (IS_CONST != IS_UNUSED) {
34357 		function_name = RT_CONSTANT(opline, opline->op2);
34358 		if (IS_CONST != IS_CONST) {
34359 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
34360 				do {
34361 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
34362 						function_name = Z_REFVAL_P(function_name);
34363 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
34364 							break;
34365 						}
34366 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
34367 						ZVAL_UNDEFINED_OP2();
34368 						if (UNEXPECTED(EG(exception) != NULL)) {
34369 							HANDLE_EXCEPTION();
34370 						}
34371 					}
34372 					zend_throw_error(NULL, "Method name must be a string");
34373 
34374 					HANDLE_EXCEPTION();
34375 				} while (0);
34376 			}
34377 		}
34378 
34379 		if (ce->get_static_method) {
34380 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
34381 		} else {
34382 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
34383 		}
34384 		if (UNEXPECTED(fbc == NULL)) {
34385 			if (EXPECTED(!EG(exception))) {
34386 				zend_undefined_method(ce, Z_STR_P(function_name));
34387 			}
34388 
34389 			HANDLE_EXCEPTION();
34390 		}
34391 		if (IS_CONST == IS_CONST &&
34392 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
34393 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
34394 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
34395 		}
34396 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34397 			init_func_run_time_cache(&fbc->op_array);
34398 		}
34399 		if (IS_CONST != IS_CONST) {
34400 
34401 		}
34402 	} else {
34403 		if (UNEXPECTED(ce->constructor == NULL)) {
34404 			zend_throw_error(NULL, "Cannot call constructor");
34405 			HANDLE_EXCEPTION();
34406 		}
34407 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
34408 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
34409 			HANDLE_EXCEPTION();
34410 		}
34411 		fbc = ce->constructor;
34412 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34413 			init_func_run_time_cache(&fbc->op_array);
34414 		}
34415 	}
34416 
34417 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
34418 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
34419 			ce = (zend_class_entry*)Z_OBJ(EX(This));
34420 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
34421 		} else {
34422 			zend_non_static_method_call(fbc);
34423 			HANDLE_EXCEPTION();
34424 		}
34425 	} else {
34426 		/* previous opcode is ZEND_FETCH_CLASS */
34427 		if (IS_UNUSED == IS_UNUSED
34428 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
34429 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
34430 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
34431 				ce = Z_OBJCE(EX(This));
34432 			} else {
34433 				ce = Z_CE(EX(This));
34434 			}
34435 		}
34436 		call_info = ZEND_CALL_NESTED_FUNCTION;
34437 	}
34438 
34439 	call = zend_vm_stack_push_call_frame(call_info,
34440 		fbc, opline->extended_value, ce);
34441 	call->prev_execute_data = EX(call);
34442 	EX(call) = call;
34443 
34444 	ZEND_VM_NEXT_OPCODE();
34445 }
34446 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34447 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34448 {
34449 	USE_OPLINE
34450 	uint32_t arg_num;
34451 
34452 	if (IS_CONST == IS_CONST) {
34453 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
34454 		arg_num = zend_get_arg_offset_by_name(
34455 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
34456 		if (UNEXPECTED(arg_num == 0)) {
34457 			/* Treat this as a by-value argument, and throw an error during SEND. */
34458 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34459 			ZEND_VM_NEXT_OPCODE();
34460 		}
34461 	} else {
34462 		arg_num = opline->op2.num;
34463 	}
34464 
34465 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
34466 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
34467 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34468 		} else {
34469 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34470 		}
34471 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
34472 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34473 	} else {
34474 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34475 	}
34476 	ZEND_VM_NEXT_OPCODE();
34477 }
34478 
ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34479 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34480 {
34481 	USE_OPLINE
34482 	zend_constant *c;
34483 
34484 	c = CACHED_PTR(opline->extended_value);
34485 	if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
34486 		ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
34487 		ZEND_VM_NEXT_OPCODE();
34488 	}
34489 
34490 	SAVE_OPLINE();
34491 	zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
34492 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34493 }
34494 
ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34495 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34496 {
34497 	zend_class_entry *ce, *scope;
34498 	zend_class_constant *c;
34499 	zval *value, *zv, *constant_zv;
34500 	zend_string *constant_name;
34501 	USE_OPLINE
34502 
34503 	SAVE_OPLINE();
34504 
34505 	do {
34506 		if (IS_UNUSED == IS_CONST && IS_CONST == IS_CONST) {
34507 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
34508 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
34509 				break;
34510 			}
34511 		}
34512 		if (IS_UNUSED == IS_CONST) {
34513 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
34514 				ce = CACHED_PTR(opline->extended_value);
34515 			} else {
34516 				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);
34517 				if (UNEXPECTED(ce == NULL)) {
34518 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34519 
34520 					HANDLE_EXCEPTION();
34521 				}
34522 				CACHE_PTR(opline->extended_value, ce);
34523 			}
34524 		} else if (IS_UNUSED == IS_UNUSED) {
34525 			ce = zend_fetch_class(NULL, opline->op1.num);
34526 			if (UNEXPECTED(ce == NULL)) {
34527 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34528 
34529 				HANDLE_EXCEPTION();
34530 			}
34531 		} else {
34532 			ce = Z_CE_P(EX_VAR(opline->op1.var));
34533 		}
34534 		if (IS_UNUSED != IS_CONST
34535 			&& IS_CONST == IS_CONST
34536 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
34537 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
34538 			break;
34539 		}
34540 
34541 		constant_zv = RT_CONSTANT(opline, opline->op2);
34542 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
34543 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
34544 			ZVAL_UNDEF(EX_VAR(opline->result.var));
34545 
34546 			HANDLE_EXCEPTION();
34547 		}
34548 		constant_name = Z_STR_P(constant_zv);
34549 		/* Magic 'class' for constant OP2 is caught at compile-time */
34550 		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
34551 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
34552 
34553 			ZEND_VM_NEXT_OPCODE();
34554 		}
34555 		zv = IS_CONST == IS_CONST
34556 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
34557 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
34558 
34559 		if (EXPECTED(zv != NULL)) {
34560 			c = Z_PTR_P(zv);
34561 			scope = EX(func)->op_array.scope;
34562 			if (!zend_verify_const_access(c, scope)) {
34563 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34564 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34565 
34566 				HANDLE_EXCEPTION();
34567 			}
34568 
34569 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
34570 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34571 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34572 
34573 				HANDLE_EXCEPTION();
34574 			}
34575 
34576 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
34577 			if (UNEXPECTED(is_constant_deprecated)) {
34578 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34579 
34580 				if (EG(exception)) {
34581 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34582 
34583 					HANDLE_EXCEPTION();
34584 				}
34585 			}
34586 
34587 			value = &c->value;
34588 			// Enums require loading of all class constants to build the backed enum table
34589 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
34590 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
34591 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34592 
34593 					HANDLE_EXCEPTION();
34594 				}
34595 			}
34596 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
34597 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
34598 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34599 
34600 					HANDLE_EXCEPTION();
34601 				}
34602 			}
34603 			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
34604 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
34605 			}
34606 		} else {
34607 			zend_throw_error(NULL, "Undefined constant %s::%s",
34608 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34609 			ZVAL_UNDEF(EX_VAR(opline->result.var));
34610 
34611 			HANDLE_EXCEPTION();
34612 		}
34613 	} while (0);
34614 
34615 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
34616 
34617 	ZEND_VM_NEXT_OPCODE();
34618 }
34619 
ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34620 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34621 {
34622 	zval *array;
34623 	uint32_t size;
34624 	USE_OPLINE
34625 
34626 	array = EX_VAR(opline->result.var);
34627 	if (IS_UNUSED != IS_UNUSED) {
34628 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
34629 		ZVAL_ARR(array, zend_new_array(size));
34630 		/* Explicitly initialize array as not-packed if flag is set */
34631 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
34632 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
34633 		}
34634 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34635 	} else {
34636 		ZVAL_ARR(array, zend_new_array(0));
34637 		ZEND_VM_NEXT_OPCODE();
34638 	}
34639 }
34640 
ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34642 {
34643 	USE_OPLINE
34644 	zval *container;
34645 	zval *offset;
34646 	zend_string *name, *tmp_name;
34647 
34648 	SAVE_OPLINE();
34649 	container = &EX(This);
34650 	offset = RT_CONSTANT(opline, opline->op2);
34651 
34652 	do {
34653 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
34654 			if (Z_ISREF_P(container)) {
34655 				container = Z_REFVAL_P(container);
34656 				if (Z_TYPE_P(container) != IS_OBJECT) {
34657 					if (IS_UNUSED == IS_CV
34658 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
34659 						ZVAL_UNDEFINED_OP1();
34660 					}
34661 					break;
34662 				}
34663 			} else {
34664 				break;
34665 			}
34666 		}
34667 		if (IS_CONST == IS_CONST) {
34668 			name = Z_STR_P(offset);
34669 		} else {
34670 			name = zval_try_get_tmp_string(offset, &tmp_name);
34671 			if (UNEXPECTED(!name)) {
34672 				break;
34673 			}
34674 		}
34675 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
34676 		if (IS_CONST != IS_CONST) {
34677 			zend_tmp_string_release(tmp_name);
34678 		}
34679 	} while (0);
34680 
34681 
34682 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34683 }
34684 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34685 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34686 {
34687 	USE_OPLINE
34688 	zval *container;
34689 	int result;
34690 	zval *offset;
34691 	zend_string *name, *tmp_name;
34692 
34693 	SAVE_OPLINE();
34694 	container = &EX(This);
34695 	offset = RT_CONSTANT(opline, opline->op2);
34696 
34697 	if (IS_UNUSED == IS_CONST ||
34698 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
34699 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
34700 			container = Z_REFVAL_P(container);
34701 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
34702 				result = (opline->extended_value & ZEND_ISEMPTY);
34703 				goto isset_object_finish;
34704 			}
34705 		} else {
34706 			result = (opline->extended_value & ZEND_ISEMPTY);
34707 			goto isset_object_finish;
34708 		}
34709 	}
34710 
34711 	if (IS_CONST == IS_CONST) {
34712 		name = Z_STR_P(offset);
34713 	} else {
34714 		name = zval_try_get_tmp_string(offset, &tmp_name);
34715 		if (UNEXPECTED(!name)) {
34716 			result = 0;
34717 			goto isset_object_finish;
34718 		}
34719 	}
34720 
34721 	result =
34722 		(opline->extended_value & ZEND_ISEMPTY) ^
34723 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
34724 
34725 	if (IS_CONST != IS_CONST) {
34726 		zend_tmp_string_release(tmp_name);
34727 	}
34728 
34729 isset_object_finish:
34730 
34731 
34732 	ZEND_VM_SMART_BRANCH(result, 1);
34733 }
34734 
ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34735 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34736 {
34737 	USE_OPLINE
34738 
34739 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
34740 
34741 	SAVE_OPLINE();
34742 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
34743 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34744 	}
34745 
34746 	/* Destroy the previously yielded value */
34747 	zval_ptr_dtor(&generator->value);
34748 
34749 	/* Destroy the previously yielded key */
34750 	zval_ptr_dtor(&generator->key);
34751 
34752 	/* Set the new yielded value */
34753 	if (IS_UNUSED != IS_UNUSED) {
34754 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
34755 			/* Constants and temporary variables aren't yieldable by reference,
34756 			 * but we still allow them with a notice. */
34757 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
34758 				zval *value;
34759 
34760 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34761 
34762 				value = NULL;
34763 				ZVAL_COPY_VALUE(&generator->value, value);
34764 				if (IS_UNUSED == IS_CONST) {
34765 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
34766 						Z_ADDREF(generator->value);
34767 					}
34768 				}
34769 			} else {
34770 				zval *value_ptr = NULL;
34771 
34772 				/* If a function call result is yielded and the function did
34773 				 * not return by reference we throw a notice. */
34774 				do {
34775 					if (IS_UNUSED == IS_VAR) {
34776 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
34777 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
34778 						 && !Z_ISREF_P(value_ptr)) {
34779 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34780 							ZVAL_COPY(&generator->value, value_ptr);
34781 							break;
34782 						}
34783 					}
34784 					if (Z_ISREF_P(value_ptr)) {
34785 						Z_ADDREF_P(value_ptr);
34786 					} else {
34787 						ZVAL_MAKE_REF_EX(value_ptr, 2);
34788 					}
34789 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
34790 				} while (0);
34791 
34792 			}
34793 		} else {
34794 			zval *value = NULL;
34795 
34796 			/* Consts, temporary variables and references need copying */
34797 			if (IS_UNUSED == IS_CONST) {
34798 				ZVAL_COPY_VALUE(&generator->value, value);
34799 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
34800 					Z_ADDREF(generator->value);
34801 				}
34802 			} else if (IS_UNUSED == IS_TMP_VAR) {
34803 				ZVAL_COPY_VALUE(&generator->value, value);
34804 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
34805 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
34806 
34807 			} else {
34808 				ZVAL_COPY_VALUE(&generator->value, value);
34809 				if (IS_UNUSED == IS_CV) {
34810 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
34811 				}
34812 			}
34813 		}
34814 	} else {
34815 		/* If no value was specified yield null */
34816 		ZVAL_NULL(&generator->value);
34817 	}
34818 
34819 	/* Set the new yielded key */
34820 	if (IS_CONST != IS_UNUSED) {
34821 		zval *key = RT_CONSTANT(opline, opline->op2);
34822 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
34823 			key = Z_REFVAL_P(key);
34824 		}
34825 		ZVAL_COPY(&generator->key, key);
34826 
34827 		if (Z_TYPE(generator->key) == IS_LONG
34828 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
34829 		) {
34830 			generator->largest_used_integer_key = Z_LVAL(generator->key);
34831 		}
34832 	} else {
34833 		/* If no key was specified we use auto-increment keys */
34834 		generator->largest_used_integer_key++;
34835 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
34836 	}
34837 
34838 	if (RETURN_VALUE_USED(opline)) {
34839 		/* If the return value of yield is used set the send
34840 		 * target and initialize it to NULL */
34841 		generator->send_target = EX_VAR(opline->result.var);
34842 		ZVAL_NULL(generator->send_target);
34843 	} else {
34844 		generator->send_target = NULL;
34845 	}
34846 
34847 	/* We increment to the next op, so we are at the correct position when the
34848 	 * generator is resumed. */
34849 	ZEND_VM_INC_OPCODE();
34850 
34851 	/* The GOTO VM uses a local opline variable. We need to set the opline
34852 	 * variable in execute_data so we don't resume at an old position. */
34853 	SAVE_OPLINE();
34854 
34855 	ZEND_VM_RETURN();
34856 }
34857 
ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34859 {
34860 	zend_class_entry *ce, *scope;
34861 	zend_class_constant *c;
34862 	zval *value, *zv, *constant_zv;
34863 	zend_string *constant_name;
34864 	USE_OPLINE
34865 
34866 	SAVE_OPLINE();
34867 
34868 	do {
34869 		if (IS_UNUSED == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
34870 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
34871 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
34872 				break;
34873 			}
34874 		}
34875 		if (IS_UNUSED == IS_CONST) {
34876 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
34877 				ce = CACHED_PTR(opline->extended_value);
34878 			} else {
34879 				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);
34880 				if (UNEXPECTED(ce == NULL)) {
34881 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34882 					FREE_OP(opline->op2_type, opline->op2.var);
34883 					HANDLE_EXCEPTION();
34884 				}
34885 				CACHE_PTR(opline->extended_value, ce);
34886 			}
34887 		} else if (IS_UNUSED == IS_UNUSED) {
34888 			ce = zend_fetch_class(NULL, opline->op1.num);
34889 			if (UNEXPECTED(ce == NULL)) {
34890 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34891 				FREE_OP(opline->op2_type, opline->op2.var);
34892 				HANDLE_EXCEPTION();
34893 			}
34894 		} else {
34895 			ce = Z_CE_P(EX_VAR(opline->op1.var));
34896 		}
34897 		if (IS_UNUSED != IS_CONST
34898 			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
34899 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
34900 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
34901 			break;
34902 		}
34903 
34904 		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
34905 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
34906 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
34907 			ZVAL_UNDEF(EX_VAR(opline->result.var));
34908 			FREE_OP(opline->op2_type, opline->op2.var);
34909 			HANDLE_EXCEPTION();
34910 		}
34911 		constant_name = Z_STR_P(constant_zv);
34912 		/* Magic 'class' for constant OP2 is caught at compile-time */
34913 		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
34914 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
34915 			FREE_OP(opline->op2_type, opline->op2.var);
34916 			ZEND_VM_NEXT_OPCODE();
34917 		}
34918 		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
34919 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
34920 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
34921 
34922 		if (EXPECTED(zv != NULL)) {
34923 			c = Z_PTR_P(zv);
34924 			scope = EX(func)->op_array.scope;
34925 			if (!zend_verify_const_access(c, scope)) {
34926 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34927 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34928 				FREE_OP(opline->op2_type, opline->op2.var);
34929 				HANDLE_EXCEPTION();
34930 			}
34931 
34932 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
34933 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34934 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34935 				FREE_OP(opline->op2_type, opline->op2.var);
34936 				HANDLE_EXCEPTION();
34937 			}
34938 
34939 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
34940 			if (UNEXPECTED(is_constant_deprecated)) {
34941 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34942 
34943 				if (EG(exception)) {
34944 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34945 					FREE_OP(opline->op2_type, opline->op2.var);
34946 					HANDLE_EXCEPTION();
34947 				}
34948 			}
34949 
34950 			value = &c->value;
34951 			// Enums require loading of all class constants to build the backed enum table
34952 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
34953 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
34954 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34955 					FREE_OP(opline->op2_type, opline->op2.var);
34956 					HANDLE_EXCEPTION();
34957 				}
34958 			}
34959 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
34960 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
34961 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34962 					FREE_OP(opline->op2_type, opline->op2.var);
34963 					HANDLE_EXCEPTION();
34964 				}
34965 			}
34966 			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
34967 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
34968 			}
34969 		} else {
34970 			zend_throw_error(NULL, "Undefined constant %s::%s",
34971 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34972 			ZVAL_UNDEF(EX_VAR(opline->result.var));
34973 			FREE_OP(opline->op2_type, opline->op2.var);
34974 			HANDLE_EXCEPTION();
34975 		}
34976 	} while (0);
34977 
34978 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
34979 
34980 	FREE_OP(opline->op2_type, opline->op2.var);
34981 	ZEND_VM_NEXT_OPCODE();
34982 }
34983 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34984 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34985 {
34986 	USE_OPLINE
34987 	zval *object;
34988 	zval *property;
34989 	zval *value;
34990 	zval *zptr;
34991 	void **cache_slot;
34992 	zend_property_info *prop_info;
34993 	zend_object *zobj;
34994 	zend_string *name, *tmp_name;
34995 
34996 	SAVE_OPLINE();
34997 	object = &EX(This);
34998 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34999 
35000 	do {
35001 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
35002 
35003 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35004 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35005 				object = Z_REFVAL_P(object);
35006 				goto assign_op_object;
35007 			}
35008 			if (IS_UNUSED == IS_CV
35009 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35010 				ZVAL_UNDEFINED_OP1();
35011 			}
35012 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
35013 			break;
35014 		}
35015 
35016 assign_op_object:
35017 		/* here we are sure we are dealing with an object */
35018 		zobj = Z_OBJ_P(object);
35019 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35020 			name = Z_STR_P(property);
35021 		} else {
35022 			name = zval_try_get_tmp_string(property, &tmp_name);
35023 			if (UNEXPECTED(!name)) {
35024 				UNDEF_RESULT();
35025 				break;
35026 			}
35027 		}
35028 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
35029 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
35030 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
35031 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35032 					ZVAL_NULL(EX_VAR(opline->result.var));
35033 				}
35034 			} else {
35035 				zval *orig_zptr = zptr;
35036 				zend_reference *ref;
35037 
35038 				do {
35039 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
35040 						ref = Z_REF_P(zptr);
35041 						zptr = Z_REFVAL_P(zptr);
35042 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
35043 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
35044 							break;
35045 						}
35046 					}
35047 
35048 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35049 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
35050 					} else {
35051 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
35052 					}
35053 					if (prop_info) {
35054 						/* special case for typed properties */
35055 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
35056 					} else {
35057 						zend_binary_op(zptr, zptr, value OPLINE_CC);
35058 					}
35059 				} while (0);
35060 
35061 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35062 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
35063 				}
35064 			}
35065 		} else {
35066 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
35067 		}
35068 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35069 			zend_tmp_string_release(tmp_name);
35070 		}
35071 	} while (0);
35072 
35073 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
35074 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35075 
35076 	/* assign_obj has two opcodes! */
35077 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35078 }
35079 
35080 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35081 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35082 {
35083 	USE_OPLINE
35084 	zval *object;
35085 	zval *property;
35086 	zval *zptr;
35087 	void **cache_slot;
35088 	zend_property_info *prop_info;
35089 	zend_object *zobj;
35090 	zend_string *name, *tmp_name;
35091 
35092 	SAVE_OPLINE();
35093 	object = &EX(This);
35094 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35095 
35096 	do {
35097 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35098 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35099 				object = Z_REFVAL_P(object);
35100 				goto pre_incdec_object;
35101 			}
35102 			if (IS_UNUSED == IS_CV
35103 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35104 				ZVAL_UNDEFINED_OP1();
35105 			}
35106 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
35107 			break;
35108 		}
35109 
35110 pre_incdec_object:
35111 		/* here we are sure we are dealing with an object */
35112 		zobj = Z_OBJ_P(object);
35113 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35114 			name = Z_STR_P(property);
35115 		} else {
35116 			name = zval_try_get_tmp_string(property, &tmp_name);
35117 			if (UNEXPECTED(!name)) {
35118 				UNDEF_RESULT();
35119 				break;
35120 			}
35121 		}
35122 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
35123 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
35124 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
35125 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35126 					ZVAL_NULL(EX_VAR(opline->result.var));
35127 				}
35128 			} else {
35129 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35130 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
35131 				} else {
35132 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
35133 				}
35134 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
35135 			}
35136 		} else {
35137 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
35138 		}
35139 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35140 			zend_tmp_string_release(tmp_name);
35141 		}
35142 	} while (0);
35143 
35144 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35145 
35146 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35147 }
35148 
ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35149 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35150 {
35151 	USE_OPLINE
35152 	zval *object;
35153 	zval *property;
35154 	zval *zptr;
35155 	void **cache_slot;
35156 	zend_property_info *prop_info;
35157 	zend_object *zobj;
35158 	zend_string *name, *tmp_name;
35159 
35160 	SAVE_OPLINE();
35161 	object = &EX(This);
35162 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35163 
35164 	do {
35165 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35166 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35167 				object = Z_REFVAL_P(object);
35168 				goto post_incdec_object;
35169 			}
35170 			if (IS_UNUSED == IS_CV
35171 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35172 				ZVAL_UNDEFINED_OP1();
35173 			}
35174 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
35175 			break;
35176 		}
35177 
35178 post_incdec_object:
35179 		/* here we are sure we are dealing with an object */
35180 		zobj = Z_OBJ_P(object);
35181 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35182 			name = Z_STR_P(property);
35183 		} else {
35184 			name = zval_try_get_tmp_string(property, &tmp_name);
35185 			if (UNEXPECTED(!name)) {
35186 				ZVAL_UNDEF(EX_VAR(opline->result.var));
35187 				break;
35188 			}
35189 		}
35190 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
35191 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
35192 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
35193 				ZVAL_NULL(EX_VAR(opline->result.var));
35194 			} else {
35195 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35196 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
35197 				} else {
35198 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
35199 				}
35200 
35201 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
35202 			}
35203 		} else {
35204 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
35205 		}
35206 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35207 			zend_tmp_string_release(tmp_name);
35208 		}
35209 	} while (0);
35210 
35211 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35212 
35213 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35214 }
35215 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35216 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35217 {
35218 	USE_OPLINE
35219 	zval *container;
35220 	void **cache_slot = NULL;
35221 
35222 	SAVE_OPLINE();
35223 	container = &EX(This);
35224 
35225 	if (IS_UNUSED == IS_CONST ||
35226 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
35227 		do {
35228 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
35229 				container = Z_REFVAL_P(container);
35230 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
35231 					break;
35232 				}
35233 			}
35234 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
35235 				ZVAL_UNDEFINED_OP1();
35236 			}
35237 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35238 			ZVAL_NULL(EX_VAR(opline->result.var));
35239 			goto fetch_obj_r_finish;
35240 		} while (0);
35241 	}
35242 
35243 	/* here we are sure we are dealing with an object */
35244 	do {
35245 		zend_object *zobj = Z_OBJ_P(container);
35246 		zend_string *name, *tmp_name;
35247 		zval *retval;
35248 
35249 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35250 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
35251 
35252 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
35253 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35254 
35255 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35256 					retval = OBJ_PROP(zobj, prop_offset);
35257 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
35258 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35259 							goto fetch_obj_r_copy;
35260 						} else {
35261 fetch_obj_r_fast_copy:
35262 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35263 							ZEND_VM_NEXT_OPCODE();
35264 						}
35265 					}
35266 				} else if (EXPECTED(zobj->properties != NULL)) {
35267 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35268 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
35269 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
35270 
35271 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
35272 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
35273 
35274 							if (EXPECTED(p->key == name) ||
35275 							    (EXPECTED(p->h == ZSTR_H(name)) &&
35276 							     EXPECTED(p->key != NULL) &&
35277 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
35278 								retval = &p->val;
35279 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35280 									goto fetch_obj_r_copy;
35281 								} else {
35282 									goto fetch_obj_r_fast_copy;
35283 								}
35284 							}
35285 						}
35286 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
35287 					}
35288 					retval = zend_hash_find_known_hash(zobj->properties, name);
35289 					if (EXPECTED(retval)) {
35290 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
35291 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
35292 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35293 							goto fetch_obj_r_copy;
35294 						} else {
35295 							goto fetch_obj_r_fast_copy;
35296 						}
35297 					}
35298 				}
35299 			}
35300 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35301 		} else {
35302 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35303 			if (UNEXPECTED(!name)) {
35304 				ZVAL_UNDEF(EX_VAR(opline->result.var));
35305 				break;
35306 			}
35307 		}
35308 
35309 #if ZEND_DEBUG
35310 		/* For non-standard object handlers, verify a declared property type in debug builds.
35311 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
35312 		zend_property_info *prop_info = NULL;
35313 		if (zobj->handlers->read_property != zend_std_read_property) {
35314 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
35315 		}
35316 #endif
35317 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
35318 #if ZEND_DEBUG
35319 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
35320 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
35321 			ZVAL_OPT_DEREF(retval);
35322 			zend_verify_property_type(prop_info, retval, /* strict */ true);
35323 		}
35324 #endif
35325 
35326 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35327 			zend_tmp_string_release(tmp_name);
35328 		}
35329 
35330 		if (retval != EX_VAR(opline->result.var)) {
35331 fetch_obj_r_copy:
35332 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35333 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
35334 			zend_unwrap_reference(retval);
35335 		}
35336 	} while (0);
35337 
35338 fetch_obj_r_finish:
35339 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35340 
35341 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35342 }
35343 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35344 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35345 {
35346 	USE_OPLINE
35347 	zval *property, *container, *result;
35348 
35349 	SAVE_OPLINE();
35350 
35351 	container = &EX(This);
35352 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35353 	result = EX_VAR(opline->result.var);
35354 	zend_fetch_property_address(
35355 		result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
35356 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
35357 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
35358 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35359 	if (IS_UNUSED == IS_VAR) {
35360 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
35361 	}
35362 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35363 }
35364 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35365 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35366 {
35367 	USE_OPLINE
35368 	zval *property, *container, *result;
35369 
35370 	SAVE_OPLINE();
35371 	container = &EX(This);
35372 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35373 	result = EX_VAR(opline->result.var);
35374 	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 OPLINE_CC EXECUTE_DATA_CC);
35375 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35376 	if (IS_UNUSED == IS_VAR) {
35377 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
35378 	}
35379 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35380 }
35381 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35382 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35383 {
35384 	USE_OPLINE
35385 	zval *container;
35386 	void **cache_slot = NULL;
35387 
35388 	SAVE_OPLINE();
35389 	container = &EX(This);
35390 
35391 	if (IS_UNUSED == IS_CONST ||
35392 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
35393 		do {
35394 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
35395 				container = Z_REFVAL_P(container);
35396 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
35397 					break;
35398 				}
35399 			}
35400 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
35401 				ZVAL_UNDEFINED_OP2();
35402 			}
35403 			ZVAL_NULL(EX_VAR(opline->result.var));
35404 			goto fetch_obj_is_finish;
35405 		} while (0);
35406 	}
35407 
35408 	/* here we are sure we are dealing with an object */
35409 	do {
35410 		zend_object *zobj = Z_OBJ_P(container);
35411 		zend_string *name, *tmp_name;
35412 		zval *retval;
35413 
35414 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35415 			cache_slot = CACHE_ADDR(opline->extended_value);
35416 
35417 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
35418 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35419 
35420 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35421 					retval = OBJ_PROP(zobj, prop_offset);
35422 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
35423 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35424 							goto fetch_obj_is_copy;
35425 						} else {
35426 fetch_obj_is_fast_copy:
35427 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35428 							ZEND_VM_NEXT_OPCODE();
35429 						}
35430 					}
35431 				} else if (EXPECTED(zobj->properties != NULL)) {
35432 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35433 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
35434 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
35435 
35436 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
35437 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
35438 
35439 							if (EXPECTED(p->key == name) ||
35440 							    (EXPECTED(p->h == ZSTR_H(name)) &&
35441 							     EXPECTED(p->key != NULL) &&
35442 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
35443 								retval = &p->val;
35444 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35445 									goto fetch_obj_is_copy;
35446 								} else {
35447 									goto fetch_obj_is_fast_copy;
35448 								}
35449 							}
35450 						}
35451 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
35452 					}
35453 					retval = zend_hash_find_known_hash(zobj->properties, name);
35454 					if (EXPECTED(retval)) {
35455 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
35456 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
35457 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35458 							goto fetch_obj_is_copy;
35459 						} else {
35460 							goto fetch_obj_is_fast_copy;
35461 						}
35462 					}
35463 				}
35464 			}
35465 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35466 		} else {
35467 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35468 			if (UNEXPECTED(!name)) {
35469 				ZVAL_UNDEF(EX_VAR(opline->result.var));
35470 				break;
35471 			}
35472 		}
35473 
35474 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
35475 
35476 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35477 			zend_tmp_string_release(tmp_name);
35478 		}
35479 
35480 		if (retval != EX_VAR(opline->result.var)) {
35481 fetch_obj_is_copy:
35482 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35483 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
35484 			zend_unwrap_reference(retval);
35485 		}
35486 	} while (0);
35487 
35488 fetch_obj_is_finish:
35489 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35490 
35491 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35492 }
35493 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35494 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35495 {
35496 #if 0
35497 	USE_OPLINE
35498 #endif
35499 
35500 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
35501 		/* Behave like FETCH_OBJ_W */
35502 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
35503 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35504 		}
35505 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35506 	} else {
35507 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35508 	}
35509 }
35510 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35511 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35512 {
35513 	USE_OPLINE
35514 	zval *container, *property, *result;
35515 
35516 	SAVE_OPLINE();
35517 	container = &EX(This);
35518 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35519 	result = EX_VAR(opline->result.var);
35520 	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 OPLINE_CC EXECUTE_DATA_CC);
35521 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35522 	if (IS_UNUSED == IS_VAR) {
35523 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
35524 	}
35525 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35526 }
35527 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35528 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35529 {
35530 	USE_OPLINE
35531 	zval *object, *value, tmp;
35532 	zend_object *zobj;
35533 	zend_string *name, *tmp_name;
35534 	zend_refcounted *garbage = NULL;
35535 
35536 	SAVE_OPLINE();
35537 	object = &EX(This);
35538 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
35539 
35540 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35541 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35542 			object = Z_REFVAL_P(object);
35543 			goto assign_object;
35544 		}
35545 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
35546 		value = &EG(uninitialized_zval);
35547 		goto free_and_exit_assign_obj;
35548 	}
35549 
35550 assign_object:
35551 	zobj = Z_OBJ_P(object);
35552 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35553 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
35554 			void **cache_slot = CACHE_ADDR(opline->extended_value);
35555 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35556 			zval *property_val;
35557 
35558 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35559 				property_val = OBJ_PROP(zobj, prop_offset);
35560 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
35561 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35562 
35563 					if (prop_info != NULL) {
35564 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
35565 						goto free_and_exit_assign_obj;
35566 					} else {
35567 fast_assign_obj:
35568 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
35569 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35570 							ZVAL_COPY(EX_VAR(opline->result.var), value);
35571 						}
35572 						goto exit_assign_obj;
35573 					}
35574 				}
35575 			} else {
35576 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35577 				if (EXPECTED(zobj->properties != NULL)) {
35578 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35579 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35580 							GC_DELREF(zobj->properties);
35581 						}
35582 						zobj->properties = zend_array_dup(zobj->properties);
35583 					}
35584 					property_val = zend_hash_find_known_hash(zobj->properties, name);
35585 					if (property_val) {
35586 						goto fast_assign_obj;
35587 					}
35588 				}
35589 
35590 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
35591 					if (EXPECTED(zobj->properties == NULL)) {
35592 						rebuild_object_properties(zobj);
35593 					}
35594 					if (IS_CONST == IS_CONST) {
35595 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35596 							Z_ADDREF_P(value);
35597 						}
35598 					} else if (IS_CONST != IS_TMP_VAR) {
35599 						if (Z_ISREF_P(value)) {
35600 							if (IS_CONST == IS_VAR) {
35601 								zend_reference *ref = Z_REF_P(value);
35602 								if (GC_DELREF(ref) == 0) {
35603 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35604 									efree_size(ref, sizeof(zend_reference));
35605 									value = &tmp;
35606 								} else {
35607 									value = Z_REFVAL_P(value);
35608 									Z_TRY_ADDREF_P(value);
35609 								}
35610 							} else {
35611 								value = Z_REFVAL_P(value);
35612 								Z_TRY_ADDREF_P(value);
35613 							}
35614 						} else if (IS_CONST == IS_CV) {
35615 							Z_TRY_ADDREF_P(value);
35616 						}
35617 						}
35618 					zend_hash_add_new(zobj->properties, name, value);
35619 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35620 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35621 					}
35622 					goto exit_assign_obj;
35623 				}
35624 			}
35625 		}
35626 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35627 	} else {
35628 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35629 		if (UNEXPECTED(!name)) {
35630 
35631 			UNDEF_RESULT();
35632 			goto exit_assign_obj;
35633 		}
35634 	}
35635 
35636 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
35637 		ZVAL_DEREF(value);
35638 	}
35639 
35640 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35641 
35642 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35643 		zend_tmp_string_release(tmp_name);
35644 	}
35645 
35646 free_and_exit_assign_obj:
35647 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
35648 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
35649 	}
35650 
35651 exit_assign_obj:
35652 	if (garbage) {
35653 		GC_DTOR_NO_REF(garbage);
35654 	}
35655 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35656 
35657 	/* assign_obj has two opcodes! */
35658 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35659 }
35660 
35661 /* 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)35662 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35663 {
35664 	USE_OPLINE
35665 	zval *object, *value, tmp;
35666 	zend_object *zobj;
35667 	zend_string *name, *tmp_name;
35668 	zend_refcounted *garbage = NULL;
35669 
35670 	SAVE_OPLINE();
35671 	object = &EX(This);
35672 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
35673 
35674 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35675 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35676 			object = Z_REFVAL_P(object);
35677 			goto assign_object;
35678 		}
35679 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
35680 		value = &EG(uninitialized_zval);
35681 		goto free_and_exit_assign_obj;
35682 	}
35683 
35684 assign_object:
35685 	zobj = Z_OBJ_P(object);
35686 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35687 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
35688 			void **cache_slot = CACHE_ADDR(opline->extended_value);
35689 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35690 			zval *property_val;
35691 
35692 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35693 				property_val = OBJ_PROP(zobj, prop_offset);
35694 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
35695 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35696 
35697 					if (prop_info != NULL) {
35698 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
35699 						goto free_and_exit_assign_obj;
35700 					} else {
35701 fast_assign_obj:
35702 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
35703 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35704 							ZVAL_COPY(EX_VAR(opline->result.var), value);
35705 						}
35706 						goto exit_assign_obj;
35707 					}
35708 				}
35709 			} else {
35710 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35711 				if (EXPECTED(zobj->properties != NULL)) {
35712 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35713 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35714 							GC_DELREF(zobj->properties);
35715 						}
35716 						zobj->properties = zend_array_dup(zobj->properties);
35717 					}
35718 					property_val = zend_hash_find_known_hash(zobj->properties, name);
35719 					if (property_val) {
35720 						goto fast_assign_obj;
35721 					}
35722 				}
35723 
35724 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
35725 					if (EXPECTED(zobj->properties == NULL)) {
35726 						rebuild_object_properties(zobj);
35727 					}
35728 					if (IS_TMP_VAR == IS_CONST) {
35729 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35730 							Z_ADDREF_P(value);
35731 						}
35732 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
35733 						if (Z_ISREF_P(value)) {
35734 							if (IS_TMP_VAR == IS_VAR) {
35735 								zend_reference *ref = Z_REF_P(value);
35736 								if (GC_DELREF(ref) == 0) {
35737 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35738 									efree_size(ref, sizeof(zend_reference));
35739 									value = &tmp;
35740 								} else {
35741 									value = Z_REFVAL_P(value);
35742 									Z_TRY_ADDREF_P(value);
35743 								}
35744 							} else {
35745 								value = Z_REFVAL_P(value);
35746 								Z_TRY_ADDREF_P(value);
35747 							}
35748 						} else if (IS_TMP_VAR == IS_CV) {
35749 							Z_TRY_ADDREF_P(value);
35750 						}
35751 						}
35752 					zend_hash_add_new(zobj->properties, name, value);
35753 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35754 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35755 					}
35756 					goto exit_assign_obj;
35757 				}
35758 			}
35759 		}
35760 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35761 	} else {
35762 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35763 		if (UNEXPECTED(!name)) {
35764 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
35765 			UNDEF_RESULT();
35766 			goto exit_assign_obj;
35767 		}
35768 	}
35769 
35770 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
35771 		ZVAL_DEREF(value);
35772 	}
35773 
35774 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35775 
35776 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35777 		zend_tmp_string_release(tmp_name);
35778 	}
35779 
35780 free_and_exit_assign_obj:
35781 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
35782 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
35783 	}
35784 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
35785 exit_assign_obj:
35786 	if (garbage) {
35787 		GC_DTOR_NO_REF(garbage);
35788 	}
35789 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35790 
35791 	/* assign_obj has two opcodes! */
35792 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35793 }
35794 
35795 /* 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)35796 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35797 {
35798 	USE_OPLINE
35799 	zval *object, *value, tmp;
35800 	zend_object *zobj;
35801 	zend_string *name, *tmp_name;
35802 	zend_refcounted *garbage = NULL;
35803 
35804 	SAVE_OPLINE();
35805 	object = &EX(This);
35806 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
35807 
35808 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35809 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35810 			object = Z_REFVAL_P(object);
35811 			goto assign_object;
35812 		}
35813 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
35814 		value = &EG(uninitialized_zval);
35815 		goto free_and_exit_assign_obj;
35816 	}
35817 
35818 assign_object:
35819 	zobj = Z_OBJ_P(object);
35820 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35821 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
35822 			void **cache_slot = CACHE_ADDR(opline->extended_value);
35823 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35824 			zval *property_val;
35825 
35826 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35827 				property_val = OBJ_PROP(zobj, prop_offset);
35828 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
35829 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35830 
35831 					if (prop_info != NULL) {
35832 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
35833 						goto free_and_exit_assign_obj;
35834 					} else {
35835 fast_assign_obj:
35836 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
35837 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35838 							ZVAL_COPY(EX_VAR(opline->result.var), value);
35839 						}
35840 						goto exit_assign_obj;
35841 					}
35842 				}
35843 			} else {
35844 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35845 				if (EXPECTED(zobj->properties != NULL)) {
35846 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35847 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35848 							GC_DELREF(zobj->properties);
35849 						}
35850 						zobj->properties = zend_array_dup(zobj->properties);
35851 					}
35852 					property_val = zend_hash_find_known_hash(zobj->properties, name);
35853 					if (property_val) {
35854 						goto fast_assign_obj;
35855 					}
35856 				}
35857 
35858 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
35859 					if (EXPECTED(zobj->properties == NULL)) {
35860 						rebuild_object_properties(zobj);
35861 					}
35862 					if (IS_VAR == IS_CONST) {
35863 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35864 							Z_ADDREF_P(value);
35865 						}
35866 					} else if (IS_VAR != IS_TMP_VAR) {
35867 						if (Z_ISREF_P(value)) {
35868 							if (IS_VAR == IS_VAR) {
35869 								zend_reference *ref = Z_REF_P(value);
35870 								if (GC_DELREF(ref) == 0) {
35871 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35872 									efree_size(ref, sizeof(zend_reference));
35873 									value = &tmp;
35874 								} else {
35875 									value = Z_REFVAL_P(value);
35876 									Z_TRY_ADDREF_P(value);
35877 								}
35878 							} else {
35879 								value = Z_REFVAL_P(value);
35880 								Z_TRY_ADDREF_P(value);
35881 							}
35882 						} else if (IS_VAR == IS_CV) {
35883 							Z_TRY_ADDREF_P(value);
35884 						}
35885 						}
35886 					zend_hash_add_new(zobj->properties, name, value);
35887 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35888 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35889 					}
35890 					goto exit_assign_obj;
35891 				}
35892 			}
35893 		}
35894 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35895 	} else {
35896 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35897 		if (UNEXPECTED(!name)) {
35898 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
35899 			UNDEF_RESULT();
35900 			goto exit_assign_obj;
35901 		}
35902 	}
35903 
35904 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
35905 		ZVAL_DEREF(value);
35906 	}
35907 
35908 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35909 
35910 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35911 		zend_tmp_string_release(tmp_name);
35912 	}
35913 
35914 free_and_exit_assign_obj:
35915 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
35916 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
35917 	}
35918 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
35919 exit_assign_obj:
35920 	if (garbage) {
35921 		GC_DTOR_NO_REF(garbage);
35922 	}
35923 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35924 
35925 	/* assign_obj has two opcodes! */
35926 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35927 }
35928 
35929 /* 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)35930 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35931 {
35932 	USE_OPLINE
35933 	zval *object, *value, tmp;
35934 	zend_object *zobj;
35935 	zend_string *name, *tmp_name;
35936 	zend_refcounted *garbage = NULL;
35937 
35938 	SAVE_OPLINE();
35939 	object = &EX(This);
35940 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
35941 
35942 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35943 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35944 			object = Z_REFVAL_P(object);
35945 			goto assign_object;
35946 		}
35947 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
35948 		value = &EG(uninitialized_zval);
35949 		goto free_and_exit_assign_obj;
35950 	}
35951 
35952 assign_object:
35953 	zobj = Z_OBJ_P(object);
35954 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35955 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
35956 			void **cache_slot = CACHE_ADDR(opline->extended_value);
35957 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35958 			zval *property_val;
35959 
35960 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35961 				property_val = OBJ_PROP(zobj, prop_offset);
35962 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
35963 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35964 
35965 					if (prop_info != NULL) {
35966 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
35967 						goto free_and_exit_assign_obj;
35968 					} else {
35969 fast_assign_obj:
35970 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
35971 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35972 							ZVAL_COPY(EX_VAR(opline->result.var), value);
35973 						}
35974 						goto exit_assign_obj;
35975 					}
35976 				}
35977 			} else {
35978 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35979 				if (EXPECTED(zobj->properties != NULL)) {
35980 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35981 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35982 							GC_DELREF(zobj->properties);
35983 						}
35984 						zobj->properties = zend_array_dup(zobj->properties);
35985 					}
35986 					property_val = zend_hash_find_known_hash(zobj->properties, name);
35987 					if (property_val) {
35988 						goto fast_assign_obj;
35989 					}
35990 				}
35991 
35992 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
35993 					if (EXPECTED(zobj->properties == NULL)) {
35994 						rebuild_object_properties(zobj);
35995 					}
35996 					if (IS_CV == IS_CONST) {
35997 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35998 							Z_ADDREF_P(value);
35999 						}
36000 					} else if (IS_CV != IS_TMP_VAR) {
36001 						if (Z_ISREF_P(value)) {
36002 							if (IS_CV == IS_VAR) {
36003 								zend_reference *ref = Z_REF_P(value);
36004 								if (GC_DELREF(ref) == 0) {
36005 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
36006 									efree_size(ref, sizeof(zend_reference));
36007 									value = &tmp;
36008 								} else {
36009 									value = Z_REFVAL_P(value);
36010 									Z_TRY_ADDREF_P(value);
36011 								}
36012 							} else {
36013 								value = Z_REFVAL_P(value);
36014 								Z_TRY_ADDREF_P(value);
36015 							}
36016 						} else if (IS_CV == IS_CV) {
36017 							Z_TRY_ADDREF_P(value);
36018 						}
36019 						}
36020 					zend_hash_add_new(zobj->properties, name, value);
36021 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36022 						ZVAL_COPY(EX_VAR(opline->result.var), value);
36023 					}
36024 					goto exit_assign_obj;
36025 				}
36026 			}
36027 		}
36028 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
36029 	} else {
36030 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
36031 		if (UNEXPECTED(!name)) {
36032 
36033 			UNDEF_RESULT();
36034 			goto exit_assign_obj;
36035 		}
36036 	}
36037 
36038 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
36039 		ZVAL_DEREF(value);
36040 	}
36041 
36042 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
36043 
36044 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36045 		zend_tmp_string_release(tmp_name);
36046 	}
36047 
36048 free_and_exit_assign_obj:
36049 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
36050 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
36051 	}
36052 
36053 exit_assign_obj:
36054 	if (garbage) {
36055 		GC_DTOR_NO_REF(garbage);
36056 	}
36057 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36058 
36059 	/* assign_obj has two opcodes! */
36060 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36061 }
36062 
36063 /* 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)36064 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36065 {
36066 	USE_OPLINE
36067 	zval *property, *container, *value_ptr;
36068 
36069 	SAVE_OPLINE();
36070 
36071 	container = &EX(This);
36072 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36073 
36074 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
36075 
36076 	if (1) {
36077 		if (IS_UNUSED == IS_UNUSED) {
36078 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36079 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36080 			} else {
36081 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36082 			}
36083 		} else {
36084 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36085 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36086 			} else {
36087 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36088 			}
36089 		}
36090 	} else {
36091 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
36092 	}
36093 
36094 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36095 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
36096 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36097 }
36098 
36099 /* 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)36100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36101 {
36102 	USE_OPLINE
36103 	zval *property, *container, *value_ptr;
36104 
36105 	SAVE_OPLINE();
36106 
36107 	container = &EX(This);
36108 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36109 
36110 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
36111 
36112 	if (1) {
36113 		if (IS_UNUSED == IS_UNUSED) {
36114 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36115 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36116 			} else {
36117 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36118 			}
36119 		} else {
36120 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36121 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36122 			} else {
36123 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36124 			}
36125 		}
36126 	} else {
36127 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
36128 	}
36129 
36130 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36131 
36132 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36133 }
36134 
36135 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36136 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36137 {
36138 	USE_OPLINE
36139 	zend_string **rope;
36140 	zval *var;
36141 
36142 	/* Compiler allocates the necessary number of zval slots to keep the rope */
36143 	rope = (zend_string**)EX_VAR(opline->result.var);
36144 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36145 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36146 		rope[0] = Z_STR_P(var);
36147 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
36148 			Z_ADDREF_P(var);
36149 		}
36150 	} else {
36151 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36152 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
36153 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
36154 				rope[0] = zend_string_copy(Z_STR_P(var));
36155 			} else {
36156 				rope[0] = Z_STR_P(var);
36157 			}
36158 		} else {
36159 			SAVE_OPLINE();
36160 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
36161 				ZVAL_UNDEFINED_OP2();
36162 			}
36163 			rope[0] = zval_get_string_func(var);
36164 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36165 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36166 		}
36167 	}
36168 	ZEND_VM_NEXT_OPCODE();
36169 }
36170 
ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36171 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36172 {
36173 	zval *class_name;
36174 	USE_OPLINE
36175 
36176 	SAVE_OPLINE();
36177 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
36178 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
36179 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36180 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36181 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
36182 
36183 		if (UNEXPECTED(ce == NULL)) {
36184 			class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36185 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
36186 			CACHE_PTR(opline->extended_value, ce);
36187 		}
36188 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
36189 	} else {
36190 		class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36191 try_class_name:
36192 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
36193 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
36194 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
36195 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
36196 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
36197 			class_name = Z_REFVAL_P(class_name);
36198 			goto try_class_name;
36199 		} else {
36200 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
36201 				ZVAL_UNDEFINED_OP2();
36202 				if (UNEXPECTED(EG(exception) != NULL)) {
36203 					HANDLE_EXCEPTION();
36204 				}
36205 			}
36206 			zend_throw_error(NULL, "Class name must be a valid object or a string");
36207 		}
36208 	}
36209 
36210 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36211 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36212 }
36213 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36214 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36215 {
36216 	USE_OPLINE
36217 	zval *function_name;
36218 	zval *object;
36219 	zend_function *fbc;
36220 	zend_class_entry *called_scope;
36221 	zend_object *obj;
36222 	zend_execute_data *call;
36223 	uint32_t call_info;
36224 
36225 	SAVE_OPLINE();
36226 
36227 	object = &EX(This);
36228 
36229 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36230 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36231 	}
36232 
36233 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
36234 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
36235 		do {
36236 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
36237 				function_name = Z_REFVAL_P(function_name);
36238 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
36239 					break;
36240 				}
36241 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
36242 				ZVAL_UNDEFINED_OP2();
36243 				if (UNEXPECTED(EG(exception) != NULL)) {
36244 
36245 					HANDLE_EXCEPTION();
36246 				}
36247 			}
36248 			zend_throw_error(NULL, "Method name must be a string");
36249 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36250 
36251 			HANDLE_EXCEPTION();
36252 		} while (0);
36253 	}
36254 
36255 	if (IS_UNUSED == IS_UNUSED) {
36256 		obj = Z_OBJ_P(object);
36257 	} else {
36258 		do {
36259 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
36260 				obj = Z_OBJ_P(object);
36261 			} else {
36262 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
36263 					zend_reference *ref = Z_REF_P(object);
36264 
36265 					object = &ref->val;
36266 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
36267 						obj = Z_OBJ_P(object);
36268 						if (IS_UNUSED & IS_VAR) {
36269 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
36270 								efree_size(ref, sizeof(zend_reference));
36271 							} else {
36272 								Z_ADDREF_P(object);
36273 							}
36274 						}
36275 						break;
36276 					}
36277 				}
36278 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
36279 					object = ZVAL_UNDEFINED_OP1();
36280 					if (UNEXPECTED(EG(exception) != NULL)) {
36281 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36282 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36283 						}
36284 						HANDLE_EXCEPTION();
36285 					}
36286 				}
36287 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36288 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36289 				}
36290 				zend_invalid_method_call(object, function_name);
36291 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36292 
36293 				HANDLE_EXCEPTION();
36294 			}
36295 		} while (0);
36296 	}
36297 
36298 	called_scope = obj->ce;
36299 
36300 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
36301 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
36302 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
36303 	} else {
36304 		zend_object *orig_obj = obj;
36305 
36306 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36307 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36308 		}
36309 
36310 		/* First, locate the function. */
36311 		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));
36312 		if (UNEXPECTED(fbc == NULL)) {
36313 			if (EXPECTED(!EG(exception))) {
36314 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
36315 			}
36316 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36317 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
36318 				zend_objects_store_del(orig_obj);
36319 			}
36320 			HANDLE_EXCEPTION();
36321 		}
36322 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
36323 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
36324 		    EXPECTED(obj == orig_obj)) {
36325 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
36326 		}
36327 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
36328 			GC_ADDREF(obj); /* For $this pointer */
36329 			if (GC_DELREF(orig_obj) == 0) {
36330 				zend_objects_store_del(orig_obj);
36331 			}
36332 		}
36333 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36334 			init_func_run_time_cache(&fbc->op_array);
36335 		}
36336 	}
36337 
36338 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36339 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36340 	}
36341 
36342 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
36343 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
36344 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
36345 			zend_objects_store_del(obj);
36346 			if (UNEXPECTED(EG(exception))) {
36347 				HANDLE_EXCEPTION();
36348 			}
36349 		}
36350 		/* call static method */
36351 		obj = (zend_object*)called_scope;
36352 		call_info = ZEND_CALL_NESTED_FUNCTION;
36353 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
36354 		if (IS_UNUSED == IS_CV) {
36355 			GC_ADDREF(obj); /* For $this pointer */
36356 		}
36357 		/* CV may be changed indirectly (e.g. when it's a reference) */
36358 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
36359 	}
36360 
36361 	call = zend_vm_stack_push_call_frame(call_info,
36362 		fbc, opline->extended_value, obj);
36363 	call->prev_execute_data = EX(call);
36364 	EX(call) = call;
36365 
36366 	ZEND_VM_NEXT_OPCODE();
36367 }
36368 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36369 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36370 {
36371 	USE_OPLINE
36372 	zval *function_name;
36373 	zend_class_entry *ce;
36374 	uint32_t call_info;
36375 	zend_function *fbc;
36376 	zend_execute_data *call;
36377 
36378 	SAVE_OPLINE();
36379 
36380 	if (IS_UNUSED == IS_CONST) {
36381 		/* no function found. try a static method in class */
36382 		ce = CACHED_PTR(opline->result.num);
36383 		if (UNEXPECTED(ce == NULL)) {
36384 			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);
36385 			if (UNEXPECTED(ce == NULL)) {
36386 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36387 				HANDLE_EXCEPTION();
36388 			}
36389 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36390 				CACHE_PTR(opline->result.num, ce);
36391 			}
36392 		}
36393 	} else if (IS_UNUSED == IS_UNUSED) {
36394 		ce = zend_fetch_class(NULL, opline->op1.num);
36395 		if (UNEXPECTED(ce == NULL)) {
36396 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36397 			HANDLE_EXCEPTION();
36398 		}
36399 	} else {
36400 		ce = Z_CE_P(EX_VAR(opline->op1.var));
36401 	}
36402 
36403 	if (IS_UNUSED == IS_CONST &&
36404 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
36405 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
36406 		/* nothing to do */
36407 	} else if (IS_UNUSED != IS_CONST &&
36408 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
36409 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
36410 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
36411 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
36412 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36413 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36414 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
36415 				do {
36416 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
36417 						function_name = Z_REFVAL_P(function_name);
36418 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
36419 							break;
36420 						}
36421 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
36422 						ZVAL_UNDEFINED_OP2();
36423 						if (UNEXPECTED(EG(exception) != NULL)) {
36424 							HANDLE_EXCEPTION();
36425 						}
36426 					}
36427 					zend_throw_error(NULL, "Method name must be a string");
36428 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36429 					HANDLE_EXCEPTION();
36430 				} while (0);
36431 			}
36432 		}
36433 
36434 		if (ce->get_static_method) {
36435 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
36436 		} else {
36437 			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));
36438 		}
36439 		if (UNEXPECTED(fbc == NULL)) {
36440 			if (EXPECTED(!EG(exception))) {
36441 				zend_undefined_method(ce, Z_STR_P(function_name));
36442 			}
36443 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36444 			HANDLE_EXCEPTION();
36445 		}
36446 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
36447 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
36448 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
36449 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
36450 		}
36451 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36452 			init_func_run_time_cache(&fbc->op_array);
36453 		}
36454 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36455 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36456 		}
36457 	} else {
36458 		if (UNEXPECTED(ce->constructor == NULL)) {
36459 			zend_throw_error(NULL, "Cannot call constructor");
36460 			HANDLE_EXCEPTION();
36461 		}
36462 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
36463 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
36464 			HANDLE_EXCEPTION();
36465 		}
36466 		fbc = ce->constructor;
36467 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36468 			init_func_run_time_cache(&fbc->op_array);
36469 		}
36470 	}
36471 
36472 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
36473 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
36474 			ce = (zend_class_entry*)Z_OBJ(EX(This));
36475 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
36476 		} else {
36477 			zend_non_static_method_call(fbc);
36478 			HANDLE_EXCEPTION();
36479 		}
36480 	} else {
36481 		/* previous opcode is ZEND_FETCH_CLASS */
36482 		if (IS_UNUSED == IS_UNUSED
36483 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
36484 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
36485 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
36486 				ce = Z_OBJCE(EX(This));
36487 			} else {
36488 				ce = Z_CE(EX(This));
36489 			}
36490 		}
36491 		call_info = ZEND_CALL_NESTED_FUNCTION;
36492 	}
36493 
36494 	call = zend_vm_stack_push_call_frame(call_info,
36495 		fbc, opline->extended_value, ce);
36496 	call->prev_execute_data = EX(call);
36497 	EX(call) = call;
36498 
36499 	ZEND_VM_NEXT_OPCODE();
36500 }
36501 
ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36502 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36503 {
36504 	zval *array;
36505 	uint32_t size;
36506 	USE_OPLINE
36507 
36508 	array = EX_VAR(opline->result.var);
36509 	if (IS_UNUSED != IS_UNUSED) {
36510 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
36511 		ZVAL_ARR(array, zend_new_array(size));
36512 		/* Explicitly initialize array as not-packed if flag is set */
36513 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
36514 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
36515 		}
36516 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36517 	} else {
36518 		ZVAL_ARR(array, zend_new_array(0));
36519 		ZEND_VM_NEXT_OPCODE();
36520 	}
36521 }
36522 
ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36523 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36524 {
36525 	USE_OPLINE
36526 	zval *container;
36527 	zval *offset;
36528 	zend_string *name, *tmp_name;
36529 
36530 	SAVE_OPLINE();
36531 	container = &EX(This);
36532 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36533 
36534 	do {
36535 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
36536 			if (Z_ISREF_P(container)) {
36537 				container = Z_REFVAL_P(container);
36538 				if (Z_TYPE_P(container) != IS_OBJECT) {
36539 					if (IS_UNUSED == IS_CV
36540 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
36541 						ZVAL_UNDEFINED_OP1();
36542 					}
36543 					break;
36544 				}
36545 			} else {
36546 				break;
36547 			}
36548 		}
36549 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36550 			name = Z_STR_P(offset);
36551 		} else {
36552 			name = zval_try_get_tmp_string(offset, &tmp_name);
36553 			if (UNEXPECTED(!name)) {
36554 				break;
36555 			}
36556 		}
36557 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
36558 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36559 			zend_tmp_string_release(tmp_name);
36560 		}
36561 	} while (0);
36562 
36563 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36564 
36565 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36566 }
36567 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36568 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36569 {
36570 	USE_OPLINE
36571 	zval *container;
36572 	int result;
36573 	zval *offset;
36574 	zend_string *name, *tmp_name;
36575 
36576 	SAVE_OPLINE();
36577 	container = &EX(This);
36578 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36579 
36580 	if (IS_UNUSED == IS_CONST ||
36581 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
36582 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
36583 			container = Z_REFVAL_P(container);
36584 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
36585 				result = (opline->extended_value & ZEND_ISEMPTY);
36586 				goto isset_object_finish;
36587 			}
36588 		} else {
36589 			result = (opline->extended_value & ZEND_ISEMPTY);
36590 			goto isset_object_finish;
36591 		}
36592 	}
36593 
36594 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36595 		name = Z_STR_P(offset);
36596 	} else {
36597 		name = zval_try_get_tmp_string(offset, &tmp_name);
36598 		if (UNEXPECTED(!name)) {
36599 			result = 0;
36600 			goto isset_object_finish;
36601 		}
36602 	}
36603 
36604 	result =
36605 		(opline->extended_value & ZEND_ISEMPTY) ^
36606 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
36607 
36608 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36609 		zend_tmp_string_release(tmp_name);
36610 	}
36611 
36612 isset_object_finish:
36613 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36614 
36615 	ZEND_VM_SMART_BRANCH(result, 1);
36616 }
36617 
ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36618 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36619 {
36620 	USE_OPLINE
36621 
36622 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
36623 
36624 	SAVE_OPLINE();
36625 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
36626 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36627 	}
36628 
36629 	/* Destroy the previously yielded value */
36630 	zval_ptr_dtor(&generator->value);
36631 
36632 	/* Destroy the previously yielded key */
36633 	zval_ptr_dtor(&generator->key);
36634 
36635 	/* Set the new yielded value */
36636 	if (IS_UNUSED != IS_UNUSED) {
36637 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
36638 			/* Constants and temporary variables aren't yieldable by reference,
36639 			 * but we still allow them with a notice. */
36640 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
36641 				zval *value;
36642 
36643 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
36644 
36645 				value = NULL;
36646 				ZVAL_COPY_VALUE(&generator->value, value);
36647 				if (IS_UNUSED == IS_CONST) {
36648 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
36649 						Z_ADDREF(generator->value);
36650 					}
36651 				}
36652 			} else {
36653 				zval *value_ptr = NULL;
36654 
36655 				/* If a function call result is yielded and the function did
36656 				 * not return by reference we throw a notice. */
36657 				do {
36658 					if (IS_UNUSED == IS_VAR) {
36659 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
36660 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
36661 						 && !Z_ISREF_P(value_ptr)) {
36662 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
36663 							ZVAL_COPY(&generator->value, value_ptr);
36664 							break;
36665 						}
36666 					}
36667 					if (Z_ISREF_P(value_ptr)) {
36668 						Z_ADDREF_P(value_ptr);
36669 					} else {
36670 						ZVAL_MAKE_REF_EX(value_ptr, 2);
36671 					}
36672 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
36673 				} while (0);
36674 
36675 			}
36676 		} else {
36677 			zval *value = NULL;
36678 
36679 			/* Consts, temporary variables and references need copying */
36680 			if (IS_UNUSED == IS_CONST) {
36681 				ZVAL_COPY_VALUE(&generator->value, value);
36682 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
36683 					Z_ADDREF(generator->value);
36684 				}
36685 			} else if (IS_UNUSED == IS_TMP_VAR) {
36686 				ZVAL_COPY_VALUE(&generator->value, value);
36687 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
36688 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
36689 
36690 			} else {
36691 				ZVAL_COPY_VALUE(&generator->value, value);
36692 				if (IS_UNUSED == IS_CV) {
36693 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
36694 				}
36695 			}
36696 		}
36697 	} else {
36698 		/* If no value was specified yield null */
36699 		ZVAL_NULL(&generator->value);
36700 	}
36701 
36702 	/* Set the new yielded key */
36703 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
36704 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36705 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
36706 			key = Z_REFVAL_P(key);
36707 		}
36708 		ZVAL_COPY(&generator->key, key);
36709 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36710 
36711 		if (Z_TYPE(generator->key) == IS_LONG
36712 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
36713 		) {
36714 			generator->largest_used_integer_key = Z_LVAL(generator->key);
36715 		}
36716 	} else {
36717 		/* If no key was specified we use auto-increment keys */
36718 		generator->largest_used_integer_key++;
36719 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
36720 	}
36721 
36722 	if (RETURN_VALUE_USED(opline)) {
36723 		/* If the return value of yield is used set the send
36724 		 * target and initialize it to NULL */
36725 		generator->send_target = EX_VAR(opline->result.var);
36726 		ZVAL_NULL(generator->send_target);
36727 	} else {
36728 		generator->send_target = NULL;
36729 	}
36730 
36731 	/* We increment to the next op, so we are at the correct position when the
36732 	 * generator is resumed. */
36733 	ZEND_VM_INC_OPCODE();
36734 
36735 	/* The GOTO VM uses a local opline variable. We need to set the opline
36736 	 * variable in execute_data so we don't resume at an old position. */
36737 	SAVE_OPLINE();
36738 
36739 	ZEND_VM_RETURN();
36740 }
36741 
ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36743 {
36744 	zval *class_name;
36745 	USE_OPLINE
36746 
36747 	SAVE_OPLINE();
36748 	if (IS_UNUSED == IS_UNUSED) {
36749 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
36750 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36751 	} else if (IS_UNUSED == IS_CONST) {
36752 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
36753 
36754 		if (UNEXPECTED(ce == NULL)) {
36755 			class_name = NULL;
36756 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
36757 			CACHE_PTR(opline->extended_value, ce);
36758 		}
36759 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
36760 	} else {
36761 		class_name = NULL;
36762 try_class_name:
36763 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
36764 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
36765 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
36766 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
36767 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
36768 			class_name = Z_REFVAL_P(class_name);
36769 			goto try_class_name;
36770 		} else {
36771 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
36772 				ZVAL_UNDEFINED_OP2();
36773 				if (UNEXPECTED(EG(exception) != NULL)) {
36774 					HANDLE_EXCEPTION();
36775 				}
36776 			}
36777 			zend_throw_error(NULL, "Class name must be a valid object or a string");
36778 		}
36779 	}
36780 
36781 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36782 }
36783 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36784 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36785 {
36786 	USE_OPLINE
36787 	zval *function_name;
36788 	zend_class_entry *ce;
36789 	uint32_t call_info;
36790 	zend_function *fbc;
36791 	zend_execute_data *call;
36792 
36793 	SAVE_OPLINE();
36794 
36795 	if (IS_UNUSED == IS_CONST) {
36796 		/* no function found. try a static method in class */
36797 		ce = CACHED_PTR(opline->result.num);
36798 		if (UNEXPECTED(ce == NULL)) {
36799 			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);
36800 			if (UNEXPECTED(ce == NULL)) {
36801 
36802 				HANDLE_EXCEPTION();
36803 			}
36804 			if (IS_UNUSED != IS_CONST) {
36805 				CACHE_PTR(opline->result.num, ce);
36806 			}
36807 		}
36808 	} else if (IS_UNUSED == IS_UNUSED) {
36809 		ce = zend_fetch_class(NULL, opline->op1.num);
36810 		if (UNEXPECTED(ce == NULL)) {
36811 
36812 			HANDLE_EXCEPTION();
36813 		}
36814 	} else {
36815 		ce = Z_CE_P(EX_VAR(opline->op1.var));
36816 	}
36817 
36818 	if (IS_UNUSED == IS_CONST &&
36819 	    IS_UNUSED == IS_CONST &&
36820 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
36821 		/* nothing to do */
36822 	} else if (IS_UNUSED != IS_CONST &&
36823 	           IS_UNUSED == IS_CONST &&
36824 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
36825 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
36826 	} else if (IS_UNUSED != IS_UNUSED) {
36827 		function_name = NULL;
36828 		if (IS_UNUSED != IS_CONST) {
36829 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
36830 				do {
36831 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
36832 						function_name = Z_REFVAL_P(function_name);
36833 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
36834 							break;
36835 						}
36836 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
36837 						ZVAL_UNDEFINED_OP2();
36838 						if (UNEXPECTED(EG(exception) != NULL)) {
36839 							HANDLE_EXCEPTION();
36840 						}
36841 					}
36842 					zend_throw_error(NULL, "Method name must be a string");
36843 
36844 					HANDLE_EXCEPTION();
36845 				} while (0);
36846 			}
36847 		}
36848 
36849 		if (ce->get_static_method) {
36850 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
36851 		} else {
36852 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
36853 		}
36854 		if (UNEXPECTED(fbc == NULL)) {
36855 			if (EXPECTED(!EG(exception))) {
36856 				zend_undefined_method(ce, Z_STR_P(function_name));
36857 			}
36858 
36859 			HANDLE_EXCEPTION();
36860 		}
36861 		if (IS_UNUSED == IS_CONST &&
36862 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
36863 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
36864 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
36865 		}
36866 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36867 			init_func_run_time_cache(&fbc->op_array);
36868 		}
36869 		if (IS_UNUSED != IS_CONST) {
36870 
36871 		}
36872 	} else {
36873 		if (UNEXPECTED(ce->constructor == NULL)) {
36874 			zend_throw_error(NULL, "Cannot call constructor");
36875 			HANDLE_EXCEPTION();
36876 		}
36877 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
36878 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
36879 			HANDLE_EXCEPTION();
36880 		}
36881 		fbc = ce->constructor;
36882 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36883 			init_func_run_time_cache(&fbc->op_array);
36884 		}
36885 	}
36886 
36887 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
36888 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
36889 			ce = (zend_class_entry*)Z_OBJ(EX(This));
36890 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
36891 		} else {
36892 			zend_non_static_method_call(fbc);
36893 			HANDLE_EXCEPTION();
36894 		}
36895 	} else {
36896 		/* previous opcode is ZEND_FETCH_CLASS */
36897 		if (IS_UNUSED == IS_UNUSED
36898 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
36899 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
36900 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
36901 				ce = Z_OBJCE(EX(This));
36902 			} else {
36903 				ce = Z_CE(EX(This));
36904 			}
36905 		}
36906 		call_info = ZEND_CALL_NESTED_FUNCTION;
36907 	}
36908 
36909 	call = zend_vm_stack_push_call_frame(call_info,
36910 		fbc, opline->extended_value, ce);
36911 	call->prev_execute_data = EX(call);
36912 	EX(call) = call;
36913 
36914 	ZEND_VM_NEXT_OPCODE();
36915 }
36916 
ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36917 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36918 {
36919 	if (IS_UNUSED == IS_UNUSED) {
36920 		SAVE_OPLINE();
36921 		zend_verify_missing_return_type(EX(func));
36922 		HANDLE_EXCEPTION();
36923 	} else {
36924 /* prevents "undefined variable opline" errors */
36925 #if 0 || (IS_UNUSED != IS_UNUSED)
36926 		USE_OPLINE
36927 		zval *retval_ref, *retval_ptr;
36928 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
36929 		retval_ref = retval_ptr = NULL;
36930 
36931 		if (IS_UNUSED == IS_CONST) {
36932 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
36933 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
36934 		} else if (IS_UNUSED == IS_VAR) {
36935 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
36936 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
36937 			}
36938 			ZVAL_DEREF(retval_ptr);
36939 		} else if (IS_UNUSED == IS_CV) {
36940 			ZVAL_DEREF(retval_ptr);
36941 		}
36942 
36943 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
36944 			ZEND_VM_NEXT_OPCODE();
36945 		}
36946 
36947 		if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
36948 			SAVE_OPLINE();
36949 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
36950 			if (UNEXPECTED(EG(exception))) {
36951 				HANDLE_EXCEPTION();
36952 			}
36953 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
36954 				ZEND_VM_NEXT_OPCODE();
36955 			}
36956 		}
36957 
36958 		zend_reference *ref = NULL;
36959 		void *cache_slot = CACHE_ADDR(opline->op2.num);
36960 		if (UNEXPECTED(retval_ref != retval_ptr)) {
36961 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
36962 				ref = Z_REF_P(retval_ref);
36963 			} else {
36964 				/* A cast might happen - unwrap the reference if this is a by-value return */
36965 				if (Z_REFCOUNT_P(retval_ref) == 1) {
36966 					ZVAL_UNREF(retval_ref);
36967 				} else {
36968 					Z_DELREF_P(retval_ref);
36969 					ZVAL_COPY(retval_ref, retval_ptr);
36970 				}
36971 				retval_ptr = retval_ref;
36972 			}
36973 		}
36974 
36975 		SAVE_OPLINE();
36976 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
36977 			zend_verify_return_error(EX(func), retval_ptr);
36978 			HANDLE_EXCEPTION();
36979 		}
36980 		ZEND_VM_NEXT_OPCODE();
36981 #endif
36982 	}
36983 }
36984 
ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36985 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36986 {
36987 	SAVE_OPLINE();
36988 	zend_verify_never_error(EX(func));
36989 	HANDLE_EXCEPTION();
36990 }
36991 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36992 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36993 {
36994 	USE_OPLINE
36995 	uint32_t arg_num;
36996 
36997 	if (IS_UNUSED == IS_CONST) {
36998 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
36999 		arg_num = zend_get_arg_offset_by_name(
37000 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
37001 		if (UNEXPECTED(arg_num == 0)) {
37002 			/* Treat this as a by-value argument, and throw an error during SEND. */
37003 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37004 			ZEND_VM_NEXT_OPCODE();
37005 		}
37006 	} else {
37007 		arg_num = opline->op2.num;
37008 	}
37009 
37010 	if (EXPECTED(0)) {
37011 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
37012 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37013 		} else {
37014 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37015 		}
37016 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
37017 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37018 	} else {
37019 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37020 	}
37021 	ZEND_VM_NEXT_OPCODE();
37022 }
37023 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37024 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37025 {
37026 	USE_OPLINE
37027 	uint32_t arg_num;
37028 
37029 	if (IS_UNUSED == IS_CONST) {
37030 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
37031 		arg_num = zend_get_arg_offset_by_name(
37032 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
37033 		if (UNEXPECTED(arg_num == 0)) {
37034 			/* Treat this as a by-value argument, and throw an error during SEND. */
37035 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37036 			ZEND_VM_NEXT_OPCODE();
37037 		}
37038 	} else {
37039 		arg_num = opline->op2.num;
37040 	}
37041 
37042 	if (EXPECTED(1)) {
37043 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
37044 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37045 		} else {
37046 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37047 		}
37048 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
37049 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37050 	} else {
37051 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
37052 	}
37053 	ZEND_VM_NEXT_OPCODE();
37054 }
37055 
ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37056 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37057 {
37058 	USE_OPLINE
37059 
37060 	zend_execute_data *call = execute_data->call;
37061 	if (EXPECTED(!(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF))) {
37062 		ZEND_VM_NEXT_OPCODE();
37063 	}
37064 
37065 	SAVE_OPLINE();
37066 	zend_handle_undef_args(call);
37067 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37068 }
37069 
ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37070 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37071 {
37072 	USE_OPLINE
37073 	zval *result;
37074 	zend_function *constructor;
37075 	zend_class_entry *ce;
37076 	zend_execute_data *call;
37077 
37078 	SAVE_OPLINE();
37079 	if (IS_UNUSED == IS_CONST) {
37080 		ce = CACHED_PTR(opline->op2.num);
37081 		if (UNEXPECTED(ce == NULL)) {
37082 			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);
37083 			if (UNEXPECTED(ce == NULL)) {
37084 				ZVAL_UNDEF(EX_VAR(opline->result.var));
37085 				HANDLE_EXCEPTION();
37086 			}
37087 			CACHE_PTR(opline->op2.num, ce);
37088 		}
37089 	} else if (IS_UNUSED == IS_UNUSED) {
37090 		ce = zend_fetch_class(NULL, opline->op1.num);
37091 		if (UNEXPECTED(ce == NULL)) {
37092 			ZVAL_UNDEF(EX_VAR(opline->result.var));
37093 			HANDLE_EXCEPTION();
37094 		}
37095 	} else {
37096 		ce = Z_CE_P(EX_VAR(opline->op1.var));
37097 	}
37098 
37099 	result = EX_VAR(opline->result.var);
37100 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
37101 		ZVAL_UNDEF(result);
37102 		HANDLE_EXCEPTION();
37103 	}
37104 
37105 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
37106 	if (constructor == NULL) {
37107 		if (UNEXPECTED(EG(exception))) {
37108 			HANDLE_EXCEPTION();
37109 		}
37110 
37111 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
37112 		 * opcode is DO_FCALL in case EXT instructions are used. */
37113 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
37114 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
37115 		}
37116 
37117 		/* Perform a dummy function call */
37118 		call = zend_vm_stack_push_call_frame(
37119 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
37120 			opline->extended_value, NULL);
37121 	} else {
37122 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
37123 			init_func_run_time_cache(&constructor->op_array);
37124 		}
37125 		/* We are not handling overloaded classes right now */
37126 		call = zend_vm_stack_push_call_frame(
37127 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
37128 			constructor,
37129 			opline->extended_value,
37130 			Z_OBJ_P(result));
37131 		Z_ADDREF_P(result);
37132 	}
37133 
37134 	call->prev_execute_data = EX(call);
37135 	EX(call) = call;
37136 	ZEND_VM_NEXT_OPCODE();
37137 }
37138 
ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37139 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37140 {
37141 	zval *array;
37142 	uint32_t size;
37143 	USE_OPLINE
37144 
37145 	array = EX_VAR(opline->result.var);
37146 	if (IS_UNUSED != IS_UNUSED) {
37147 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
37148 		ZVAL_ARR(array, zend_new_array(size));
37149 		/* Explicitly initialize array as not-packed if flag is set */
37150 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
37151 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
37152 		}
37153 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37154 	} else {
37155 		ZVAL_ARR(array, zend_new_array(0));
37156 		ZEND_VM_NEXT_OPCODE();
37157 	}
37158 }
37159 
ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37160 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37161 {
37162 	USE_OPLINE
37163 
37164 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
37165 
37166 	SAVE_OPLINE();
37167 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
37168 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37169 	}
37170 
37171 	/* Destroy the previously yielded value */
37172 	zval_ptr_dtor(&generator->value);
37173 
37174 	/* Destroy the previously yielded key */
37175 	zval_ptr_dtor(&generator->key);
37176 
37177 	/* Set the new yielded value */
37178 	if (IS_UNUSED != IS_UNUSED) {
37179 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
37180 			/* Constants and temporary variables aren't yieldable by reference,
37181 			 * but we still allow them with a notice. */
37182 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
37183 				zval *value;
37184 
37185 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
37186 
37187 				value = NULL;
37188 				ZVAL_COPY_VALUE(&generator->value, value);
37189 				if (IS_UNUSED == IS_CONST) {
37190 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
37191 						Z_ADDREF(generator->value);
37192 					}
37193 				}
37194 			} else {
37195 				zval *value_ptr = NULL;
37196 
37197 				/* If a function call result is yielded and the function did
37198 				 * not return by reference we throw a notice. */
37199 				do {
37200 					if (IS_UNUSED == IS_VAR) {
37201 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
37202 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
37203 						 && !Z_ISREF_P(value_ptr)) {
37204 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
37205 							ZVAL_COPY(&generator->value, value_ptr);
37206 							break;
37207 						}
37208 					}
37209 					if (Z_ISREF_P(value_ptr)) {
37210 						Z_ADDREF_P(value_ptr);
37211 					} else {
37212 						ZVAL_MAKE_REF_EX(value_ptr, 2);
37213 					}
37214 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
37215 				} while (0);
37216 
37217 			}
37218 		} else {
37219 			zval *value = NULL;
37220 
37221 			/* Consts, temporary variables and references need copying */
37222 			if (IS_UNUSED == IS_CONST) {
37223 				ZVAL_COPY_VALUE(&generator->value, value);
37224 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
37225 					Z_ADDREF(generator->value);
37226 				}
37227 			} else if (IS_UNUSED == IS_TMP_VAR) {
37228 				ZVAL_COPY_VALUE(&generator->value, value);
37229 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
37230 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
37231 
37232 			} else {
37233 				ZVAL_COPY_VALUE(&generator->value, value);
37234 				if (IS_UNUSED == IS_CV) {
37235 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
37236 				}
37237 			}
37238 		}
37239 	} else {
37240 		/* If no value was specified yield null */
37241 		ZVAL_NULL(&generator->value);
37242 	}
37243 
37244 	/* Set the new yielded key */
37245 	if (IS_UNUSED != IS_UNUSED) {
37246 		zval *key = NULL;
37247 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
37248 			key = Z_REFVAL_P(key);
37249 		}
37250 		ZVAL_COPY(&generator->key, key);
37251 
37252 		if (Z_TYPE(generator->key) == IS_LONG
37253 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
37254 		) {
37255 			generator->largest_used_integer_key = Z_LVAL(generator->key);
37256 		}
37257 	} else {
37258 		/* If no key was specified we use auto-increment keys */
37259 		generator->largest_used_integer_key++;
37260 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
37261 	}
37262 
37263 	if (RETURN_VALUE_USED(opline)) {
37264 		/* If the return value of yield is used set the send
37265 		 * target and initialize it to NULL */
37266 		generator->send_target = EX_VAR(opline->result.var);
37267 		ZVAL_NULL(generator->send_target);
37268 	} else {
37269 		generator->send_target = NULL;
37270 	}
37271 
37272 	/* We increment to the next op, so we are at the correct position when the
37273 	 * generator is resumed. */
37274 	ZEND_VM_INC_OPCODE();
37275 
37276 	/* The GOTO VM uses a local opline variable. We need to set the opline
37277 	 * variable in execute_data so we don't resume at an old position. */
37278 	SAVE_OPLINE();
37279 
37280 	ZEND_VM_RETURN();
37281 }
37282 
ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37283 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37284 {
37285 	USE_OPLINE
37286 
37287 	if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
37288 		zval *result = EX_VAR(opline->result.var);
37289 
37290 		ZVAL_OBJ(result, Z_OBJ(EX(This)));
37291 		Z_ADDREF_P(result);
37292 		ZEND_VM_NEXT_OPCODE();
37293 	} else {
37294 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37295 	}
37296 }
37297 
ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37298 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37299 {
37300 	USE_OPLINE
37301 
37302 	/* For symbol tables we need to deal with exactly the same problems as for property tables. */
37303 	ZVAL_ARR(EX_VAR(opline->result.var),
37304 		zend_proptable_to_symtable(&EG(symbol_table), /* always_duplicate */ 1));
37305 	ZEND_VM_NEXT_OPCODE();
37306 }
37307 
ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37308 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37309 {
37310 	USE_OPLINE
37311 
37312 	ZVAL_BOOL(EX_VAR(opline->result.var),
37313 		(opline->extended_value & ZEND_ISEMPTY) ^
37314 		 (Z_TYPE(EX(This)) == IS_OBJECT));
37315 	ZEND_VM_NEXT_OPCODE();
37316 }
37317 
ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37319 {
37320 	USE_OPLINE
37321 
37322 	if (IS_UNUSED == IS_UNUSED) {
37323 		SAVE_OPLINE();
37324 		if (UNEXPECTED(!EX(func)->common.scope)) {
37325 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
37326 			ZVAL_UNDEF(EX_VAR(opline->result.var));
37327 			HANDLE_EXCEPTION();
37328 		} else {
37329 			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
37330 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
37331 			if (UNEXPECTED(EG(exception))) {
37332 				HANDLE_EXCEPTION();
37333 			}
37334 			ZEND_VM_NEXT_OPCODE();
37335 		}
37336 	} else {
37337 		zval *op1;
37338 
37339 		SAVE_OPLINE();
37340 		op1 = NULL;
37341 		while (1) {
37342 			if (Z_TYPE_P(op1) == IS_OBJECT) {
37343 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
37344 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
37345 				op1 = Z_REFVAL_P(op1);
37346 				continue;
37347 			} else {
37348 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
37349 					ZVAL_UNDEFINED_OP1();
37350 				}
37351 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
37352 				ZVAL_UNDEF(EX_VAR(opline->result.var));
37353 			}
37354 			break;
37355 		}
37356 
37357 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37358 	}
37359 }
37360 
ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37361 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37362 {
37363 	USE_OPLINE
37364 
37365 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
37366 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
37367 	} else if (Z_CE(EX(This))) {
37368 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
37369 	} else {
37370 		ZEND_ASSERT(!EX(func)->common.scope);
37371 		SAVE_OPLINE();
37372 		zend_throw_error(NULL, "get_called_class() must be called from within a class");
37373 		ZVAL_UNDEF(EX_VAR(opline->result.var));
37374 		HANDLE_EXCEPTION();
37375 	}
37376 	ZEND_VM_NEXT_OPCODE();
37377 }
37378 
ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37379 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37380 {
37381 	USE_OPLINE
37382 
37383 	ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
37384 	ZEND_VM_NEXT_OPCODE();
37385 }
37386 
ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37387 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37388 {
37389 	USE_OPLINE
37390 	zend_array *ht;
37391 	uint32_t arg_count, result_size, skip;
37392 
37393 	arg_count = EX_NUM_ARGS();
37394 	if (IS_UNUSED == IS_CONST) {
37395 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
37396 		if (arg_count < skip) {
37397 			result_size = 0;
37398 		} else {
37399 			result_size = arg_count - skip;
37400 		}
37401 	} else {
37402 		skip = 0;
37403 		result_size = arg_count;
37404 	}
37405 
37406 	if (result_size) {
37407 		SAVE_OPLINE();
37408 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
37409 
37410 		ht = zend_new_array(result_size);
37411 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
37412 		zend_hash_real_init_packed(ht);
37413 		ZEND_HASH_FILL_PACKED(ht) {
37414 			zval *p, *q;
37415 			uint32_t i = skip;
37416 			p = EX_VAR_NUM(i);
37417 			if (arg_count > first_extra_arg) {
37418 				while (i < first_extra_arg) {
37419 					q = p;
37420 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
37421 						ZVAL_DEREF(q);
37422 						if (Z_OPT_REFCOUNTED_P(q)) {
37423 							Z_ADDREF_P(q);
37424 						}
37425 						ZEND_HASH_FILL_SET(q);
37426 					} else {
37427 						ZEND_HASH_FILL_SET_NULL();
37428 					}
37429 					ZEND_HASH_FILL_NEXT();
37430 					p++;
37431 					i++;
37432 				}
37433 				if (skip < first_extra_arg) {
37434 					skip = 0;
37435 				} else {
37436 					skip -= first_extra_arg;
37437 				}
37438 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
37439 			}
37440 			while (i < arg_count) {
37441 				q = p;
37442 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
37443 					ZVAL_DEREF(q);
37444 					if (Z_OPT_REFCOUNTED_P(q)) {
37445 						Z_ADDREF_P(q);
37446 					}
37447 					ZEND_HASH_FILL_SET(q);
37448 				} else {
37449 					ZEND_HASH_FILL_SET_NULL();
37450 				}
37451 				ZEND_HASH_FILL_NEXT();
37452 				p++;
37453 				i++;
37454 			}
37455 		} ZEND_HASH_FILL_END();
37456 		ht->nNumOfElements = result_size;
37457 	} else {
37458 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
37459 	}
37460 	ZEND_VM_NEXT_OPCODE();
37461 }
37462 
37463 /* Contrary to what its name indicates, ZEND_COPY_TMP may receive and define references. */
ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37464 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37465 {
37466 	USE_OPLINE
37467 	zend_execute_data *call = EX(call);
37468 
37469 	zend_closure_from_frame(EX_VAR(opline->result.var), call);
37470 
37471 	if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) {
37472 		OBJ_RELEASE(Z_OBJ(call->This));
37473 	}
37474 
37475 	EX(call) = call->prev_execute_data;
37476 
37477 	zend_vm_stack_free_call_frame(call);
37478 
37479 	ZEND_VM_NEXT_OPCODE();
37480 }
37481 
ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37482 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37483 {
37484 	USE_OPLINE
37485 	SAVE_OPLINE();
37486 
37487 	zval *result = EX_VAR(opline->result.var);
37488 	ZVAL_NULL(result);
37489 
37490 #if 0 || 0
37491 	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
37492 		zend_frameless_observed_call(execute_data);
37493 	} else
37494 #endif
37495 	{
37496 		zend_frameless_function_0 function = (zend_frameless_function_0)ZEND_FLF_HANDLER(opline);
37497 		function(EX_VAR(opline->result.var));
37498 	}
37499 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37500 }
37501 
ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37502 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37503 {
37504 	USE_OPLINE
37505 	SAVE_OPLINE();
37506 
37507 	zval *result = EX_VAR(opline->result.var);
37508 	ZVAL_NULL(result);
37509 
37510 #if 0 || 1
37511 	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
37512 		zend_frameless_observed_call(execute_data);
37513 	} else
37514 #endif
37515 	{
37516 		zend_frameless_function_0 function = (zend_frameless_function_0)ZEND_FLF_HANDLER(opline);
37517 		function(EX_VAR(opline->result.var));
37518 	}
37519 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37520 }
37521 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37522 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37523 {
37524 	USE_OPLINE
37525 	zval *object;
37526 	zval *property;
37527 	zval *value;
37528 	zval *zptr;
37529 	void **cache_slot;
37530 	zend_property_info *prop_info;
37531 	zend_object *zobj;
37532 	zend_string *name, *tmp_name;
37533 
37534 	SAVE_OPLINE();
37535 	object = &EX(This);
37536 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37537 
37538 	do {
37539 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
37540 
37541 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37542 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
37543 				object = Z_REFVAL_P(object);
37544 				goto assign_op_object;
37545 			}
37546 			if (IS_UNUSED == IS_CV
37547 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37548 				ZVAL_UNDEFINED_OP1();
37549 			}
37550 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
37551 			break;
37552 		}
37553 
37554 assign_op_object:
37555 		/* here we are sure we are dealing with an object */
37556 		zobj = Z_OBJ_P(object);
37557 		if (IS_CV == IS_CONST) {
37558 			name = Z_STR_P(property);
37559 		} else {
37560 			name = zval_try_get_tmp_string(property, &tmp_name);
37561 			if (UNEXPECTED(!name)) {
37562 				UNDEF_RESULT();
37563 				break;
37564 			}
37565 		}
37566 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
37567 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
37568 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
37569 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37570 					ZVAL_NULL(EX_VAR(opline->result.var));
37571 				}
37572 			} else {
37573 				zval *orig_zptr = zptr;
37574 				zend_reference *ref;
37575 
37576 				do {
37577 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
37578 						ref = Z_REF_P(zptr);
37579 						zptr = Z_REFVAL_P(zptr);
37580 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
37581 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
37582 							break;
37583 						}
37584 					}
37585 
37586 					if (IS_CV == IS_CONST) {
37587 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
37588 					} else {
37589 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
37590 					}
37591 					if (prop_info) {
37592 						/* special case for typed properties */
37593 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
37594 					} else {
37595 						zend_binary_op(zptr, zptr, value OPLINE_CC);
37596 					}
37597 				} while (0);
37598 
37599 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37600 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
37601 				}
37602 			}
37603 		} else {
37604 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
37605 		}
37606 		if (IS_CV != IS_CONST) {
37607 			zend_tmp_string_release(tmp_name);
37608 		}
37609 	} while (0);
37610 
37611 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
37612 
37613 
37614 	/* assign_obj has two opcodes! */
37615 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37616 }
37617 
37618 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37619 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37620 {
37621 	USE_OPLINE
37622 	zval *object;
37623 	zval *property;
37624 	zval *zptr;
37625 	void **cache_slot;
37626 	zend_property_info *prop_info;
37627 	zend_object *zobj;
37628 	zend_string *name, *tmp_name;
37629 
37630 	SAVE_OPLINE();
37631 	object = &EX(This);
37632 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37633 
37634 	do {
37635 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37636 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
37637 				object = Z_REFVAL_P(object);
37638 				goto pre_incdec_object;
37639 			}
37640 			if (IS_UNUSED == IS_CV
37641 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37642 				ZVAL_UNDEFINED_OP1();
37643 			}
37644 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
37645 			break;
37646 		}
37647 
37648 pre_incdec_object:
37649 		/* here we are sure we are dealing with an object */
37650 		zobj = Z_OBJ_P(object);
37651 		if (IS_CV == IS_CONST) {
37652 			name = Z_STR_P(property);
37653 		} else {
37654 			name = zval_try_get_tmp_string(property, &tmp_name);
37655 			if (UNEXPECTED(!name)) {
37656 				UNDEF_RESULT();
37657 				break;
37658 			}
37659 		}
37660 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
37661 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
37662 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
37663 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37664 					ZVAL_NULL(EX_VAR(opline->result.var));
37665 				}
37666 			} else {
37667 				if (IS_CV == IS_CONST) {
37668 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
37669 				} else {
37670 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
37671 				}
37672 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
37673 			}
37674 		} else {
37675 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
37676 		}
37677 		if (IS_CV != IS_CONST) {
37678 			zend_tmp_string_release(tmp_name);
37679 		}
37680 	} while (0);
37681 
37682 
37683 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37684 }
37685 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37686 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37687 {
37688 	USE_OPLINE
37689 	zval *object;
37690 	zval *property;
37691 	zval *zptr;
37692 	void **cache_slot;
37693 	zend_property_info *prop_info;
37694 	zend_object *zobj;
37695 	zend_string *name, *tmp_name;
37696 
37697 	SAVE_OPLINE();
37698 	object = &EX(This);
37699 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37700 
37701 	do {
37702 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37703 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
37704 				object = Z_REFVAL_P(object);
37705 				goto post_incdec_object;
37706 			}
37707 			if (IS_UNUSED == IS_CV
37708 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37709 				ZVAL_UNDEFINED_OP1();
37710 			}
37711 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
37712 			break;
37713 		}
37714 
37715 post_incdec_object:
37716 		/* here we are sure we are dealing with an object */
37717 		zobj = Z_OBJ_P(object);
37718 		if (IS_CV == IS_CONST) {
37719 			name = Z_STR_P(property);
37720 		} else {
37721 			name = zval_try_get_tmp_string(property, &tmp_name);
37722 			if (UNEXPECTED(!name)) {
37723 				ZVAL_UNDEF(EX_VAR(opline->result.var));
37724 				break;
37725 			}
37726 		}
37727 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
37728 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
37729 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
37730 				ZVAL_NULL(EX_VAR(opline->result.var));
37731 			} else {
37732 				if (IS_CV == IS_CONST) {
37733 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
37734 				} else {
37735 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
37736 				}
37737 
37738 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
37739 			}
37740 		} else {
37741 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
37742 		}
37743 		if (IS_CV != IS_CONST) {
37744 			zend_tmp_string_release(tmp_name);
37745 		}
37746 	} while (0);
37747 
37748 
37749 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37750 }
37751 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37752 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37753 {
37754 	USE_OPLINE
37755 	zval *container;
37756 	void **cache_slot = NULL;
37757 
37758 	SAVE_OPLINE();
37759 	container = &EX(This);
37760 
37761 	if (IS_UNUSED == IS_CONST ||
37762 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
37763 		do {
37764 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
37765 				container = Z_REFVAL_P(container);
37766 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
37767 					break;
37768 				}
37769 			}
37770 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
37771 				ZVAL_UNDEFINED_OP1();
37772 			}
37773 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37774 			ZVAL_NULL(EX_VAR(opline->result.var));
37775 			goto fetch_obj_r_finish;
37776 		} while (0);
37777 	}
37778 
37779 	/* here we are sure we are dealing with an object */
37780 	do {
37781 		zend_object *zobj = Z_OBJ_P(container);
37782 		zend_string *name, *tmp_name;
37783 		zval *retval;
37784 
37785 		if (IS_CV == IS_CONST) {
37786 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
37787 
37788 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
37789 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
37790 
37791 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
37792 					retval = OBJ_PROP(zobj, prop_offset);
37793 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
37794 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37795 							goto fetch_obj_r_copy;
37796 						} else {
37797 fetch_obj_r_fast_copy:
37798 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
37799 							ZEND_VM_NEXT_OPCODE();
37800 						}
37801 					}
37802 				} else if (EXPECTED(zobj->properties != NULL)) {
37803 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37804 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
37805 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
37806 
37807 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
37808 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
37809 
37810 							if (EXPECTED(p->key == name) ||
37811 							    (EXPECTED(p->h == ZSTR_H(name)) &&
37812 							     EXPECTED(p->key != NULL) &&
37813 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
37814 								retval = &p->val;
37815 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37816 									goto fetch_obj_r_copy;
37817 								} else {
37818 									goto fetch_obj_r_fast_copy;
37819 								}
37820 							}
37821 						}
37822 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
37823 					}
37824 					retval = zend_hash_find_known_hash(zobj->properties, name);
37825 					if (EXPECTED(retval)) {
37826 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
37827 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
37828 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37829 							goto fetch_obj_r_copy;
37830 						} else {
37831 							goto fetch_obj_r_fast_copy;
37832 						}
37833 					}
37834 				}
37835 			}
37836 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37837 		} else {
37838 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
37839 			if (UNEXPECTED(!name)) {
37840 				ZVAL_UNDEF(EX_VAR(opline->result.var));
37841 				break;
37842 			}
37843 		}
37844 
37845 #if ZEND_DEBUG
37846 		/* For non-standard object handlers, verify a declared property type in debug builds.
37847 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
37848 		zend_property_info *prop_info = NULL;
37849 		if (zobj->handlers->read_property != zend_std_read_property) {
37850 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
37851 		}
37852 #endif
37853 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
37854 #if ZEND_DEBUG
37855 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
37856 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
37857 			ZVAL_OPT_DEREF(retval);
37858 			zend_verify_property_type(prop_info, retval, /* strict */ true);
37859 		}
37860 #endif
37861 
37862 		if (IS_CV != IS_CONST) {
37863 			zend_tmp_string_release(tmp_name);
37864 		}
37865 
37866 		if (retval != EX_VAR(opline->result.var)) {
37867 fetch_obj_r_copy:
37868 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
37869 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
37870 			zend_unwrap_reference(retval);
37871 		}
37872 	} while (0);
37873 
37874 fetch_obj_r_finish:
37875 
37876 
37877 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37878 }
37879 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37880 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37881 {
37882 	USE_OPLINE
37883 	zval *property, *container, *result;
37884 
37885 	SAVE_OPLINE();
37886 
37887 	container = &EX(This);
37888 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37889 	result = EX_VAR(opline->result.var);
37890 	zend_fetch_property_address(
37891 		result, container, IS_UNUSED, property, IS_CV,
37892 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
37893 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
37894 
37895 	if (IS_UNUSED == IS_VAR) {
37896 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
37897 	}
37898 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37899 }
37900 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37901 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37902 {
37903 	USE_OPLINE
37904 	zval *property, *container, *result;
37905 
37906 	SAVE_OPLINE();
37907 	container = &EX(This);
37908 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37909 	result = EX_VAR(opline->result.var);
37910 	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 OPLINE_CC EXECUTE_DATA_CC);
37911 
37912 	if (IS_UNUSED == IS_VAR) {
37913 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
37914 	}
37915 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37916 }
37917 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37918 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37919 {
37920 	USE_OPLINE
37921 	zval *container;
37922 	void **cache_slot = NULL;
37923 
37924 	SAVE_OPLINE();
37925 	container = &EX(This);
37926 
37927 	if (IS_UNUSED == IS_CONST ||
37928 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
37929 		do {
37930 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
37931 				container = Z_REFVAL_P(container);
37932 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
37933 					break;
37934 				}
37935 			}
37936 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
37937 				ZVAL_UNDEFINED_OP2();
37938 			}
37939 			ZVAL_NULL(EX_VAR(opline->result.var));
37940 			goto fetch_obj_is_finish;
37941 		} while (0);
37942 	}
37943 
37944 	/* here we are sure we are dealing with an object */
37945 	do {
37946 		zend_object *zobj = Z_OBJ_P(container);
37947 		zend_string *name, *tmp_name;
37948 		zval *retval;
37949 
37950 		if (IS_CV == IS_CONST) {
37951 			cache_slot = CACHE_ADDR(opline->extended_value);
37952 
37953 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
37954 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
37955 
37956 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
37957 					retval = OBJ_PROP(zobj, prop_offset);
37958 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
37959 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37960 							goto fetch_obj_is_copy;
37961 						} else {
37962 fetch_obj_is_fast_copy:
37963 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
37964 							ZEND_VM_NEXT_OPCODE();
37965 						}
37966 					}
37967 				} else if (EXPECTED(zobj->properties != NULL)) {
37968 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37969 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
37970 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
37971 
37972 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
37973 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
37974 
37975 							if (EXPECTED(p->key == name) ||
37976 							    (EXPECTED(p->h == ZSTR_H(name)) &&
37977 							     EXPECTED(p->key != NULL) &&
37978 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
37979 								retval = &p->val;
37980 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37981 									goto fetch_obj_is_copy;
37982 								} else {
37983 									goto fetch_obj_is_fast_copy;
37984 								}
37985 							}
37986 						}
37987 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
37988 					}
37989 					retval = zend_hash_find_known_hash(zobj->properties, name);
37990 					if (EXPECTED(retval)) {
37991 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
37992 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
37993 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37994 							goto fetch_obj_is_copy;
37995 						} else {
37996 							goto fetch_obj_is_fast_copy;
37997 						}
37998 					}
37999 				}
38000 			}
38001 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38002 		} else {
38003 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
38004 			if (UNEXPECTED(!name)) {
38005 				ZVAL_UNDEF(EX_VAR(opline->result.var));
38006 				break;
38007 			}
38008 		}
38009 
38010 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
38011 
38012 		if (IS_CV != IS_CONST) {
38013 			zend_tmp_string_release(tmp_name);
38014 		}
38015 
38016 		if (retval != EX_VAR(opline->result.var)) {
38017 fetch_obj_is_copy:
38018 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
38019 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
38020 			zend_unwrap_reference(retval);
38021 		}
38022 	} while (0);
38023 
38024 fetch_obj_is_finish:
38025 
38026 
38027 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38028 }
38029 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38030 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38031 {
38032 #if 0
38033 	USE_OPLINE
38034 #endif
38035 
38036 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
38037 		/* Behave like FETCH_OBJ_W */
38038 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
38039 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38040 		}
38041 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38042 	} else {
38043 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38044 	}
38045 }
38046 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38047 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38048 {
38049 	USE_OPLINE
38050 	zval *container, *property, *result;
38051 
38052 	SAVE_OPLINE();
38053 	container = &EX(This);
38054 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38055 	result = EX_VAR(opline->result.var);
38056 	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 OPLINE_CC EXECUTE_DATA_CC);
38057 
38058 	if (IS_UNUSED == IS_VAR) {
38059 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
38060 	}
38061 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38062 }
38063 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38064 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38065 {
38066 	USE_OPLINE
38067 	zval *object, *value, tmp;
38068 	zend_object *zobj;
38069 	zend_string *name, *tmp_name;
38070 	zend_refcounted *garbage = NULL;
38071 
38072 	SAVE_OPLINE();
38073 	object = &EX(This);
38074 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
38075 
38076 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38077 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
38078 			object = Z_REFVAL_P(object);
38079 			goto assign_object;
38080 		}
38081 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
38082 		value = &EG(uninitialized_zval);
38083 		goto free_and_exit_assign_obj;
38084 	}
38085 
38086 assign_object:
38087 	zobj = Z_OBJ_P(object);
38088 	if (IS_CV == IS_CONST) {
38089 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
38090 			void **cache_slot = CACHE_ADDR(opline->extended_value);
38091 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
38092 			zval *property_val;
38093 
38094 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
38095 				property_val = OBJ_PROP(zobj, prop_offset);
38096 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
38097 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
38098 
38099 					if (prop_info != NULL) {
38100 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
38101 						goto free_and_exit_assign_obj;
38102 					} else {
38103 fast_assign_obj:
38104 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
38105 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38106 							ZVAL_COPY(EX_VAR(opline->result.var), value);
38107 						}
38108 						goto exit_assign_obj;
38109 					}
38110 				}
38111 			} else {
38112 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38113 				if (EXPECTED(zobj->properties != NULL)) {
38114 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
38115 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
38116 							GC_DELREF(zobj->properties);
38117 						}
38118 						zobj->properties = zend_array_dup(zobj->properties);
38119 					}
38120 					property_val = zend_hash_find_known_hash(zobj->properties, name);
38121 					if (property_val) {
38122 						goto fast_assign_obj;
38123 					}
38124 				}
38125 
38126 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
38127 					if (EXPECTED(zobj->properties == NULL)) {
38128 						rebuild_object_properties(zobj);
38129 					}
38130 					if (IS_CONST == IS_CONST) {
38131 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
38132 							Z_ADDREF_P(value);
38133 						}
38134 					} else if (IS_CONST != IS_TMP_VAR) {
38135 						if (Z_ISREF_P(value)) {
38136 							if (IS_CONST == IS_VAR) {
38137 								zend_reference *ref = Z_REF_P(value);
38138 								if (GC_DELREF(ref) == 0) {
38139 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
38140 									efree_size(ref, sizeof(zend_reference));
38141 									value = &tmp;
38142 								} else {
38143 									value = Z_REFVAL_P(value);
38144 									Z_TRY_ADDREF_P(value);
38145 								}
38146 							} else {
38147 								value = Z_REFVAL_P(value);
38148 								Z_TRY_ADDREF_P(value);
38149 							}
38150 						} else if (IS_CONST == IS_CV) {
38151 							Z_TRY_ADDREF_P(value);
38152 						}
38153 						}
38154 					zend_hash_add_new(zobj->properties, name, value);
38155 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38156 						ZVAL_COPY(EX_VAR(opline->result.var), value);
38157 					}
38158 					goto exit_assign_obj;
38159 				}
38160 			}
38161 		}
38162 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38163 	} else {
38164 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
38165 		if (UNEXPECTED(!name)) {
38166 
38167 			UNDEF_RESULT();
38168 			goto exit_assign_obj;
38169 		}
38170 	}
38171 
38172 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
38173 		ZVAL_DEREF(value);
38174 	}
38175 
38176 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
38177 
38178 	if (IS_CV != IS_CONST) {
38179 		zend_tmp_string_release(tmp_name);
38180 	}
38181 
38182 free_and_exit_assign_obj:
38183 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
38184 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
38185 	}
38186 
38187 exit_assign_obj:
38188 	if (garbage) {
38189 		GC_DTOR_NO_REF(garbage);
38190 	}
38191 
38192 
38193 	/* assign_obj has two opcodes! */
38194 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38195 }
38196 
38197 /* 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)38198 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38199 {
38200 	USE_OPLINE
38201 	zval *object, *value, tmp;
38202 	zend_object *zobj;
38203 	zend_string *name, *tmp_name;
38204 	zend_refcounted *garbage = NULL;
38205 
38206 	SAVE_OPLINE();
38207 	object = &EX(This);
38208 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
38209 
38210 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38211 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
38212 			object = Z_REFVAL_P(object);
38213 			goto assign_object;
38214 		}
38215 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
38216 		value = &EG(uninitialized_zval);
38217 		goto free_and_exit_assign_obj;
38218 	}
38219 
38220 assign_object:
38221 	zobj = Z_OBJ_P(object);
38222 	if (IS_CV == IS_CONST) {
38223 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
38224 			void **cache_slot = CACHE_ADDR(opline->extended_value);
38225 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
38226 			zval *property_val;
38227 
38228 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
38229 				property_val = OBJ_PROP(zobj, prop_offset);
38230 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
38231 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
38232 
38233 					if (prop_info != NULL) {
38234 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
38235 						goto free_and_exit_assign_obj;
38236 					} else {
38237 fast_assign_obj:
38238 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
38239 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38240 							ZVAL_COPY(EX_VAR(opline->result.var), value);
38241 						}
38242 						goto exit_assign_obj;
38243 					}
38244 				}
38245 			} else {
38246 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38247 				if (EXPECTED(zobj->properties != NULL)) {
38248 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
38249 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
38250 							GC_DELREF(zobj->properties);
38251 						}
38252 						zobj->properties = zend_array_dup(zobj->properties);
38253 					}
38254 					property_val = zend_hash_find_known_hash(zobj->properties, name);
38255 					if (property_val) {
38256 						goto fast_assign_obj;
38257 					}
38258 				}
38259 
38260 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
38261 					if (EXPECTED(zobj->properties == NULL)) {
38262 						rebuild_object_properties(zobj);
38263 					}
38264 					if (IS_TMP_VAR == IS_CONST) {
38265 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
38266 							Z_ADDREF_P(value);
38267 						}
38268 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
38269 						if (Z_ISREF_P(value)) {
38270 							if (IS_TMP_VAR == IS_VAR) {
38271 								zend_reference *ref = Z_REF_P(value);
38272 								if (GC_DELREF(ref) == 0) {
38273 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
38274 									efree_size(ref, sizeof(zend_reference));
38275 									value = &tmp;
38276 								} else {
38277 									value = Z_REFVAL_P(value);
38278 									Z_TRY_ADDREF_P(value);
38279 								}
38280 							} else {
38281 								value = Z_REFVAL_P(value);
38282 								Z_TRY_ADDREF_P(value);
38283 							}
38284 						} else if (IS_TMP_VAR == IS_CV) {
38285 							Z_TRY_ADDREF_P(value);
38286 						}
38287 						}
38288 					zend_hash_add_new(zobj->properties, name, value);
38289 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38290 						ZVAL_COPY(EX_VAR(opline->result.var), value);
38291 					}
38292 					goto exit_assign_obj;
38293 				}
38294 			}
38295 		}
38296 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38297 	} else {
38298 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
38299 		if (UNEXPECTED(!name)) {
38300 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38301 			UNDEF_RESULT();
38302 			goto exit_assign_obj;
38303 		}
38304 	}
38305 
38306 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
38307 		ZVAL_DEREF(value);
38308 	}
38309 
38310 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
38311 
38312 	if (IS_CV != IS_CONST) {
38313 		zend_tmp_string_release(tmp_name);
38314 	}
38315 
38316 free_and_exit_assign_obj:
38317 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
38318 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
38319 	}
38320 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38321 exit_assign_obj:
38322 	if (garbage) {
38323 		GC_DTOR_NO_REF(garbage);
38324 	}
38325 
38326 
38327 	/* assign_obj has two opcodes! */
38328 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38329 }
38330 
38331 /* 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)38332 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38333 {
38334 	USE_OPLINE
38335 	zval *object, *value, tmp;
38336 	zend_object *zobj;
38337 	zend_string *name, *tmp_name;
38338 	zend_refcounted *garbage = NULL;
38339 
38340 	SAVE_OPLINE();
38341 	object = &EX(This);
38342 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
38343 
38344 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38345 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
38346 			object = Z_REFVAL_P(object);
38347 			goto assign_object;
38348 		}
38349 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
38350 		value = &EG(uninitialized_zval);
38351 		goto free_and_exit_assign_obj;
38352 	}
38353 
38354 assign_object:
38355 	zobj = Z_OBJ_P(object);
38356 	if (IS_CV == IS_CONST) {
38357 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
38358 			void **cache_slot = CACHE_ADDR(opline->extended_value);
38359 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
38360 			zval *property_val;
38361 
38362 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
38363 				property_val = OBJ_PROP(zobj, prop_offset);
38364 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
38365 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
38366 
38367 					if (prop_info != NULL) {
38368 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
38369 						goto free_and_exit_assign_obj;
38370 					} else {
38371 fast_assign_obj:
38372 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
38373 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38374 							ZVAL_COPY(EX_VAR(opline->result.var), value);
38375 						}
38376 						goto exit_assign_obj;
38377 					}
38378 				}
38379 			} else {
38380 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38381 				if (EXPECTED(zobj->properties != NULL)) {
38382 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
38383 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
38384 							GC_DELREF(zobj->properties);
38385 						}
38386 						zobj->properties = zend_array_dup(zobj->properties);
38387 					}
38388 					property_val = zend_hash_find_known_hash(zobj->properties, name);
38389 					if (property_val) {
38390 						goto fast_assign_obj;
38391 					}
38392 				}
38393 
38394 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
38395 					if (EXPECTED(zobj->properties == NULL)) {
38396 						rebuild_object_properties(zobj);
38397 					}
38398 					if (IS_VAR == IS_CONST) {
38399 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
38400 							Z_ADDREF_P(value);
38401 						}
38402 					} else if (IS_VAR != IS_TMP_VAR) {
38403 						if (Z_ISREF_P(value)) {
38404 							if (IS_VAR == IS_VAR) {
38405 								zend_reference *ref = Z_REF_P(value);
38406 								if (GC_DELREF(ref) == 0) {
38407 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
38408 									efree_size(ref, sizeof(zend_reference));
38409 									value = &tmp;
38410 								} else {
38411 									value = Z_REFVAL_P(value);
38412 									Z_TRY_ADDREF_P(value);
38413 								}
38414 							} else {
38415 								value = Z_REFVAL_P(value);
38416 								Z_TRY_ADDREF_P(value);
38417 							}
38418 						} else if (IS_VAR == IS_CV) {
38419 							Z_TRY_ADDREF_P(value);
38420 						}
38421 						}
38422 					zend_hash_add_new(zobj->properties, name, value);
38423 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38424 						ZVAL_COPY(EX_VAR(opline->result.var), value);
38425 					}
38426 					goto exit_assign_obj;
38427 				}
38428 			}
38429 		}
38430 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38431 	} else {
38432 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
38433 		if (UNEXPECTED(!name)) {
38434 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38435 			UNDEF_RESULT();
38436 			goto exit_assign_obj;
38437 		}
38438 	}
38439 
38440 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
38441 		ZVAL_DEREF(value);
38442 	}
38443 
38444 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
38445 
38446 	if (IS_CV != IS_CONST) {
38447 		zend_tmp_string_release(tmp_name);
38448 	}
38449 
38450 free_and_exit_assign_obj:
38451 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
38452 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
38453 	}
38454 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38455 exit_assign_obj:
38456 	if (garbage) {
38457 		GC_DTOR_NO_REF(garbage);
38458 	}
38459 
38460 
38461 	/* assign_obj has two opcodes! */
38462 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38463 }
38464 
38465 /* 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)38466 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38467 {
38468 	USE_OPLINE
38469 	zval *object, *value, tmp;
38470 	zend_object *zobj;
38471 	zend_string *name, *tmp_name;
38472 	zend_refcounted *garbage = NULL;
38473 
38474 	SAVE_OPLINE();
38475 	object = &EX(This);
38476 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
38477 
38478 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38479 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
38480 			object = Z_REFVAL_P(object);
38481 			goto assign_object;
38482 		}
38483 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
38484 		value = &EG(uninitialized_zval);
38485 		goto free_and_exit_assign_obj;
38486 	}
38487 
38488 assign_object:
38489 	zobj = Z_OBJ_P(object);
38490 	if (IS_CV == IS_CONST) {
38491 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
38492 			void **cache_slot = CACHE_ADDR(opline->extended_value);
38493 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
38494 			zval *property_val;
38495 
38496 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
38497 				property_val = OBJ_PROP(zobj, prop_offset);
38498 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
38499 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
38500 
38501 					if (prop_info != NULL) {
38502 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
38503 						goto free_and_exit_assign_obj;
38504 					} else {
38505 fast_assign_obj:
38506 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
38507 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38508 							ZVAL_COPY(EX_VAR(opline->result.var), value);
38509 						}
38510 						goto exit_assign_obj;
38511 					}
38512 				}
38513 			} else {
38514 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38515 				if (EXPECTED(zobj->properties != NULL)) {
38516 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
38517 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
38518 							GC_DELREF(zobj->properties);
38519 						}
38520 						zobj->properties = zend_array_dup(zobj->properties);
38521 					}
38522 					property_val = zend_hash_find_known_hash(zobj->properties, name);
38523 					if (property_val) {
38524 						goto fast_assign_obj;
38525 					}
38526 				}
38527 
38528 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
38529 					if (EXPECTED(zobj->properties == NULL)) {
38530 						rebuild_object_properties(zobj);
38531 					}
38532 					if (IS_CV == IS_CONST) {
38533 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
38534 							Z_ADDREF_P(value);
38535 						}
38536 					} else if (IS_CV != IS_TMP_VAR) {
38537 						if (Z_ISREF_P(value)) {
38538 							if (IS_CV == IS_VAR) {
38539 								zend_reference *ref = Z_REF_P(value);
38540 								if (GC_DELREF(ref) == 0) {
38541 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
38542 									efree_size(ref, sizeof(zend_reference));
38543 									value = &tmp;
38544 								} else {
38545 									value = Z_REFVAL_P(value);
38546 									Z_TRY_ADDREF_P(value);
38547 								}
38548 							} else {
38549 								value = Z_REFVAL_P(value);
38550 								Z_TRY_ADDREF_P(value);
38551 							}
38552 						} else if (IS_CV == IS_CV) {
38553 							Z_TRY_ADDREF_P(value);
38554 						}
38555 						}
38556 					zend_hash_add_new(zobj->properties, name, value);
38557 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38558 						ZVAL_COPY(EX_VAR(opline->result.var), value);
38559 					}
38560 					goto exit_assign_obj;
38561 				}
38562 			}
38563 		}
38564 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38565 	} else {
38566 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
38567 		if (UNEXPECTED(!name)) {
38568 
38569 			UNDEF_RESULT();
38570 			goto exit_assign_obj;
38571 		}
38572 	}
38573 
38574 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
38575 		ZVAL_DEREF(value);
38576 	}
38577 
38578 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
38579 
38580 	if (IS_CV != IS_CONST) {
38581 		zend_tmp_string_release(tmp_name);
38582 	}
38583 
38584 free_and_exit_assign_obj:
38585 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
38586 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
38587 	}
38588 
38589 exit_assign_obj:
38590 	if (garbage) {
38591 		GC_DTOR_NO_REF(garbage);
38592 	}
38593 
38594 
38595 	/* assign_obj has two opcodes! */
38596 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38597 }
38598 
38599 /* 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)38600 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38601 {
38602 	USE_OPLINE
38603 	zval *property, *container, *value_ptr;
38604 
38605 	SAVE_OPLINE();
38606 
38607 	container = &EX(This);
38608 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38609 
38610 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
38611 
38612 	if (1) {
38613 		if (IS_UNUSED == IS_UNUSED) {
38614 			if (IS_CV == IS_CONST) {
38615 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38616 			} else {
38617 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38618 			}
38619 		} else {
38620 			if (IS_CV == IS_CONST) {
38621 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38622 			} else {
38623 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38624 			}
38625 		}
38626 	} else {
38627 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38628 	}
38629 
38630 
38631 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38632 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38633 }
38634 
38635 /* 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)38636 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38637 {
38638 	USE_OPLINE
38639 	zval *property, *container, *value_ptr;
38640 
38641 	SAVE_OPLINE();
38642 
38643 	container = &EX(This);
38644 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38645 
38646 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
38647 
38648 	if (1) {
38649 		if (IS_UNUSED == IS_UNUSED) {
38650 			if (IS_CV == IS_CONST) {
38651 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38652 			} else {
38653 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38654 			}
38655 		} else {
38656 			if (IS_CV == IS_CONST) {
38657 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38658 			} else {
38659 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38660 			}
38661 		}
38662 	} else {
38663 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38664 	}
38665 
38666 
38667 
38668 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38669 }
38670 
38671 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38673 {
38674 	USE_OPLINE
38675 	zend_string **rope;
38676 	zval *var;
38677 
38678 	/* Compiler allocates the necessary number of zval slots to keep the rope */
38679 	rope = (zend_string**)EX_VAR(opline->result.var);
38680 	if (IS_CV == IS_CONST) {
38681 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38682 		rope[0] = Z_STR_P(var);
38683 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
38684 			Z_ADDREF_P(var);
38685 		}
38686 	} else {
38687 		var = EX_VAR(opline->op2.var);
38688 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
38689 			if (IS_CV == IS_CV) {
38690 				rope[0] = zend_string_copy(Z_STR_P(var));
38691 			} else {
38692 				rope[0] = Z_STR_P(var);
38693 			}
38694 		} else {
38695 			SAVE_OPLINE();
38696 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
38697 				ZVAL_UNDEFINED_OP2();
38698 			}
38699 			rope[0] = zval_get_string_func(var);
38700 
38701 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38702 		}
38703 	}
38704 	ZEND_VM_NEXT_OPCODE();
38705 }
38706 
ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38707 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38708 {
38709 	zval *class_name;
38710 	USE_OPLINE
38711 
38712 	SAVE_OPLINE();
38713 	if (IS_CV == IS_UNUSED) {
38714 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
38715 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38716 	} else if (IS_CV == IS_CONST) {
38717 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
38718 
38719 		if (UNEXPECTED(ce == NULL)) {
38720 			class_name = EX_VAR(opline->op2.var);
38721 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
38722 			CACHE_PTR(opline->extended_value, ce);
38723 		}
38724 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
38725 	} else {
38726 		class_name = EX_VAR(opline->op2.var);
38727 try_class_name:
38728 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
38729 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
38730 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
38731 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
38732 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
38733 			class_name = Z_REFVAL_P(class_name);
38734 			goto try_class_name;
38735 		} else {
38736 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
38737 				ZVAL_UNDEFINED_OP2();
38738 				if (UNEXPECTED(EG(exception) != NULL)) {
38739 					HANDLE_EXCEPTION();
38740 				}
38741 			}
38742 			zend_throw_error(NULL, "Class name must be a valid object or a string");
38743 		}
38744 	}
38745 
38746 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38747 }
38748 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38749 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38750 {
38751 	USE_OPLINE
38752 	zval *function_name;
38753 	zval *object;
38754 	zend_function *fbc;
38755 	zend_class_entry *called_scope;
38756 	zend_object *obj;
38757 	zend_execute_data *call;
38758 	uint32_t call_info;
38759 
38760 	SAVE_OPLINE();
38761 
38762 	object = &EX(This);
38763 
38764 	if (IS_CV != IS_CONST) {
38765 		function_name = EX_VAR(opline->op2.var);
38766 	}
38767 
38768 	if (IS_CV != IS_CONST &&
38769 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
38770 		do {
38771 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
38772 				function_name = Z_REFVAL_P(function_name);
38773 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
38774 					break;
38775 				}
38776 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
38777 				ZVAL_UNDEFINED_OP2();
38778 				if (UNEXPECTED(EG(exception) != NULL)) {
38779 
38780 					HANDLE_EXCEPTION();
38781 				}
38782 			}
38783 			zend_throw_error(NULL, "Method name must be a string");
38784 
38785 
38786 			HANDLE_EXCEPTION();
38787 		} while (0);
38788 	}
38789 
38790 	if (IS_UNUSED == IS_UNUSED) {
38791 		obj = Z_OBJ_P(object);
38792 	} else {
38793 		do {
38794 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
38795 				obj = Z_OBJ_P(object);
38796 			} else {
38797 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
38798 					zend_reference *ref = Z_REF_P(object);
38799 
38800 					object = &ref->val;
38801 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
38802 						obj = Z_OBJ_P(object);
38803 						if (IS_UNUSED & IS_VAR) {
38804 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
38805 								efree_size(ref, sizeof(zend_reference));
38806 							} else {
38807 								Z_ADDREF_P(object);
38808 							}
38809 						}
38810 						break;
38811 					}
38812 				}
38813 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
38814 					object = ZVAL_UNDEFINED_OP1();
38815 					if (UNEXPECTED(EG(exception) != NULL)) {
38816 						if (IS_CV != IS_CONST) {
38817 
38818 						}
38819 						HANDLE_EXCEPTION();
38820 					}
38821 				}
38822 				if (IS_CV == IS_CONST) {
38823 					function_name = EX_VAR(opline->op2.var);
38824 				}
38825 				zend_invalid_method_call(object, function_name);
38826 
38827 
38828 				HANDLE_EXCEPTION();
38829 			}
38830 		} while (0);
38831 	}
38832 
38833 	called_scope = obj->ce;
38834 
38835 	if (IS_CV == IS_CONST &&
38836 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
38837 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
38838 	} else {
38839 		zend_object *orig_obj = obj;
38840 
38841 		if (IS_CV == IS_CONST) {
38842 			function_name = EX_VAR(opline->op2.var);
38843 		}
38844 
38845 		/* First, locate the function. */
38846 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
38847 		if (UNEXPECTED(fbc == NULL)) {
38848 			if (EXPECTED(!EG(exception))) {
38849 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
38850 			}
38851 
38852 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
38853 				zend_objects_store_del(orig_obj);
38854 			}
38855 			HANDLE_EXCEPTION();
38856 		}
38857 		if (IS_CV == IS_CONST &&
38858 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
38859 		    EXPECTED(obj == orig_obj)) {
38860 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
38861 		}
38862 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
38863 			GC_ADDREF(obj); /* For $this pointer */
38864 			if (GC_DELREF(orig_obj) == 0) {
38865 				zend_objects_store_del(orig_obj);
38866 			}
38867 		}
38868 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
38869 			init_func_run_time_cache(&fbc->op_array);
38870 		}
38871 	}
38872 
38873 	if (IS_CV != IS_CONST) {
38874 
38875 	}
38876 
38877 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
38878 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
38879 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
38880 			zend_objects_store_del(obj);
38881 			if (UNEXPECTED(EG(exception))) {
38882 				HANDLE_EXCEPTION();
38883 			}
38884 		}
38885 		/* call static method */
38886 		obj = (zend_object*)called_scope;
38887 		call_info = ZEND_CALL_NESTED_FUNCTION;
38888 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
38889 		if (IS_UNUSED == IS_CV) {
38890 			GC_ADDREF(obj); /* For $this pointer */
38891 		}
38892 		/* CV may be changed indirectly (e.g. when it's a reference) */
38893 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
38894 	}
38895 
38896 	call = zend_vm_stack_push_call_frame(call_info,
38897 		fbc, opline->extended_value, obj);
38898 	call->prev_execute_data = EX(call);
38899 	EX(call) = call;
38900 
38901 	ZEND_VM_NEXT_OPCODE();
38902 }
38903 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38904 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38905 {
38906 	USE_OPLINE
38907 	zval *function_name;
38908 	zend_class_entry *ce;
38909 	uint32_t call_info;
38910 	zend_function *fbc;
38911 	zend_execute_data *call;
38912 
38913 	SAVE_OPLINE();
38914 
38915 	if (IS_UNUSED == IS_CONST) {
38916 		/* no function found. try a static method in class */
38917 		ce = CACHED_PTR(opline->result.num);
38918 		if (UNEXPECTED(ce == NULL)) {
38919 			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);
38920 			if (UNEXPECTED(ce == NULL)) {
38921 
38922 				HANDLE_EXCEPTION();
38923 			}
38924 			if (IS_CV != IS_CONST) {
38925 				CACHE_PTR(opline->result.num, ce);
38926 			}
38927 		}
38928 	} else if (IS_UNUSED == IS_UNUSED) {
38929 		ce = zend_fetch_class(NULL, opline->op1.num);
38930 		if (UNEXPECTED(ce == NULL)) {
38931 
38932 			HANDLE_EXCEPTION();
38933 		}
38934 	} else {
38935 		ce = Z_CE_P(EX_VAR(opline->op1.var));
38936 	}
38937 
38938 	if (IS_UNUSED == IS_CONST &&
38939 	    IS_CV == IS_CONST &&
38940 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
38941 		/* nothing to do */
38942 	} else if (IS_UNUSED != IS_CONST &&
38943 	           IS_CV == IS_CONST &&
38944 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
38945 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
38946 	} else if (IS_CV != IS_UNUSED) {
38947 		function_name = EX_VAR(opline->op2.var);
38948 		if (IS_CV != IS_CONST) {
38949 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
38950 				do {
38951 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
38952 						function_name = Z_REFVAL_P(function_name);
38953 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
38954 							break;
38955 						}
38956 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
38957 						ZVAL_UNDEFINED_OP2();
38958 						if (UNEXPECTED(EG(exception) != NULL)) {
38959 							HANDLE_EXCEPTION();
38960 						}
38961 					}
38962 					zend_throw_error(NULL, "Method name must be a string");
38963 
38964 					HANDLE_EXCEPTION();
38965 				} while (0);
38966 			}
38967 		}
38968 
38969 		if (ce->get_static_method) {
38970 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
38971 		} else {
38972 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
38973 		}
38974 		if (UNEXPECTED(fbc == NULL)) {
38975 			if (EXPECTED(!EG(exception))) {
38976 				zend_undefined_method(ce, Z_STR_P(function_name));
38977 			}
38978 
38979 			HANDLE_EXCEPTION();
38980 		}
38981 		if (IS_CV == IS_CONST &&
38982 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
38983 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
38984 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
38985 		}
38986 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
38987 			init_func_run_time_cache(&fbc->op_array);
38988 		}
38989 		if (IS_CV != IS_CONST) {
38990 
38991 		}
38992 	} else {
38993 		if (UNEXPECTED(ce->constructor == NULL)) {
38994 			zend_throw_error(NULL, "Cannot call constructor");
38995 			HANDLE_EXCEPTION();
38996 		}
38997 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
38998 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
38999 			HANDLE_EXCEPTION();
39000 		}
39001 		fbc = ce->constructor;
39002 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
39003 			init_func_run_time_cache(&fbc->op_array);
39004 		}
39005 	}
39006 
39007 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
39008 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
39009 			ce = (zend_class_entry*)Z_OBJ(EX(This));
39010 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
39011 		} else {
39012 			zend_non_static_method_call(fbc);
39013 			HANDLE_EXCEPTION();
39014 		}
39015 	} else {
39016 		/* previous opcode is ZEND_FETCH_CLASS */
39017 		if (IS_UNUSED == IS_UNUSED
39018 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
39019 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
39020 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
39021 				ce = Z_OBJCE(EX(This));
39022 			} else {
39023 				ce = Z_CE(EX(This));
39024 			}
39025 		}
39026 		call_info = ZEND_CALL_NESTED_FUNCTION;
39027 	}
39028 
39029 	call = zend_vm_stack_push_call_frame(call_info,
39030 		fbc, opline->extended_value, ce);
39031 	call->prev_execute_data = EX(call);
39032 	EX(call) = call;
39033 
39034 	ZEND_VM_NEXT_OPCODE();
39035 }
39036 
ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39037 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39038 {
39039 	zval *array;
39040 	uint32_t size;
39041 	USE_OPLINE
39042 
39043 	array = EX_VAR(opline->result.var);
39044 	if (IS_UNUSED != IS_UNUSED) {
39045 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
39046 		ZVAL_ARR(array, zend_new_array(size));
39047 		/* Explicitly initialize array as not-packed if flag is set */
39048 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
39049 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
39050 		}
39051 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39052 	} else {
39053 		ZVAL_ARR(array, zend_new_array(0));
39054 		ZEND_VM_NEXT_OPCODE();
39055 	}
39056 }
39057 
ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39058 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39059 {
39060 	USE_OPLINE
39061 	zval *container;
39062 	zval *offset;
39063 	zend_string *name, *tmp_name;
39064 
39065 	SAVE_OPLINE();
39066 	container = &EX(This);
39067 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
39068 
39069 	do {
39070 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
39071 			if (Z_ISREF_P(container)) {
39072 				container = Z_REFVAL_P(container);
39073 				if (Z_TYPE_P(container) != IS_OBJECT) {
39074 					if (IS_UNUSED == IS_CV
39075 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
39076 						ZVAL_UNDEFINED_OP1();
39077 					}
39078 					break;
39079 				}
39080 			} else {
39081 				break;
39082 			}
39083 		}
39084 		if (IS_CV == IS_CONST) {
39085 			name = Z_STR_P(offset);
39086 		} else {
39087 			name = zval_try_get_tmp_string(offset, &tmp_name);
39088 			if (UNEXPECTED(!name)) {
39089 				break;
39090 			}
39091 		}
39092 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
39093 		if (IS_CV != IS_CONST) {
39094 			zend_tmp_string_release(tmp_name);
39095 		}
39096 	} while (0);
39097 
39098 
39099 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39100 }
39101 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39102 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39103 {
39104 	USE_OPLINE
39105 	zval *container;
39106 	int result;
39107 	zval *offset;
39108 	zend_string *name, *tmp_name;
39109 
39110 	SAVE_OPLINE();
39111 	container = &EX(This);
39112 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
39113 
39114 	if (IS_UNUSED == IS_CONST ||
39115 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
39116 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
39117 			container = Z_REFVAL_P(container);
39118 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
39119 				result = (opline->extended_value & ZEND_ISEMPTY);
39120 				goto isset_object_finish;
39121 			}
39122 		} else {
39123 			result = (opline->extended_value & ZEND_ISEMPTY);
39124 			goto isset_object_finish;
39125 		}
39126 	}
39127 
39128 	if (IS_CV == IS_CONST) {
39129 		name = Z_STR_P(offset);
39130 	} else {
39131 		name = zval_try_get_tmp_string(offset, &tmp_name);
39132 		if (UNEXPECTED(!name)) {
39133 			result = 0;
39134 			goto isset_object_finish;
39135 		}
39136 	}
39137 
39138 	result =
39139 		(opline->extended_value & ZEND_ISEMPTY) ^
39140 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
39141 
39142 	if (IS_CV != IS_CONST) {
39143 		zend_tmp_string_release(tmp_name);
39144 	}
39145 
39146 isset_object_finish:
39147 
39148 
39149 	ZEND_VM_SMART_BRANCH(result, 1);
39150 }
39151 
ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39152 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39153 {
39154 	USE_OPLINE
39155 
39156 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
39157 
39158 	SAVE_OPLINE();
39159 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
39160 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39161 	}
39162 
39163 	/* Destroy the previously yielded value */
39164 	zval_ptr_dtor(&generator->value);
39165 
39166 	/* Destroy the previously yielded key */
39167 	zval_ptr_dtor(&generator->key);
39168 
39169 	/* Set the new yielded value */
39170 	if (IS_UNUSED != IS_UNUSED) {
39171 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
39172 			/* Constants and temporary variables aren't yieldable by reference,
39173 			 * but we still allow them with a notice. */
39174 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
39175 				zval *value;
39176 
39177 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
39178 
39179 				value = NULL;
39180 				ZVAL_COPY_VALUE(&generator->value, value);
39181 				if (IS_UNUSED == IS_CONST) {
39182 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
39183 						Z_ADDREF(generator->value);
39184 					}
39185 				}
39186 			} else {
39187 				zval *value_ptr = NULL;
39188 
39189 				/* If a function call result is yielded and the function did
39190 				 * not return by reference we throw a notice. */
39191 				do {
39192 					if (IS_UNUSED == IS_VAR) {
39193 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
39194 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
39195 						 && !Z_ISREF_P(value_ptr)) {
39196 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
39197 							ZVAL_COPY(&generator->value, value_ptr);
39198 							break;
39199 						}
39200 					}
39201 					if (Z_ISREF_P(value_ptr)) {
39202 						Z_ADDREF_P(value_ptr);
39203 					} else {
39204 						ZVAL_MAKE_REF_EX(value_ptr, 2);
39205 					}
39206 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
39207 				} while (0);
39208 
39209 			}
39210 		} else {
39211 			zval *value = NULL;
39212 
39213 			/* Consts, temporary variables and references need copying */
39214 			if (IS_UNUSED == IS_CONST) {
39215 				ZVAL_COPY_VALUE(&generator->value, value);
39216 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
39217 					Z_ADDREF(generator->value);
39218 				}
39219 			} else if (IS_UNUSED == IS_TMP_VAR) {
39220 				ZVAL_COPY_VALUE(&generator->value, value);
39221 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
39222 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
39223 
39224 			} else {
39225 				ZVAL_COPY_VALUE(&generator->value, value);
39226 				if (IS_UNUSED == IS_CV) {
39227 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
39228 				}
39229 			}
39230 		}
39231 	} else {
39232 		/* If no value was specified yield null */
39233 		ZVAL_NULL(&generator->value);
39234 	}
39235 
39236 	/* Set the new yielded key */
39237 	if (IS_CV != IS_UNUSED) {
39238 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
39239 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
39240 			key = Z_REFVAL_P(key);
39241 		}
39242 		ZVAL_COPY(&generator->key, key);
39243 
39244 		if (Z_TYPE(generator->key) == IS_LONG
39245 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
39246 		) {
39247 			generator->largest_used_integer_key = Z_LVAL(generator->key);
39248 		}
39249 	} else {
39250 		/* If no key was specified we use auto-increment keys */
39251 		generator->largest_used_integer_key++;
39252 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
39253 	}
39254 
39255 	if (RETURN_VALUE_USED(opline)) {
39256 		/* If the return value of yield is used set the send
39257 		 * target and initialize it to NULL */
39258 		generator->send_target = EX_VAR(opline->result.var);
39259 		ZVAL_NULL(generator->send_target);
39260 	} else {
39261 		generator->send_target = NULL;
39262 	}
39263 
39264 	/* We increment to the next op, so we are at the correct position when the
39265 	 * generator is resumed. */
39266 	ZEND_VM_INC_OPCODE();
39267 
39268 	/* The GOTO VM uses a local opline variable. We need to set the opline
39269 	 * variable in execute_data so we don't resume at an old position. */
39270 	SAVE_OPLINE();
39271 
39272 	ZEND_VM_RETURN();
39273 }
39274 
ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39275 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39276 {
39277 	USE_OPLINE
39278 	zval *val;
39279 
39280 	val = EX_VAR(opline->op1.var);
39281 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39282 		ZVAL_FALSE(EX_VAR(opline->result.var));
39283 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39284 		/* The result and op1 can be the same cv zval */
39285 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
39286 		ZVAL_TRUE(EX_VAR(opline->result.var));
39287 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
39288 			SAVE_OPLINE();
39289 			ZVAL_UNDEFINED_OP1();
39290 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39291 		}
39292 	} else {
39293 		SAVE_OPLINE();
39294 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
39295 
39296 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39297 	}
39298 	ZEND_VM_NEXT_OPCODE();
39299 }
39300 
zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)39301 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
39302 {
39303 	USE_OPLINE
39304 	zval *var_ptr;
39305 
39306 	var_ptr = EX_VAR(opline->op1.var);
39307 
39308 	SAVE_OPLINE();
39309 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
39310 		ZVAL_UNDEFINED_OP1();
39311 		ZVAL_NULL(var_ptr);
39312 	}
39313 
39314 	do {
39315 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39316 			zend_reference *ref = Z_REF_P(var_ptr);
39317 			var_ptr = Z_REFVAL_P(var_ptr);
39318 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39319 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
39320 				break;
39321 			}
39322 		}
39323 		increment_function(var_ptr);
39324 	} while (0);
39325 
39326 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39327 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39328 	}
39329 
39330 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39331 }
39332 
ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39333 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39334 {
39335 	USE_OPLINE
39336 	zval *var_ptr;
39337 
39338 	var_ptr = EX_VAR(opline->op1.var);
39339 
39340 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39341 		fast_long_increment_function(var_ptr);
39342 		if (UNEXPECTED(0)) {
39343 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39344 		}
39345 		ZEND_VM_NEXT_OPCODE();
39346 	}
39347 
39348 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39349 }
39350 
ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39351 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39352 {
39353 	USE_OPLINE
39354 	zval *var_ptr;
39355 
39356 	var_ptr = EX_VAR(opline->op1.var);
39357 
39358 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39359 		fast_long_increment_function(var_ptr);
39360 		if (UNEXPECTED(1)) {
39361 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39362 		}
39363 		ZEND_VM_NEXT_OPCODE();
39364 	}
39365 
39366 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39367 }
39368 
zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)39369 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
39370 {
39371 	USE_OPLINE
39372 	zval *var_ptr;
39373 
39374 	var_ptr = EX_VAR(opline->op1.var);
39375 
39376 	SAVE_OPLINE();
39377 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
39378 		ZVAL_UNDEFINED_OP1();
39379 		ZVAL_NULL(var_ptr);
39380 	}
39381 
39382 	do {
39383 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39384 			zend_reference *ref = Z_REF_P(var_ptr);
39385 			var_ptr = Z_REFVAL_P(var_ptr);
39386 
39387 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39388 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
39389 				break;
39390 			}
39391 		}
39392 		decrement_function(var_ptr);
39393 	} while (0);
39394 
39395 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39396 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39397 	}
39398 
39399 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39400 }
39401 
ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39402 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39403 {
39404 	USE_OPLINE
39405 	zval *var_ptr;
39406 
39407 	var_ptr = EX_VAR(opline->op1.var);
39408 
39409 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39410 		fast_long_decrement_function(var_ptr);
39411 		if (UNEXPECTED(0)) {
39412 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39413 		}
39414 		ZEND_VM_NEXT_OPCODE();
39415 	}
39416 
39417 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39418 }
39419 
ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39420 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39421 {
39422 	USE_OPLINE
39423 	zval *var_ptr;
39424 
39425 	var_ptr = EX_VAR(opline->op1.var);
39426 
39427 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39428 		fast_long_decrement_function(var_ptr);
39429 		if (UNEXPECTED(1)) {
39430 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39431 		}
39432 		ZEND_VM_NEXT_OPCODE();
39433 	}
39434 
39435 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39436 }
39437 
zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)39438 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
39439 {
39440 	USE_OPLINE
39441 	zval *var_ptr;
39442 
39443 	var_ptr = EX_VAR(opline->op1.var);
39444 
39445 	SAVE_OPLINE();
39446 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
39447 		ZVAL_UNDEFINED_OP1();
39448 		ZVAL_NULL(var_ptr);
39449 	}
39450 
39451 	do {
39452 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39453 			zend_reference *ref = Z_REF_P(var_ptr);
39454 			var_ptr = Z_REFVAL_P(var_ptr);
39455 
39456 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39457 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
39458 				break;
39459 			}
39460 		}
39461 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39462 
39463 		increment_function(var_ptr);
39464 	} while (0);
39465 
39466 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39467 }
39468 
ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39469 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39470 {
39471 	USE_OPLINE
39472 	zval *var_ptr;
39473 
39474 	var_ptr = EX_VAR(opline->op1.var);
39475 
39476 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39477 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39478 		fast_long_increment_function(var_ptr);
39479 		ZEND_VM_NEXT_OPCODE();
39480 	}
39481 
39482 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39483 }
39484 
zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)39485 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
39486 {
39487 	USE_OPLINE
39488 	zval *var_ptr;
39489 
39490 	var_ptr = EX_VAR(opline->op1.var);
39491 
39492 	SAVE_OPLINE();
39493 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
39494 		ZVAL_UNDEFINED_OP1();
39495 		ZVAL_NULL(var_ptr);
39496 	}
39497 
39498 	do {
39499 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39500 			zend_reference *ref = Z_REF_P(var_ptr);
39501 			var_ptr = Z_REFVAL_P(var_ptr);
39502 
39503 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39504 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
39505 				break;
39506 			}
39507 		}
39508 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39509 
39510 		decrement_function(var_ptr);
39511 	} while (0);
39512 
39513 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39514 }
39515 
ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39516 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39517 {
39518 	USE_OPLINE
39519 	zval *var_ptr;
39520 
39521 	var_ptr = EX_VAR(opline->op1.var);
39522 
39523 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39524 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39525 		fast_long_decrement_function(var_ptr);
39526 		ZEND_VM_NEXT_OPCODE();
39527 	}
39528 
39529 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39530 }
39531 
ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39532 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39533 {
39534 	USE_OPLINE
39535 	zval *z;
39536 
39537 	SAVE_OPLINE();
39538 	z = EX_VAR(opline->op1.var);
39539 
39540 	if (Z_TYPE_P(z) == IS_STRING) {
39541 		zend_string *str = Z_STR_P(z);
39542 
39543 		if (ZSTR_LEN(str) != 0) {
39544 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
39545 		}
39546 	} else {
39547 		zend_string *str = zval_get_string_func(z);
39548 
39549 		if (ZSTR_LEN(str) != 0) {
39550 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
39551 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
39552 			ZVAL_UNDEFINED_OP1();
39553 		}
39554 		zend_string_release_ex(str, 0);
39555 	}
39556 
39557 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39558 }
39559 
ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39560 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39561 {
39562 	USE_OPLINE
39563 	zval *val;
39564 	uint8_t op1_type;
39565 
39566 	val = EX_VAR(opline->op1.var);
39567 
39568 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39569 		ZEND_VM_NEXT_OPCODE();
39570 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39571 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
39572 			SAVE_OPLINE();
39573 			ZVAL_UNDEFINED_OP1();
39574 			if (UNEXPECTED(EG(exception))) {
39575 				HANDLE_EXCEPTION();
39576 			}
39577 		}
39578 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39579 	}
39580 
39581 	SAVE_OPLINE();
39582 	op1_type = IS_CV;
39583 	if (i_zend_is_true(val)) {
39584 		opline++;
39585 	} else {
39586 		opline = OP_JMP_ADDR(opline, opline->op2);
39587 	}
39588 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
39589 		zval_ptr_dtor_nogc(val);
39590 	}
39591 	ZEND_VM_JMP(opline);
39592 }
39593 
ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39594 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39595 {
39596 	USE_OPLINE
39597 	zval *val;
39598 	uint8_t op1_type;
39599 
39600 	val = EX_VAR(opline->op1.var);
39601 
39602 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39603 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39604 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39605 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
39606 			SAVE_OPLINE();
39607 			ZVAL_UNDEFINED_OP1();
39608 			if (UNEXPECTED(EG(exception))) {
39609 				HANDLE_EXCEPTION();
39610 			}
39611 		}
39612 		ZEND_VM_NEXT_OPCODE();
39613 	}
39614 
39615 	SAVE_OPLINE();
39616 	op1_type = IS_CV;
39617 	if (i_zend_is_true(val)) {
39618 		opline = OP_JMP_ADDR(opline, opline->op2);
39619 	} else {
39620 		opline++;
39621 	}
39622 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
39623 		zval_ptr_dtor_nogc(val);
39624 	}
39625 	ZEND_VM_JMP(opline);
39626 }
39627 
ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39628 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39629 {
39630 	USE_OPLINE
39631 	zval *val;
39632 	bool ret;
39633 
39634 	val = EX_VAR(opline->op1.var);
39635 
39636 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39637 		ZVAL_TRUE(EX_VAR(opline->result.var));
39638 		ZEND_VM_NEXT_OPCODE();
39639 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39640 		ZVAL_FALSE(EX_VAR(opline->result.var));
39641 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
39642 			SAVE_OPLINE();
39643 			ZVAL_UNDEFINED_OP1();
39644 			if (UNEXPECTED(EG(exception))) {
39645 				HANDLE_EXCEPTION();
39646 			}
39647 		}
39648 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39649 	}
39650 
39651 	SAVE_OPLINE();
39652 	ret = i_zend_is_true(val);
39653 
39654 	if (ret) {
39655 		ZVAL_TRUE(EX_VAR(opline->result.var));
39656 		opline++;
39657 	} else {
39658 		ZVAL_FALSE(EX_VAR(opline->result.var));
39659 		opline = OP_JMP_ADDR(opline, opline->op2);
39660 	}
39661 	ZEND_VM_JMP(opline);
39662 }
39663 
ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39664 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39665 {
39666 	USE_OPLINE
39667 	zval *val;
39668 	bool ret;
39669 
39670 	val = EX_VAR(opline->op1.var);
39671 
39672 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39673 		ZVAL_TRUE(EX_VAR(opline->result.var));
39674 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39675 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39676 		ZVAL_FALSE(EX_VAR(opline->result.var));
39677 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
39678 			SAVE_OPLINE();
39679 			ZVAL_UNDEFINED_OP1();
39680 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39681 		} else {
39682 			ZEND_VM_NEXT_OPCODE();
39683 		}
39684 	}
39685 
39686 	SAVE_OPLINE();
39687 	ret = i_zend_is_true(val);
39688 
39689 	if (ret) {
39690 		ZVAL_TRUE(EX_VAR(opline->result.var));
39691 		opline = OP_JMP_ADDR(opline, opline->op2);
39692 	} else {
39693 		ZVAL_FALSE(EX_VAR(opline->result.var));
39694 		opline++;
39695 	}
39696 	ZEND_VM_JMP(opline);
39697 }
39698 
ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39699 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39700 {
39701 	USE_OPLINE
39702 	zval *retval_ptr;
39703 	zval *return_value;
39704 
39705 	retval_ptr = EX_VAR(opline->op1.var);
39706 	return_value = EX(return_value);
39707 
39708 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
39709 		SAVE_OPLINE();
39710 		retval_ptr = ZVAL_UNDEFINED_OP1();
39711 		if (return_value) {
39712 			ZVAL_NULL(return_value);
39713 		}
39714 	} else if (!return_value) {
39715 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
39716 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
39717 				SAVE_OPLINE();
39718 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
39719 			}
39720 		}
39721 	} else {
39722 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
39723 			ZVAL_COPY_VALUE(return_value, retval_ptr);
39724 			if (IS_CV == IS_CONST) {
39725 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
39726 					Z_ADDREF_P(return_value);
39727 				}
39728 			}
39729 		} else if (IS_CV == IS_CV) {
39730 			do {
39731 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
39732 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
39733 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
39734 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
39735 							ZVAL_COPY_VALUE(return_value, retval_ptr);
39736 							if (GC_MAY_LEAK(ref)) {
39737 								SAVE_OPLINE();
39738 								gc_possible_root(ref);
39739 							}
39740 							ZVAL_NULL(retval_ptr);
39741 							break;
39742 						} else {
39743 							Z_ADDREF_P(retval_ptr);
39744 						}
39745 					} else {
39746 						retval_ptr = Z_REFVAL_P(retval_ptr);
39747 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
39748 							Z_ADDREF_P(retval_ptr);
39749 						}
39750 					}
39751 				}
39752 				ZVAL_COPY_VALUE(return_value, retval_ptr);
39753 			} while (0);
39754 		} else /* if (IS_CV == IS_VAR) */ {
39755 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
39756 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
39757 
39758 				retval_ptr = Z_REFVAL_P(retval_ptr);
39759 				ZVAL_COPY_VALUE(return_value, retval_ptr);
39760 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
39761 					efree_size(ref, sizeof(zend_reference));
39762 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
39763 					Z_ADDREF_P(retval_ptr);
39764 				}
39765 			} else {
39766 				ZVAL_COPY_VALUE(return_value, retval_ptr);
39767 			}
39768 		}
39769 	}
39770 
39771 
39772 
39773 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39774 }
39775 
ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39776 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39777 {
39778 	USE_OPLINE
39779 	zval *retval_ptr;
39780 	zval *return_value;
39781 
39782 	SAVE_OPLINE();
39783 
39784 	return_value = EX(return_value);
39785 
39786 	do {
39787 		if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
39788 		    (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
39789 			/* Not supposed to happen, but we'll allow it */
39790 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
39791 
39792 			retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39793 			if (!return_value) {
39794 
39795 			} else {
39796 				if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
39797 					ZVAL_COPY_VALUE(return_value, retval_ptr);
39798 					break;
39799 				}
39800 
39801 				ZVAL_NEW_REF(return_value, retval_ptr);
39802 				if (IS_CV == IS_CONST) {
39803 					Z_TRY_ADDREF_P(retval_ptr);
39804 				}
39805 			}
39806 			break;
39807 		}
39808 
39809 		retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
39810 
39811 		if (IS_CV == IS_VAR) {
39812 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
39813 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
39814 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
39815 				if (return_value) {
39816 					ZVAL_NEW_REF(return_value, retval_ptr);
39817 				} else {
39818 
39819 				}
39820 				break;
39821 			}
39822 		}
39823 
39824 		if (return_value) {
39825 			if (Z_ISREF_P(retval_ptr)) {
39826 				Z_ADDREF_P(retval_ptr);
39827 			} else {
39828 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
39829 			}
39830 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
39831 		}
39832 
39833 	} while (0);
39834 
39835 
39836 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39837 }
39838 
ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39839 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39840 {
39841 	USE_OPLINE
39842 	zval *retval;
39843 
39844 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
39845 
39846 	SAVE_OPLINE();
39847 	retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39848 
39849 	/* Copy return value into generator->retval */
39850 	if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
39851 		ZVAL_COPY_VALUE(&generator->retval, retval);
39852 		if (IS_CV == IS_CONST) {
39853 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
39854 				Z_ADDREF(generator->retval);
39855 			}
39856 		}
39857 	} else if (IS_CV == IS_CV) {
39858 		ZVAL_COPY_DEREF(&generator->retval, retval);
39859 	} else /* if (IS_CV == IS_VAR) */ {
39860 		if (UNEXPECTED(Z_ISREF_P(retval))) {
39861 			zend_refcounted *ref = Z_COUNTED_P(retval);
39862 
39863 			retval = Z_REFVAL_P(retval);
39864 			ZVAL_COPY_VALUE(&generator->retval, retval);
39865 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
39866 				efree_size(ref, sizeof(zend_reference));
39867 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
39868 				Z_ADDREF_P(retval);
39869 			}
39870 		} else {
39871 			ZVAL_COPY_VALUE(&generator->retval, retval);
39872 		}
39873 	}
39874 
39875 	EG(current_execute_data) = EX(prev_execute_data);
39876 
39877 	/* Close the generator to free up resources */
39878 	zend_generator_close(generator, 1);
39879 
39880 	/* Pass execution back to handling code */
39881 	ZEND_VM_RETURN();
39882 }
39883 
ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39884 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39885 {
39886 	USE_OPLINE
39887 	zval *value;
39888 
39889 	SAVE_OPLINE();
39890 	value = EX_VAR(opline->op1.var);
39891 
39892 	do {
39893 		if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
39894 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
39895 				value = Z_REFVAL_P(value);
39896 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
39897 					break;
39898 				}
39899 			}
39900 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
39901 				ZVAL_UNDEFINED_OP1();
39902 				if (UNEXPECTED(EG(exception) != NULL)) {
39903 					HANDLE_EXCEPTION();
39904 				}
39905 			}
39906 			zend_throw_error(NULL, "Can only throw objects");
39907 
39908 			HANDLE_EXCEPTION();
39909 		}
39910 	} while (0);
39911 
39912 	zend_exception_save();
39913 	Z_TRY_ADDREF_P(value);
39914 	zend_throw_exception_object(value);
39915 	zend_exception_restore();
39916 
39917 	HANDLE_EXCEPTION();
39918 }
39919 
ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39920 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39921 {
39922 	USE_OPLINE
39923 	zval *arg, *param;
39924 
39925 	SAVE_OPLINE();
39926 
39927 	arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39928 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
39929 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
39930 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
39931 		Z_TRY_ADDREF_P(arg);
39932 		ZVAL_NEW_REF(param, arg);
39933 	} else {
39934 		ZVAL_COPY(param, arg);
39935 	}
39936 
39937 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39938 }
39939 
ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39940 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39941 {
39942 	USE_OPLINE
39943 	zval *val;
39944 
39945 	val = EX_VAR(opline->op1.var);
39946 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39947 		ZVAL_TRUE(EX_VAR(opline->result.var));
39948 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39949 		/* The result and op1 can be the same cv zval */
39950 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
39951 		ZVAL_FALSE(EX_VAR(opline->result.var));
39952 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
39953 			SAVE_OPLINE();
39954 			ZVAL_UNDEFINED_OP1();
39955 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39956 		}
39957 	} else {
39958 		SAVE_OPLINE();
39959 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
39960 
39961 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39962 	}
39963 	ZEND_VM_NEXT_OPCODE();
39964 }
39965 
ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39966 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39967 {
39968 	USE_OPLINE
39969 	zval *obj;
39970 	zend_object *zobj;
39971 	zend_class_entry *ce, *scope;
39972 	zend_function *clone;
39973 	zend_object_clone_obj_t clone_call;
39974 
39975 	SAVE_OPLINE();
39976 	obj = EX_VAR(opline->op1.var);
39977 
39978 	do {
39979 		if (IS_CV == IS_CONST ||
39980 		    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
39981 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
39982 				obj = Z_REFVAL_P(obj);
39983 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
39984 					break;
39985 				}
39986 			}
39987 			ZVAL_UNDEF(EX_VAR(opline->result.var));
39988 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
39989 				ZVAL_UNDEFINED_OP1();
39990 				if (UNEXPECTED(EG(exception) != NULL)) {
39991 					HANDLE_EXCEPTION();
39992 				}
39993 			}
39994 			zend_throw_error(NULL, "__clone method called on non-object");
39995 
39996 			HANDLE_EXCEPTION();
39997 		}
39998 	} while (0);
39999 
40000 	zobj = Z_OBJ_P(obj);
40001 	ce = zobj->ce;
40002 	clone = ce->clone;
40003 	clone_call = zobj->handlers->clone_obj;
40004 	if (UNEXPECTED(clone_call == NULL)) {
40005 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
40006 
40007 		ZVAL_UNDEF(EX_VAR(opline->result.var));
40008 		HANDLE_EXCEPTION();
40009 	}
40010 
40011 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
40012 		scope = EX(func)->op_array.scope;
40013 		if (clone->common.scope != scope) {
40014 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
40015 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
40016 				zend_wrong_clone_call(clone, scope);
40017 
40018 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40019 				HANDLE_EXCEPTION();
40020 			}
40021 		}
40022 	}
40023 
40024 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
40025 
40026 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40027 }
40028 
ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40029 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40030 {
40031 	USE_OPLINE
40032 	zval *expr;
40033 	zval *result = EX_VAR(opline->result.var);
40034 	HashTable *ht;
40035 
40036 	SAVE_OPLINE();
40037 	expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40038 
40039 	switch (opline->extended_value) {
40040 		case IS_LONG:
40041 			ZVAL_LONG(result, zval_get_long(expr));
40042 			break;
40043 		case IS_DOUBLE:
40044 			ZVAL_DOUBLE(result, zval_get_double(expr));
40045 			break;
40046 		case IS_STRING:
40047 			ZVAL_STR(result, zval_get_string(expr));
40048 			break;
40049 		default:
40050 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
40051 			if (IS_CV & (IS_VAR|IS_CV)) {
40052 				ZVAL_DEREF(expr);
40053 			}
40054 			/* If value is already of correct type, return it directly */
40055 			if (Z_TYPE_P(expr) == opline->extended_value) {
40056 				ZVAL_COPY_VALUE(result, expr);
40057 				if (IS_CV == IS_CONST) {
40058 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
40059 				} else if (IS_CV != IS_TMP_VAR) {
40060 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
40061 				}
40062 
40063 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40064 			}
40065 
40066 			if (opline->extended_value == IS_ARRAY) {
40067 				if (IS_CV == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
40068 					if (Z_TYPE_P(expr) != IS_NULL) {
40069 						ZVAL_ARR(result, zend_new_array(1));
40070 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
40071 						if (IS_CV == IS_CONST) {
40072 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
40073 						} else {
40074 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
40075 						}
40076 					} else {
40077 						ZVAL_EMPTY_ARRAY(result);
40078 					}
40079 				} else if (Z_OBJ_P(expr)->properties == NULL
40080 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
40081 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
40082 					/* Optimized version without rebuilding properties HashTable */
40083 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
40084 				} else {
40085 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
40086 					if (obj_ht) {
40087 						/* fast copy */
40088 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
40089 							(Z_OBJCE_P(expr)->default_properties_count ||
40090 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
40091 							 GC_IS_RECURSIVE(obj_ht))));
40092 						zend_release_properties(obj_ht);
40093 					} else {
40094 						ZVAL_EMPTY_ARRAY(result);
40095 					}
40096 				}
40097 			} else {
40098 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
40099 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
40100 				if (Z_TYPE_P(expr) == IS_ARRAY) {
40101 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
40102 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
40103 						/* TODO: try not to duplicate immutable arrays as well ??? */
40104 						ht = zend_array_dup(ht);
40105 					}
40106 					Z_OBJ_P(result)->properties = ht;
40107 				} else if (Z_TYPE_P(expr) != IS_NULL) {
40108 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
40109 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
40110 					if (IS_CV == IS_CONST) {
40111 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
40112 					} else {
40113 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
40114 					}
40115 				}
40116 			}
40117 	}
40118 
40119 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40120 }
40121 
ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40122 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40123 {
40124 	USE_OPLINE
40125 	zend_op_array *new_op_array;
40126 	zval *inc_filename;
40127 
40128 	SAVE_OPLINE();
40129 	inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40130 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
40131 	if (UNEXPECTED(EG(exception) != NULL)) {
40132 
40133 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
40134 			destroy_op_array(new_op_array);
40135 			efree_size(new_op_array, sizeof(zend_op_array));
40136 		}
40137 		UNDEF_RESULT();
40138 		HANDLE_EXCEPTION();
40139 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
40140 		if (RETURN_VALUE_USED(opline)) {
40141 			ZVAL_TRUE(EX_VAR(opline->result.var));
40142 		}
40143 	} else if (UNEXPECTED(new_op_array == NULL)) {
40144 		if (RETURN_VALUE_USED(opline)) {
40145 			ZVAL_FALSE(EX_VAR(opline->result.var));
40146 		}
40147 	} else if (new_op_array->last == 1
40148 			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
40149 			&& new_op_array->opcodes[0].op1_type == IS_CONST
40150 			&& EXPECTED(zend_execute_ex == execute_ex)) {
40151 		if (RETURN_VALUE_USED(opline)) {
40152 			const zend_op *op = new_op_array->opcodes;
40153 
40154 			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
40155 		}
40156 		zend_destroy_static_vars(new_op_array);
40157 		destroy_op_array(new_op_array);
40158 		efree_size(new_op_array, sizeof(zend_op_array));
40159 	} else {
40160 		zval *return_value = NULL;
40161 		zend_execute_data *call;
40162 		if (RETURN_VALUE_USED(opline)) {
40163 			return_value = EX_VAR(opline->result.var);
40164 		}
40165 
40166 		new_op_array->scope = EX(func)->op_array.scope;
40167 
40168 		call = zend_vm_stack_push_call_frame(
40169 			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
40170 			(zend_function*)new_op_array, 0,
40171 			Z_PTR(EX(This)));
40172 
40173 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
40174 			call->symbol_table = EX(symbol_table);
40175 		} else {
40176 			call->symbol_table = zend_rebuild_symbol_table();
40177 		}
40178 
40179 		call->prev_execute_data = execute_data;
40180 		i_init_code_execute_data(call, new_op_array, return_value);
40181 
40182 		if (EXPECTED(zend_execute_ex == execute_ex)) {
40183 
40184 			ZEND_VM_ENTER();
40185 		} else {
40186 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
40187 			zend_execute_ex(call);
40188 			zend_vm_stack_free_call_frame(call);
40189 		}
40190 
40191 		zend_destroy_static_vars(new_op_array);
40192 		destroy_op_array(new_op_array);
40193 		efree_size(new_op_array, sizeof(zend_op_array));
40194 		if (UNEXPECTED(EG(exception) != NULL)) {
40195 			zend_rethrow_exception(execute_data);
40196 
40197 			UNDEF_RESULT();
40198 			HANDLE_EXCEPTION();
40199 		}
40200 	}
40201 
40202 	ZEND_VM_NEXT_OPCODE();
40203 }
40204 
ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40206 {
40207 	USE_OPLINE
40208 	zval *array_ptr, *result;
40209 
40210 	SAVE_OPLINE();
40211 
40212 	array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40213 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
40214 		result = EX_VAR(opline->result.var);
40215 		ZVAL_COPY_VALUE(result, array_ptr);
40216 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
40217 			Z_ADDREF_P(array_ptr);
40218 		}
40219 		Z_FE_POS_P(result) = 0;
40220 
40221 		ZEND_VM_NEXT_OPCODE();
40222 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
40223 		zend_object *zobj = Z_OBJ_P(array_ptr);
40224 		if (!zobj->ce->get_iterator) {
40225 			HashTable *properties = zobj->properties;
40226 			if (properties) {
40227 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
40228 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
40229 						GC_DELREF(properties);
40230 					}
40231 					properties = zobj->properties = zend_array_dup(properties);
40232 				}
40233 			} else {
40234 				properties = zobj->handlers->get_properties(zobj);
40235 			}
40236 
40237 			result = EX_VAR(opline->result.var);
40238 			ZVAL_COPY_VALUE(result, array_ptr);
40239 			if (IS_CV != IS_TMP_VAR) {
40240 				Z_ADDREF_P(array_ptr);
40241 			}
40242 
40243 			if (zend_hash_num_elements(properties) == 0) {
40244 				Z_FE_ITER_P(result) = (uint32_t) -1;
40245 
40246 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
40247 			}
40248 
40249 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
40250 
40251 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40252 		} else {
40253 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
40254 
40255 			if (UNEXPECTED(EG(exception))) {
40256 				HANDLE_EXCEPTION();
40257 			} else if (is_empty) {
40258 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
40259 			} else {
40260 				ZEND_VM_NEXT_OPCODE();
40261 			}
40262 		}
40263 	} else {
40264 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
40265 		ZVAL_UNDEF(EX_VAR(opline->result.var));
40266 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
40267 
40268 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
40269 	}
40270 }
40271 
ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40273 {
40274 	USE_OPLINE
40275 	zval *array_ptr, *array_ref;
40276 
40277 	SAVE_OPLINE();
40278 
40279 	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
40280 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40281 		if (Z_ISREF_P(array_ref)) {
40282 			array_ptr = Z_REFVAL_P(array_ref);
40283 		}
40284 	} else {
40285 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40286 	}
40287 
40288 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
40289 		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
40290 			if (array_ptr == array_ref) {
40291 				ZVAL_NEW_REF(array_ref, array_ref);
40292 				array_ptr = Z_REFVAL_P(array_ref);
40293 			}
40294 			Z_ADDREF_P(array_ref);
40295 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
40296 		} else {
40297 			array_ref = EX_VAR(opline->result.var);
40298 			ZVAL_NEW_REF(array_ref, array_ptr);
40299 			array_ptr = Z_REFVAL_P(array_ref);
40300 		}
40301 		if (IS_CV == IS_CONST) {
40302 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
40303 		} else {
40304 			SEPARATE_ARRAY(array_ptr);
40305 		}
40306 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
40307 
40308 		ZEND_VM_NEXT_OPCODE();
40309 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
40310 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
40311 			HashTable *properties;
40312 			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
40313 				if (array_ptr == array_ref) {
40314 					ZVAL_NEW_REF(array_ref, array_ref);
40315 					array_ptr = Z_REFVAL_P(array_ref);
40316 				}
40317 				Z_ADDREF_P(array_ref);
40318 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
40319 			} else {
40320 				array_ptr = EX_VAR(opline->result.var);
40321 				ZVAL_COPY_VALUE(array_ptr, array_ref);
40322 			}
40323 			if (Z_OBJ_P(array_ptr)->properties
40324 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
40325 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
40326 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
40327 				}
40328 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
40329 			}
40330 
40331 			properties = Z_OBJPROP_P(array_ptr);
40332 			if (zend_hash_num_elements(properties) == 0) {
40333 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
40334 
40335 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
40336 			}
40337 
40338 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
40339 
40340 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40341 		} else {
40342 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
40343 
40344 			if (UNEXPECTED(EG(exception))) {
40345 				HANDLE_EXCEPTION();
40346 			} else if (is_empty) {
40347 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
40348 			} else {
40349 				ZEND_VM_NEXT_OPCODE();
40350 			}
40351 		}
40352 	} else {
40353 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
40354 		ZVAL_UNDEF(EX_VAR(opline->result.var));
40355 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
40356 
40357 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
40358 	}
40359 }
40360 
ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40361 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40362 {
40363 	USE_OPLINE
40364 	zval *value;
40365 	zend_reference *ref = NULL;
40366 	bool ret;
40367 
40368 	SAVE_OPLINE();
40369 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40370 
40371 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
40372 		if (IS_CV == IS_VAR) {
40373 			ref = Z_REF_P(value);
40374 		}
40375 		value = Z_REFVAL_P(value);
40376 	}
40377 
40378 	ret = i_zend_is_true(value);
40379 
40380 	if (UNEXPECTED(EG(exception))) {
40381 
40382 		ZVAL_UNDEF(EX_VAR(opline->result.var));
40383 		HANDLE_EXCEPTION();
40384 	}
40385 
40386 	if (ret) {
40387 		zval *result = EX_VAR(opline->result.var);
40388 
40389 		ZVAL_COPY_VALUE(result, value);
40390 		if (IS_CV == IS_CONST) {
40391 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
40392 		} else if (IS_CV == IS_CV) {
40393 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
40394 		} else if (IS_CV == IS_VAR && ref) {
40395 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
40396 				efree_size(ref, sizeof(zend_reference));
40397 			} else if (Z_OPT_REFCOUNTED_P(result)) {
40398 				Z_ADDREF_P(result);
40399 			}
40400 		}
40401 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
40402 	}
40403 
40404 	ZEND_VM_NEXT_OPCODE();
40405 }
40406 
ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40408 {
40409 	USE_OPLINE
40410 	zval *value;
40411 	zend_reference *ref = NULL;
40412 
40413 	SAVE_OPLINE();
40414 	value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
40415 
40416 	if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
40417 		if (IS_CV & IS_VAR) {
40418 			ref = Z_REF_P(value);
40419 		}
40420 		value = Z_REFVAL_P(value);
40421 	}
40422 
40423 	if (Z_TYPE_P(value) > IS_NULL) {
40424 		zval *result = EX_VAR(opline->result.var);
40425 		ZVAL_COPY_VALUE(result, value);
40426 		if (IS_CV == IS_CONST) {
40427 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
40428 		} else if (IS_CV == IS_CV) {
40429 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
40430 		} else if ((IS_CV & IS_VAR) && ref) {
40431 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
40432 				efree_size(ref, sizeof(zend_reference));
40433 			} else if (Z_OPT_REFCOUNTED_P(result)) {
40434 				Z_ADDREF_P(result);
40435 			}
40436 		}
40437 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
40438 	}
40439 
40440 	if ((IS_CV & IS_VAR) && ref) {
40441 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
40442 			efree_size(ref, sizeof(zend_reference));
40443 		}
40444 	}
40445 	ZEND_VM_NEXT_OPCODE();
40446 }
40447 
ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40448 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40449 {
40450 	USE_OPLINE
40451 	zval *val, *result;
40452 
40453 	val = EX_VAR(opline->op1.var);
40454 
40455 	if (Z_TYPE_P(val) > IS_NULL) {
40456 		do {
40457 			if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
40458 				val = Z_REFVAL_P(val);
40459 				if (Z_TYPE_P(val) <= IS_NULL) {
40460 
40461 					break;
40462 				}
40463 			}
40464 			ZEND_VM_NEXT_OPCODE();
40465 		} while (0);
40466 	}
40467 
40468 	result = EX_VAR(opline->result.var);
40469 	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
40470 	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
40471 		ZVAL_NULL(result);
40472 		if (IS_CV == IS_CV
40473 			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
40474 			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
40475 		) {
40476 			SAVE_OPLINE();
40477 			ZVAL_UNDEFINED_OP1();
40478 			if (UNEXPECTED(EG(exception) != NULL)) {
40479 				HANDLE_EXCEPTION();
40480 			}
40481 		}
40482 	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
40483 		ZVAL_FALSE(result);
40484 	} else {
40485 		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
40486 		ZVAL_TRUE(result);
40487 	}
40488 
40489 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
40490 }
40491 
ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40492 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40493 {
40494 	USE_OPLINE
40495 	zval *value;
40496 	zval *result = EX_VAR(opline->result.var);
40497 
40498 	value = EX_VAR(opline->op1.var);
40499 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
40500 		SAVE_OPLINE();
40501 		ZVAL_UNDEFINED_OP1();
40502 		ZVAL_NULL(result);
40503 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40504 	}
40505 
40506 	if (IS_CV == IS_CV) {
40507 		ZVAL_COPY_DEREF(result, value);
40508 	} else if (IS_CV == IS_VAR) {
40509 		if (UNEXPECTED(Z_ISREF_P(value))) {
40510 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
40511 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
40512 				efree_size(Z_REF_P(value), sizeof(zend_reference));
40513 			} else if (Z_OPT_REFCOUNTED_P(result)) {
40514 				Z_ADDREF_P(result);
40515 			}
40516 		} else {
40517 			ZVAL_COPY_VALUE(result, value);
40518 		}
40519 	} else {
40520 		ZVAL_COPY_VALUE(result, value);
40521 		if (IS_CV == IS_CONST) {
40522 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
40523 				Z_ADDREF_P(result);
40524 			}
40525 		}
40526 	}
40527 	ZEND_VM_NEXT_OPCODE();
40528 }
40529 
ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40530 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40531 {
40532 	USE_OPLINE
40533 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
40534 	zval *val;
40535 
40536 	SAVE_OPLINE();
40537 	val = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40538 
40539 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
40540 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
40541 
40542 		UNDEF_RESULT();
40543 		HANDLE_EXCEPTION();
40544 	}
40545 
40546 yield_from_try_again:
40547 	if (Z_TYPE_P(val) == IS_ARRAY) {
40548 		ZVAL_COPY_VALUE(&generator->values, val);
40549 		if (Z_OPT_REFCOUNTED_P(val)) {
40550 			Z_ADDREF_P(val);
40551 		}
40552 		Z_FE_POS(generator->values) = 0;
40553 
40554 	} else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
40555 		zend_class_entry *ce = Z_OBJCE_P(val);
40556 		if (ce == zend_ce_generator) {
40557 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
40558 
40559 			Z_ADDREF_P(val);
40560 
40561 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
40562 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
40563 				zval_ptr_dtor(val);
40564 				UNDEF_RESULT();
40565 				HANDLE_EXCEPTION();
40566 			} else if (Z_ISUNDEF(new_gen->retval)) {
40567 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
40568 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
40569 					zval_ptr_dtor(val);
40570 					UNDEF_RESULT();
40571 					HANDLE_EXCEPTION();
40572 				} else {
40573 					zend_generator_yield_from(generator, new_gen);
40574 				}
40575 			} else {
40576 				if (RETURN_VALUE_USED(opline)) {
40577 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
40578 				}
40579 				ZEND_VM_NEXT_OPCODE();
40580 			}
40581 		} else {
40582 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
40583 
40584 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
40585 				if (!EG(exception)) {
40586 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
40587 				}
40588 				UNDEF_RESULT();
40589 				HANDLE_EXCEPTION();
40590 			}
40591 
40592 			iter->index = 0;
40593 			if (iter->funcs->rewind) {
40594 				iter->funcs->rewind(iter);
40595 				if (UNEXPECTED(EG(exception) != NULL)) {
40596 					OBJ_RELEASE(&iter->std);
40597 					UNDEF_RESULT();
40598 					HANDLE_EXCEPTION();
40599 				}
40600 			}
40601 
40602 			ZVAL_OBJ(&generator->values, &iter->std);
40603 		}
40604 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
40605 		val = Z_REFVAL_P(val);
40606 		goto yield_from_try_again;
40607 	} else {
40608 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
40609 
40610 		UNDEF_RESULT();
40611 		HANDLE_EXCEPTION();
40612 	}
40613 
40614 	/* This is the default return value
40615 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
40616 	if (RETURN_VALUE_USED(opline)) {
40617 		ZVAL_NULL(EX_VAR(opline->result.var));
40618 	}
40619 
40620 	/* This generator has no send target (though the generator we delegate to might have one) */
40621 	generator->send_target = NULL;
40622 
40623 	/* We increment to the next op, so we are at the correct position when the
40624 	 * generator is resumed. */
40625 	ZEND_VM_INC_OPCODE();
40626 
40627 	/* The GOTO VM uses a local opline variable. We need to set the opline
40628 	 * variable in execute_data so we don't resume at an old position. */
40629 	SAVE_OPLINE();
40630 
40631 	ZEND_VM_RETURN();
40632 }
40633 
ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40634 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40635 {
40636 	USE_OPLINE
40637 	zval *value;
40638 
40639 	value = EX_VAR(opline->op1.var);
40640 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
40641 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
40642 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40643 			zval_ptr_dtor_str(value);
40644 		}
40645 		ZEND_VM_NEXT_OPCODE();
40646 	} else {
40647 		bool strict;
40648 
40649 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
40650 			value = Z_REFVAL_P(value);
40651 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
40652 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
40653 
40654 				ZEND_VM_NEXT_OPCODE();
40655 			}
40656 		}
40657 
40658 		SAVE_OPLINE();
40659 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
40660 			value = ZVAL_UNDEFINED_OP1();
40661 		}
40662 		strict = EX_USES_STRICT_TYPES();
40663 		do {
40664 			if (EXPECTED(!strict)) {
40665 				zend_string *str;
40666 				zval tmp;
40667 
40668 				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
40669 					zend_error(E_DEPRECATED,
40670 						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
40671 					ZVAL_LONG(EX_VAR(opline->result.var), 0);
40672 					if (UNEXPECTED(EG(exception))) {
40673 						HANDLE_EXCEPTION();
40674 					}
40675 					break;
40676 				}
40677 
40678 				ZVAL_COPY(&tmp, value);
40679 				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
40680 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
40681 					zval_ptr_dtor(&tmp);
40682 					break;
40683 				}
40684 				zval_ptr_dtor(&tmp);
40685 			}
40686 			if (!EG(exception)) {
40687 				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
40688 			}
40689 			ZVAL_UNDEF(EX_VAR(opline->result.var));
40690 		} while (0);
40691 	}
40692 
40693 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40694 }
40695 
ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40696 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40697 {
40698 	USE_OPLINE
40699 	zval *value;
40700 	int result = 0;
40701 
40702 	value = EX_VAR(opline->op1.var);
40703 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
40704 type_check_resource:
40705 		if (opline->extended_value != MAY_BE_RESOURCE
40706 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
40707 			result = 1;
40708 		}
40709 	} else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
40710 		value = Z_REFVAL_P(value);
40711 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
40712 			goto type_check_resource;
40713 		}
40714 	} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
40715 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
40716 		SAVE_OPLINE();
40717 		ZVAL_UNDEFINED_OP1();
40718 		if (UNEXPECTED(EG(exception))) {
40719 			ZVAL_UNDEF(EX_VAR(opline->result.var));
40720 			HANDLE_EXCEPTION();
40721 		}
40722 	}
40723 	if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40724 		SAVE_OPLINE();
40725 
40726 		ZEND_VM_SMART_BRANCH(result, 1);
40727 	} else {
40728 		ZEND_VM_SMART_BRANCH(result, 0);
40729 	}
40730 }
40731 
ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40733 {
40734 	uint32_t fetch_type;
40735 	zend_class_entry *called_scope, *scope;
40736 	USE_OPLINE
40737 
40738 	if (IS_CV != IS_UNUSED) {
40739 		SAVE_OPLINE();
40740 		zval *op = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40741 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
40742 			ZVAL_DEREF(op);
40743 			if (Z_TYPE_P(op) != IS_OBJECT) {
40744 				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
40745 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40746 
40747 				HANDLE_EXCEPTION();
40748 			}
40749 		}
40750 
40751 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
40752 
40753 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40754 	}
40755 
40756 	fetch_type = opline->op1.num;
40757 	scope = EX(func)->op_array.scope;
40758 	if (UNEXPECTED(scope == NULL)) {
40759 		SAVE_OPLINE();
40760 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
40761 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
40762 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
40763 		ZVAL_UNDEF(EX_VAR(opline->result.var));
40764 		HANDLE_EXCEPTION();
40765 	}
40766 
40767 	switch (fetch_type) {
40768 		case ZEND_FETCH_CLASS_SELF:
40769 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
40770 			break;
40771 		case ZEND_FETCH_CLASS_PARENT:
40772 			if (UNEXPECTED(scope->parent == NULL)) {
40773 				SAVE_OPLINE();
40774 				zend_throw_error(NULL,
40775 					"Cannot use \"parent\" when current class scope has no parent");
40776 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40777 				HANDLE_EXCEPTION();
40778 			}
40779 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
40780 			break;
40781 		case ZEND_FETCH_CLASS_STATIC:
40782 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
40783 				called_scope = Z_OBJCE(EX(This));
40784 			} else {
40785 				called_scope = Z_CE(EX(This));
40786 			}
40787 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
40788 			break;
40789 		EMPTY_SWITCH_DEFAULT_CASE()
40790 	}
40791 	ZEND_VM_NEXT_OPCODE();
40792 }
40793 
ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40794 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40795 {
40796 	USE_OPLINE
40797 	HashTable *ht;
40798 	zval *value;
40799 	zval *variable_ptr;
40800 
40801 	variable_ptr = EX_VAR(opline->op1.var);
40802 
40803 	SAVE_OPLINE();
40804 
40805 	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
40806 	if (!ht) {
40807 		ht = zend_array_dup(EX(func)->op_array.static_variables);
40808 		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
40809 	}
40810 	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
40811 
40812 	value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));
40813 
40814 	if (opline->extended_value & ZEND_BIND_REF) {
40815 		i_zval_ptr_dtor(variable_ptr);
40816 		if (UNEXPECTED(!Z_ISREF_P(value))) {
40817 			zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
40818 			GC_SET_REFCOUNT(ref, 2);
40819 			GC_TYPE_INFO(ref) = GC_REFERENCE;
40820 			if (opline->op2_type == IS_UNUSED) {
40821 				ZVAL_COPY_VALUE(&ref->val, value);
40822 			} else {
40823 				ZEND_ASSERT(!Z_REFCOUNTED_P(value));
40824 				ZVAL_COPY(&ref->val, get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R));
40825 				FREE_OP(opline->op2_type, opline->op2.var);
40826 			}
40827 			ref->sources.ptr = NULL;
40828 			Z_REF_P(value) = ref;
40829 			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
40830 			ZVAL_REF(variable_ptr, ref);
40831 		} else {
40832 			Z_ADDREF_P(value);
40833 			ZVAL_REF(variable_ptr, Z_REF_P(value));
40834 			if (opline->op2_type != IS_UNUSED) {
40835 				FREE_OP(opline->op2_type, opline->op2.var);
40836 			}
40837 		}
40838 	} else {
40839 		i_zval_ptr_dtor(variable_ptr);
40840 		ZVAL_COPY(variable_ptr, value);
40841 	}
40842 
40843 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40844 }
40845 
ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40847 {
40848 	USE_OPLINE
40849 	HashTable *ht;
40850 	zval *value;
40851 	zval *variable_ptr;
40852 
40853 	variable_ptr = EX_VAR(opline->op1.var);
40854 
40855 	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
40856 	if (!ht) {
40857 		ZEND_VM_NEXT_OPCODE();
40858 	}
40859 	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
40860 
40861 	value = (zval*)((char*)ht->arData + opline->extended_value);
40862 	if (Z_TYPE_EXTRA_P(value) & IS_STATIC_VAR_UNINITIALIZED) {
40863 		ZEND_VM_NEXT_OPCODE();
40864 	} else {
40865 		SAVE_OPLINE();
40866 		zval_ptr_dtor(variable_ptr);
40867 		ZEND_ASSERT(Z_TYPE_P(value) == IS_REFERENCE);
40868 		Z_ADDREF_P(value);
40869 		ZVAL_REF(variable_ptr, Z_REF_P(value));
40870 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 1);
40871 	}
40872 }
40873 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40874 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)
40875 {
40876 	USE_OPLINE
40877 	zval *var_ptr;
40878 
40879 	var_ptr = EX_VAR(opline->op1.var);
40880 	Z_LVAL_P(var_ptr)++;
40881 	if (UNEXPECTED(0)) {
40882 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40883 	}
40884 	ZEND_VM_NEXT_OPCODE();
40885 }
40886 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40887 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)
40888 {
40889 	USE_OPLINE
40890 	zval *var_ptr;
40891 
40892 	var_ptr = EX_VAR(opline->op1.var);
40893 	Z_LVAL_P(var_ptr)++;
40894 	if (UNEXPECTED(1)) {
40895 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40896 	}
40897 	ZEND_VM_NEXT_OPCODE();
40898 }
40899 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40900 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40901 {
40902 	USE_OPLINE
40903 	zval *var_ptr;
40904 
40905 	var_ptr = EX_VAR(opline->op1.var);
40906 	fast_long_increment_function(var_ptr);
40907 	if (UNEXPECTED(0)) {
40908 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
40909 	}
40910 	ZEND_VM_NEXT_OPCODE();
40911 }
40912 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40913 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40914 {
40915 	USE_OPLINE
40916 	zval *var_ptr;
40917 
40918 	var_ptr = EX_VAR(opline->op1.var);
40919 	fast_long_increment_function(var_ptr);
40920 	if (UNEXPECTED(1)) {
40921 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
40922 	}
40923 	ZEND_VM_NEXT_OPCODE();
40924 }
40925 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40926 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)
40927 {
40928 	USE_OPLINE
40929 	zval *var_ptr;
40930 
40931 	var_ptr = EX_VAR(opline->op1.var);
40932 	Z_LVAL_P(var_ptr)--;
40933 	if (UNEXPECTED(0)) {
40934 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40935 	}
40936 	ZEND_VM_NEXT_OPCODE();
40937 }
40938 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40939 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)
40940 {
40941 	USE_OPLINE
40942 	zval *var_ptr;
40943 
40944 	var_ptr = EX_VAR(opline->op1.var);
40945 	Z_LVAL_P(var_ptr)--;
40946 	if (UNEXPECTED(1)) {
40947 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40948 	}
40949 	ZEND_VM_NEXT_OPCODE();
40950 }
40951 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40952 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40953 {
40954 	USE_OPLINE
40955 	zval *var_ptr;
40956 
40957 	var_ptr = EX_VAR(opline->op1.var);
40958 	fast_long_decrement_function(var_ptr);
40959 	if (UNEXPECTED(0)) {
40960 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
40961 	}
40962 	ZEND_VM_NEXT_OPCODE();
40963 }
40964 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40965 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40966 {
40967 	USE_OPLINE
40968 	zval *var_ptr;
40969 
40970 	var_ptr = EX_VAR(opline->op1.var);
40971 	fast_long_decrement_function(var_ptr);
40972 	if (UNEXPECTED(1)) {
40973 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
40974 	}
40975 	ZEND_VM_NEXT_OPCODE();
40976 }
40977 
ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40978 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40979 {
40980 	USE_OPLINE
40981 	zval *var_ptr;
40982 
40983 	var_ptr = EX_VAR(opline->op1.var);
40984 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40985 	Z_LVAL_P(var_ptr)++;
40986 	ZEND_VM_NEXT_OPCODE();
40987 }
40988 
ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40989 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40990 {
40991 	USE_OPLINE
40992 	zval *var_ptr;
40993 
40994 	var_ptr = EX_VAR(opline->op1.var);
40995 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40996 	fast_long_increment_function(var_ptr);
40997 	ZEND_VM_NEXT_OPCODE();
40998 }
40999 
ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41000 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41001 {
41002 	USE_OPLINE
41003 	zval *var_ptr;
41004 
41005 	var_ptr = EX_VAR(opline->op1.var);
41006 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
41007 	Z_LVAL_P(var_ptr)--;
41008 	ZEND_VM_NEXT_OPCODE();
41009 }
41010 
ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41011 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41012 {
41013 	USE_OPLINE
41014 	zval *var_ptr;
41015 
41016 	var_ptr = EX_VAR(opline->op1.var);
41017 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
41018 	fast_long_decrement_function(var_ptr);
41019 	ZEND_VM_NEXT_OPCODE();
41020 }
41021 
ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41022 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41023 {
41024 	USE_OPLINE
41025 	zval *varptr, *arg;
41026 
41027 	varptr = EX_VAR(opline->op1.var);
41028 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
41029 
41030 	if (IS_CV == IS_CV) {
41031 		ZVAL_COPY(arg, varptr);
41032 	} else /* if (IS_CV == IS_VAR) */ {
41033 		ZVAL_COPY_VALUE(arg, varptr);
41034 	}
41035 
41036 	ZEND_VM_NEXT_OPCODE();
41037 }
41038 
ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41039 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41040 {
41041 	USE_OPLINE
41042 	zval *op1, *op2;
41043 
41044 	SAVE_OPLINE();
41045 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41046 	op2 = RT_CONSTANT(opline, opline->op2);
41047 	div_function(EX_VAR(opline->result.var), op1, op2);
41048 
41049 
41050 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41051 }
41052 
ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41053 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41054 {
41055 	USE_OPLINE
41056 	zval *op1, *op2;
41057 
41058 	SAVE_OPLINE();
41059 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41060 	op2 = RT_CONSTANT(opline, opline->op2);
41061 	pow_function(EX_VAR(opline->result.var), op1, op2);
41062 
41063 
41064 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41065 }
41066 
ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41067 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41068 {
41069 	USE_OPLINE
41070 	zval *op1, *op2;
41071 
41072 	op1 = EX_VAR(opline->op1.var);
41073 	op2 = RT_CONSTANT(opline, opline->op2);
41074 
41075 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
41076 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
41077 		zend_string *op1_str = Z_STR_P(op1);
41078 		zend_string *op2_str = Z_STR_P(op2);
41079 		zend_string *str;
41080 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
41081 
41082 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
41083 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
41084 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
41085 			} else {
41086 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
41087 			}
41088 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41089 				zend_string_release_ex(op1_str, 0);
41090 			}
41091 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
41092 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
41093 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
41094 			} else {
41095 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
41096 			}
41097 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41098 				zend_string_release_ex(op2_str, 0);
41099 			}
41100 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
41101 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
41102 			size_t len = ZSTR_LEN(op1_str);
41103 
41104 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
41105 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
41106 			}
41107 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
41108 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
41109 			GC_ADD_FLAGS(str, flags);
41110 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
41111 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41112 				zend_string_release_ex(op2_str, 0);
41113 			}
41114 		} else {
41115 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
41116 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
41117 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
41118 			GC_ADD_FLAGS(str, flags);
41119 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
41120 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41121 				zend_string_release_ex(op1_str, 0);
41122 			}
41123 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41124 				zend_string_release_ex(op2_str, 0);
41125 			}
41126 		}
41127 		ZEND_VM_NEXT_OPCODE();
41128 	} else {
41129 		SAVE_OPLINE();
41130 
41131 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
41132 			op1 = ZVAL_UNDEFINED_OP1();
41133 		}
41134 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
41135 			op2 = ZVAL_UNDEFINED_OP2();
41136 		}
41137 		concat_function(EX_VAR(opline->result.var), op1, op2);
41138 
41139 
41140 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41141 	}
41142 }
41143 
ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41144 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41145 {
41146 	USE_OPLINE
41147 	zval *op1, *op2;
41148 	bool result;
41149 
41150 	SAVE_OPLINE();
41151 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41152 	op2 = RT_CONSTANT(opline, opline->op2);
41153 	result = fast_is_identical_function(op1, op2);
41154 
41155 
41156 	ZEND_VM_SMART_BRANCH(result, 1);
41157 }
41158 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41159 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41160 {
41161 	USE_OPLINE
41162 	zval *op1, *op2;
41163 	bool result;
41164 
41165 	SAVE_OPLINE();
41166 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41167 	op2 = RT_CONSTANT(opline, opline->op2);
41168 	result = fast_is_not_identical_function(op1, op2);
41169 
41170 
41171 	ZEND_VM_SMART_BRANCH(result, 1);
41172 }
41173 
ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41174 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41175 {
41176 	USE_OPLINE
41177 	zval *op1, *op2;
41178 	double d1, d2;
41179 
41180 	op1 = EX_VAR(opline->op1.var);
41181 	op2 = RT_CONSTANT(opline, opline->op2);
41182 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41183 		/* pass */
41184 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41185 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41186 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
41187 is_equal_true:
41188 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
41189 			} else {
41190 is_equal_false:
41191 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
41192 			}
41193 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41194 			d1 = (double)Z_LVAL_P(op1);
41195 			d2 = Z_DVAL_P(op2);
41196 			goto is_equal_double;
41197 		}
41198 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41199 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41200 			d1 = Z_DVAL_P(op1);
41201 			d2 = Z_DVAL_P(op2);
41202 is_equal_double:
41203 			if (d1 == d2) {
41204 				goto is_equal_true;
41205 			} else {
41206 				goto is_equal_false;
41207 			}
41208 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41209 			d1 = Z_DVAL_P(op1);
41210 			d2 = (double)Z_LVAL_P(op2);
41211 			goto is_equal_double;
41212 		}
41213 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41214 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41215 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41216 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41217 				zval_ptr_dtor_str(op1);
41218 			}
41219 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41220 				zval_ptr_dtor_str(op2);
41221 			}
41222 			if (result) {
41223 				goto is_equal_true;
41224 			} else {
41225 				goto is_equal_false;
41226 			}
41227 		}
41228 	}
41229 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41230 }
41231 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41232 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41233 {
41234 	USE_OPLINE
41235 	zval *op1, *op2;
41236 	double d1, d2;
41237 
41238 	op1 = EX_VAR(opline->op1.var);
41239 	op2 = RT_CONSTANT(opline, opline->op2);
41240 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41241 		/* pass */
41242 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41243 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41244 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
41245 is_equal_true:
41246 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
41247 			} else {
41248 is_equal_false:
41249 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
41250 			}
41251 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41252 			d1 = (double)Z_LVAL_P(op1);
41253 			d2 = Z_DVAL_P(op2);
41254 			goto is_equal_double;
41255 		}
41256 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41257 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41258 			d1 = Z_DVAL_P(op1);
41259 			d2 = Z_DVAL_P(op2);
41260 is_equal_double:
41261 			if (d1 == d2) {
41262 				goto is_equal_true;
41263 			} else {
41264 				goto is_equal_false;
41265 			}
41266 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41267 			d1 = Z_DVAL_P(op1);
41268 			d2 = (double)Z_LVAL_P(op2);
41269 			goto is_equal_double;
41270 		}
41271 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41272 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41273 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41274 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41275 				zval_ptr_dtor_str(op1);
41276 			}
41277 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41278 				zval_ptr_dtor_str(op2);
41279 			}
41280 			if (result) {
41281 				goto is_equal_true;
41282 			} else {
41283 				goto is_equal_false;
41284 			}
41285 		}
41286 	}
41287 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41288 }
41289 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41290 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41291 {
41292 	USE_OPLINE
41293 	zval *op1, *op2;
41294 	double d1, d2;
41295 
41296 	op1 = EX_VAR(opline->op1.var);
41297 	op2 = RT_CONSTANT(opline, opline->op2);
41298 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41299 		/* pass */
41300 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41301 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41302 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
41303 is_equal_true:
41304 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
41305 			} else {
41306 is_equal_false:
41307 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
41308 			}
41309 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41310 			d1 = (double)Z_LVAL_P(op1);
41311 			d2 = Z_DVAL_P(op2);
41312 			goto is_equal_double;
41313 		}
41314 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41315 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41316 			d1 = Z_DVAL_P(op1);
41317 			d2 = Z_DVAL_P(op2);
41318 is_equal_double:
41319 			if (d1 == d2) {
41320 				goto is_equal_true;
41321 			} else {
41322 				goto is_equal_false;
41323 			}
41324 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41325 			d1 = Z_DVAL_P(op1);
41326 			d2 = (double)Z_LVAL_P(op2);
41327 			goto is_equal_double;
41328 		}
41329 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41330 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41331 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41332 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41333 				zval_ptr_dtor_str(op1);
41334 			}
41335 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41336 				zval_ptr_dtor_str(op2);
41337 			}
41338 			if (result) {
41339 				goto is_equal_true;
41340 			} else {
41341 				goto is_equal_false;
41342 			}
41343 		}
41344 	}
41345 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41346 }
41347 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41349 {
41350 	USE_OPLINE
41351 	zval *op1, *op2;
41352 	double d1, d2;
41353 
41354 	op1 = EX_VAR(opline->op1.var);
41355 	op2 = RT_CONSTANT(opline, opline->op2);
41356 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41357 		/* pass */
41358 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41359 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41360 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
41361 is_not_equal_true:
41362 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
41363 			} else {
41364 is_not_equal_false:
41365 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
41366 			}
41367 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41368 			d1 = (double)Z_LVAL_P(op1);
41369 			d2 = Z_DVAL_P(op2);
41370 			goto is_not_equal_double;
41371 		}
41372 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41373 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41374 			d1 = Z_DVAL_P(op1);
41375 			d2 = Z_DVAL_P(op2);
41376 is_not_equal_double:
41377 			if (d1 != d2) {
41378 				goto is_not_equal_true;
41379 			} else {
41380 				goto is_not_equal_false;
41381 			}
41382 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41383 			d1 = Z_DVAL_P(op1);
41384 			d2 = (double)Z_LVAL_P(op2);
41385 			goto is_not_equal_double;
41386 		}
41387 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41388 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41389 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41390 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41391 				zval_ptr_dtor_str(op1);
41392 			}
41393 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41394 				zval_ptr_dtor_str(op2);
41395 			}
41396 			if (!result) {
41397 				goto is_not_equal_true;
41398 			} else {
41399 				goto is_not_equal_false;
41400 			}
41401 		}
41402 	}
41403 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41404 }
41405 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41406 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41407 {
41408 	USE_OPLINE
41409 	zval *op1, *op2;
41410 	double d1, d2;
41411 
41412 	op1 = EX_VAR(opline->op1.var);
41413 	op2 = RT_CONSTANT(opline, opline->op2);
41414 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41415 		/* pass */
41416 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41417 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41418 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
41419 is_not_equal_true:
41420 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
41421 			} else {
41422 is_not_equal_false:
41423 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
41424 			}
41425 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41426 			d1 = (double)Z_LVAL_P(op1);
41427 			d2 = Z_DVAL_P(op2);
41428 			goto is_not_equal_double;
41429 		}
41430 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41431 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41432 			d1 = Z_DVAL_P(op1);
41433 			d2 = Z_DVAL_P(op2);
41434 is_not_equal_double:
41435 			if (d1 != d2) {
41436 				goto is_not_equal_true;
41437 			} else {
41438 				goto is_not_equal_false;
41439 			}
41440 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41441 			d1 = Z_DVAL_P(op1);
41442 			d2 = (double)Z_LVAL_P(op2);
41443 			goto is_not_equal_double;
41444 		}
41445 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41446 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41447 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41448 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41449 				zval_ptr_dtor_str(op1);
41450 			}
41451 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41452 				zval_ptr_dtor_str(op2);
41453 			}
41454 			if (!result) {
41455 				goto is_not_equal_true;
41456 			} else {
41457 				goto is_not_equal_false;
41458 			}
41459 		}
41460 	}
41461 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41462 }
41463 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41464 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41465 {
41466 	USE_OPLINE
41467 	zval *op1, *op2;
41468 	double d1, d2;
41469 
41470 	op1 = EX_VAR(opline->op1.var);
41471 	op2 = RT_CONSTANT(opline, opline->op2);
41472 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41473 		/* pass */
41474 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41475 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41476 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
41477 is_not_equal_true:
41478 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
41479 			} else {
41480 is_not_equal_false:
41481 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
41482 			}
41483 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41484 			d1 = (double)Z_LVAL_P(op1);
41485 			d2 = Z_DVAL_P(op2);
41486 			goto is_not_equal_double;
41487 		}
41488 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41489 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41490 			d1 = Z_DVAL_P(op1);
41491 			d2 = Z_DVAL_P(op2);
41492 is_not_equal_double:
41493 			if (d1 != d2) {
41494 				goto is_not_equal_true;
41495 			} else {
41496 				goto is_not_equal_false;
41497 			}
41498 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41499 			d1 = Z_DVAL_P(op1);
41500 			d2 = (double)Z_LVAL_P(op2);
41501 			goto is_not_equal_double;
41502 		}
41503 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41504 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41505 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41506 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41507 				zval_ptr_dtor_str(op1);
41508 			}
41509 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41510 				zval_ptr_dtor_str(op2);
41511 			}
41512 			if (!result) {
41513 				goto is_not_equal_true;
41514 			} else {
41515 				goto is_not_equal_false;
41516 			}
41517 		}
41518 	}
41519 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41520 }
41521 
ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41522 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41523 {
41524 	USE_OPLINE
41525 	zval *op1, *op2;
41526 
41527 	SAVE_OPLINE();
41528 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41529 	op2 = RT_CONSTANT(opline, opline->op2);
41530 	compare_function(EX_VAR(opline->result.var), op1, op2);
41531 
41532 
41533 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41534 }
41535 
ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41536 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41537 {
41538 	USE_OPLINE
41539 	zval *op1, *op2;
41540 
41541 	SAVE_OPLINE();
41542 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41543 	op2 = RT_CONSTANT(opline, opline->op2);
41544 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
41545 
41546 
41547 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41548 }
41549 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41550 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41551 {
41552 	USE_OPLINE
41553 	zval *object;
41554 	zval *property;
41555 	zval *value;
41556 	zval *zptr;
41557 	void **cache_slot;
41558 	zend_property_info *prop_info;
41559 	zend_object *zobj;
41560 	zend_string *name, *tmp_name;
41561 
41562 	SAVE_OPLINE();
41563 	object = EX_VAR(opline->op1.var);
41564 	property = RT_CONSTANT(opline, opline->op2);
41565 
41566 	do {
41567 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
41568 
41569 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
41570 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
41571 				object = Z_REFVAL_P(object);
41572 				goto assign_op_object;
41573 			}
41574 			if (IS_CV == IS_CV
41575 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
41576 				ZVAL_UNDEFINED_OP1();
41577 			}
41578 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
41579 			break;
41580 		}
41581 
41582 assign_op_object:
41583 		/* here we are sure we are dealing with an object */
41584 		zobj = Z_OBJ_P(object);
41585 		if (IS_CONST == IS_CONST) {
41586 			name = Z_STR_P(property);
41587 		} else {
41588 			name = zval_try_get_tmp_string(property, &tmp_name);
41589 			if (UNEXPECTED(!name)) {
41590 				UNDEF_RESULT();
41591 				break;
41592 			}
41593 		}
41594 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
41595 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
41596 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
41597 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41598 					ZVAL_NULL(EX_VAR(opline->result.var));
41599 				}
41600 			} else {
41601 				zval *orig_zptr = zptr;
41602 				zend_reference *ref;
41603 
41604 				do {
41605 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
41606 						ref = Z_REF_P(zptr);
41607 						zptr = Z_REFVAL_P(zptr);
41608 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
41609 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
41610 							break;
41611 						}
41612 					}
41613 
41614 					if (IS_CONST == IS_CONST) {
41615 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
41616 					} else {
41617 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
41618 					}
41619 					if (prop_info) {
41620 						/* special case for typed properties */
41621 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
41622 					} else {
41623 						zend_binary_op(zptr, zptr, value OPLINE_CC);
41624 					}
41625 				} while (0);
41626 
41627 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41628 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
41629 				}
41630 			}
41631 		} else {
41632 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
41633 		}
41634 		if (IS_CONST != IS_CONST) {
41635 			zend_tmp_string_release(tmp_name);
41636 		}
41637 	} while (0);
41638 
41639 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
41640 
41641 
41642 	/* assign_obj has two opcodes! */
41643 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41644 }
41645 
41646 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41647 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41648 {
41649 	USE_OPLINE
41650 	zval *var_ptr;
41651 	zval *value, *container, *dim;
41652 	HashTable *ht;
41653 
41654 	SAVE_OPLINE();
41655 	container = EX_VAR(opline->op1.var);
41656 
41657 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41658 assign_dim_op_array:
41659 		SEPARATE_ARRAY(container);
41660 		ht = Z_ARRVAL_P(container);
41661 assign_dim_op_new_array:
41662 		dim = RT_CONSTANT(opline, opline->op2);
41663 		if (IS_CONST == IS_UNUSED) {
41664 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
41665 			if (UNEXPECTED(!var_ptr)) {
41666 				zend_cannot_add_element();
41667 				goto assign_dim_op_ret_null;
41668 			}
41669 		} else {
41670 			if (IS_CONST == IS_CONST) {
41671 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
41672 			} else {
41673 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
41674 			}
41675 			if (UNEXPECTED(!var_ptr)) {
41676 				goto assign_dim_op_ret_null;
41677 			}
41678 		}
41679 
41680 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
41681 
41682 		do {
41683 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
41684 				zend_reference *ref = Z_REF_P(var_ptr);
41685 				var_ptr = Z_REFVAL_P(var_ptr);
41686 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
41687 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
41688 					break;
41689 				}
41690 			}
41691 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
41692 		} while (0);
41693 
41694 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41695 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
41696 		}
41697 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
41698 	} else {
41699 		if (EXPECTED(Z_ISREF_P(container))) {
41700 			container = Z_REFVAL_P(container);
41701 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41702 				goto assign_dim_op_array;
41703 			}
41704 		}
41705 
41706 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
41707 			zend_object *obj = Z_OBJ_P(container);
41708 
41709 			dim = RT_CONSTANT(opline, opline->op2);
41710 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41711 				dim++;
41712 			}
41713 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
41714 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
41715 			uint8_t old_type;
41716 
41717 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
41718 				ZVAL_UNDEFINED_OP1();
41719 			}
41720 			ht = zend_new_array(8);
41721 			old_type = Z_TYPE_P(container);
41722 			ZVAL_ARR(container, ht);
41723 			if (UNEXPECTED(old_type == IS_FALSE)) {
41724 				GC_ADDREF(ht);
41725 				zend_false_to_array_deprecated();
41726 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
41727 					zend_array_destroy(ht);
41728 					goto assign_dim_op_ret_null;
41729 				}
41730 			}
41731 			goto assign_dim_op_new_array;
41732 		} else {
41733 			dim = RT_CONSTANT(opline, opline->op2);
41734 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
41735 assign_dim_op_ret_null:
41736 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
41737 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41738 				ZVAL_NULL(EX_VAR(opline->result.var));
41739 			}
41740 		}
41741 	}
41742 
41743 
41744 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41745 }
41746 
ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41747 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41748 {
41749 	USE_OPLINE
41750 	zval *var_ptr;
41751 	zval *value;
41752 
41753 	SAVE_OPLINE();
41754 	value = RT_CONSTANT(opline, opline->op2);
41755 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
41756 
41757 	do {
41758 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
41759 			zend_reference *ref = Z_REF_P(var_ptr);
41760 			var_ptr = Z_REFVAL_P(var_ptr);
41761 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
41762 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
41763 				break;
41764 			}
41765 		}
41766 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
41767 	} while (0);
41768 
41769 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41770 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
41771 	}
41772 
41773 
41774 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41775 }
41776 
ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41777 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41778 {
41779 	USE_OPLINE
41780 	zval *object;
41781 	zval *property;
41782 	zval *zptr;
41783 	void **cache_slot;
41784 	zend_property_info *prop_info;
41785 	zend_object *zobj;
41786 	zend_string *name, *tmp_name;
41787 
41788 	SAVE_OPLINE();
41789 	object = EX_VAR(opline->op1.var);
41790 	property = RT_CONSTANT(opline, opline->op2);
41791 
41792 	do {
41793 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
41794 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
41795 				object = Z_REFVAL_P(object);
41796 				goto pre_incdec_object;
41797 			}
41798 			if (IS_CV == IS_CV
41799 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
41800 				ZVAL_UNDEFINED_OP1();
41801 			}
41802 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
41803 			break;
41804 		}
41805 
41806 pre_incdec_object:
41807 		/* here we are sure we are dealing with an object */
41808 		zobj = Z_OBJ_P(object);
41809 		if (IS_CONST == IS_CONST) {
41810 			name = Z_STR_P(property);
41811 		} else {
41812 			name = zval_try_get_tmp_string(property, &tmp_name);
41813 			if (UNEXPECTED(!name)) {
41814 				UNDEF_RESULT();
41815 				break;
41816 			}
41817 		}
41818 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
41819 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
41820 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
41821 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41822 					ZVAL_NULL(EX_VAR(opline->result.var));
41823 				}
41824 			} else {
41825 				if (IS_CONST == IS_CONST) {
41826 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
41827 				} else {
41828 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
41829 				}
41830 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
41831 			}
41832 		} else {
41833 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
41834 		}
41835 		if (IS_CONST != IS_CONST) {
41836 			zend_tmp_string_release(tmp_name);
41837 		}
41838 	} while (0);
41839 
41840 
41841 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41842 }
41843 
ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41844 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41845 {
41846 	USE_OPLINE
41847 	zval *object;
41848 	zval *property;
41849 	zval *zptr;
41850 	void **cache_slot;
41851 	zend_property_info *prop_info;
41852 	zend_object *zobj;
41853 	zend_string *name, *tmp_name;
41854 
41855 	SAVE_OPLINE();
41856 	object = EX_VAR(opline->op1.var);
41857 	property = RT_CONSTANT(opline, opline->op2);
41858 
41859 	do {
41860 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
41861 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
41862 				object = Z_REFVAL_P(object);
41863 				goto post_incdec_object;
41864 			}
41865 			if (IS_CV == IS_CV
41866 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
41867 				ZVAL_UNDEFINED_OP1();
41868 			}
41869 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
41870 			break;
41871 		}
41872 
41873 post_incdec_object:
41874 		/* here we are sure we are dealing with an object */
41875 		zobj = Z_OBJ_P(object);
41876 		if (IS_CONST == IS_CONST) {
41877 			name = Z_STR_P(property);
41878 		} else {
41879 			name = zval_try_get_tmp_string(property, &tmp_name);
41880 			if (UNEXPECTED(!name)) {
41881 				ZVAL_UNDEF(EX_VAR(opline->result.var));
41882 				break;
41883 			}
41884 		}
41885 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
41886 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
41887 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
41888 				ZVAL_NULL(EX_VAR(opline->result.var));
41889 			} else {
41890 				if (IS_CONST == IS_CONST) {
41891 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
41892 				} else {
41893 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
41894 				}
41895 
41896 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
41897 			}
41898 		} else {
41899 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
41900 		}
41901 		if (IS_CONST != IS_CONST) {
41902 			zend_tmp_string_release(tmp_name);
41903 		}
41904 	} while (0);
41905 
41906 
41907 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41908 }
41909 
ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41910 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41911 {
41912 	USE_OPLINE
41913 	zval *container, *dim, *value;
41914 
41915 	SAVE_OPLINE();
41916 	container = EX_VAR(opline->op1.var);
41917 	dim = RT_CONSTANT(opline, opline->op2);
41918 	if (IS_CV != IS_CONST) {
41919 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41920 fetch_dim_r_array:
41921 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
41922 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
41923 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
41924 			container = Z_REFVAL_P(container);
41925 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41926 				goto fetch_dim_r_array;
41927 			} else {
41928 				goto fetch_dim_r_slow;
41929 			}
41930 		} else {
41931 fetch_dim_r_slow:
41932 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41933 				dim++;
41934 			}
41935 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
41936 		}
41937 	} else {
41938 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
41939 	}
41940 
41941 
41942 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41943 }
41944 
ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41945 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41946 {
41947 	USE_OPLINE
41948 	zval *container;
41949 
41950 	SAVE_OPLINE();
41951 	container = EX_VAR(opline->op1.var);
41952 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
41953 
41954 	if (IS_CV == IS_VAR) {
41955 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
41956 	}
41957 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41958 }
41959 
ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41960 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41961 {
41962 	USE_OPLINE
41963 	zval *container;
41964 
41965 	SAVE_OPLINE();
41966 	container = EX_VAR(opline->op1.var);
41967 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
41968 
41969 	if (IS_CV == IS_VAR) {
41970 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
41971 	}
41972 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41973 }
41974 
ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41975 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41976 {
41977 	USE_OPLINE
41978 	zval *container;
41979 
41980 	SAVE_OPLINE();
41981 	container = EX_VAR(opline->op1.var);
41982 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
41983 
41984 
41985 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41986 }
41987 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41988 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41989 {
41990 #if 0
41991 	USE_OPLINE
41992 #endif
41993 
41994 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
41995 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
41996 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41997 		}
41998 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41999 	} else {
42000 		if (IS_CONST == IS_UNUSED) {
42001 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42002 		}
42003 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42004 	}
42005 }
42006 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42008 {
42009 	USE_OPLINE
42010 	zval *container;
42011 
42012 	SAVE_OPLINE();
42013 	container = EX_VAR(opline->op1.var);
42014 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
42015 
42016 	if (IS_CV == IS_VAR) {
42017 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
42018 	}
42019 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42020 }
42021 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42022 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42023 {
42024 	USE_OPLINE
42025 	zval *container;
42026 	void **cache_slot = NULL;
42027 
42028 	SAVE_OPLINE();
42029 	container = EX_VAR(opline->op1.var);
42030 
42031 	if (IS_CV == IS_CONST ||
42032 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
42033 		do {
42034 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
42035 				container = Z_REFVAL_P(container);
42036 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
42037 					break;
42038 				}
42039 			}
42040 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42041 				ZVAL_UNDEFINED_OP1();
42042 			}
42043 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
42044 			ZVAL_NULL(EX_VAR(opline->result.var));
42045 			goto fetch_obj_r_finish;
42046 		} while (0);
42047 	}
42048 
42049 	/* here we are sure we are dealing with an object */
42050 	do {
42051 		zend_object *zobj = Z_OBJ_P(container);
42052 		zend_string *name, *tmp_name;
42053 		zval *retval;
42054 
42055 		if (IS_CONST == IS_CONST) {
42056 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
42057 
42058 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
42059 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42060 
42061 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42062 					retval = OBJ_PROP(zobj, prop_offset);
42063 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
42064 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42065 							goto fetch_obj_r_copy;
42066 						} else {
42067 fetch_obj_r_fast_copy:
42068 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
42069 							ZEND_VM_NEXT_OPCODE();
42070 						}
42071 					}
42072 				} else if (EXPECTED(zobj->properties != NULL)) {
42073 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42074 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
42075 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
42076 
42077 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
42078 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
42079 
42080 							if (EXPECTED(p->key == name) ||
42081 							    (EXPECTED(p->h == ZSTR_H(name)) &&
42082 							     EXPECTED(p->key != NULL) &&
42083 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
42084 								retval = &p->val;
42085 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42086 									goto fetch_obj_r_copy;
42087 								} else {
42088 									goto fetch_obj_r_fast_copy;
42089 								}
42090 							}
42091 						}
42092 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
42093 					}
42094 					retval = zend_hash_find_known_hash(zobj->properties, name);
42095 					if (EXPECTED(retval)) {
42096 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
42097 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
42098 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42099 							goto fetch_obj_r_copy;
42100 						} else {
42101 							goto fetch_obj_r_fast_copy;
42102 						}
42103 					}
42104 				}
42105 			}
42106 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42107 		} else {
42108 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42109 			if (UNEXPECTED(!name)) {
42110 				ZVAL_UNDEF(EX_VAR(opline->result.var));
42111 				break;
42112 			}
42113 		}
42114 
42115 #if ZEND_DEBUG
42116 		/* For non-standard object handlers, verify a declared property type in debug builds.
42117 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
42118 		zend_property_info *prop_info = NULL;
42119 		if (zobj->handlers->read_property != zend_std_read_property) {
42120 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
42121 		}
42122 #endif
42123 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
42124 #if ZEND_DEBUG
42125 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
42126 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
42127 			ZVAL_OPT_DEREF(retval);
42128 			zend_verify_property_type(prop_info, retval, /* strict */ true);
42129 		}
42130 #endif
42131 
42132 		if (IS_CONST != IS_CONST) {
42133 			zend_tmp_string_release(tmp_name);
42134 		}
42135 
42136 		if (retval != EX_VAR(opline->result.var)) {
42137 fetch_obj_r_copy:
42138 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
42139 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
42140 			zend_unwrap_reference(retval);
42141 		}
42142 	} while (0);
42143 
42144 fetch_obj_r_finish:
42145 
42146 
42147 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42148 }
42149 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42150 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42151 {
42152 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42153 }
42154 
ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42155 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42156 {
42157 	USE_OPLINE
42158 	zval *property, *container, *result;
42159 
42160 	SAVE_OPLINE();
42161 
42162 	container = EX_VAR(opline->op1.var);
42163 	property = RT_CONSTANT(opline, opline->op2);
42164 	result = EX_VAR(opline->result.var);
42165 	zend_fetch_property_address(
42166 		result, container, IS_CV, property, IS_CONST,
42167 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
42168 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
42169 
42170 	if (IS_CV == IS_VAR) {
42171 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
42172 	}
42173 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42174 }
42175 
ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42176 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42177 {
42178 	USE_OPLINE
42179 	zval *property, *container, *result;
42180 
42181 	SAVE_OPLINE();
42182 	container = EX_VAR(opline->op1.var);
42183 	property = RT_CONSTANT(opline, opline->op2);
42184 	result = EX_VAR(opline->result.var);
42185 	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 OPLINE_CC EXECUTE_DATA_CC);
42186 
42187 	if (IS_CV == IS_VAR) {
42188 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
42189 	}
42190 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42191 }
42192 
ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42193 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42194 {
42195 	USE_OPLINE
42196 	zval *container;
42197 	void **cache_slot = NULL;
42198 
42199 	SAVE_OPLINE();
42200 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
42201 
42202 	if (IS_CV == IS_CONST ||
42203 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
42204 		do {
42205 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
42206 				container = Z_REFVAL_P(container);
42207 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
42208 					break;
42209 				}
42210 			}
42211 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
42212 				ZVAL_UNDEFINED_OP2();
42213 			}
42214 			ZVAL_NULL(EX_VAR(opline->result.var));
42215 			goto fetch_obj_is_finish;
42216 		} while (0);
42217 	}
42218 
42219 	/* here we are sure we are dealing with an object */
42220 	do {
42221 		zend_object *zobj = Z_OBJ_P(container);
42222 		zend_string *name, *tmp_name;
42223 		zval *retval;
42224 
42225 		if (IS_CONST == IS_CONST) {
42226 			cache_slot = CACHE_ADDR(opline->extended_value);
42227 
42228 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
42229 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42230 
42231 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42232 					retval = OBJ_PROP(zobj, prop_offset);
42233 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
42234 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42235 							goto fetch_obj_is_copy;
42236 						} else {
42237 fetch_obj_is_fast_copy:
42238 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
42239 							ZEND_VM_NEXT_OPCODE();
42240 						}
42241 					}
42242 				} else if (EXPECTED(zobj->properties != NULL)) {
42243 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42244 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
42245 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
42246 
42247 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
42248 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
42249 
42250 							if (EXPECTED(p->key == name) ||
42251 							    (EXPECTED(p->h == ZSTR_H(name)) &&
42252 							     EXPECTED(p->key != NULL) &&
42253 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
42254 								retval = &p->val;
42255 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42256 									goto fetch_obj_is_copy;
42257 								} else {
42258 									goto fetch_obj_is_fast_copy;
42259 								}
42260 							}
42261 						}
42262 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
42263 					}
42264 					retval = zend_hash_find_known_hash(zobj->properties, name);
42265 					if (EXPECTED(retval)) {
42266 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
42267 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
42268 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42269 							goto fetch_obj_is_copy;
42270 						} else {
42271 							goto fetch_obj_is_fast_copy;
42272 						}
42273 					}
42274 				}
42275 			}
42276 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42277 		} else {
42278 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42279 			if (UNEXPECTED(!name)) {
42280 				ZVAL_UNDEF(EX_VAR(opline->result.var));
42281 				break;
42282 			}
42283 		}
42284 
42285 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
42286 
42287 		if (IS_CONST != IS_CONST) {
42288 			zend_tmp_string_release(tmp_name);
42289 		}
42290 
42291 		if (retval != EX_VAR(opline->result.var)) {
42292 fetch_obj_is_copy:
42293 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
42294 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
42295 			zend_unwrap_reference(retval);
42296 		}
42297 	} while (0);
42298 
42299 fetch_obj_is_finish:
42300 
42301 
42302 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42303 }
42304 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42305 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42306 {
42307 #if 0
42308 	USE_OPLINE
42309 #endif
42310 
42311 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
42312 		/* Behave like FETCH_OBJ_W */
42313 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
42314 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42315 		}
42316 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42317 	} else {
42318 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42319 	}
42320 }
42321 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42322 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42323 {
42324 	USE_OPLINE
42325 	zval *container, *property, *result;
42326 
42327 	SAVE_OPLINE();
42328 	container = EX_VAR(opline->op1.var);
42329 	property = RT_CONSTANT(opline, opline->op2);
42330 	result = EX_VAR(opline->result.var);
42331 	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 OPLINE_CC EXECUTE_DATA_CC);
42332 
42333 	if (IS_CV == IS_VAR) {
42334 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
42335 	}
42336 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42337 }
42338 
ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42339 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42340 {
42341 	USE_OPLINE
42342 	zval *object, *value, tmp;
42343 	zend_object *zobj;
42344 	zend_string *name, *tmp_name;
42345 	zend_refcounted *garbage = NULL;
42346 
42347 	SAVE_OPLINE();
42348 	object = EX_VAR(opline->op1.var);
42349 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
42350 
42351 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42352 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42353 			object = Z_REFVAL_P(object);
42354 			goto assign_object;
42355 		}
42356 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
42357 		value = &EG(uninitialized_zval);
42358 		goto free_and_exit_assign_obj;
42359 	}
42360 
42361 assign_object:
42362 	zobj = Z_OBJ_P(object);
42363 	if (IS_CONST == IS_CONST) {
42364 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
42365 			void **cache_slot = CACHE_ADDR(opline->extended_value);
42366 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42367 			zval *property_val;
42368 
42369 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42370 				property_val = OBJ_PROP(zobj, prop_offset);
42371 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
42372 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
42373 
42374 					if (prop_info != NULL) {
42375 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
42376 						goto free_and_exit_assign_obj;
42377 					} else {
42378 fast_assign_obj:
42379 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
42380 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42381 							ZVAL_COPY(EX_VAR(opline->result.var), value);
42382 						}
42383 						goto exit_assign_obj;
42384 					}
42385 				}
42386 			} else {
42387 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42388 				if (EXPECTED(zobj->properties != NULL)) {
42389 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
42390 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
42391 							GC_DELREF(zobj->properties);
42392 						}
42393 						zobj->properties = zend_array_dup(zobj->properties);
42394 					}
42395 					property_val = zend_hash_find_known_hash(zobj->properties, name);
42396 					if (property_val) {
42397 						goto fast_assign_obj;
42398 					}
42399 				}
42400 
42401 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
42402 					if (EXPECTED(zobj->properties == NULL)) {
42403 						rebuild_object_properties(zobj);
42404 					}
42405 					if (IS_CONST == IS_CONST) {
42406 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
42407 							Z_ADDREF_P(value);
42408 						}
42409 					} else if (IS_CONST != IS_TMP_VAR) {
42410 						if (Z_ISREF_P(value)) {
42411 							if (IS_CONST == IS_VAR) {
42412 								zend_reference *ref = Z_REF_P(value);
42413 								if (GC_DELREF(ref) == 0) {
42414 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
42415 									efree_size(ref, sizeof(zend_reference));
42416 									value = &tmp;
42417 								} else {
42418 									value = Z_REFVAL_P(value);
42419 									Z_TRY_ADDREF_P(value);
42420 								}
42421 							} else {
42422 								value = Z_REFVAL_P(value);
42423 								Z_TRY_ADDREF_P(value);
42424 							}
42425 						} else if (IS_CONST == IS_CV) {
42426 							Z_TRY_ADDREF_P(value);
42427 						}
42428 						}
42429 					zend_hash_add_new(zobj->properties, name, value);
42430 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42431 						ZVAL_COPY(EX_VAR(opline->result.var), value);
42432 					}
42433 					goto exit_assign_obj;
42434 				}
42435 			}
42436 		}
42437 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42438 	} else {
42439 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42440 		if (UNEXPECTED(!name)) {
42441 
42442 			UNDEF_RESULT();
42443 			goto exit_assign_obj;
42444 		}
42445 	}
42446 
42447 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
42448 		ZVAL_DEREF(value);
42449 	}
42450 
42451 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
42452 
42453 	if (IS_CONST != IS_CONST) {
42454 		zend_tmp_string_release(tmp_name);
42455 	}
42456 
42457 free_and_exit_assign_obj:
42458 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
42459 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42460 	}
42461 
42462 exit_assign_obj:
42463 	if (garbage) {
42464 		GC_DTOR_NO_REF(garbage);
42465 	}
42466 
42467 
42468 	/* assign_obj has two opcodes! */
42469 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42470 }
42471 
42472 /* 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)42473 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42474 {
42475 	USE_OPLINE
42476 	zval *object, *value, tmp;
42477 	zend_object *zobj;
42478 	zend_string *name, *tmp_name;
42479 	zend_refcounted *garbage = NULL;
42480 
42481 	SAVE_OPLINE();
42482 	object = EX_VAR(opline->op1.var);
42483 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
42484 
42485 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42486 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42487 			object = Z_REFVAL_P(object);
42488 			goto assign_object;
42489 		}
42490 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
42491 		value = &EG(uninitialized_zval);
42492 		goto free_and_exit_assign_obj;
42493 	}
42494 
42495 assign_object:
42496 	zobj = Z_OBJ_P(object);
42497 	if (IS_CONST == IS_CONST) {
42498 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
42499 			void **cache_slot = CACHE_ADDR(opline->extended_value);
42500 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42501 			zval *property_val;
42502 
42503 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42504 				property_val = OBJ_PROP(zobj, prop_offset);
42505 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
42506 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
42507 
42508 					if (prop_info != NULL) {
42509 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
42510 						goto free_and_exit_assign_obj;
42511 					} else {
42512 fast_assign_obj:
42513 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
42514 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42515 							ZVAL_COPY(EX_VAR(opline->result.var), value);
42516 						}
42517 						goto exit_assign_obj;
42518 					}
42519 				}
42520 			} else {
42521 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42522 				if (EXPECTED(zobj->properties != NULL)) {
42523 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
42524 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
42525 							GC_DELREF(zobj->properties);
42526 						}
42527 						zobj->properties = zend_array_dup(zobj->properties);
42528 					}
42529 					property_val = zend_hash_find_known_hash(zobj->properties, name);
42530 					if (property_val) {
42531 						goto fast_assign_obj;
42532 					}
42533 				}
42534 
42535 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
42536 					if (EXPECTED(zobj->properties == NULL)) {
42537 						rebuild_object_properties(zobj);
42538 					}
42539 					if (IS_TMP_VAR == IS_CONST) {
42540 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
42541 							Z_ADDREF_P(value);
42542 						}
42543 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
42544 						if (Z_ISREF_P(value)) {
42545 							if (IS_TMP_VAR == IS_VAR) {
42546 								zend_reference *ref = Z_REF_P(value);
42547 								if (GC_DELREF(ref) == 0) {
42548 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
42549 									efree_size(ref, sizeof(zend_reference));
42550 									value = &tmp;
42551 								} else {
42552 									value = Z_REFVAL_P(value);
42553 									Z_TRY_ADDREF_P(value);
42554 								}
42555 							} else {
42556 								value = Z_REFVAL_P(value);
42557 								Z_TRY_ADDREF_P(value);
42558 							}
42559 						} else if (IS_TMP_VAR == IS_CV) {
42560 							Z_TRY_ADDREF_P(value);
42561 						}
42562 						}
42563 					zend_hash_add_new(zobj->properties, name, value);
42564 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42565 						ZVAL_COPY(EX_VAR(opline->result.var), value);
42566 					}
42567 					goto exit_assign_obj;
42568 				}
42569 			}
42570 		}
42571 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42572 	} else {
42573 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42574 		if (UNEXPECTED(!name)) {
42575 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42576 			UNDEF_RESULT();
42577 			goto exit_assign_obj;
42578 		}
42579 	}
42580 
42581 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
42582 		ZVAL_DEREF(value);
42583 	}
42584 
42585 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
42586 
42587 	if (IS_CONST != IS_CONST) {
42588 		zend_tmp_string_release(tmp_name);
42589 	}
42590 
42591 free_and_exit_assign_obj:
42592 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
42593 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42594 	}
42595 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42596 exit_assign_obj:
42597 	if (garbage) {
42598 		GC_DTOR_NO_REF(garbage);
42599 	}
42600 
42601 
42602 	/* assign_obj has two opcodes! */
42603 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42604 }
42605 
42606 /* 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)42607 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42608 {
42609 	USE_OPLINE
42610 	zval *object, *value, tmp;
42611 	zend_object *zobj;
42612 	zend_string *name, *tmp_name;
42613 	zend_refcounted *garbage = NULL;
42614 
42615 	SAVE_OPLINE();
42616 	object = EX_VAR(opline->op1.var);
42617 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
42618 
42619 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42620 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42621 			object = Z_REFVAL_P(object);
42622 			goto assign_object;
42623 		}
42624 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
42625 		value = &EG(uninitialized_zval);
42626 		goto free_and_exit_assign_obj;
42627 	}
42628 
42629 assign_object:
42630 	zobj = Z_OBJ_P(object);
42631 	if (IS_CONST == IS_CONST) {
42632 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
42633 			void **cache_slot = CACHE_ADDR(opline->extended_value);
42634 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42635 			zval *property_val;
42636 
42637 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42638 				property_val = OBJ_PROP(zobj, prop_offset);
42639 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
42640 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
42641 
42642 					if (prop_info != NULL) {
42643 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
42644 						goto free_and_exit_assign_obj;
42645 					} else {
42646 fast_assign_obj:
42647 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
42648 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42649 							ZVAL_COPY(EX_VAR(opline->result.var), value);
42650 						}
42651 						goto exit_assign_obj;
42652 					}
42653 				}
42654 			} else {
42655 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42656 				if (EXPECTED(zobj->properties != NULL)) {
42657 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
42658 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
42659 							GC_DELREF(zobj->properties);
42660 						}
42661 						zobj->properties = zend_array_dup(zobj->properties);
42662 					}
42663 					property_val = zend_hash_find_known_hash(zobj->properties, name);
42664 					if (property_val) {
42665 						goto fast_assign_obj;
42666 					}
42667 				}
42668 
42669 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
42670 					if (EXPECTED(zobj->properties == NULL)) {
42671 						rebuild_object_properties(zobj);
42672 					}
42673 					if (IS_VAR == IS_CONST) {
42674 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
42675 							Z_ADDREF_P(value);
42676 						}
42677 					} else if (IS_VAR != IS_TMP_VAR) {
42678 						if (Z_ISREF_P(value)) {
42679 							if (IS_VAR == IS_VAR) {
42680 								zend_reference *ref = Z_REF_P(value);
42681 								if (GC_DELREF(ref) == 0) {
42682 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
42683 									efree_size(ref, sizeof(zend_reference));
42684 									value = &tmp;
42685 								} else {
42686 									value = Z_REFVAL_P(value);
42687 									Z_TRY_ADDREF_P(value);
42688 								}
42689 							} else {
42690 								value = Z_REFVAL_P(value);
42691 								Z_TRY_ADDREF_P(value);
42692 							}
42693 						} else if (IS_VAR == IS_CV) {
42694 							Z_TRY_ADDREF_P(value);
42695 						}
42696 						}
42697 					zend_hash_add_new(zobj->properties, name, value);
42698 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42699 						ZVAL_COPY(EX_VAR(opline->result.var), value);
42700 					}
42701 					goto exit_assign_obj;
42702 				}
42703 			}
42704 		}
42705 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42706 	} else {
42707 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42708 		if (UNEXPECTED(!name)) {
42709 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42710 			UNDEF_RESULT();
42711 			goto exit_assign_obj;
42712 		}
42713 	}
42714 
42715 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
42716 		ZVAL_DEREF(value);
42717 	}
42718 
42719 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
42720 
42721 	if (IS_CONST != IS_CONST) {
42722 		zend_tmp_string_release(tmp_name);
42723 	}
42724 
42725 free_and_exit_assign_obj:
42726 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
42727 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42728 	}
42729 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42730 exit_assign_obj:
42731 	if (garbage) {
42732 		GC_DTOR_NO_REF(garbage);
42733 	}
42734 
42735 
42736 	/* assign_obj has two opcodes! */
42737 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42738 }
42739 
42740 /* 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)42741 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42742 {
42743 	USE_OPLINE
42744 	zval *object, *value, tmp;
42745 	zend_object *zobj;
42746 	zend_string *name, *tmp_name;
42747 	zend_refcounted *garbage = NULL;
42748 
42749 	SAVE_OPLINE();
42750 	object = EX_VAR(opline->op1.var);
42751 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
42752 
42753 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42754 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42755 			object = Z_REFVAL_P(object);
42756 			goto assign_object;
42757 		}
42758 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
42759 		value = &EG(uninitialized_zval);
42760 		goto free_and_exit_assign_obj;
42761 	}
42762 
42763 assign_object:
42764 	zobj = Z_OBJ_P(object);
42765 	if (IS_CONST == IS_CONST) {
42766 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
42767 			void **cache_slot = CACHE_ADDR(opline->extended_value);
42768 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42769 			zval *property_val;
42770 
42771 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42772 				property_val = OBJ_PROP(zobj, prop_offset);
42773 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
42774 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
42775 
42776 					if (prop_info != NULL) {
42777 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
42778 						goto free_and_exit_assign_obj;
42779 					} else {
42780 fast_assign_obj:
42781 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
42782 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42783 							ZVAL_COPY(EX_VAR(opline->result.var), value);
42784 						}
42785 						goto exit_assign_obj;
42786 					}
42787 				}
42788 			} else {
42789 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42790 				if (EXPECTED(zobj->properties != NULL)) {
42791 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
42792 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
42793 							GC_DELREF(zobj->properties);
42794 						}
42795 						zobj->properties = zend_array_dup(zobj->properties);
42796 					}
42797 					property_val = zend_hash_find_known_hash(zobj->properties, name);
42798 					if (property_val) {
42799 						goto fast_assign_obj;
42800 					}
42801 				}
42802 
42803 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
42804 					if (EXPECTED(zobj->properties == NULL)) {
42805 						rebuild_object_properties(zobj);
42806 					}
42807 					if (IS_CV == IS_CONST) {
42808 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
42809 							Z_ADDREF_P(value);
42810 						}
42811 					} else if (IS_CV != IS_TMP_VAR) {
42812 						if (Z_ISREF_P(value)) {
42813 							if (IS_CV == IS_VAR) {
42814 								zend_reference *ref = Z_REF_P(value);
42815 								if (GC_DELREF(ref) == 0) {
42816 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
42817 									efree_size(ref, sizeof(zend_reference));
42818 									value = &tmp;
42819 								} else {
42820 									value = Z_REFVAL_P(value);
42821 									Z_TRY_ADDREF_P(value);
42822 								}
42823 							} else {
42824 								value = Z_REFVAL_P(value);
42825 								Z_TRY_ADDREF_P(value);
42826 							}
42827 						} else if (IS_CV == IS_CV) {
42828 							Z_TRY_ADDREF_P(value);
42829 						}
42830 						}
42831 					zend_hash_add_new(zobj->properties, name, value);
42832 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42833 						ZVAL_COPY(EX_VAR(opline->result.var), value);
42834 					}
42835 					goto exit_assign_obj;
42836 				}
42837 			}
42838 		}
42839 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42840 	} else {
42841 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42842 		if (UNEXPECTED(!name)) {
42843 
42844 			UNDEF_RESULT();
42845 			goto exit_assign_obj;
42846 		}
42847 	}
42848 
42849 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
42850 		ZVAL_DEREF(value);
42851 	}
42852 
42853 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
42854 
42855 	if (IS_CONST != IS_CONST) {
42856 		zend_tmp_string_release(tmp_name);
42857 	}
42858 
42859 free_and_exit_assign_obj:
42860 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
42861 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42862 	}
42863 
42864 exit_assign_obj:
42865 	if (garbage) {
42866 		GC_DTOR_NO_REF(garbage);
42867 	}
42868 
42869 
42870 	/* assign_obj has two opcodes! */
42871 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42872 }
42873 
42874 /* 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)42875 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42876 {
42877 	USE_OPLINE
42878 	zval *object_ptr, *orig_object_ptr;
42879 	zval *value;
42880 	zval *variable_ptr;
42881 	zval *dim;
42882 	zend_refcounted *garbage = NULL;
42883 
42884 	SAVE_OPLINE();
42885 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
42886 
42887 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42888 try_assign_dim_array:
42889 		SEPARATE_ARRAY(object_ptr);
42890 		if (IS_CONST == IS_UNUSED) {
42891 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
42892 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
42893 				HashTable *ht = Z_ARRVAL_P(object_ptr);
42894 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
42895 					GC_ADDREF(ht);
42896 				}
42897 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
42898 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
42899 					zend_array_destroy(ht);
42900 					goto assign_dim_error;
42901 				}
42902 			}
42903 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
42904 				ZVAL_DEREF(value);
42905 			}
42906 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
42907 			if (UNEXPECTED(value == NULL)) {
42908 				zend_cannot_add_element();
42909 				goto assign_dim_error;
42910 			} else if (IS_CONST == IS_CV) {
42911 				if (Z_REFCOUNTED_P(value)) {
42912 					Z_ADDREF_P(value);
42913 				}
42914 			} else if (IS_CONST == IS_VAR) {
42915 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
42916 				if (Z_ISREF_P(free_op_data)) {
42917 					if (Z_REFCOUNTED_P(value)) {
42918 						Z_ADDREF_P(value);
42919 					}
42920 					zval_ptr_dtor_nogc(free_op_data);
42921 				}
42922 			} else if (IS_CONST == IS_CONST) {
42923 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
42924 					Z_ADDREF_P(value);
42925 				}
42926 			}
42927 		} else {
42928 			dim = RT_CONSTANT(opline, opline->op2);
42929 			if (IS_CONST == IS_CONST) {
42930 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
42931 			} else {
42932 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
42933 			}
42934 			if (UNEXPECTED(variable_ptr == NULL)) {
42935 				goto assign_dim_error;
42936 			}
42937 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
42938 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
42939 		}
42940 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42941 			ZVAL_COPY(EX_VAR(opline->result.var), value);
42942 		}
42943 		if (garbage) {
42944 			GC_DTOR_NO_REF(garbage);
42945 		}
42946 	} else {
42947 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
42948 			object_ptr = Z_REFVAL_P(object_ptr);
42949 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42950 				goto try_assign_dim_array;
42951 			}
42952 		}
42953 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
42954 			zend_object *obj = Z_OBJ_P(object_ptr);
42955 
42956 			GC_ADDREF(obj);
42957 			dim = RT_CONSTANT(opline, opline->op2);
42958 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
42959 				dim = ZVAL_UNDEFINED_OP2();
42960 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
42961 				dim++;
42962 			}
42963 
42964 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
42965 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
42966 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
42967 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
42968 				ZVAL_DEREF(value);
42969 			}
42970 
42971 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
42972 
42973 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
42974 				zend_objects_store_del(obj);
42975 			}
42976 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
42977 			if (IS_CONST == IS_UNUSED) {
42978 				zend_use_new_element_for_string();
42979 
42980 				UNDEF_RESULT();
42981 			} else {
42982 				dim = RT_CONSTANT(opline, opline->op2);
42983 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
42984 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
42985 
42986 			}
42987 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
42988 			if (Z_ISREF_P(orig_object_ptr)
42989 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
42990 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
42991 				dim = RT_CONSTANT(opline, opline->op2);
42992 
42993 				UNDEF_RESULT();
42994 			} else {
42995 				HashTable *ht = zend_new_array(8);
42996 				uint8_t old_type = Z_TYPE_P(object_ptr);
42997 
42998 				ZVAL_ARR(object_ptr, ht);
42999 				if (UNEXPECTED(old_type == IS_FALSE)) {
43000 					GC_ADDREF(ht);
43001 					zend_false_to_array_deprecated();
43002 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
43003 						zend_array_destroy(ht);
43004 						goto assign_dim_error;
43005 					}
43006 				}
43007 				goto try_assign_dim_array;
43008 			}
43009 		} else {
43010 			zend_use_scalar_as_array();
43011 			dim = RT_CONSTANT(opline, opline->op2);
43012 assign_dim_error:
43013 
43014 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43015 				ZVAL_NULL(EX_VAR(opline->result.var));
43016 			}
43017 		}
43018 	}
43019 	if (IS_CONST != IS_UNUSED) {
43020 
43021 	}
43022 
43023 	/* assign_dim has two opcodes! */
43024 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43025 }
43026 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43027 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43028 {
43029 	USE_OPLINE
43030 	zval *object_ptr, *orig_object_ptr;
43031 	zval *value;
43032 	zval *variable_ptr;
43033 	zval *dim;
43034 	zend_refcounted *garbage = NULL;
43035 
43036 	SAVE_OPLINE();
43037 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
43038 
43039 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43040 try_assign_dim_array:
43041 		SEPARATE_ARRAY(object_ptr);
43042 		if (IS_CONST == IS_UNUSED) {
43043 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
43044 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
43045 				HashTable *ht = Z_ARRVAL_P(object_ptr);
43046 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
43047 					GC_ADDREF(ht);
43048 				}
43049 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
43050 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
43051 					zend_array_destroy(ht);
43052 					goto assign_dim_error;
43053 				}
43054 			}
43055 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
43056 				ZVAL_DEREF(value);
43057 			}
43058 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
43059 			if (UNEXPECTED(value == NULL)) {
43060 				zend_cannot_add_element();
43061 				goto assign_dim_error;
43062 			} else if (IS_TMP_VAR == IS_CV) {
43063 				if (Z_REFCOUNTED_P(value)) {
43064 					Z_ADDREF_P(value);
43065 				}
43066 			} else if (IS_TMP_VAR == IS_VAR) {
43067 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
43068 				if (Z_ISREF_P(free_op_data)) {
43069 					if (Z_REFCOUNTED_P(value)) {
43070 						Z_ADDREF_P(value);
43071 					}
43072 					zval_ptr_dtor_nogc(free_op_data);
43073 				}
43074 			} else if (IS_TMP_VAR == IS_CONST) {
43075 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
43076 					Z_ADDREF_P(value);
43077 				}
43078 			}
43079 		} else {
43080 			dim = RT_CONSTANT(opline, opline->op2);
43081 			if (IS_CONST == IS_CONST) {
43082 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43083 			} else {
43084 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43085 			}
43086 			if (UNEXPECTED(variable_ptr == NULL)) {
43087 				goto assign_dim_error;
43088 			}
43089 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
43090 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
43091 		}
43092 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43093 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43094 		}
43095 		if (garbage) {
43096 			GC_DTOR_NO_REF(garbage);
43097 		}
43098 	} else {
43099 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
43100 			object_ptr = Z_REFVAL_P(object_ptr);
43101 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43102 				goto try_assign_dim_array;
43103 			}
43104 		}
43105 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
43106 			zend_object *obj = Z_OBJ_P(object_ptr);
43107 
43108 			GC_ADDREF(obj);
43109 			dim = RT_CONSTANT(opline, opline->op2);
43110 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
43111 				dim = ZVAL_UNDEFINED_OP2();
43112 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43113 				dim++;
43114 			}
43115 
43116 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
43117 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
43118 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
43119 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
43120 				ZVAL_DEREF(value);
43121 			}
43122 
43123 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
43124 
43125 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43126 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
43127 				zend_objects_store_del(obj);
43128 			}
43129 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
43130 			if (IS_CONST == IS_UNUSED) {
43131 				zend_use_new_element_for_string();
43132 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43133 				UNDEF_RESULT();
43134 			} else {
43135 				dim = RT_CONSTANT(opline, opline->op2);
43136 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
43137 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43138 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43139 			}
43140 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
43141 			if (Z_ISREF_P(orig_object_ptr)
43142 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
43143 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
43144 				dim = RT_CONSTANT(opline, opline->op2);
43145 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43146 				UNDEF_RESULT();
43147 			} else {
43148 				HashTable *ht = zend_new_array(8);
43149 				uint8_t old_type = Z_TYPE_P(object_ptr);
43150 
43151 				ZVAL_ARR(object_ptr, ht);
43152 				if (UNEXPECTED(old_type == IS_FALSE)) {
43153 					GC_ADDREF(ht);
43154 					zend_false_to_array_deprecated();
43155 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
43156 						zend_array_destroy(ht);
43157 						goto assign_dim_error;
43158 					}
43159 				}
43160 				goto try_assign_dim_array;
43161 			}
43162 		} else {
43163 			zend_use_scalar_as_array();
43164 			dim = RT_CONSTANT(opline, opline->op2);
43165 assign_dim_error:
43166 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43167 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43168 				ZVAL_NULL(EX_VAR(opline->result.var));
43169 			}
43170 		}
43171 	}
43172 	if (IS_CONST != IS_UNUSED) {
43173 
43174 	}
43175 
43176 	/* assign_dim has two opcodes! */
43177 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43178 }
43179 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43180 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43181 {
43182 	USE_OPLINE
43183 	zval *object_ptr, *orig_object_ptr;
43184 	zval *value;
43185 	zval *variable_ptr;
43186 	zval *dim;
43187 	zend_refcounted *garbage = NULL;
43188 
43189 	SAVE_OPLINE();
43190 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
43191 
43192 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43193 try_assign_dim_array:
43194 		SEPARATE_ARRAY(object_ptr);
43195 		if (IS_CONST == IS_UNUSED) {
43196 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
43197 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
43198 				HashTable *ht = Z_ARRVAL_P(object_ptr);
43199 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
43200 					GC_ADDREF(ht);
43201 				}
43202 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
43203 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
43204 					zend_array_destroy(ht);
43205 					goto assign_dim_error;
43206 				}
43207 			}
43208 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
43209 				ZVAL_DEREF(value);
43210 			}
43211 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
43212 			if (UNEXPECTED(value == NULL)) {
43213 				zend_cannot_add_element();
43214 				goto assign_dim_error;
43215 			} else if (IS_VAR == IS_CV) {
43216 				if (Z_REFCOUNTED_P(value)) {
43217 					Z_ADDREF_P(value);
43218 				}
43219 			} else if (IS_VAR == IS_VAR) {
43220 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
43221 				if (Z_ISREF_P(free_op_data)) {
43222 					if (Z_REFCOUNTED_P(value)) {
43223 						Z_ADDREF_P(value);
43224 					}
43225 					zval_ptr_dtor_nogc(free_op_data);
43226 				}
43227 			} else if (IS_VAR == IS_CONST) {
43228 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
43229 					Z_ADDREF_P(value);
43230 				}
43231 			}
43232 		} else {
43233 			dim = RT_CONSTANT(opline, opline->op2);
43234 			if (IS_CONST == IS_CONST) {
43235 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43236 			} else {
43237 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43238 			}
43239 			if (UNEXPECTED(variable_ptr == NULL)) {
43240 				goto assign_dim_error;
43241 			}
43242 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
43243 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
43244 		}
43245 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43246 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43247 		}
43248 		if (garbage) {
43249 			GC_DTOR_NO_REF(garbage);
43250 		}
43251 	} else {
43252 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
43253 			object_ptr = Z_REFVAL_P(object_ptr);
43254 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43255 				goto try_assign_dim_array;
43256 			}
43257 		}
43258 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
43259 			zend_object *obj = Z_OBJ_P(object_ptr);
43260 
43261 			GC_ADDREF(obj);
43262 			dim = RT_CONSTANT(opline, opline->op2);
43263 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
43264 				dim = ZVAL_UNDEFINED_OP2();
43265 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43266 				dim++;
43267 			}
43268 
43269 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
43270 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
43271 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
43272 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
43273 				ZVAL_DEREF(value);
43274 			}
43275 
43276 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
43277 
43278 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43279 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
43280 				zend_objects_store_del(obj);
43281 			}
43282 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
43283 			if (IS_CONST == IS_UNUSED) {
43284 				zend_use_new_element_for_string();
43285 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43286 				UNDEF_RESULT();
43287 			} else {
43288 				dim = RT_CONSTANT(opline, opline->op2);
43289 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
43290 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43291 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43292 			}
43293 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
43294 			if (Z_ISREF_P(orig_object_ptr)
43295 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
43296 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
43297 				dim = RT_CONSTANT(opline, opline->op2);
43298 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43299 				UNDEF_RESULT();
43300 			} else {
43301 				HashTable *ht = zend_new_array(8);
43302 				uint8_t old_type = Z_TYPE_P(object_ptr);
43303 
43304 				ZVAL_ARR(object_ptr, ht);
43305 				if (UNEXPECTED(old_type == IS_FALSE)) {
43306 					GC_ADDREF(ht);
43307 					zend_false_to_array_deprecated();
43308 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
43309 						zend_array_destroy(ht);
43310 						goto assign_dim_error;
43311 					}
43312 				}
43313 				goto try_assign_dim_array;
43314 			}
43315 		} else {
43316 			zend_use_scalar_as_array();
43317 			dim = RT_CONSTANT(opline, opline->op2);
43318 assign_dim_error:
43319 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43320 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43321 				ZVAL_NULL(EX_VAR(opline->result.var));
43322 			}
43323 		}
43324 	}
43325 	if (IS_CONST != IS_UNUSED) {
43326 
43327 	}
43328 
43329 	/* assign_dim has two opcodes! */
43330 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43331 }
43332 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43333 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43334 {
43335 	USE_OPLINE
43336 	zval *object_ptr, *orig_object_ptr;
43337 	zval *value;
43338 	zval *variable_ptr;
43339 	zval *dim;
43340 	zend_refcounted *garbage = NULL;
43341 
43342 	SAVE_OPLINE();
43343 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
43344 
43345 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43346 try_assign_dim_array:
43347 		SEPARATE_ARRAY(object_ptr);
43348 		if (IS_CONST == IS_UNUSED) {
43349 			value = EX_VAR((opline+1)->op1.var);
43350 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
43351 				HashTable *ht = Z_ARRVAL_P(object_ptr);
43352 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
43353 					GC_ADDREF(ht);
43354 				}
43355 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
43356 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
43357 					zend_array_destroy(ht);
43358 					goto assign_dim_error;
43359 				}
43360 			}
43361 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
43362 				ZVAL_DEREF(value);
43363 			}
43364 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
43365 			if (UNEXPECTED(value == NULL)) {
43366 				zend_cannot_add_element();
43367 				goto assign_dim_error;
43368 			} else if (IS_CV == IS_CV) {
43369 				if (Z_REFCOUNTED_P(value)) {
43370 					Z_ADDREF_P(value);
43371 				}
43372 			} else if (IS_CV == IS_VAR) {
43373 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
43374 				if (Z_ISREF_P(free_op_data)) {
43375 					if (Z_REFCOUNTED_P(value)) {
43376 						Z_ADDREF_P(value);
43377 					}
43378 					zval_ptr_dtor_nogc(free_op_data);
43379 				}
43380 			} else if (IS_CV == IS_CONST) {
43381 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
43382 					Z_ADDREF_P(value);
43383 				}
43384 			}
43385 		} else {
43386 			dim = RT_CONSTANT(opline, opline->op2);
43387 			if (IS_CONST == IS_CONST) {
43388 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43389 			} else {
43390 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43391 			}
43392 			if (UNEXPECTED(variable_ptr == NULL)) {
43393 				goto assign_dim_error;
43394 			}
43395 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
43396 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
43397 		}
43398 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43399 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43400 		}
43401 		if (garbage) {
43402 			GC_DTOR_NO_REF(garbage);
43403 		}
43404 	} else {
43405 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
43406 			object_ptr = Z_REFVAL_P(object_ptr);
43407 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43408 				goto try_assign_dim_array;
43409 			}
43410 		}
43411 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
43412 			zend_object *obj = Z_OBJ_P(object_ptr);
43413 
43414 			GC_ADDREF(obj);
43415 			dim = RT_CONSTANT(opline, opline->op2);
43416 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
43417 				dim = ZVAL_UNDEFINED_OP2();
43418 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43419 				dim++;
43420 			}
43421 
43422 			value = EX_VAR((opline+1)->op1.var);
43423 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
43424 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
43425 			} else if (IS_CV & (IS_CV|IS_VAR)) {
43426 				ZVAL_DEREF(value);
43427 			}
43428 
43429 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
43430 
43431 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
43432 				zend_objects_store_del(obj);
43433 			}
43434 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
43435 			if (IS_CONST == IS_UNUSED) {
43436 				zend_use_new_element_for_string();
43437 
43438 				UNDEF_RESULT();
43439 			} else {
43440 				dim = RT_CONSTANT(opline, opline->op2);
43441 				value = EX_VAR((opline+1)->op1.var);
43442 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43443 
43444 			}
43445 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
43446 			if (Z_ISREF_P(orig_object_ptr)
43447 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
43448 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
43449 				dim = RT_CONSTANT(opline, opline->op2);
43450 
43451 				UNDEF_RESULT();
43452 			} else {
43453 				HashTable *ht = zend_new_array(8);
43454 				uint8_t old_type = Z_TYPE_P(object_ptr);
43455 
43456 				ZVAL_ARR(object_ptr, ht);
43457 				if (UNEXPECTED(old_type == IS_FALSE)) {
43458 					GC_ADDREF(ht);
43459 					zend_false_to_array_deprecated();
43460 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
43461 						zend_array_destroy(ht);
43462 						goto assign_dim_error;
43463 					}
43464 				}
43465 				goto try_assign_dim_array;
43466 			}
43467 		} else {
43468 			zend_use_scalar_as_array();
43469 			dim = RT_CONSTANT(opline, opline->op2);
43470 assign_dim_error:
43471 
43472 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43473 				ZVAL_NULL(EX_VAR(opline->result.var));
43474 			}
43475 		}
43476 	}
43477 	if (IS_CONST != IS_UNUSED) {
43478 
43479 	}
43480 
43481 	/* assign_dim has two opcodes! */
43482 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43483 }
43484 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43485 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43486 {
43487 	USE_OPLINE
43488 	zval *value;
43489 	zval *variable_ptr;
43490 
43491 	SAVE_OPLINE();
43492 	value = RT_CONSTANT(opline, opline->op2);
43493 	variable_ptr = EX_VAR(opline->op1.var);
43494 
43495 	if (0 || UNEXPECTED(0)) {
43496 		zend_refcounted *garbage = NULL;
43497 
43498 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
43499 		if (UNEXPECTED(0)) {
43500 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43501 		}
43502 		if (garbage) {
43503 			GC_DTOR_NO_REF(garbage);
43504 		}
43505 	} else {
43506 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
43507 	}
43508 
43509 	/* zend_assign_to_variable() always takes care of op2, never free it! */
43510 
43511 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43512 }
43513 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43514 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43515 {
43516 	USE_OPLINE
43517 	zval *value;
43518 	zval *variable_ptr;
43519 
43520 	SAVE_OPLINE();
43521 	value = RT_CONSTANT(opline, opline->op2);
43522 	variable_ptr = EX_VAR(opline->op1.var);
43523 
43524 	if (0 || UNEXPECTED(1)) {
43525 		zend_refcounted *garbage = NULL;
43526 
43527 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
43528 		if (UNEXPECTED(1)) {
43529 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43530 		}
43531 		if (garbage) {
43532 			GC_DTOR_NO_REF(garbage);
43533 		}
43534 	} else {
43535 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
43536 	}
43537 
43538 	/* zend_assign_to_variable() always takes care of op2, never free it! */
43539 
43540 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43541 }
43542 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43543 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43544 {
43545 	USE_OPLINE
43546 	zval *property, *container, *value_ptr;
43547 
43548 	SAVE_OPLINE();
43549 
43550 	container = EX_VAR(opline->op1.var);
43551 	property = RT_CONSTANT(opline, opline->op2);
43552 
43553 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
43554 
43555 	if (1) {
43556 		if (IS_CV == IS_UNUSED) {
43557 			if (IS_CONST == IS_CONST) {
43558 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43559 			} else {
43560 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43561 			}
43562 		} else {
43563 			if (IS_CONST == IS_CONST) {
43564 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43565 			} else {
43566 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43567 			}
43568 		}
43569 	} else {
43570 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43571 	}
43572 
43573 
43574 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43575 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43576 }
43577 
43578 /* 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)43579 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43580 {
43581 	USE_OPLINE
43582 	zval *property, *container, *value_ptr;
43583 
43584 	SAVE_OPLINE();
43585 
43586 	container = EX_VAR(opline->op1.var);
43587 	property = RT_CONSTANT(opline, opline->op2);
43588 
43589 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
43590 
43591 	if (1) {
43592 		if (IS_CV == IS_UNUSED) {
43593 			if (IS_CONST == IS_CONST) {
43594 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43595 			} else {
43596 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43597 			}
43598 		} else {
43599 			if (IS_CONST == IS_CONST) {
43600 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43601 			} else {
43602 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43603 			}
43604 		}
43605 	} else {
43606 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43607 	}
43608 
43609 
43610 
43611 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43612 }
43613 
43614 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43615 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43616 {
43617 	USE_OPLINE
43618 	zval *op1, *op2;
43619 	zend_string *op1_str, *op2_str, *str;
43620 
43621 
43622 	op1 = EX_VAR(opline->op1.var);
43623 	op2 = RT_CONSTANT(opline, opline->op2);
43624 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
43625 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
43626 		zend_string *op1_str = Z_STR_P(op1);
43627 		zend_string *op2_str = Z_STR_P(op2);
43628 		zend_string *str;
43629 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
43630 
43631 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
43632 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
43633 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
43634 			} else {
43635 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
43636 			}
43637 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43638 				zend_string_release_ex(op1_str, 0);
43639 			}
43640 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
43641 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
43642 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
43643 			} else {
43644 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
43645 			}
43646 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
43647 				zend_string_release_ex(op2_str, 0);
43648 			}
43649 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
43650 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
43651 			size_t len = ZSTR_LEN(op1_str);
43652 
43653 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
43654 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43655 			GC_ADD_FLAGS(str, flags);
43656 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43657 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
43658 				zend_string_release_ex(op2_str, 0);
43659 			}
43660 		} else {
43661 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
43662 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
43663 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43664 			GC_ADD_FLAGS(str, flags);
43665 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43666 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43667 				zend_string_release_ex(op1_str, 0);
43668 			}
43669 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
43670 				zend_string_release_ex(op2_str, 0);
43671 			}
43672 		}
43673 		ZEND_VM_NEXT_OPCODE();
43674 	}
43675 
43676 	SAVE_OPLINE();
43677 	if (IS_CV == IS_CONST) {
43678 		op1_str = Z_STR_P(op1);
43679 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43680 		op1_str = zend_string_copy(Z_STR_P(op1));
43681 	} else {
43682 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43683 			ZVAL_UNDEFINED_OP1();
43684 		}
43685 		op1_str = zval_get_string_func(op1);
43686 	}
43687 	if (IS_CONST == IS_CONST) {
43688 		op2_str = Z_STR_P(op2);
43689 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43690 		op2_str = zend_string_copy(Z_STR_P(op2));
43691 	} else {
43692 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
43693 			ZVAL_UNDEFINED_OP2();
43694 		}
43695 		op2_str = zval_get_string_func(op2);
43696 	}
43697 	do {
43698 		if (IS_CV != IS_CONST) {
43699 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
43700 				if (IS_CONST == IS_CONST) {
43701 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
43702 						GC_ADDREF(op2_str);
43703 					}
43704 				}
43705 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
43706 				zend_string_release_ex(op1_str, 0);
43707 				break;
43708 			}
43709 		}
43710 		if (IS_CONST != IS_CONST) {
43711 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
43712 				if (IS_CV == IS_CONST) {
43713 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
43714 						GC_ADDREF(op1_str);
43715 					}
43716 				}
43717 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
43718 				zend_string_release_ex(op2_str, 0);
43719 				break;
43720 			}
43721 		}
43722 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
43723 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
43724 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43725 
43726 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
43727 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43728 		if (IS_CV != IS_CONST) {
43729 			zend_string_release_ex(op1_str, 0);
43730 		}
43731 		if (IS_CONST != IS_CONST) {
43732 			zend_string_release_ex(op2_str, 0);
43733 		}
43734 	} while (0);
43735 
43736 
43737 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43738 }
43739 
ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43740 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43741 {
43742 	USE_OPLINE
43743 	zval *function_name;
43744 	zval *object;
43745 	zend_function *fbc;
43746 	zend_class_entry *called_scope;
43747 	zend_object *obj;
43748 	zend_execute_data *call;
43749 	uint32_t call_info;
43750 
43751 	SAVE_OPLINE();
43752 
43753 	object = EX_VAR(opline->op1.var);
43754 
43755 	if (IS_CONST != IS_CONST) {
43756 		function_name = RT_CONSTANT(opline, opline->op2);
43757 	}
43758 
43759 	if (IS_CONST != IS_CONST &&
43760 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
43761 		do {
43762 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
43763 				function_name = Z_REFVAL_P(function_name);
43764 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
43765 					break;
43766 				}
43767 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
43768 				ZVAL_UNDEFINED_OP2();
43769 				if (UNEXPECTED(EG(exception) != NULL)) {
43770 
43771 					HANDLE_EXCEPTION();
43772 				}
43773 			}
43774 			zend_throw_error(NULL, "Method name must be a string");
43775 
43776 
43777 			HANDLE_EXCEPTION();
43778 		} while (0);
43779 	}
43780 
43781 	if (IS_CV == IS_UNUSED) {
43782 		obj = Z_OBJ_P(object);
43783 	} else {
43784 		do {
43785 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
43786 				obj = Z_OBJ_P(object);
43787 			} else {
43788 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
43789 					zend_reference *ref = Z_REF_P(object);
43790 
43791 					object = &ref->val;
43792 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
43793 						obj = Z_OBJ_P(object);
43794 						if (IS_CV & IS_VAR) {
43795 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
43796 								efree_size(ref, sizeof(zend_reference));
43797 							} else {
43798 								Z_ADDREF_P(object);
43799 							}
43800 						}
43801 						break;
43802 					}
43803 				}
43804 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43805 					object = ZVAL_UNDEFINED_OP1();
43806 					if (UNEXPECTED(EG(exception) != NULL)) {
43807 						if (IS_CONST != IS_CONST) {
43808 
43809 						}
43810 						HANDLE_EXCEPTION();
43811 					}
43812 				}
43813 				if (IS_CONST == IS_CONST) {
43814 					function_name = RT_CONSTANT(opline, opline->op2);
43815 				}
43816 				zend_invalid_method_call(object, function_name);
43817 
43818 
43819 				HANDLE_EXCEPTION();
43820 			}
43821 		} while (0);
43822 	}
43823 
43824 	called_scope = obj->ce;
43825 
43826 	if (IS_CONST == IS_CONST &&
43827 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
43828 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
43829 	} else {
43830 		zend_object *orig_obj = obj;
43831 
43832 		if (IS_CONST == IS_CONST) {
43833 			function_name = RT_CONSTANT(opline, opline->op2);
43834 		}
43835 
43836 		/* First, locate the function. */
43837 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
43838 		if (UNEXPECTED(fbc == NULL)) {
43839 			if (EXPECTED(!EG(exception))) {
43840 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
43841 			}
43842 
43843 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
43844 				zend_objects_store_del(orig_obj);
43845 			}
43846 			HANDLE_EXCEPTION();
43847 		}
43848 		if (IS_CONST == IS_CONST &&
43849 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
43850 		    EXPECTED(obj == orig_obj)) {
43851 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
43852 		}
43853 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
43854 			GC_ADDREF(obj); /* For $this pointer */
43855 			if (GC_DELREF(orig_obj) == 0) {
43856 				zend_objects_store_del(orig_obj);
43857 			}
43858 		}
43859 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
43860 			init_func_run_time_cache(&fbc->op_array);
43861 		}
43862 	}
43863 
43864 	if (IS_CONST != IS_CONST) {
43865 
43866 	}
43867 
43868 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
43869 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
43870 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
43871 			zend_objects_store_del(obj);
43872 			if (UNEXPECTED(EG(exception))) {
43873 				HANDLE_EXCEPTION();
43874 			}
43875 		}
43876 		/* call static method */
43877 		obj = (zend_object*)called_scope;
43878 		call_info = ZEND_CALL_NESTED_FUNCTION;
43879 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
43880 		if (IS_CV == IS_CV) {
43881 			GC_ADDREF(obj); /* For $this pointer */
43882 		}
43883 		/* CV may be changed indirectly (e.g. when it's a reference) */
43884 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
43885 	}
43886 
43887 	call = zend_vm_stack_push_call_frame(call_info,
43888 		fbc, opline->extended_value, obj);
43889 	call->prev_execute_data = EX(call);
43890 	EX(call) = call;
43891 
43892 	ZEND_VM_NEXT_OPCODE();
43893 }
43894 
ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43895 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43896 {
43897 	USE_OPLINE
43898 	zval *varptr, *arg;
43899 
43900 	if (IS_CONST == IS_CONST) {
43901 		SAVE_OPLINE();
43902 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
43903 		uint32_t arg_num;
43904 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
43905 		if (UNEXPECTED(!arg)) {
43906 
43907 			HANDLE_EXCEPTION();
43908 		}
43909 	} else {
43910 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
43911 	}
43912 
43913 	varptr = EX_VAR(opline->op1.var);
43914 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
43915 		SAVE_OPLINE();
43916 		ZVAL_UNDEFINED_OP1();
43917 		ZVAL_NULL(arg);
43918 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43919 	}
43920 
43921 	if (IS_CV == IS_CV) {
43922 		ZVAL_COPY_DEREF(arg, varptr);
43923 	} else /* if (IS_CV == IS_VAR) */ {
43924 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
43925 			zend_refcounted *ref = Z_COUNTED_P(varptr);
43926 
43927 			varptr = Z_REFVAL_P(varptr);
43928 			ZVAL_COPY_VALUE(arg, varptr);
43929 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
43930 				efree_size(ref, sizeof(zend_reference));
43931 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
43932 				Z_ADDREF_P(arg);
43933 			}
43934 		} else {
43935 			ZVAL_COPY_VALUE(arg, varptr);
43936 		}
43937 	}
43938 
43939 	ZEND_VM_NEXT_OPCODE();
43940 }
43941 
ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43942 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43943 {
43944 	USE_OPLINE
43945 	zval *varptr, *arg;
43946 
43947 	SAVE_OPLINE();
43948 	if (IS_CONST == IS_CONST) {
43949 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
43950 		uint32_t arg_num;
43951 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
43952 		if (UNEXPECTED(!arg)) {
43953 
43954 			HANDLE_EXCEPTION();
43955 		}
43956 	} else {
43957 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
43958 	}
43959 
43960 	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
43961 	if (Z_ISREF_P(varptr)) {
43962 		Z_ADDREF_P(varptr);
43963 	} else {
43964 		ZVAL_MAKE_REF_EX(varptr, 2);
43965 	}
43966 	ZVAL_REF(arg, Z_REF_P(varptr));
43967 
43968 	ZEND_VM_NEXT_OPCODE();
43969 }
43970 
ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43971 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43972 {
43973 	USE_OPLINE
43974 	zval *varptr, *arg;
43975 	uint32_t arg_num;
43976 
43977 	if (IS_CONST == IS_CONST) {
43978 		SAVE_OPLINE();
43979 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
43980 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
43981 		if (UNEXPECTED(!arg)) {
43982 
43983 			HANDLE_EXCEPTION();
43984 		}
43985 	} else {
43986 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
43987 		arg_num = opline->op2.num;
43988 	}
43989 
43990 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
43991 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
43992 			goto send_var_by_ref;
43993 		}
43994 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
43995 send_var_by_ref:
43996 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
43997 		if (Z_ISREF_P(varptr)) {
43998 			Z_ADDREF_P(varptr);
43999 		} else {
44000 			ZVAL_MAKE_REF_EX(varptr, 2);
44001 		}
44002 		ZVAL_REF(arg, Z_REF_P(varptr));
44003 
44004 		ZEND_VM_NEXT_OPCODE();
44005 	}
44006 
44007 	varptr = EX_VAR(opline->op1.var);
44008 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
44009 		SAVE_OPLINE();
44010 		ZVAL_UNDEFINED_OP1();
44011 		ZVAL_NULL(arg);
44012 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44013 	}
44014 
44015 	if (IS_CV == IS_CV) {
44016 		ZVAL_COPY_DEREF(arg, varptr);
44017 	} else /* if (IS_CV == IS_VAR) */ {
44018 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
44019 			zend_refcounted *ref = Z_COUNTED_P(varptr);
44020 
44021 			varptr = Z_REFVAL_P(varptr);
44022 			ZVAL_COPY_VALUE(arg, varptr);
44023 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
44024 				efree_size(ref, sizeof(zend_reference));
44025 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
44026 				Z_ADDREF_P(arg);
44027 			}
44028 		} else {
44029 			ZVAL_COPY_VALUE(arg, varptr);
44030 		}
44031 	}
44032 
44033 	ZEND_VM_NEXT_OPCODE();
44034 }
44035 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44036 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44037 {
44038 	USE_OPLINE
44039 	zval *expr_ptr, new_expr;
44040 
44041 	SAVE_OPLINE();
44042 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
44043 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
44044 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
44045 		if (Z_ISREF_P(expr_ptr)) {
44046 			Z_ADDREF_P(expr_ptr);
44047 		} else {
44048 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
44049 		}
44050 
44051 	} else {
44052 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44053 		if (IS_CV == IS_TMP_VAR) {
44054 			/* pass */
44055 		} else if (IS_CV == IS_CONST) {
44056 			Z_TRY_ADDREF_P(expr_ptr);
44057 		} else if (IS_CV == IS_CV) {
44058 			ZVAL_DEREF(expr_ptr);
44059 			Z_TRY_ADDREF_P(expr_ptr);
44060 		} else /* if (IS_CV == IS_VAR) */ {
44061 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
44062 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
44063 
44064 				expr_ptr = Z_REFVAL_P(expr_ptr);
44065 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
44066 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
44067 					expr_ptr = &new_expr;
44068 					efree_size(ref, sizeof(zend_reference));
44069 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
44070 					Z_ADDREF_P(expr_ptr);
44071 				}
44072 			}
44073 		}
44074 	}
44075 
44076 	if (IS_CONST != IS_UNUSED) {
44077 		zval *offset = RT_CONSTANT(opline, opline->op2);
44078 		zend_string *str;
44079 		zend_ulong hval;
44080 
44081 add_again:
44082 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
44083 			str = Z_STR_P(offset);
44084 			if (IS_CONST != IS_CONST) {
44085 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
44086 					goto num_index;
44087 				}
44088 			}
44089 str_index:
44090 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
44091 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
44092 			hval = Z_LVAL_P(offset);
44093 num_index:
44094 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
44095 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
44096 			offset = Z_REFVAL_P(offset);
44097 			goto add_again;
44098 		} else if (Z_TYPE_P(offset) == IS_NULL) {
44099 			str = ZSTR_EMPTY_ALLOC();
44100 			goto str_index;
44101 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
44102 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
44103 			goto num_index;
44104 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
44105 			hval = 0;
44106 			goto num_index;
44107 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
44108 			hval = 1;
44109 			goto num_index;
44110 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
44111 			zend_use_resource_as_offset(offset);
44112 			hval = Z_RES_HANDLE_P(offset);
44113 			goto num_index;
44114 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
44115 			ZVAL_UNDEFINED_OP2();
44116 			str = ZSTR_EMPTY_ALLOC();
44117 			goto str_index;
44118 		} else {
44119 			zend_illegal_array_offset_access(offset);
44120 			zval_ptr_dtor_nogc(expr_ptr);
44121 		}
44122 
44123 	} else {
44124 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
44125 			zend_cannot_add_element();
44126 			zval_ptr_dtor_nogc(expr_ptr);
44127 		}
44128 	}
44129 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44130 }
44131 
ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44132 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44133 {
44134 	zval *array;
44135 	uint32_t size;
44136 	USE_OPLINE
44137 
44138 	array = EX_VAR(opline->result.var);
44139 	if (IS_CV != IS_UNUSED) {
44140 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
44141 		ZVAL_ARR(array, zend_new_array(size));
44142 		/* Explicitly initialize array as not-packed if flag is set */
44143 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
44144 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
44145 		}
44146 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44147 	} else {
44148 		ZVAL_ARR(array, zend_new_array(0));
44149 		ZEND_VM_NEXT_OPCODE();
44150 	}
44151 }
44152 
ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44153 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44154 {
44155 	USE_OPLINE
44156 	zval *container;
44157 	zval *offset;
44158 	zend_ulong hval;
44159 	zend_string *key;
44160 
44161 	SAVE_OPLINE();
44162 	container = EX_VAR(opline->op1.var);
44163 	offset = RT_CONSTANT(opline, opline->op2);
44164 
44165 	do {
44166 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44167 			HashTable *ht;
44168 
44169 unset_dim_array:
44170 			SEPARATE_ARRAY(container);
44171 			ht = Z_ARRVAL_P(container);
44172 offset_again:
44173 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
44174 				key = Z_STR_P(offset);
44175 				if (IS_CONST != IS_CONST) {
44176 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
44177 						goto num_index_dim;
44178 					}
44179 				}
44180 str_index_dim:
44181 				ZEND_ASSERT(ht != &EG(symbol_table));
44182 				zend_hash_del(ht, key);
44183 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
44184 				hval = Z_LVAL_P(offset);
44185 num_index_dim:
44186 				zend_hash_index_del(ht, hval);
44187 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
44188 				offset = Z_REFVAL_P(offset);
44189 				goto offset_again;
44190 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
44191 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
44192 				goto num_index_dim;
44193 			} else if (Z_TYPE_P(offset) == IS_NULL) {
44194 				key = ZSTR_EMPTY_ALLOC();
44195 				goto str_index_dim;
44196 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
44197 				hval = 0;
44198 				goto num_index_dim;
44199 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
44200 				hval = 1;
44201 				goto num_index_dim;
44202 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
44203 				zend_use_resource_as_offset(offset);
44204 				hval = Z_RES_HANDLE_P(offset);
44205 				goto num_index_dim;
44206 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
44207 				ZVAL_UNDEFINED_OP2();
44208 				key = ZSTR_EMPTY_ALLOC();
44209 				goto str_index_dim;
44210 			} else {
44211 				zend_illegal_array_offset_unset(offset);
44212 			}
44213 			break;
44214 		} else if (Z_ISREF_P(container)) {
44215 			container = Z_REFVAL_P(container);
44216 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44217 				goto unset_dim_array;
44218 			}
44219 		}
44220 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
44221 			container = ZVAL_UNDEFINED_OP1();
44222 		}
44223 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
44224 			offset = ZVAL_UNDEFINED_OP2();
44225 		}
44226 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
44227 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
44228 				offset++;
44229 			}
44230 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
44231 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
44232 			zend_throw_error(NULL, "Cannot unset string offsets");
44233 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
44234 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
44235 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
44236 			zend_false_to_array_deprecated();
44237 		}
44238 	} while (0);
44239 
44240 
44241 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44242 }
44243 
ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44244 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44245 {
44246 	USE_OPLINE
44247 	zval *container;
44248 	zval *offset;
44249 	zend_string *name, *tmp_name;
44250 
44251 	SAVE_OPLINE();
44252 	container = EX_VAR(opline->op1.var);
44253 	offset = RT_CONSTANT(opline, opline->op2);
44254 
44255 	do {
44256 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
44257 			if (Z_ISREF_P(container)) {
44258 				container = Z_REFVAL_P(container);
44259 				if (Z_TYPE_P(container) != IS_OBJECT) {
44260 					if (IS_CV == IS_CV
44261 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
44262 						ZVAL_UNDEFINED_OP1();
44263 					}
44264 					break;
44265 				}
44266 			} else {
44267 				break;
44268 			}
44269 		}
44270 		if (IS_CONST == IS_CONST) {
44271 			name = Z_STR_P(offset);
44272 		} else {
44273 			name = zval_try_get_tmp_string(offset, &tmp_name);
44274 			if (UNEXPECTED(!name)) {
44275 				break;
44276 			}
44277 		}
44278 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
44279 		if (IS_CONST != IS_CONST) {
44280 			zend_tmp_string_release(tmp_name);
44281 		}
44282 	} while (0);
44283 
44284 
44285 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44286 }
44287 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44288 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44289 {
44290 	USE_OPLINE
44291 	zval *container;
44292 	bool result;
44293 	zend_ulong hval;
44294 	zval *offset;
44295 
44296 	SAVE_OPLINE();
44297 	container = EX_VAR(opline->op1.var);
44298 	offset = RT_CONSTANT(opline, opline->op2);
44299 
44300 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44301 		HashTable *ht;
44302 		zval *value;
44303 		zend_string *str;
44304 
44305 isset_dim_obj_array:
44306 		ht = Z_ARRVAL_P(container);
44307 isset_again:
44308 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
44309 			str = Z_STR_P(offset);
44310 			if (IS_CONST != IS_CONST) {
44311 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
44312 					goto num_index_prop;
44313 				}
44314 			}
44315 			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
44316 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
44317 			hval = Z_LVAL_P(offset);
44318 num_index_prop:
44319 			value = zend_hash_index_find(ht, hval);
44320 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
44321 			offset = Z_REFVAL_P(offset);
44322 			goto isset_again;
44323 		} else {
44324 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
44325 			if (UNEXPECTED(EG(exception))) {
44326 				result = 0;
44327 				goto isset_dim_obj_exit;
44328 			}
44329 		}
44330 
44331 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
44332 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
44333 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
44334 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
44335 
44336 			if (IS_CV & (IS_CONST|IS_CV)) {
44337 				/* avoid exception check */
44338 
44339 				ZEND_VM_SMART_BRANCH(result, 0);
44340 			}
44341 		} else {
44342 			result = (value == NULL || !i_zend_is_true(value));
44343 		}
44344 		goto isset_dim_obj_exit;
44345 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
44346 		container = Z_REFVAL_P(container);
44347 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44348 			goto isset_dim_obj_array;
44349 		}
44350 	}
44351 
44352 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
44353 		offset++;
44354 	}
44355 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
44356 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
44357 	} else {
44358 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
44359 	}
44360 
44361 isset_dim_obj_exit:
44362 
44363 
44364 	ZEND_VM_SMART_BRANCH(result, 1);
44365 }
44366 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44367 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44368 {
44369 	USE_OPLINE
44370 	zval *container;
44371 	int result;
44372 	zval *offset;
44373 	zend_string *name, *tmp_name;
44374 
44375 	SAVE_OPLINE();
44376 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
44377 	offset = RT_CONSTANT(opline, opline->op2);
44378 
44379 	if (IS_CV == IS_CONST ||
44380 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
44381 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
44382 			container = Z_REFVAL_P(container);
44383 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
44384 				result = (opline->extended_value & ZEND_ISEMPTY);
44385 				goto isset_object_finish;
44386 			}
44387 		} else {
44388 			result = (opline->extended_value & ZEND_ISEMPTY);
44389 			goto isset_object_finish;
44390 		}
44391 	}
44392 
44393 	if (IS_CONST == IS_CONST) {
44394 		name = Z_STR_P(offset);
44395 	} else {
44396 		name = zval_try_get_tmp_string(offset, &tmp_name);
44397 		if (UNEXPECTED(!name)) {
44398 			result = 0;
44399 			goto isset_object_finish;
44400 		}
44401 	}
44402 
44403 	result =
44404 		(opline->extended_value & ZEND_ISEMPTY) ^
44405 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
44406 
44407 	if (IS_CONST != IS_CONST) {
44408 		zend_tmp_string_release(tmp_name);
44409 	}
44410 
44411 isset_object_finish:
44412 
44413 
44414 	ZEND_VM_SMART_BRANCH(result, 1);
44415 }
44416 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44417 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44418 {
44419 	USE_OPLINE
44420 
44421 	zval *key, *subject;
44422 	HashTable *ht;
44423 	bool result;
44424 
44425 	SAVE_OPLINE();
44426 
44427 	key = EX_VAR(opline->op1.var);
44428 	subject = RT_CONSTANT(opline, opline->op2);
44429 
44430 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
44431 array_key_exists_array:
44432 		ht = Z_ARRVAL_P(subject);
44433 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
44434 	} else {
44435 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
44436 			subject = Z_REFVAL_P(subject);
44437 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
44438 				goto array_key_exists_array;
44439 			}
44440 		}
44441 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
44442 		result = 0;
44443 	}
44444 
44445 
44446 	ZEND_VM_SMART_BRANCH(result, 1);
44447 }
44448 
44449 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44450 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44451 {
44452 	USE_OPLINE
44453 	zval *expr;
44454 	bool result;
44455 
44456 	SAVE_OPLINE();
44457 	expr = EX_VAR(opline->op1.var);
44458 
44459 try_instanceof:
44460 	if (Z_TYPE_P(expr) == IS_OBJECT) {
44461 		zend_class_entry *ce;
44462 
44463 		if (IS_CONST == IS_CONST) {
44464 			ce = CACHED_PTR(opline->extended_value);
44465 			if (UNEXPECTED(ce == NULL)) {
44466 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
44467 				if (EXPECTED(ce)) {
44468 					CACHE_PTR(opline->extended_value, ce);
44469 				}
44470 			}
44471 		} else if (IS_CONST == IS_UNUSED) {
44472 			ce = zend_fetch_class(NULL, opline->op2.num);
44473 			if (UNEXPECTED(ce == NULL)) {
44474 
44475 				ZVAL_UNDEF(EX_VAR(opline->result.var));
44476 				HANDLE_EXCEPTION();
44477 			}
44478 		} else {
44479 			ce = Z_CE_P(EX_VAR(opline->op2.var));
44480 		}
44481 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
44482 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
44483 		expr = Z_REFVAL_P(expr);
44484 		goto try_instanceof;
44485 	} else {
44486 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
44487 			ZVAL_UNDEFINED_OP1();
44488 		}
44489 		result = 0;
44490 	}
44491 
44492 	ZEND_VM_SMART_BRANCH(result, 1);
44493 }
44494 
ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44495 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44496 {
44497 	USE_OPLINE
44498 
44499 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
44500 
44501 	SAVE_OPLINE();
44502 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
44503 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44504 	}
44505 
44506 	/* Destroy the previously yielded value */
44507 	zval_ptr_dtor(&generator->value);
44508 
44509 	/* Destroy the previously yielded key */
44510 	zval_ptr_dtor(&generator->key);
44511 
44512 	/* Set the new yielded value */
44513 	if (IS_CV != IS_UNUSED) {
44514 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
44515 			/* Constants and temporary variables aren't yieldable by reference,
44516 			 * but we still allow them with a notice. */
44517 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
44518 				zval *value;
44519 
44520 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
44521 
44522 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44523 				ZVAL_COPY_VALUE(&generator->value, value);
44524 				if (IS_CV == IS_CONST) {
44525 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
44526 						Z_ADDREF(generator->value);
44527 					}
44528 				}
44529 			} else {
44530 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
44531 
44532 				/* If a function call result is yielded and the function did
44533 				 * not return by reference we throw a notice. */
44534 				do {
44535 					if (IS_CV == IS_VAR) {
44536 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
44537 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
44538 						 && !Z_ISREF_P(value_ptr)) {
44539 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
44540 							ZVAL_COPY(&generator->value, value_ptr);
44541 							break;
44542 						}
44543 					}
44544 					if (Z_ISREF_P(value_ptr)) {
44545 						Z_ADDREF_P(value_ptr);
44546 					} else {
44547 						ZVAL_MAKE_REF_EX(value_ptr, 2);
44548 					}
44549 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
44550 				} while (0);
44551 
44552 			}
44553 		} else {
44554 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44555 
44556 			/* Consts, temporary variables and references need copying */
44557 			if (IS_CV == IS_CONST) {
44558 				ZVAL_COPY_VALUE(&generator->value, value);
44559 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
44560 					Z_ADDREF(generator->value);
44561 				}
44562 			} else if (IS_CV == IS_TMP_VAR) {
44563 				ZVAL_COPY_VALUE(&generator->value, value);
44564 			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
44565 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
44566 
44567 			} else {
44568 				ZVAL_COPY_VALUE(&generator->value, value);
44569 				if (IS_CV == IS_CV) {
44570 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
44571 				}
44572 			}
44573 		}
44574 	} else {
44575 		/* If no value was specified yield null */
44576 		ZVAL_NULL(&generator->value);
44577 	}
44578 
44579 	/* Set the new yielded key */
44580 	if (IS_CONST != IS_UNUSED) {
44581 		zval *key = RT_CONSTANT(opline, opline->op2);
44582 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
44583 			key = Z_REFVAL_P(key);
44584 		}
44585 		ZVAL_COPY(&generator->key, key);
44586 
44587 		if (Z_TYPE(generator->key) == IS_LONG
44588 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
44589 		) {
44590 			generator->largest_used_integer_key = Z_LVAL(generator->key);
44591 		}
44592 	} else {
44593 		/* If no key was specified we use auto-increment keys */
44594 		generator->largest_used_integer_key++;
44595 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
44596 	}
44597 
44598 	if (RETURN_VALUE_USED(opline)) {
44599 		/* If the return value of yield is used set the send
44600 		 * target and initialize it to NULL */
44601 		generator->send_target = EX_VAR(opline->result.var);
44602 		ZVAL_NULL(generator->send_target);
44603 	} else {
44604 		generator->send_target = NULL;
44605 	}
44606 
44607 	/* We increment to the next op, so we are at the correct position when the
44608 	 * generator is resumed. */
44609 	ZEND_VM_INC_OPCODE();
44610 
44611 	/* The GOTO VM uses a local opline variable. We need to set the opline
44612 	 * variable in execute_data so we don't resume at an old position. */
44613 	SAVE_OPLINE();
44614 
44615 	ZEND_VM_RETURN();
44616 }
44617 
ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44618 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44619 {
44620 	USE_OPLINE
44621 	zend_string *varname;
44622 	zval *value;
44623 	zval *variable_ptr;
44624 	uintptr_t idx;
44625 	zend_reference *ref;
44626 
44627 	ZEND_VM_REPEATABLE_OPCODE
44628 
44629 	varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));
44630 
44631 	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
44632 	idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
44633 	if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
44634 		Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
44635 
44636 		if (EXPECTED(p->key == varname) ||
44637 		    (EXPECTED(p->h == ZSTR_H(varname)) &&
44638 		     EXPECTED(p->key != NULL) &&
44639 		     EXPECTED(zend_string_equal_content(p->key, varname)))) {
44640 
44641 			value = (zval*)p; /* value = &p->val; */
44642 			goto check_indirect;
44643 		}
44644 	}
44645 
44646 	value = zend_hash_find_known_hash(&EG(symbol_table), varname);
44647 	if (UNEXPECTED(value == NULL)) {
44648 		value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
44649 		idx = (char*)value - (char*)EG(symbol_table).arData;
44650 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
44651 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
44652 	} else {
44653 		idx = (char*)value - (char*)EG(symbol_table).arData;
44654 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
44655 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
44656 check_indirect:
44657 		/* GLOBAL variable may be an INDIRECT pointer to CV */
44658 		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
44659 			value = Z_INDIRECT_P(value);
44660 			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
44661 				ZVAL_NULL(value);
44662 			}
44663 		}
44664 	}
44665 
44666 	if (UNEXPECTED(!Z_ISREF_P(value))) {
44667 		ZVAL_MAKE_REF_EX(value, 2);
44668 		ref = Z_REF_P(value);
44669 	} else {
44670 		ref = Z_REF_P(value);
44671 		GC_ADDREF(ref);
44672 	}
44673 
44674 	variable_ptr = EX_VAR(opline->op1.var);
44675 
44676 	if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
44677 		zend_refcounted *garbage = Z_COUNTED_P(variable_ptr);
44678 
44679 		ZVAL_REF(variable_ptr, ref);
44680 		SAVE_OPLINE();
44681 		if (GC_DELREF(garbage) == 0) {
44682 			rc_dtor_func(garbage);
44683 			if (UNEXPECTED(EG(exception))) {
44684 				ZVAL_NULL(variable_ptr);
44685 				HANDLE_EXCEPTION();
44686 			}
44687 		} else {
44688 			gc_check_possible_root(garbage);
44689 		}
44690 	} else {
44691 		ZVAL_REF(variable_ptr, ref);
44692 	}
44693 
44694 	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
44695 	ZEND_VM_NEXT_OPCODE();
44696 }
44697 
ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44698 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44699 {
44700 	USE_OPLINE
44701 	zval *op1;
44702 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
44703 	zval *result;
44704 
44705 	op1 = EX_VAR(opline->op1.var);
44706 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44707 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CV == IS_CONST);
44708 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44709 			zval_ptr_dtor_str(op1);
44710 		}
44711 		ZEND_VM_SMART_BRANCH(result, 0);
44712 	}
44713 
44714 	if (opline->extended_value) {
44715 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44716 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
44717 			ZEND_VM_SMART_BRANCH(result, 0);
44718 		}
44719 		SAVE_OPLINE();
44720 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
44721 			op1 = Z_REFVAL_P(op1);
44722 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44723 				result = zend_hash_find(ht, Z_STR_P(op1));
44724 
44725 				ZEND_VM_SMART_BRANCH(result, 0);
44726 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44727 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
44728 
44729 				ZEND_VM_SMART_BRANCH(result, 0);
44730 			}
44731 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44732 			ZVAL_UNDEFINED_OP1();
44733 		}
44734 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
44735 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44736 			SAVE_OPLINE();
44737 			ZVAL_UNDEFINED_OP1();
44738 			if (UNEXPECTED(EG(exception) != NULL)) {
44739 				HANDLE_EXCEPTION();
44740 			}
44741 		}
44742 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
44743 		ZEND_VM_SMART_BRANCH(result, 0);
44744 	} else {
44745 		zend_string *key;
44746 		zval key_tmp;
44747 
44748 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
44749 			op1 = Z_REFVAL_P(op1);
44750 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44751 				result = zend_hash_find(ht, Z_STR_P(op1));
44752 
44753 				ZEND_VM_SMART_BRANCH(result, 0);
44754 			}
44755 		}
44756 
44757 		SAVE_OPLINE();
44758 		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
44759 			ZVAL_STR(&key_tmp, key);
44760 			if (zend_compare(op1, &key_tmp) == 0) {
44761 
44762 				ZEND_VM_SMART_BRANCH(1, 1);
44763 			}
44764 		} ZEND_HASH_FOREACH_END();
44765 	}
44766 
44767 	ZEND_VM_SMART_BRANCH(0, 1);
44768 }
44769 
ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44771 {
44772 	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
44773 	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
44774 	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
44775 	USE_OPLINE
44776 	zval *op1, *op2;
44777 	bool result;
44778 
44779 	op1 = EX_VAR(opline->op1.var);
44780 	op2 = RT_CONSTANT(opline, opline->op2);
44781 	result = fast_is_identical_function(op1, op2);
44782 	/* Free is a no-op for const/cv */
44783 	ZEND_VM_SMART_BRANCH(result, 0);
44784 }
44785 
ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44786 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44787 {
44788 	USE_OPLINE
44789 	zval *op1, *op2;
44790 	bool result;
44791 
44792 	op1 = EX_VAR(opline->op1.var);
44793 	op2 = RT_CONSTANT(opline, opline->op2);
44794 	result = fast_is_identical_function(op1, op2);
44795 	/* Free is a no-op for const/cv */
44796 	ZEND_VM_SMART_BRANCH(!result, 0);
44797 }
44798 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44799 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44800 {
44801 	USE_OPLINE
44802 	zval *container, *dim, *value;
44803 	zend_long offset;
44804 	HashTable *ht;
44805 
44806 	container = EX_VAR(opline->op1.var);
44807 	dim = RT_CONSTANT(opline, opline->op2);
44808 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44809 fetch_dim_r_index_array:
44810 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
44811 			offset = Z_LVAL_P(dim);
44812 		} else {
44813 			SAVE_OPLINE();
44814 			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
44815 
44816 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44817 		}
44818 		ht = Z_ARRVAL_P(container);
44819 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
44820 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44821 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44822 			SAVE_OPLINE();
44823 
44824 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44825 		} else {
44826 			ZEND_VM_NEXT_OPCODE();
44827 		}
44828 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
44829 		container = Z_REFVAL_P(container);
44830 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44831 			goto fetch_dim_r_index_array;
44832 		} else {
44833 			goto fetch_dim_r_index_slow;
44834 		}
44835 	} else {
44836 fetch_dim_r_index_slow:
44837 		SAVE_OPLINE();
44838 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
44839 			dim++;
44840 		}
44841 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
44842 
44843 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44844 	}
44845 
44846 fetch_dim_r_index_undef:
44847 	ZVAL_NULL(EX_VAR(opline->result.var));
44848 	SAVE_OPLINE();
44849 	zend_undefined_offset(offset);
44850 
44851 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44852 }
44853 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44854 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44855 {
44856 	USE_OPLINE
44857 	zval *container, *dim, *value;
44858 	zend_long offset;
44859 	HashTable *ht;
44860 
44861 	container = EX_VAR(opline->op1.var);
44862 	dim = EX_VAR(opline->op2.var);
44863 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44864 fetch_dim_r_index_array:
44865 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
44866 			offset = Z_LVAL_P(dim);
44867 		} else {
44868 			SAVE_OPLINE();
44869 			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
44870 
44871 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44872 		}
44873 		ht = Z_ARRVAL_P(container);
44874 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
44875 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44876 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44877 			SAVE_OPLINE();
44878 
44879 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44880 		} else {
44881 			ZEND_VM_NEXT_OPCODE();
44882 		}
44883 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
44884 		container = Z_REFVAL_P(container);
44885 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44886 			goto fetch_dim_r_index_array;
44887 		} else {
44888 			goto fetch_dim_r_index_slow;
44889 		}
44890 	} else {
44891 fetch_dim_r_index_slow:
44892 		SAVE_OPLINE();
44893 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
44894 			dim++;
44895 		}
44896 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
44897 
44898 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44899 	}
44900 
44901 fetch_dim_r_index_undef:
44902 	ZVAL_NULL(EX_VAR(opline->result.var));
44903 	SAVE_OPLINE();
44904 	zend_undefined_offset(offset);
44905 
44906 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44907 }
44908 
ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44909 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44910 {
44911 	USE_OPLINE
44912 	zval *op1, *op2;
44913 
44914 	SAVE_OPLINE();
44915 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44916 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44917 	div_function(EX_VAR(opline->result.var), op1, op2);
44918 
44919 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44920 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44921 }
44922 
ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44923 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44924 {
44925 	USE_OPLINE
44926 	zval *op1, *op2;
44927 
44928 	SAVE_OPLINE();
44929 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44930 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44931 	pow_function(EX_VAR(opline->result.var), op1, op2);
44932 
44933 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44934 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44935 }
44936 
ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44937 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44938 {
44939 	USE_OPLINE
44940 	zval *op1, *op2;
44941 
44942 	op1 = EX_VAR(opline->op1.var);
44943 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44944 
44945 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
44946 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
44947 		zend_string *op1_str = Z_STR_P(op1);
44948 		zend_string *op2_str = Z_STR_P(op2);
44949 		zend_string *str;
44950 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
44951 
44952 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
44953 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
44954 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
44955 			} else {
44956 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
44957 			}
44958 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44959 				zend_string_release_ex(op1_str, 0);
44960 			}
44961 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
44962 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
44963 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
44964 			} else {
44965 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
44966 			}
44967 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44968 				zend_string_release_ex(op2_str, 0);
44969 			}
44970 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
44971 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
44972 			size_t len = ZSTR_LEN(op1_str);
44973 
44974 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
44975 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
44976 			}
44977 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
44978 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
44979 			GC_ADD_FLAGS(str, flags);
44980 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
44981 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44982 				zend_string_release_ex(op2_str, 0);
44983 			}
44984 		} else {
44985 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
44986 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
44987 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
44988 			GC_ADD_FLAGS(str, flags);
44989 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
44990 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44991 				zend_string_release_ex(op1_str, 0);
44992 			}
44993 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44994 				zend_string_release_ex(op2_str, 0);
44995 			}
44996 		}
44997 		ZEND_VM_NEXT_OPCODE();
44998 	} else {
44999 		SAVE_OPLINE();
45000 
45001 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45002 			op1 = ZVAL_UNDEFINED_OP1();
45003 		}
45004 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
45005 			op2 = ZVAL_UNDEFINED_OP2();
45006 		}
45007 		concat_function(EX_VAR(opline->result.var), op1, op2);
45008 
45009 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45010 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45011 	}
45012 }
45013 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45014 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45015 {
45016 	USE_OPLINE
45017 	zval *op1, *op2;
45018 	double d1, d2;
45019 
45020 	op1 = EX_VAR(opline->op1.var);
45021 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45022 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
45023 		/* pass */
45024 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45025 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45026 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
45027 is_equal_true:
45028 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
45029 			} else {
45030 is_equal_false:
45031 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
45032 			}
45033 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45034 			d1 = (double)Z_LVAL_P(op1);
45035 			d2 = Z_DVAL_P(op2);
45036 			goto is_equal_double;
45037 		}
45038 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45039 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45040 			d1 = Z_DVAL_P(op1);
45041 			d2 = Z_DVAL_P(op2);
45042 is_equal_double:
45043 			if (d1 == d2) {
45044 				goto is_equal_true;
45045 			} else {
45046 				goto is_equal_false;
45047 			}
45048 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45049 			d1 = Z_DVAL_P(op1);
45050 			d2 = (double)Z_LVAL_P(op2);
45051 			goto is_equal_double;
45052 		}
45053 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45054 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45055 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
45056 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45057 				zval_ptr_dtor_str(op1);
45058 			}
45059 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45060 				zval_ptr_dtor_str(op2);
45061 			}
45062 			if (result) {
45063 				goto is_equal_true;
45064 			} else {
45065 				goto is_equal_false;
45066 			}
45067 		}
45068 	}
45069 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45070 }
45071 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45073 {
45074 	USE_OPLINE
45075 	zval *op1, *op2;
45076 	double d1, d2;
45077 
45078 	op1 = EX_VAR(opline->op1.var);
45079 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45080 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
45081 		/* pass */
45082 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45083 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45084 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
45085 is_equal_true:
45086 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
45087 			} else {
45088 is_equal_false:
45089 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
45090 			}
45091 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45092 			d1 = (double)Z_LVAL_P(op1);
45093 			d2 = Z_DVAL_P(op2);
45094 			goto is_equal_double;
45095 		}
45096 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45097 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45098 			d1 = Z_DVAL_P(op1);
45099 			d2 = Z_DVAL_P(op2);
45100 is_equal_double:
45101 			if (d1 == d2) {
45102 				goto is_equal_true;
45103 			} else {
45104 				goto is_equal_false;
45105 			}
45106 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45107 			d1 = Z_DVAL_P(op1);
45108 			d2 = (double)Z_LVAL_P(op2);
45109 			goto is_equal_double;
45110 		}
45111 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45112 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45113 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
45114 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45115 				zval_ptr_dtor_str(op1);
45116 			}
45117 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45118 				zval_ptr_dtor_str(op2);
45119 			}
45120 			if (result) {
45121 				goto is_equal_true;
45122 			} else {
45123 				goto is_equal_false;
45124 			}
45125 		}
45126 	}
45127 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45128 }
45129 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45130 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45131 {
45132 	USE_OPLINE
45133 	zval *op1, *op2;
45134 	double d1, d2;
45135 
45136 	op1 = EX_VAR(opline->op1.var);
45137 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45138 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
45139 		/* pass */
45140 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45141 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45142 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
45143 is_equal_true:
45144 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
45145 			} else {
45146 is_equal_false:
45147 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
45148 			}
45149 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45150 			d1 = (double)Z_LVAL_P(op1);
45151 			d2 = Z_DVAL_P(op2);
45152 			goto is_equal_double;
45153 		}
45154 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45155 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45156 			d1 = Z_DVAL_P(op1);
45157 			d2 = Z_DVAL_P(op2);
45158 is_equal_double:
45159 			if (d1 == d2) {
45160 				goto is_equal_true;
45161 			} else {
45162 				goto is_equal_false;
45163 			}
45164 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45165 			d1 = Z_DVAL_P(op1);
45166 			d2 = (double)Z_LVAL_P(op2);
45167 			goto is_equal_double;
45168 		}
45169 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45170 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45171 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
45172 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45173 				zval_ptr_dtor_str(op1);
45174 			}
45175 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45176 				zval_ptr_dtor_str(op2);
45177 			}
45178 			if (result) {
45179 				goto is_equal_true;
45180 			} else {
45181 				goto is_equal_false;
45182 			}
45183 		}
45184 	}
45185 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45186 }
45187 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45188 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45189 {
45190 	USE_OPLINE
45191 	zval *op1, *op2;
45192 	double d1, d2;
45193 
45194 	op1 = EX_VAR(opline->op1.var);
45195 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45196 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
45197 		/* pass */
45198 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45199 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45200 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
45201 is_not_equal_true:
45202 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
45203 			} else {
45204 is_not_equal_false:
45205 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
45206 			}
45207 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45208 			d1 = (double)Z_LVAL_P(op1);
45209 			d2 = Z_DVAL_P(op2);
45210 			goto is_not_equal_double;
45211 		}
45212 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45213 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45214 			d1 = Z_DVAL_P(op1);
45215 			d2 = Z_DVAL_P(op2);
45216 is_not_equal_double:
45217 			if (d1 != d2) {
45218 				goto is_not_equal_true;
45219 			} else {
45220 				goto is_not_equal_false;
45221 			}
45222 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45223 			d1 = Z_DVAL_P(op1);
45224 			d2 = (double)Z_LVAL_P(op2);
45225 			goto is_not_equal_double;
45226 		}
45227 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45228 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45229 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
45230 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45231 				zval_ptr_dtor_str(op1);
45232 			}
45233 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45234 				zval_ptr_dtor_str(op2);
45235 			}
45236 			if (!result) {
45237 				goto is_not_equal_true;
45238 			} else {
45239 				goto is_not_equal_false;
45240 			}
45241 		}
45242 	}
45243 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45244 }
45245 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45246 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45247 {
45248 	USE_OPLINE
45249 	zval *op1, *op2;
45250 	double d1, d2;
45251 
45252 	op1 = EX_VAR(opline->op1.var);
45253 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45254 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
45255 		/* pass */
45256 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45257 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45258 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
45259 is_not_equal_true:
45260 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
45261 			} else {
45262 is_not_equal_false:
45263 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
45264 			}
45265 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45266 			d1 = (double)Z_LVAL_P(op1);
45267 			d2 = Z_DVAL_P(op2);
45268 			goto is_not_equal_double;
45269 		}
45270 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45271 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45272 			d1 = Z_DVAL_P(op1);
45273 			d2 = Z_DVAL_P(op2);
45274 is_not_equal_double:
45275 			if (d1 != d2) {
45276 				goto is_not_equal_true;
45277 			} else {
45278 				goto is_not_equal_false;
45279 			}
45280 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45281 			d1 = Z_DVAL_P(op1);
45282 			d2 = (double)Z_LVAL_P(op2);
45283 			goto is_not_equal_double;
45284 		}
45285 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45286 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45287 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
45288 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45289 				zval_ptr_dtor_str(op1);
45290 			}
45291 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45292 				zval_ptr_dtor_str(op2);
45293 			}
45294 			if (!result) {
45295 				goto is_not_equal_true;
45296 			} else {
45297 				goto is_not_equal_false;
45298 			}
45299 		}
45300 	}
45301 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45302 }
45303 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45304 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45305 {
45306 	USE_OPLINE
45307 	zval *op1, *op2;
45308 	double d1, d2;
45309 
45310 	op1 = EX_VAR(opline->op1.var);
45311 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45312 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
45313 		/* pass */
45314 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45315 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45316 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
45317 is_not_equal_true:
45318 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
45319 			} else {
45320 is_not_equal_false:
45321 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
45322 			}
45323 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45324 			d1 = (double)Z_LVAL_P(op1);
45325 			d2 = Z_DVAL_P(op2);
45326 			goto is_not_equal_double;
45327 		}
45328 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45329 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45330 			d1 = Z_DVAL_P(op1);
45331 			d2 = Z_DVAL_P(op2);
45332 is_not_equal_double:
45333 			if (d1 != d2) {
45334 				goto is_not_equal_true;
45335 			} else {
45336 				goto is_not_equal_false;
45337 			}
45338 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45339 			d1 = Z_DVAL_P(op1);
45340 			d2 = (double)Z_LVAL_P(op2);
45341 			goto is_not_equal_double;
45342 		}
45343 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45344 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45345 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
45346 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45347 				zval_ptr_dtor_str(op1);
45348 			}
45349 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45350 				zval_ptr_dtor_str(op2);
45351 			}
45352 			if (!result) {
45353 				goto is_not_equal_true;
45354 			} else {
45355 				goto is_not_equal_false;
45356 			}
45357 		}
45358 	}
45359 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45360 }
45361 
ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45362 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45363 {
45364 	USE_OPLINE
45365 	zval *op1, *op2;
45366 
45367 	SAVE_OPLINE();
45368 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
45369 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45370 	compare_function(EX_VAR(opline->result.var), op1, op2);
45371 
45372 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45373 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45374 }
45375 
ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45376 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45377 {
45378 	USE_OPLINE
45379 	zval *op1, *op2;
45380 
45381 	SAVE_OPLINE();
45382 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
45383 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45384 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
45385 
45386 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45387 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45388 }
45389 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45390 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45391 {
45392 	USE_OPLINE
45393 	zval *object;
45394 	zval *property;
45395 	zval *value;
45396 	zval *zptr;
45397 	void **cache_slot;
45398 	zend_property_info *prop_info;
45399 	zend_object *zobj;
45400 	zend_string *name, *tmp_name;
45401 
45402 	SAVE_OPLINE();
45403 	object = EX_VAR(opline->op1.var);
45404 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45405 
45406 	do {
45407 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
45408 
45409 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45410 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
45411 				object = Z_REFVAL_P(object);
45412 				goto assign_op_object;
45413 			}
45414 			if (IS_CV == IS_CV
45415 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45416 				ZVAL_UNDEFINED_OP1();
45417 			}
45418 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
45419 			break;
45420 		}
45421 
45422 assign_op_object:
45423 		/* here we are sure we are dealing with an object */
45424 		zobj = Z_OBJ_P(object);
45425 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45426 			name = Z_STR_P(property);
45427 		} else {
45428 			name = zval_try_get_tmp_string(property, &tmp_name);
45429 			if (UNEXPECTED(!name)) {
45430 				UNDEF_RESULT();
45431 				break;
45432 			}
45433 		}
45434 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
45435 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
45436 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
45437 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45438 					ZVAL_NULL(EX_VAR(opline->result.var));
45439 				}
45440 			} else {
45441 				zval *orig_zptr = zptr;
45442 				zend_reference *ref;
45443 
45444 				do {
45445 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
45446 						ref = Z_REF_P(zptr);
45447 						zptr = Z_REFVAL_P(zptr);
45448 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
45449 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
45450 							break;
45451 						}
45452 					}
45453 
45454 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45455 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
45456 					} else {
45457 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
45458 					}
45459 					if (prop_info) {
45460 						/* special case for typed properties */
45461 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
45462 					} else {
45463 						zend_binary_op(zptr, zptr, value OPLINE_CC);
45464 					}
45465 				} while (0);
45466 
45467 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45468 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
45469 				}
45470 			}
45471 		} else {
45472 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
45473 		}
45474 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45475 			zend_tmp_string_release(tmp_name);
45476 		}
45477 	} while (0);
45478 
45479 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
45480 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45481 
45482 	/* assign_obj has two opcodes! */
45483 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45484 }
45485 
45486 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45487 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45488 {
45489 	USE_OPLINE
45490 	zval *var_ptr;
45491 	zval *value, *container, *dim;
45492 	HashTable *ht;
45493 
45494 	SAVE_OPLINE();
45495 	container = EX_VAR(opline->op1.var);
45496 
45497 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45498 assign_dim_op_array:
45499 		SEPARATE_ARRAY(container);
45500 		ht = Z_ARRVAL_P(container);
45501 assign_dim_op_new_array:
45502 		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45503 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45504 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
45505 			if (UNEXPECTED(!var_ptr)) {
45506 				zend_cannot_add_element();
45507 				goto assign_dim_op_ret_null;
45508 			}
45509 		} else {
45510 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45511 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
45512 			} else {
45513 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
45514 			}
45515 			if (UNEXPECTED(!var_ptr)) {
45516 				goto assign_dim_op_ret_null;
45517 			}
45518 		}
45519 
45520 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
45521 
45522 		do {
45523 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
45524 				zend_reference *ref = Z_REF_P(var_ptr);
45525 				var_ptr = Z_REFVAL_P(var_ptr);
45526 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
45527 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
45528 					break;
45529 				}
45530 			}
45531 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
45532 		} while (0);
45533 
45534 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45535 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
45536 		}
45537 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
45538 	} else {
45539 		if (EXPECTED(Z_ISREF_P(container))) {
45540 			container = Z_REFVAL_P(container);
45541 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45542 				goto assign_dim_op_array;
45543 			}
45544 		}
45545 
45546 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
45547 			zend_object *obj = Z_OBJ_P(container);
45548 
45549 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45550 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45551 				dim++;
45552 			}
45553 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
45554 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
45555 			uint8_t old_type;
45556 
45557 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
45558 				ZVAL_UNDEFINED_OP1();
45559 			}
45560 			ht = zend_new_array(8);
45561 			old_type = Z_TYPE_P(container);
45562 			ZVAL_ARR(container, ht);
45563 			if (UNEXPECTED(old_type == IS_FALSE)) {
45564 				GC_ADDREF(ht);
45565 				zend_false_to_array_deprecated();
45566 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
45567 					zend_array_destroy(ht);
45568 					goto assign_dim_op_ret_null;
45569 				}
45570 			}
45571 			goto assign_dim_op_new_array;
45572 		} else {
45573 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45574 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
45575 assign_dim_op_ret_null:
45576 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
45577 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45578 				ZVAL_NULL(EX_VAR(opline->result.var));
45579 			}
45580 		}
45581 	}
45582 
45583 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45584 
45585 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45586 }
45587 
ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45588 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45589 {
45590 	USE_OPLINE
45591 	zval *var_ptr;
45592 	zval *value;
45593 
45594 	SAVE_OPLINE();
45595 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45596 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
45597 
45598 	do {
45599 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
45600 			zend_reference *ref = Z_REF_P(var_ptr);
45601 			var_ptr = Z_REFVAL_P(var_ptr);
45602 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
45603 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
45604 				break;
45605 			}
45606 		}
45607 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
45608 	} while (0);
45609 
45610 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45611 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
45612 	}
45613 
45614 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45615 
45616 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45617 }
45618 
ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45619 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45620 {
45621 	USE_OPLINE
45622 	zval *object;
45623 	zval *property;
45624 	zval *zptr;
45625 	void **cache_slot;
45626 	zend_property_info *prop_info;
45627 	zend_object *zobj;
45628 	zend_string *name, *tmp_name;
45629 
45630 	SAVE_OPLINE();
45631 	object = EX_VAR(opline->op1.var);
45632 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45633 
45634 	do {
45635 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45636 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
45637 				object = Z_REFVAL_P(object);
45638 				goto pre_incdec_object;
45639 			}
45640 			if (IS_CV == IS_CV
45641 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45642 				ZVAL_UNDEFINED_OP1();
45643 			}
45644 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
45645 			break;
45646 		}
45647 
45648 pre_incdec_object:
45649 		/* here we are sure we are dealing with an object */
45650 		zobj = Z_OBJ_P(object);
45651 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45652 			name = Z_STR_P(property);
45653 		} else {
45654 			name = zval_try_get_tmp_string(property, &tmp_name);
45655 			if (UNEXPECTED(!name)) {
45656 				UNDEF_RESULT();
45657 				break;
45658 			}
45659 		}
45660 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
45661 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
45662 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
45663 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45664 					ZVAL_NULL(EX_VAR(opline->result.var));
45665 				}
45666 			} else {
45667 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45668 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
45669 				} else {
45670 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
45671 				}
45672 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
45673 			}
45674 		} else {
45675 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
45676 		}
45677 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45678 			zend_tmp_string_release(tmp_name);
45679 		}
45680 	} while (0);
45681 
45682 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45683 
45684 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45685 }
45686 
ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45687 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45688 {
45689 	USE_OPLINE
45690 	zval *object;
45691 	zval *property;
45692 	zval *zptr;
45693 	void **cache_slot;
45694 	zend_property_info *prop_info;
45695 	zend_object *zobj;
45696 	zend_string *name, *tmp_name;
45697 
45698 	SAVE_OPLINE();
45699 	object = EX_VAR(opline->op1.var);
45700 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45701 
45702 	do {
45703 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45704 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
45705 				object = Z_REFVAL_P(object);
45706 				goto post_incdec_object;
45707 			}
45708 			if (IS_CV == IS_CV
45709 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45710 				ZVAL_UNDEFINED_OP1();
45711 			}
45712 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
45713 			break;
45714 		}
45715 
45716 post_incdec_object:
45717 		/* here we are sure we are dealing with an object */
45718 		zobj = Z_OBJ_P(object);
45719 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45720 			name = Z_STR_P(property);
45721 		} else {
45722 			name = zval_try_get_tmp_string(property, &tmp_name);
45723 			if (UNEXPECTED(!name)) {
45724 				ZVAL_UNDEF(EX_VAR(opline->result.var));
45725 				break;
45726 			}
45727 		}
45728 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
45729 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
45730 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
45731 				ZVAL_NULL(EX_VAR(opline->result.var));
45732 			} else {
45733 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45734 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
45735 				} else {
45736 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
45737 				}
45738 
45739 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
45740 			}
45741 		} else {
45742 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
45743 		}
45744 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45745 			zend_tmp_string_release(tmp_name);
45746 		}
45747 	} while (0);
45748 
45749 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45750 
45751 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45752 }
45753 
ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45754 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45755 {
45756 	USE_OPLINE
45757 	zval *container, *dim, *value;
45758 
45759 	SAVE_OPLINE();
45760 	container = EX_VAR(opline->op1.var);
45761 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45762 	if (IS_CV != IS_CONST) {
45763 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45764 fetch_dim_r_array:
45765 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
45766 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
45767 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
45768 			container = Z_REFVAL_P(container);
45769 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45770 				goto fetch_dim_r_array;
45771 			} else {
45772 				goto fetch_dim_r_slow;
45773 			}
45774 		} else {
45775 fetch_dim_r_slow:
45776 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45777 				dim++;
45778 			}
45779 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
45780 		}
45781 	} else {
45782 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
45783 	}
45784 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45785 
45786 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45787 }
45788 
ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45789 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45790 {
45791 	USE_OPLINE
45792 	zval *container;
45793 
45794 	SAVE_OPLINE();
45795 	container = EX_VAR(opline->op1.var);
45796 	zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
45797 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45798 	if (IS_CV == IS_VAR) {
45799 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
45800 	}
45801 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45802 }
45803 
ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45804 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45805 {
45806 	USE_OPLINE
45807 	zval *container;
45808 
45809 	SAVE_OPLINE();
45810 	container = EX_VAR(opline->op1.var);
45811 	zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
45812 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45813 	if (IS_CV == IS_VAR) {
45814 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
45815 	}
45816 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45817 }
45818 
ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45819 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45820 {
45821 	USE_OPLINE
45822 	zval *container;
45823 
45824 	SAVE_OPLINE();
45825 	container = EX_VAR(opline->op1.var);
45826 	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
45827 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45828 
45829 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45830 }
45831 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45833 {
45834 #if 0
45835 	USE_OPLINE
45836 #endif
45837 
45838 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
45839 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
45840 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45841 		}
45842 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45843 	} else {
45844 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45845 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45846 		}
45847 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45848 	}
45849 }
45850 
ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45851 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45852 {
45853 	USE_OPLINE
45854 	zval *container;
45855 
45856 	SAVE_OPLINE();
45857 	container = EX_VAR(opline->op1.var);
45858 	zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
45859 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45860 	if (IS_CV == IS_VAR) {
45861 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
45862 	}
45863 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45864 }
45865 
ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45866 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45867 {
45868 	USE_OPLINE
45869 	zval *container;
45870 	void **cache_slot = NULL;
45871 
45872 	SAVE_OPLINE();
45873 	container = EX_VAR(opline->op1.var);
45874 
45875 	if (IS_CV == IS_CONST ||
45876 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
45877 		do {
45878 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
45879 				container = Z_REFVAL_P(container);
45880 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
45881 					break;
45882 				}
45883 			}
45884 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45885 				ZVAL_UNDEFINED_OP1();
45886 			}
45887 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45888 			ZVAL_NULL(EX_VAR(opline->result.var));
45889 			goto fetch_obj_r_finish;
45890 		} while (0);
45891 	}
45892 
45893 	/* here we are sure we are dealing with an object */
45894 	do {
45895 		zend_object *zobj = Z_OBJ_P(container);
45896 		zend_string *name, *tmp_name;
45897 		zval *retval;
45898 
45899 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45900 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
45901 
45902 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
45903 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
45904 
45905 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
45906 					retval = OBJ_PROP(zobj, prop_offset);
45907 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
45908 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
45909 							goto fetch_obj_r_copy;
45910 						} else {
45911 fetch_obj_r_fast_copy:
45912 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
45913 							ZEND_VM_NEXT_OPCODE();
45914 						}
45915 					}
45916 				} else if (EXPECTED(zobj->properties != NULL)) {
45917 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45918 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
45919 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
45920 
45921 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
45922 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
45923 
45924 							if (EXPECTED(p->key == name) ||
45925 							    (EXPECTED(p->h == ZSTR_H(name)) &&
45926 							     EXPECTED(p->key != NULL) &&
45927 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
45928 								retval = &p->val;
45929 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
45930 									goto fetch_obj_r_copy;
45931 								} else {
45932 									goto fetch_obj_r_fast_copy;
45933 								}
45934 							}
45935 						}
45936 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
45937 					}
45938 					retval = zend_hash_find_known_hash(zobj->properties, name);
45939 					if (EXPECTED(retval)) {
45940 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
45941 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
45942 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
45943 							goto fetch_obj_r_copy;
45944 						} else {
45945 							goto fetch_obj_r_fast_copy;
45946 						}
45947 					}
45948 				}
45949 			}
45950 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45951 		} else {
45952 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
45953 			if (UNEXPECTED(!name)) {
45954 				ZVAL_UNDEF(EX_VAR(opline->result.var));
45955 				break;
45956 			}
45957 		}
45958 
45959 #if ZEND_DEBUG
45960 		/* For non-standard object handlers, verify a declared property type in debug builds.
45961 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
45962 		zend_property_info *prop_info = NULL;
45963 		if (zobj->handlers->read_property != zend_std_read_property) {
45964 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
45965 		}
45966 #endif
45967 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
45968 #if ZEND_DEBUG
45969 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
45970 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
45971 			ZVAL_OPT_DEREF(retval);
45972 			zend_verify_property_type(prop_info, retval, /* strict */ true);
45973 		}
45974 #endif
45975 
45976 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45977 			zend_tmp_string_release(tmp_name);
45978 		}
45979 
45980 		if (retval != EX_VAR(opline->result.var)) {
45981 fetch_obj_r_copy:
45982 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
45983 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
45984 			zend_unwrap_reference(retval);
45985 		}
45986 	} while (0);
45987 
45988 fetch_obj_r_finish:
45989 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45990 
45991 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45992 }
45993 
ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45994 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45995 {
45996 	USE_OPLINE
45997 	zval *property, *container, *result;
45998 
45999 	SAVE_OPLINE();
46000 
46001 	container = EX_VAR(opline->op1.var);
46002 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46003 	result = EX_VAR(opline->result.var);
46004 	zend_fetch_property_address(
46005 		result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
46006 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
46007 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
46008 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46009 	if (IS_CV == IS_VAR) {
46010 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
46011 	}
46012 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46013 }
46014 
ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46015 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46016 {
46017 	USE_OPLINE
46018 	zval *property, *container, *result;
46019 
46020 	SAVE_OPLINE();
46021 	container = EX_VAR(opline->op1.var);
46022 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46023 	result = EX_VAR(opline->result.var);
46024 	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 OPLINE_CC EXECUTE_DATA_CC);
46025 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46026 	if (IS_CV == IS_VAR) {
46027 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
46028 	}
46029 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46030 }
46031 
ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46032 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46033 {
46034 	USE_OPLINE
46035 	zval *container;
46036 	void **cache_slot = NULL;
46037 
46038 	SAVE_OPLINE();
46039 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
46040 
46041 	if (IS_CV == IS_CONST ||
46042 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
46043 		do {
46044 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
46045 				container = Z_REFVAL_P(container);
46046 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
46047 					break;
46048 				}
46049 			}
46050 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
46051 				ZVAL_UNDEFINED_OP2();
46052 			}
46053 			ZVAL_NULL(EX_VAR(opline->result.var));
46054 			goto fetch_obj_is_finish;
46055 		} while (0);
46056 	}
46057 
46058 	/* here we are sure we are dealing with an object */
46059 	do {
46060 		zend_object *zobj = Z_OBJ_P(container);
46061 		zend_string *name, *tmp_name;
46062 		zval *retval;
46063 
46064 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46065 			cache_slot = CACHE_ADDR(opline->extended_value);
46066 
46067 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
46068 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
46069 
46070 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
46071 					retval = OBJ_PROP(zobj, prop_offset);
46072 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
46073 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
46074 							goto fetch_obj_is_copy;
46075 						} else {
46076 fetch_obj_is_fast_copy:
46077 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
46078 							ZEND_VM_NEXT_OPCODE();
46079 						}
46080 					}
46081 				} else if (EXPECTED(zobj->properties != NULL)) {
46082 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46083 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
46084 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
46085 
46086 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
46087 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
46088 
46089 							if (EXPECTED(p->key == name) ||
46090 							    (EXPECTED(p->h == ZSTR_H(name)) &&
46091 							     EXPECTED(p->key != NULL) &&
46092 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
46093 								retval = &p->val;
46094 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
46095 									goto fetch_obj_is_copy;
46096 								} else {
46097 									goto fetch_obj_is_fast_copy;
46098 								}
46099 							}
46100 						}
46101 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
46102 					}
46103 					retval = zend_hash_find_known_hash(zobj->properties, name);
46104 					if (EXPECTED(retval)) {
46105 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
46106 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
46107 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
46108 							goto fetch_obj_is_copy;
46109 						} else {
46110 							goto fetch_obj_is_fast_copy;
46111 						}
46112 					}
46113 				}
46114 			}
46115 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46116 		} else {
46117 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
46118 			if (UNEXPECTED(!name)) {
46119 				ZVAL_UNDEF(EX_VAR(opline->result.var));
46120 				break;
46121 			}
46122 		}
46123 
46124 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
46125 
46126 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46127 			zend_tmp_string_release(tmp_name);
46128 		}
46129 
46130 		if (retval != EX_VAR(opline->result.var)) {
46131 fetch_obj_is_copy:
46132 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
46133 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
46134 			zend_unwrap_reference(retval);
46135 		}
46136 	} while (0);
46137 
46138 fetch_obj_is_finish:
46139 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46140 
46141 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46142 }
46143 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46144 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46145 {
46146 #if 0
46147 	USE_OPLINE
46148 #endif
46149 
46150 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
46151 		/* Behave like FETCH_OBJ_W */
46152 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
46153 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46154 		}
46155 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46156 	} else {
46157 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46158 	}
46159 }
46160 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46162 {
46163 	USE_OPLINE
46164 	zval *container, *property, *result;
46165 
46166 	SAVE_OPLINE();
46167 	container = EX_VAR(opline->op1.var);
46168 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46169 	result = EX_VAR(opline->result.var);
46170 	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 OPLINE_CC EXECUTE_DATA_CC);
46171 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46172 	if (IS_CV == IS_VAR) {
46173 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
46174 	}
46175 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46176 }
46177 
ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46178 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46179 {
46180 	USE_OPLINE
46181 	zval *object, *value, tmp;
46182 	zend_object *zobj;
46183 	zend_string *name, *tmp_name;
46184 	zend_refcounted *garbage = NULL;
46185 
46186 	SAVE_OPLINE();
46187 	object = EX_VAR(opline->op1.var);
46188 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
46189 
46190 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
46191 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
46192 			object = Z_REFVAL_P(object);
46193 			goto assign_object;
46194 		}
46195 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
46196 		value = &EG(uninitialized_zval);
46197 		goto free_and_exit_assign_obj;
46198 	}
46199 
46200 assign_object:
46201 	zobj = Z_OBJ_P(object);
46202 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46203 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
46204 			void **cache_slot = CACHE_ADDR(opline->extended_value);
46205 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
46206 			zval *property_val;
46207 
46208 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
46209 				property_val = OBJ_PROP(zobj, prop_offset);
46210 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
46211 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
46212 
46213 					if (prop_info != NULL) {
46214 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
46215 						goto free_and_exit_assign_obj;
46216 					} else {
46217 fast_assign_obj:
46218 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
46219 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46220 							ZVAL_COPY(EX_VAR(opline->result.var), value);
46221 						}
46222 						goto exit_assign_obj;
46223 					}
46224 				}
46225 			} else {
46226 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46227 				if (EXPECTED(zobj->properties != NULL)) {
46228 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
46229 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
46230 							GC_DELREF(zobj->properties);
46231 						}
46232 						zobj->properties = zend_array_dup(zobj->properties);
46233 					}
46234 					property_val = zend_hash_find_known_hash(zobj->properties, name);
46235 					if (property_val) {
46236 						goto fast_assign_obj;
46237 					}
46238 				}
46239 
46240 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
46241 					if (EXPECTED(zobj->properties == NULL)) {
46242 						rebuild_object_properties(zobj);
46243 					}
46244 					if (IS_CONST == IS_CONST) {
46245 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
46246 							Z_ADDREF_P(value);
46247 						}
46248 					} else if (IS_CONST != IS_TMP_VAR) {
46249 						if (Z_ISREF_P(value)) {
46250 							if (IS_CONST == IS_VAR) {
46251 								zend_reference *ref = Z_REF_P(value);
46252 								if (GC_DELREF(ref) == 0) {
46253 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
46254 									efree_size(ref, sizeof(zend_reference));
46255 									value = &tmp;
46256 								} else {
46257 									value = Z_REFVAL_P(value);
46258 									Z_TRY_ADDREF_P(value);
46259 								}
46260 							} else {
46261 								value = Z_REFVAL_P(value);
46262 								Z_TRY_ADDREF_P(value);
46263 							}
46264 						} else if (IS_CONST == IS_CV) {
46265 							Z_TRY_ADDREF_P(value);
46266 						}
46267 						}
46268 					zend_hash_add_new(zobj->properties, name, value);
46269 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46270 						ZVAL_COPY(EX_VAR(opline->result.var), value);
46271 					}
46272 					goto exit_assign_obj;
46273 				}
46274 			}
46275 		}
46276 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46277 	} else {
46278 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
46279 		if (UNEXPECTED(!name)) {
46280 
46281 			UNDEF_RESULT();
46282 			goto exit_assign_obj;
46283 		}
46284 	}
46285 
46286 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
46287 		ZVAL_DEREF(value);
46288 	}
46289 
46290 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
46291 
46292 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46293 		zend_tmp_string_release(tmp_name);
46294 	}
46295 
46296 free_and_exit_assign_obj:
46297 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
46298 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
46299 	}
46300 
46301 exit_assign_obj:
46302 	if (garbage) {
46303 		GC_DTOR_NO_REF(garbage);
46304 	}
46305 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46306 
46307 	/* assign_obj has two opcodes! */
46308 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46309 }
46310 
46311 /* 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)46312 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46313 {
46314 	USE_OPLINE
46315 	zval *object, *value, tmp;
46316 	zend_object *zobj;
46317 	zend_string *name, *tmp_name;
46318 	zend_refcounted *garbage = NULL;
46319 
46320 	SAVE_OPLINE();
46321 	object = EX_VAR(opline->op1.var);
46322 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46323 
46324 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
46325 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
46326 			object = Z_REFVAL_P(object);
46327 			goto assign_object;
46328 		}
46329 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
46330 		value = &EG(uninitialized_zval);
46331 		goto free_and_exit_assign_obj;
46332 	}
46333 
46334 assign_object:
46335 	zobj = Z_OBJ_P(object);
46336 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46337 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
46338 			void **cache_slot = CACHE_ADDR(opline->extended_value);
46339 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
46340 			zval *property_val;
46341 
46342 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
46343 				property_val = OBJ_PROP(zobj, prop_offset);
46344 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
46345 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
46346 
46347 					if (prop_info != NULL) {
46348 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
46349 						goto free_and_exit_assign_obj;
46350 					} else {
46351 fast_assign_obj:
46352 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
46353 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46354 							ZVAL_COPY(EX_VAR(opline->result.var), value);
46355 						}
46356 						goto exit_assign_obj;
46357 					}
46358 				}
46359 			} else {
46360 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46361 				if (EXPECTED(zobj->properties != NULL)) {
46362 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
46363 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
46364 							GC_DELREF(zobj->properties);
46365 						}
46366 						zobj->properties = zend_array_dup(zobj->properties);
46367 					}
46368 					property_val = zend_hash_find_known_hash(zobj->properties, name);
46369 					if (property_val) {
46370 						goto fast_assign_obj;
46371 					}
46372 				}
46373 
46374 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
46375 					if (EXPECTED(zobj->properties == NULL)) {
46376 						rebuild_object_properties(zobj);
46377 					}
46378 					if (IS_TMP_VAR == IS_CONST) {
46379 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
46380 							Z_ADDREF_P(value);
46381 						}
46382 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
46383 						if (Z_ISREF_P(value)) {
46384 							if (IS_TMP_VAR == IS_VAR) {
46385 								zend_reference *ref = Z_REF_P(value);
46386 								if (GC_DELREF(ref) == 0) {
46387 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
46388 									efree_size(ref, sizeof(zend_reference));
46389 									value = &tmp;
46390 								} else {
46391 									value = Z_REFVAL_P(value);
46392 									Z_TRY_ADDREF_P(value);
46393 								}
46394 							} else {
46395 								value = Z_REFVAL_P(value);
46396 								Z_TRY_ADDREF_P(value);
46397 							}
46398 						} else if (IS_TMP_VAR == IS_CV) {
46399 							Z_TRY_ADDREF_P(value);
46400 						}
46401 						}
46402 					zend_hash_add_new(zobj->properties, name, value);
46403 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46404 						ZVAL_COPY(EX_VAR(opline->result.var), value);
46405 					}
46406 					goto exit_assign_obj;
46407 				}
46408 			}
46409 		}
46410 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46411 	} else {
46412 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
46413 		if (UNEXPECTED(!name)) {
46414 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46415 			UNDEF_RESULT();
46416 			goto exit_assign_obj;
46417 		}
46418 	}
46419 
46420 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
46421 		ZVAL_DEREF(value);
46422 	}
46423 
46424 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
46425 
46426 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46427 		zend_tmp_string_release(tmp_name);
46428 	}
46429 
46430 free_and_exit_assign_obj:
46431 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
46432 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
46433 	}
46434 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46435 exit_assign_obj:
46436 	if (garbage) {
46437 		GC_DTOR_NO_REF(garbage);
46438 	}
46439 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46440 
46441 	/* assign_obj has two opcodes! */
46442 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46443 }
46444 
46445 /* 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)46446 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46447 {
46448 	USE_OPLINE
46449 	zval *object, *value, tmp;
46450 	zend_object *zobj;
46451 	zend_string *name, *tmp_name;
46452 	zend_refcounted *garbage = NULL;
46453 
46454 	SAVE_OPLINE();
46455 	object = EX_VAR(opline->op1.var);
46456 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46457 
46458 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
46459 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
46460 			object = Z_REFVAL_P(object);
46461 			goto assign_object;
46462 		}
46463 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
46464 		value = &EG(uninitialized_zval);
46465 		goto free_and_exit_assign_obj;
46466 	}
46467 
46468 assign_object:
46469 	zobj = Z_OBJ_P(object);
46470 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46471 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
46472 			void **cache_slot = CACHE_ADDR(opline->extended_value);
46473 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
46474 			zval *property_val;
46475 
46476 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
46477 				property_val = OBJ_PROP(zobj, prop_offset);
46478 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
46479 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
46480 
46481 					if (prop_info != NULL) {
46482 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
46483 						goto free_and_exit_assign_obj;
46484 					} else {
46485 fast_assign_obj:
46486 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
46487 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46488 							ZVAL_COPY(EX_VAR(opline->result.var), value);
46489 						}
46490 						goto exit_assign_obj;
46491 					}
46492 				}
46493 			} else {
46494 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46495 				if (EXPECTED(zobj->properties != NULL)) {
46496 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
46497 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
46498 							GC_DELREF(zobj->properties);
46499 						}
46500 						zobj->properties = zend_array_dup(zobj->properties);
46501 					}
46502 					property_val = zend_hash_find_known_hash(zobj->properties, name);
46503 					if (property_val) {
46504 						goto fast_assign_obj;
46505 					}
46506 				}
46507 
46508 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
46509 					if (EXPECTED(zobj->properties == NULL)) {
46510 						rebuild_object_properties(zobj);
46511 					}
46512 					if (IS_VAR == IS_CONST) {
46513 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
46514 							Z_ADDREF_P(value);
46515 						}
46516 					} else if (IS_VAR != IS_TMP_VAR) {
46517 						if (Z_ISREF_P(value)) {
46518 							if (IS_VAR == IS_VAR) {
46519 								zend_reference *ref = Z_REF_P(value);
46520 								if (GC_DELREF(ref) == 0) {
46521 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
46522 									efree_size(ref, sizeof(zend_reference));
46523 									value = &tmp;
46524 								} else {
46525 									value = Z_REFVAL_P(value);
46526 									Z_TRY_ADDREF_P(value);
46527 								}
46528 							} else {
46529 								value = Z_REFVAL_P(value);
46530 								Z_TRY_ADDREF_P(value);
46531 							}
46532 						} else if (IS_VAR == IS_CV) {
46533 							Z_TRY_ADDREF_P(value);
46534 						}
46535 						}
46536 					zend_hash_add_new(zobj->properties, name, value);
46537 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46538 						ZVAL_COPY(EX_VAR(opline->result.var), value);
46539 					}
46540 					goto exit_assign_obj;
46541 				}
46542 			}
46543 		}
46544 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46545 	} else {
46546 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
46547 		if (UNEXPECTED(!name)) {
46548 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46549 			UNDEF_RESULT();
46550 			goto exit_assign_obj;
46551 		}
46552 	}
46553 
46554 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
46555 		ZVAL_DEREF(value);
46556 	}
46557 
46558 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
46559 
46560 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46561 		zend_tmp_string_release(tmp_name);
46562 	}
46563 
46564 free_and_exit_assign_obj:
46565 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
46566 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
46567 	}
46568 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46569 exit_assign_obj:
46570 	if (garbage) {
46571 		GC_DTOR_NO_REF(garbage);
46572 	}
46573 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46574 
46575 	/* assign_obj has two opcodes! */
46576 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46577 }
46578 
46579 /* 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)46580 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46581 {
46582 	USE_OPLINE
46583 	zval *object, *value, tmp;
46584 	zend_object *zobj;
46585 	zend_string *name, *tmp_name;
46586 	zend_refcounted *garbage = NULL;
46587 
46588 	SAVE_OPLINE();
46589 	object = EX_VAR(opline->op1.var);
46590 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
46591 
46592 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
46593 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
46594 			object = Z_REFVAL_P(object);
46595 			goto assign_object;
46596 		}
46597 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
46598 		value = &EG(uninitialized_zval);
46599 		goto free_and_exit_assign_obj;
46600 	}
46601 
46602 assign_object:
46603 	zobj = Z_OBJ_P(object);
46604 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46605 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
46606 			void **cache_slot = CACHE_ADDR(opline->extended_value);
46607 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
46608 			zval *property_val;
46609 
46610 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
46611 				property_val = OBJ_PROP(zobj, prop_offset);
46612 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
46613 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
46614 
46615 					if (prop_info != NULL) {
46616 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
46617 						goto free_and_exit_assign_obj;
46618 					} else {
46619 fast_assign_obj:
46620 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
46621 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46622 							ZVAL_COPY(EX_VAR(opline->result.var), value);
46623 						}
46624 						goto exit_assign_obj;
46625 					}
46626 				}
46627 			} else {
46628 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46629 				if (EXPECTED(zobj->properties != NULL)) {
46630 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
46631 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
46632 							GC_DELREF(zobj->properties);
46633 						}
46634 						zobj->properties = zend_array_dup(zobj->properties);
46635 					}
46636 					property_val = zend_hash_find_known_hash(zobj->properties, name);
46637 					if (property_val) {
46638 						goto fast_assign_obj;
46639 					}
46640 				}
46641 
46642 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
46643 					if (EXPECTED(zobj->properties == NULL)) {
46644 						rebuild_object_properties(zobj);
46645 					}
46646 					if (IS_CV == IS_CONST) {
46647 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
46648 							Z_ADDREF_P(value);
46649 						}
46650 					} else if (IS_CV != IS_TMP_VAR) {
46651 						if (Z_ISREF_P(value)) {
46652 							if (IS_CV == IS_VAR) {
46653 								zend_reference *ref = Z_REF_P(value);
46654 								if (GC_DELREF(ref) == 0) {
46655 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
46656 									efree_size(ref, sizeof(zend_reference));
46657 									value = &tmp;
46658 								} else {
46659 									value = Z_REFVAL_P(value);
46660 									Z_TRY_ADDREF_P(value);
46661 								}
46662 							} else {
46663 								value = Z_REFVAL_P(value);
46664 								Z_TRY_ADDREF_P(value);
46665 							}
46666 						} else if (IS_CV == IS_CV) {
46667 							Z_TRY_ADDREF_P(value);
46668 						}
46669 						}
46670 					zend_hash_add_new(zobj->properties, name, value);
46671 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46672 						ZVAL_COPY(EX_VAR(opline->result.var), value);
46673 					}
46674 					goto exit_assign_obj;
46675 				}
46676 			}
46677 		}
46678 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46679 	} else {
46680 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
46681 		if (UNEXPECTED(!name)) {
46682 
46683 			UNDEF_RESULT();
46684 			goto exit_assign_obj;
46685 		}
46686 	}
46687 
46688 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
46689 		ZVAL_DEREF(value);
46690 	}
46691 
46692 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
46693 
46694 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46695 		zend_tmp_string_release(tmp_name);
46696 	}
46697 
46698 free_and_exit_assign_obj:
46699 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
46700 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
46701 	}
46702 
46703 exit_assign_obj:
46704 	if (garbage) {
46705 		GC_DTOR_NO_REF(garbage);
46706 	}
46707 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46708 
46709 	/* assign_obj has two opcodes! */
46710 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46711 }
46712 
46713 /* 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)46714 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46715 {
46716 	USE_OPLINE
46717 	zval *object_ptr, *orig_object_ptr;
46718 	zval *value;
46719 	zval *variable_ptr;
46720 	zval *dim;
46721 	zend_refcounted *garbage = NULL;
46722 
46723 	SAVE_OPLINE();
46724 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
46725 
46726 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46727 try_assign_dim_array:
46728 		SEPARATE_ARRAY(object_ptr);
46729 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46730 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
46731 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
46732 				HashTable *ht = Z_ARRVAL_P(object_ptr);
46733 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46734 					GC_ADDREF(ht);
46735 				}
46736 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46737 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
46738 					zend_array_destroy(ht);
46739 					goto assign_dim_error;
46740 				}
46741 			}
46742 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
46743 				ZVAL_DEREF(value);
46744 			}
46745 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
46746 			if (UNEXPECTED(value == NULL)) {
46747 				zend_cannot_add_element();
46748 				goto assign_dim_error;
46749 			} else if (IS_CONST == IS_CV) {
46750 				if (Z_REFCOUNTED_P(value)) {
46751 					Z_ADDREF_P(value);
46752 				}
46753 			} else if (IS_CONST == IS_VAR) {
46754 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
46755 				if (Z_ISREF_P(free_op_data)) {
46756 					if (Z_REFCOUNTED_P(value)) {
46757 						Z_ADDREF_P(value);
46758 					}
46759 					zval_ptr_dtor_nogc(free_op_data);
46760 				}
46761 			} else if (IS_CONST == IS_CONST) {
46762 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
46763 					Z_ADDREF_P(value);
46764 				}
46765 			}
46766 		} else {
46767 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46768 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46769 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46770 			} else {
46771 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46772 			}
46773 			if (UNEXPECTED(variable_ptr == NULL)) {
46774 				goto assign_dim_error;
46775 			}
46776 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
46777 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
46778 		}
46779 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46780 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46781 		}
46782 		if (garbage) {
46783 			GC_DTOR_NO_REF(garbage);
46784 		}
46785 	} else {
46786 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46787 			object_ptr = Z_REFVAL_P(object_ptr);
46788 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46789 				goto try_assign_dim_array;
46790 			}
46791 		}
46792 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46793 			zend_object *obj = Z_OBJ_P(object_ptr);
46794 
46795 			GC_ADDREF(obj);
46796 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46797 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46798 				dim = ZVAL_UNDEFINED_OP2();
46799 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46800 				dim++;
46801 			}
46802 
46803 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
46804 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
46805 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46806 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
46807 				ZVAL_DEREF(value);
46808 			}
46809 
46810 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
46811 
46812 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46813 				zend_objects_store_del(obj);
46814 			}
46815 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46816 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46817 				zend_use_new_element_for_string();
46818 
46819 				UNDEF_RESULT();
46820 			} else {
46821 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46822 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
46823 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46824 
46825 			}
46826 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46827 			if (Z_ISREF_P(orig_object_ptr)
46828 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46829 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46830 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46831 
46832 				UNDEF_RESULT();
46833 			} else {
46834 				HashTable *ht = zend_new_array(8);
46835 				uint8_t old_type = Z_TYPE_P(object_ptr);
46836 
46837 				ZVAL_ARR(object_ptr, ht);
46838 				if (UNEXPECTED(old_type == IS_FALSE)) {
46839 					GC_ADDREF(ht);
46840 					zend_false_to_array_deprecated();
46841 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
46842 						zend_array_destroy(ht);
46843 						goto assign_dim_error;
46844 					}
46845 				}
46846 				goto try_assign_dim_array;
46847 			}
46848 		} else {
46849 			zend_use_scalar_as_array();
46850 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46851 assign_dim_error:
46852 
46853 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46854 				ZVAL_NULL(EX_VAR(opline->result.var));
46855 			}
46856 		}
46857 	}
46858 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
46859 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46860 	}
46861 
46862 	/* assign_dim has two opcodes! */
46863 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46864 }
46865 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46866 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46867 {
46868 	USE_OPLINE
46869 	zval *object_ptr, *orig_object_ptr;
46870 	zval *value;
46871 	zval *variable_ptr;
46872 	zval *dim;
46873 	zend_refcounted *garbage = NULL;
46874 
46875 	SAVE_OPLINE();
46876 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
46877 
46878 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46879 try_assign_dim_array:
46880 		SEPARATE_ARRAY(object_ptr);
46881 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46882 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46883 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
46884 				HashTable *ht = Z_ARRVAL_P(object_ptr);
46885 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46886 					GC_ADDREF(ht);
46887 				}
46888 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46889 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
46890 					zend_array_destroy(ht);
46891 					goto assign_dim_error;
46892 				}
46893 			}
46894 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
46895 				ZVAL_DEREF(value);
46896 			}
46897 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
46898 			if (UNEXPECTED(value == NULL)) {
46899 				zend_cannot_add_element();
46900 				goto assign_dim_error;
46901 			} else if (IS_TMP_VAR == IS_CV) {
46902 				if (Z_REFCOUNTED_P(value)) {
46903 					Z_ADDREF_P(value);
46904 				}
46905 			} else if (IS_TMP_VAR == IS_VAR) {
46906 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
46907 				if (Z_ISREF_P(free_op_data)) {
46908 					if (Z_REFCOUNTED_P(value)) {
46909 						Z_ADDREF_P(value);
46910 					}
46911 					zval_ptr_dtor_nogc(free_op_data);
46912 				}
46913 			} else if (IS_TMP_VAR == IS_CONST) {
46914 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
46915 					Z_ADDREF_P(value);
46916 				}
46917 			}
46918 		} else {
46919 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46920 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46921 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46922 			} else {
46923 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46924 			}
46925 			if (UNEXPECTED(variable_ptr == NULL)) {
46926 				goto assign_dim_error;
46927 			}
46928 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46929 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
46930 		}
46931 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46932 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46933 		}
46934 		if (garbage) {
46935 			GC_DTOR_NO_REF(garbage);
46936 		}
46937 	} else {
46938 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46939 			object_ptr = Z_REFVAL_P(object_ptr);
46940 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46941 				goto try_assign_dim_array;
46942 			}
46943 		}
46944 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46945 			zend_object *obj = Z_OBJ_P(object_ptr);
46946 
46947 			GC_ADDREF(obj);
46948 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46949 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46950 				dim = ZVAL_UNDEFINED_OP2();
46951 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46952 				dim++;
46953 			}
46954 
46955 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46956 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
46957 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46958 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
46959 				ZVAL_DEREF(value);
46960 			}
46961 
46962 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
46963 
46964 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46965 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46966 				zend_objects_store_del(obj);
46967 			}
46968 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46969 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46970 				zend_use_new_element_for_string();
46971 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46972 				UNDEF_RESULT();
46973 			} else {
46974 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46975 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46976 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46977 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46978 			}
46979 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46980 			if (Z_ISREF_P(orig_object_ptr)
46981 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46982 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46983 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46984 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46985 				UNDEF_RESULT();
46986 			} else {
46987 				HashTable *ht = zend_new_array(8);
46988 				uint8_t old_type = Z_TYPE_P(object_ptr);
46989 
46990 				ZVAL_ARR(object_ptr, ht);
46991 				if (UNEXPECTED(old_type == IS_FALSE)) {
46992 					GC_ADDREF(ht);
46993 					zend_false_to_array_deprecated();
46994 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
46995 						zend_array_destroy(ht);
46996 						goto assign_dim_error;
46997 					}
46998 				}
46999 				goto try_assign_dim_array;
47000 			}
47001 		} else {
47002 			zend_use_scalar_as_array();
47003 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47004 assign_dim_error:
47005 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47006 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47007 				ZVAL_NULL(EX_VAR(opline->result.var));
47008 			}
47009 		}
47010 	}
47011 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
47012 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47013 	}
47014 
47015 	/* assign_dim has two opcodes! */
47016 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47017 }
47018 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47020 {
47021 	USE_OPLINE
47022 	zval *object_ptr, *orig_object_ptr;
47023 	zval *value;
47024 	zval *variable_ptr;
47025 	zval *dim;
47026 	zend_refcounted *garbage = NULL;
47027 
47028 	SAVE_OPLINE();
47029 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
47030 
47031 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47032 try_assign_dim_array:
47033 		SEPARATE_ARRAY(object_ptr);
47034 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
47035 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47036 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
47037 				HashTable *ht = Z_ARRVAL_P(object_ptr);
47038 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
47039 					GC_ADDREF(ht);
47040 				}
47041 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47042 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
47043 					zend_array_destroy(ht);
47044 					goto assign_dim_error;
47045 				}
47046 			}
47047 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
47048 				ZVAL_DEREF(value);
47049 			}
47050 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
47051 			if (UNEXPECTED(value == NULL)) {
47052 				zend_cannot_add_element();
47053 				goto assign_dim_error;
47054 			} else if (IS_VAR == IS_CV) {
47055 				if (Z_REFCOUNTED_P(value)) {
47056 					Z_ADDREF_P(value);
47057 				}
47058 			} else if (IS_VAR == IS_VAR) {
47059 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
47060 				if (Z_ISREF_P(free_op_data)) {
47061 					if (Z_REFCOUNTED_P(value)) {
47062 						Z_ADDREF_P(value);
47063 					}
47064 					zval_ptr_dtor_nogc(free_op_data);
47065 				}
47066 			} else if (IS_VAR == IS_CONST) {
47067 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
47068 					Z_ADDREF_P(value);
47069 				}
47070 			}
47071 		} else {
47072 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47073 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47074 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47075 			} else {
47076 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47077 			}
47078 			if (UNEXPECTED(variable_ptr == NULL)) {
47079 				goto assign_dim_error;
47080 			}
47081 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47082 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
47083 		}
47084 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47085 			ZVAL_COPY(EX_VAR(opline->result.var), value);
47086 		}
47087 		if (garbage) {
47088 			GC_DTOR_NO_REF(garbage);
47089 		}
47090 	} else {
47091 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
47092 			object_ptr = Z_REFVAL_P(object_ptr);
47093 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47094 				goto try_assign_dim_array;
47095 			}
47096 		}
47097 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
47098 			zend_object *obj = Z_OBJ_P(object_ptr);
47099 
47100 			GC_ADDREF(obj);
47101 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47102 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
47103 				dim = ZVAL_UNDEFINED_OP2();
47104 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
47105 				dim++;
47106 			}
47107 
47108 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47109 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
47110 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47111 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
47112 				ZVAL_DEREF(value);
47113 			}
47114 
47115 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
47116 
47117 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47118 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
47119 				zend_objects_store_del(obj);
47120 			}
47121 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
47122 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
47123 				zend_use_new_element_for_string();
47124 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47125 				UNDEF_RESULT();
47126 			} else {
47127 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47128 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47129 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
47130 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47131 			}
47132 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
47133 			if (Z_ISREF_P(orig_object_ptr)
47134 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
47135 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
47136 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47137 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47138 				UNDEF_RESULT();
47139 			} else {
47140 				HashTable *ht = zend_new_array(8);
47141 				uint8_t old_type = Z_TYPE_P(object_ptr);
47142 
47143 				ZVAL_ARR(object_ptr, ht);
47144 				if (UNEXPECTED(old_type == IS_FALSE)) {
47145 					GC_ADDREF(ht);
47146 					zend_false_to_array_deprecated();
47147 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
47148 						zend_array_destroy(ht);
47149 						goto assign_dim_error;
47150 					}
47151 				}
47152 				goto try_assign_dim_array;
47153 			}
47154 		} else {
47155 			zend_use_scalar_as_array();
47156 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47157 assign_dim_error:
47158 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47159 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47160 				ZVAL_NULL(EX_VAR(opline->result.var));
47161 			}
47162 		}
47163 	}
47164 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
47165 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47166 	}
47167 
47168 	/* assign_dim has two opcodes! */
47169 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47170 }
47171 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47172 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47173 {
47174 	USE_OPLINE
47175 	zval *object_ptr, *orig_object_ptr;
47176 	zval *value;
47177 	zval *variable_ptr;
47178 	zval *dim;
47179 	zend_refcounted *garbage = NULL;
47180 
47181 	SAVE_OPLINE();
47182 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
47183 
47184 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47185 try_assign_dim_array:
47186 		SEPARATE_ARRAY(object_ptr);
47187 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
47188 			value = EX_VAR((opline+1)->op1.var);
47189 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
47190 				HashTable *ht = Z_ARRVAL_P(object_ptr);
47191 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
47192 					GC_ADDREF(ht);
47193 				}
47194 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47195 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
47196 					zend_array_destroy(ht);
47197 					goto assign_dim_error;
47198 				}
47199 			}
47200 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
47201 				ZVAL_DEREF(value);
47202 			}
47203 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
47204 			if (UNEXPECTED(value == NULL)) {
47205 				zend_cannot_add_element();
47206 				goto assign_dim_error;
47207 			} else if (IS_CV == IS_CV) {
47208 				if (Z_REFCOUNTED_P(value)) {
47209 					Z_ADDREF_P(value);
47210 				}
47211 			} else if (IS_CV == IS_VAR) {
47212 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
47213 				if (Z_ISREF_P(free_op_data)) {
47214 					if (Z_REFCOUNTED_P(value)) {
47215 						Z_ADDREF_P(value);
47216 					}
47217 					zval_ptr_dtor_nogc(free_op_data);
47218 				}
47219 			} else if (IS_CV == IS_CONST) {
47220 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
47221 					Z_ADDREF_P(value);
47222 				}
47223 			}
47224 		} else {
47225 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47226 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47227 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47228 			} else {
47229 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47230 			}
47231 			if (UNEXPECTED(variable_ptr == NULL)) {
47232 				goto assign_dim_error;
47233 			}
47234 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
47235 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
47236 		}
47237 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47238 			ZVAL_COPY(EX_VAR(opline->result.var), value);
47239 		}
47240 		if (garbage) {
47241 			GC_DTOR_NO_REF(garbage);
47242 		}
47243 	} else {
47244 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
47245 			object_ptr = Z_REFVAL_P(object_ptr);
47246 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47247 				goto try_assign_dim_array;
47248 			}
47249 		}
47250 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
47251 			zend_object *obj = Z_OBJ_P(object_ptr);
47252 
47253 			GC_ADDREF(obj);
47254 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47255 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
47256 				dim = ZVAL_UNDEFINED_OP2();
47257 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
47258 				dim++;
47259 			}
47260 
47261 			value = EX_VAR((opline+1)->op1.var);
47262 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
47263 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47264 			} else if (IS_CV & (IS_CV|IS_VAR)) {
47265 				ZVAL_DEREF(value);
47266 			}
47267 
47268 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
47269 
47270 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
47271 				zend_objects_store_del(obj);
47272 			}
47273 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
47274 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
47275 				zend_use_new_element_for_string();
47276 
47277 				UNDEF_RESULT();
47278 			} else {
47279 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47280 				value = EX_VAR((opline+1)->op1.var);
47281 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
47282 
47283 			}
47284 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
47285 			if (Z_ISREF_P(orig_object_ptr)
47286 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
47287 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
47288 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47289 
47290 				UNDEF_RESULT();
47291 			} else {
47292 				HashTable *ht = zend_new_array(8);
47293 				uint8_t old_type = Z_TYPE_P(object_ptr);
47294 
47295 				ZVAL_ARR(object_ptr, ht);
47296 				if (UNEXPECTED(old_type == IS_FALSE)) {
47297 					GC_ADDREF(ht);
47298 					zend_false_to_array_deprecated();
47299 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
47300 						zend_array_destroy(ht);
47301 						goto assign_dim_error;
47302 					}
47303 				}
47304 				goto try_assign_dim_array;
47305 			}
47306 		} else {
47307 			zend_use_scalar_as_array();
47308 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47309 assign_dim_error:
47310 
47311 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47312 				ZVAL_NULL(EX_VAR(opline->result.var));
47313 			}
47314 		}
47315 	}
47316 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
47317 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47318 	}
47319 
47320 	/* assign_dim has two opcodes! */
47321 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47322 }
47323 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47324 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47325 {
47326 	USE_OPLINE
47327 	zval *property, *container, *value_ptr;
47328 
47329 	SAVE_OPLINE();
47330 
47331 	container = EX_VAR(opline->op1.var);
47332 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47333 
47334 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47335 
47336 	if (1) {
47337 		if (IS_CV == IS_UNUSED) {
47338 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47339 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47340 			} else {
47341 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47342 			}
47343 		} else {
47344 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47345 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47346 			} else {
47347 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47348 			}
47349 		}
47350 	} else {
47351 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
47352 	}
47353 
47354 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47355 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47356 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47357 }
47358 
47359 /* 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)47360 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47361 {
47362 	USE_OPLINE
47363 	zval *property, *container, *value_ptr;
47364 
47365 	SAVE_OPLINE();
47366 
47367 	container = EX_VAR(opline->op1.var);
47368 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47369 
47370 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
47371 
47372 	if (1) {
47373 		if (IS_CV == IS_UNUSED) {
47374 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47375 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47376 			} else {
47377 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47378 			}
47379 		} else {
47380 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47381 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47382 			} else {
47383 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47384 			}
47385 		}
47386 	} else {
47387 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
47388 	}
47389 
47390 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47391 
47392 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47393 }
47394 
47395 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47396 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47397 {
47398 	USE_OPLINE
47399 	zval *op1, *op2;
47400 	zend_string *op1_str, *op2_str, *str;
47401 
47402 
47403 	op1 = EX_VAR(opline->op1.var);
47404 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47405 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
47406 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
47407 		zend_string *op1_str = Z_STR_P(op1);
47408 		zend_string *op2_str = Z_STR_P(op2);
47409 		zend_string *str;
47410 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
47411 
47412 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
47413 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
47414 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
47415 			} else {
47416 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
47417 			}
47418 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47419 				zend_string_release_ex(op1_str, 0);
47420 			}
47421 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
47422 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
47423 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
47424 			} else {
47425 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
47426 			}
47427 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
47428 				zend_string_release_ex(op2_str, 0);
47429 			}
47430 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
47431 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
47432 			size_t len = ZSTR_LEN(op1_str);
47433 
47434 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
47435 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
47436 			GC_ADD_FLAGS(str, flags);
47437 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
47438 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
47439 				zend_string_release_ex(op2_str, 0);
47440 			}
47441 		} else {
47442 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
47443 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
47444 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
47445 			GC_ADD_FLAGS(str, flags);
47446 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
47447 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47448 				zend_string_release_ex(op1_str, 0);
47449 			}
47450 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
47451 				zend_string_release_ex(op2_str, 0);
47452 			}
47453 		}
47454 		ZEND_VM_NEXT_OPCODE();
47455 	}
47456 
47457 	SAVE_OPLINE();
47458 	if (IS_CV == IS_CONST) {
47459 		op1_str = Z_STR_P(op1);
47460 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
47461 		op1_str = zend_string_copy(Z_STR_P(op1));
47462 	} else {
47463 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
47464 			ZVAL_UNDEFINED_OP1();
47465 		}
47466 		op1_str = zval_get_string_func(op1);
47467 	}
47468 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47469 		op2_str = Z_STR_P(op2);
47470 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
47471 		op2_str = zend_string_copy(Z_STR_P(op2));
47472 	} else {
47473 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
47474 			ZVAL_UNDEFINED_OP2();
47475 		}
47476 		op2_str = zval_get_string_func(op2);
47477 	}
47478 	do {
47479 		if (IS_CV != IS_CONST) {
47480 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
47481 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47482 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
47483 						GC_ADDREF(op2_str);
47484 					}
47485 				}
47486 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
47487 				zend_string_release_ex(op1_str, 0);
47488 				break;
47489 			}
47490 		}
47491 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47492 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
47493 				if (IS_CV == IS_CONST) {
47494 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
47495 						GC_ADDREF(op1_str);
47496 					}
47497 				}
47498 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
47499 				zend_string_release_ex(op2_str, 0);
47500 				break;
47501 			}
47502 		}
47503 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
47504 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
47505 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
47506 
47507 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
47508 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
47509 		if (IS_CV != IS_CONST) {
47510 			zend_string_release_ex(op1_str, 0);
47511 		}
47512 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47513 			zend_string_release_ex(op2_str, 0);
47514 		}
47515 	} while (0);
47516 
47517 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47518 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47519 }
47520 
ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47521 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47522 {
47523 	USE_OPLINE
47524 	zval *function_name;
47525 	zval *object;
47526 	zend_function *fbc;
47527 	zend_class_entry *called_scope;
47528 	zend_object *obj;
47529 	zend_execute_data *call;
47530 	uint32_t call_info;
47531 
47532 	SAVE_OPLINE();
47533 
47534 	object = EX_VAR(opline->op1.var);
47535 
47536 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47537 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47538 	}
47539 
47540 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
47541 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
47542 		do {
47543 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
47544 				function_name = Z_REFVAL_P(function_name);
47545 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
47546 					break;
47547 				}
47548 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
47549 				ZVAL_UNDEFINED_OP2();
47550 				if (UNEXPECTED(EG(exception) != NULL)) {
47551 
47552 					HANDLE_EXCEPTION();
47553 				}
47554 			}
47555 			zend_throw_error(NULL, "Method name must be a string");
47556 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47557 
47558 			HANDLE_EXCEPTION();
47559 		} while (0);
47560 	}
47561 
47562 	if (IS_CV == IS_UNUSED) {
47563 		obj = Z_OBJ_P(object);
47564 	} else {
47565 		do {
47566 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
47567 				obj = Z_OBJ_P(object);
47568 			} else {
47569 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
47570 					zend_reference *ref = Z_REF_P(object);
47571 
47572 					object = &ref->val;
47573 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
47574 						obj = Z_OBJ_P(object);
47575 						if (IS_CV & IS_VAR) {
47576 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47577 								efree_size(ref, sizeof(zend_reference));
47578 							} else {
47579 								Z_ADDREF_P(object);
47580 							}
47581 						}
47582 						break;
47583 					}
47584 				}
47585 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
47586 					object = ZVAL_UNDEFINED_OP1();
47587 					if (UNEXPECTED(EG(exception) != NULL)) {
47588 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47589 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47590 						}
47591 						HANDLE_EXCEPTION();
47592 					}
47593 				}
47594 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47595 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47596 				}
47597 				zend_invalid_method_call(object, function_name);
47598 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47599 
47600 				HANDLE_EXCEPTION();
47601 			}
47602 		} while (0);
47603 	}
47604 
47605 	called_scope = obj->ce;
47606 
47607 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
47608 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
47609 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
47610 	} else {
47611 		zend_object *orig_obj = obj;
47612 
47613 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47614 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47615 		}
47616 
47617 		/* First, locate the function. */
47618 		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));
47619 		if (UNEXPECTED(fbc == NULL)) {
47620 			if (EXPECTED(!EG(exception))) {
47621 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
47622 			}
47623 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47624 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
47625 				zend_objects_store_del(orig_obj);
47626 			}
47627 			HANDLE_EXCEPTION();
47628 		}
47629 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
47630 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
47631 		    EXPECTED(obj == orig_obj)) {
47632 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
47633 		}
47634 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
47635 			GC_ADDREF(obj); /* For $this pointer */
47636 			if (GC_DELREF(orig_obj) == 0) {
47637 				zend_objects_store_del(orig_obj);
47638 			}
47639 		}
47640 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
47641 			init_func_run_time_cache(&fbc->op_array);
47642 		}
47643 	}
47644 
47645 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47646 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47647 	}
47648 
47649 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
47650 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
47651 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
47652 			zend_objects_store_del(obj);
47653 			if (UNEXPECTED(EG(exception))) {
47654 				HANDLE_EXCEPTION();
47655 			}
47656 		}
47657 		/* call static method */
47658 		obj = (zend_object*)called_scope;
47659 		call_info = ZEND_CALL_NESTED_FUNCTION;
47660 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
47661 		if (IS_CV == IS_CV) {
47662 			GC_ADDREF(obj); /* For $this pointer */
47663 		}
47664 		/* CV may be changed indirectly (e.g. when it's a reference) */
47665 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
47666 	}
47667 
47668 	call = zend_vm_stack_push_call_frame(call_info,
47669 		fbc, opline->extended_value, obj);
47670 	call->prev_execute_data = EX(call);
47671 	EX(call) = call;
47672 
47673 	ZEND_VM_NEXT_OPCODE();
47674 }
47675 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47676 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47677 {
47678 	USE_OPLINE
47679 	zval *expr_ptr, new_expr;
47680 
47681 	SAVE_OPLINE();
47682 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
47683 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
47684 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47685 		if (Z_ISREF_P(expr_ptr)) {
47686 			Z_ADDREF_P(expr_ptr);
47687 		} else {
47688 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
47689 		}
47690 
47691 	} else {
47692 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47693 		if (IS_CV == IS_TMP_VAR) {
47694 			/* pass */
47695 		} else if (IS_CV == IS_CONST) {
47696 			Z_TRY_ADDREF_P(expr_ptr);
47697 		} else if (IS_CV == IS_CV) {
47698 			ZVAL_DEREF(expr_ptr);
47699 			Z_TRY_ADDREF_P(expr_ptr);
47700 		} else /* if (IS_CV == IS_VAR) */ {
47701 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
47702 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
47703 
47704 				expr_ptr = Z_REFVAL_P(expr_ptr);
47705 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47706 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
47707 					expr_ptr = &new_expr;
47708 					efree_size(ref, sizeof(zend_reference));
47709 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
47710 					Z_ADDREF_P(expr_ptr);
47711 				}
47712 			}
47713 		}
47714 	}
47715 
47716 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
47717 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47718 		zend_string *str;
47719 		zend_ulong hval;
47720 
47721 add_again:
47722 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
47723 			str = Z_STR_P(offset);
47724 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47725 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
47726 					goto num_index;
47727 				}
47728 			}
47729 str_index:
47730 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
47731 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
47732 			hval = Z_LVAL_P(offset);
47733 num_index:
47734 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
47735 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
47736 			offset = Z_REFVAL_P(offset);
47737 			goto add_again;
47738 		} else if (Z_TYPE_P(offset) == IS_NULL) {
47739 			str = ZSTR_EMPTY_ALLOC();
47740 			goto str_index;
47741 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
47742 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
47743 			goto num_index;
47744 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
47745 			hval = 0;
47746 			goto num_index;
47747 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
47748 			hval = 1;
47749 			goto num_index;
47750 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
47751 			zend_use_resource_as_offset(offset);
47752 			hval = Z_RES_HANDLE_P(offset);
47753 			goto num_index;
47754 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
47755 			ZVAL_UNDEFINED_OP2();
47756 			str = ZSTR_EMPTY_ALLOC();
47757 			goto str_index;
47758 		} else {
47759 			zend_illegal_array_offset_access(offset);
47760 			zval_ptr_dtor_nogc(expr_ptr);
47761 		}
47762 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47763 	} else {
47764 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
47765 			zend_cannot_add_element();
47766 			zval_ptr_dtor_nogc(expr_ptr);
47767 		}
47768 	}
47769 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47770 }
47771 
ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47772 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47773 {
47774 	zval *array;
47775 	uint32_t size;
47776 	USE_OPLINE
47777 
47778 	array = EX_VAR(opline->result.var);
47779 	if (IS_CV != IS_UNUSED) {
47780 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
47781 		ZVAL_ARR(array, zend_new_array(size));
47782 		/* Explicitly initialize array as not-packed if flag is set */
47783 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
47784 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
47785 		}
47786 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47787 	} else {
47788 		ZVAL_ARR(array, zend_new_array(0));
47789 		ZEND_VM_NEXT_OPCODE();
47790 	}
47791 }
47792 
ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47793 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47794 {
47795 	USE_OPLINE
47796 	zval *container;
47797 	zval *offset;
47798 	zend_ulong hval;
47799 	zend_string *key;
47800 
47801 	SAVE_OPLINE();
47802 	container = EX_VAR(opline->op1.var);
47803 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47804 
47805 	do {
47806 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47807 			HashTable *ht;
47808 
47809 unset_dim_array:
47810 			SEPARATE_ARRAY(container);
47811 			ht = Z_ARRVAL_P(container);
47812 offset_again:
47813 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
47814 				key = Z_STR_P(offset);
47815 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47816 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
47817 						goto num_index_dim;
47818 					}
47819 				}
47820 str_index_dim:
47821 				ZEND_ASSERT(ht != &EG(symbol_table));
47822 				zend_hash_del(ht, key);
47823 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
47824 				hval = Z_LVAL_P(offset);
47825 num_index_dim:
47826 				zend_hash_index_del(ht, hval);
47827 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
47828 				offset = Z_REFVAL_P(offset);
47829 				goto offset_again;
47830 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
47831 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
47832 				goto num_index_dim;
47833 			} else if (Z_TYPE_P(offset) == IS_NULL) {
47834 				key = ZSTR_EMPTY_ALLOC();
47835 				goto str_index_dim;
47836 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
47837 				hval = 0;
47838 				goto num_index_dim;
47839 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
47840 				hval = 1;
47841 				goto num_index_dim;
47842 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
47843 				zend_use_resource_as_offset(offset);
47844 				hval = Z_RES_HANDLE_P(offset);
47845 				goto num_index_dim;
47846 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
47847 				ZVAL_UNDEFINED_OP2();
47848 				key = ZSTR_EMPTY_ALLOC();
47849 				goto str_index_dim;
47850 			} else {
47851 				zend_illegal_array_offset_unset(offset);
47852 			}
47853 			break;
47854 		} else if (Z_ISREF_P(container)) {
47855 			container = Z_REFVAL_P(container);
47856 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47857 				goto unset_dim_array;
47858 			}
47859 		}
47860 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47861 			container = ZVAL_UNDEFINED_OP1();
47862 		}
47863 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
47864 			offset = ZVAL_UNDEFINED_OP2();
47865 		}
47866 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
47867 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
47868 				offset++;
47869 			}
47870 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
47871 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
47872 			zend_throw_error(NULL, "Cannot unset string offsets");
47873 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
47874 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
47875 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
47876 			zend_false_to_array_deprecated();
47877 		}
47878 	} while (0);
47879 
47880 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47881 
47882 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47883 }
47884 
ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47885 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47886 {
47887 	USE_OPLINE
47888 	zval *container;
47889 	zval *offset;
47890 	zend_string *name, *tmp_name;
47891 
47892 	SAVE_OPLINE();
47893 	container = EX_VAR(opline->op1.var);
47894 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47895 
47896 	do {
47897 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
47898 			if (Z_ISREF_P(container)) {
47899 				container = Z_REFVAL_P(container);
47900 				if (Z_TYPE_P(container) != IS_OBJECT) {
47901 					if (IS_CV == IS_CV
47902 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47903 						ZVAL_UNDEFINED_OP1();
47904 					}
47905 					break;
47906 				}
47907 			} else {
47908 				break;
47909 			}
47910 		}
47911 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47912 			name = Z_STR_P(offset);
47913 		} else {
47914 			name = zval_try_get_tmp_string(offset, &tmp_name);
47915 			if (UNEXPECTED(!name)) {
47916 				break;
47917 			}
47918 		}
47919 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
47920 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47921 			zend_tmp_string_release(tmp_name);
47922 		}
47923 	} while (0);
47924 
47925 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47926 
47927 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47928 }
47929 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47930 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47931 {
47932 	USE_OPLINE
47933 	zval *container;
47934 	bool result;
47935 	zend_ulong hval;
47936 	zval *offset;
47937 
47938 	SAVE_OPLINE();
47939 	container = EX_VAR(opline->op1.var);
47940 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47941 
47942 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47943 		HashTable *ht;
47944 		zval *value;
47945 		zend_string *str;
47946 
47947 isset_dim_obj_array:
47948 		ht = Z_ARRVAL_P(container);
47949 isset_again:
47950 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
47951 			str = Z_STR_P(offset);
47952 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47953 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
47954 					goto num_index_prop;
47955 				}
47956 			}
47957 			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
47958 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
47959 			hval = Z_LVAL_P(offset);
47960 num_index_prop:
47961 			value = zend_hash_index_find(ht, hval);
47962 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
47963 			offset = Z_REFVAL_P(offset);
47964 			goto isset_again;
47965 		} else {
47966 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
47967 			if (UNEXPECTED(EG(exception))) {
47968 				result = 0;
47969 				goto isset_dim_obj_exit;
47970 			}
47971 		}
47972 
47973 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
47974 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
47975 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
47976 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
47977 
47978 			if (IS_CV & (IS_CONST|IS_CV)) {
47979 				/* avoid exception check */
47980 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47981 				ZEND_VM_SMART_BRANCH(result, 0);
47982 			}
47983 		} else {
47984 			result = (value == NULL || !i_zend_is_true(value));
47985 		}
47986 		goto isset_dim_obj_exit;
47987 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
47988 		container = Z_REFVAL_P(container);
47989 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47990 			goto isset_dim_obj_array;
47991 		}
47992 	}
47993 
47994 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
47995 		offset++;
47996 	}
47997 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
47998 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
47999 	} else {
48000 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
48001 	}
48002 
48003 isset_dim_obj_exit:
48004 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48005 
48006 	ZEND_VM_SMART_BRANCH(result, 1);
48007 }
48008 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48009 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48010 {
48011 	USE_OPLINE
48012 	zval *container;
48013 	int result;
48014 	zval *offset;
48015 	zend_string *name, *tmp_name;
48016 
48017 	SAVE_OPLINE();
48018 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
48019 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
48020 
48021 	if (IS_CV == IS_CONST ||
48022 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
48023 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
48024 			container = Z_REFVAL_P(container);
48025 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
48026 				result = (opline->extended_value & ZEND_ISEMPTY);
48027 				goto isset_object_finish;
48028 			}
48029 		} else {
48030 			result = (opline->extended_value & ZEND_ISEMPTY);
48031 			goto isset_object_finish;
48032 		}
48033 	}
48034 
48035 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
48036 		name = Z_STR_P(offset);
48037 	} else {
48038 		name = zval_try_get_tmp_string(offset, &tmp_name);
48039 		if (UNEXPECTED(!name)) {
48040 			result = 0;
48041 			goto isset_object_finish;
48042 		}
48043 	}
48044 
48045 	result =
48046 		(opline->extended_value & ZEND_ISEMPTY) ^
48047 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
48048 
48049 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
48050 		zend_tmp_string_release(tmp_name);
48051 	}
48052 
48053 isset_object_finish:
48054 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48055 
48056 	ZEND_VM_SMART_BRANCH(result, 1);
48057 }
48058 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48060 {
48061 	USE_OPLINE
48062 
48063 	zval *key, *subject;
48064 	HashTable *ht;
48065 	bool result;
48066 
48067 	SAVE_OPLINE();
48068 
48069 	key = EX_VAR(opline->op1.var);
48070 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
48071 
48072 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
48073 array_key_exists_array:
48074 		ht = Z_ARRVAL_P(subject);
48075 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
48076 	} else {
48077 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
48078 			subject = Z_REFVAL_P(subject);
48079 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
48080 				goto array_key_exists_array;
48081 			}
48082 		}
48083 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
48084 		result = 0;
48085 	}
48086 
48087 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48088 
48089 	ZEND_VM_SMART_BRANCH(result, 1);
48090 }
48091 
48092 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48093 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48094 {
48095 	USE_OPLINE
48096 
48097 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
48098 
48099 	SAVE_OPLINE();
48100 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
48101 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48102 	}
48103 
48104 	/* Destroy the previously yielded value */
48105 	zval_ptr_dtor(&generator->value);
48106 
48107 	/* Destroy the previously yielded key */
48108 	zval_ptr_dtor(&generator->key);
48109 
48110 	/* Set the new yielded value */
48111 	if (IS_CV != IS_UNUSED) {
48112 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
48113 			/* Constants and temporary variables aren't yieldable by reference,
48114 			 * but we still allow them with a notice. */
48115 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
48116 				zval *value;
48117 
48118 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
48119 
48120 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48121 				ZVAL_COPY_VALUE(&generator->value, value);
48122 				if (IS_CV == IS_CONST) {
48123 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
48124 						Z_ADDREF(generator->value);
48125 					}
48126 				}
48127 			} else {
48128 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
48129 
48130 				/* If a function call result is yielded and the function did
48131 				 * not return by reference we throw a notice. */
48132 				do {
48133 					if (IS_CV == IS_VAR) {
48134 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
48135 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
48136 						 && !Z_ISREF_P(value_ptr)) {
48137 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
48138 							ZVAL_COPY(&generator->value, value_ptr);
48139 							break;
48140 						}
48141 					}
48142 					if (Z_ISREF_P(value_ptr)) {
48143 						Z_ADDREF_P(value_ptr);
48144 					} else {
48145 						ZVAL_MAKE_REF_EX(value_ptr, 2);
48146 					}
48147 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
48148 				} while (0);
48149 
48150 			}
48151 		} else {
48152 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48153 
48154 			/* Consts, temporary variables and references need copying */
48155 			if (IS_CV == IS_CONST) {
48156 				ZVAL_COPY_VALUE(&generator->value, value);
48157 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
48158 					Z_ADDREF(generator->value);
48159 				}
48160 			} else if (IS_CV == IS_TMP_VAR) {
48161 				ZVAL_COPY_VALUE(&generator->value, value);
48162 			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
48163 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
48164 
48165 			} else {
48166 				ZVAL_COPY_VALUE(&generator->value, value);
48167 				if (IS_CV == IS_CV) {
48168 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
48169 				}
48170 			}
48171 		}
48172 	} else {
48173 		/* If no value was specified yield null */
48174 		ZVAL_NULL(&generator->value);
48175 	}
48176 
48177 	/* Set the new yielded key */
48178 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
48179 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
48180 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
48181 			key = Z_REFVAL_P(key);
48182 		}
48183 		ZVAL_COPY(&generator->key, key);
48184 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48185 
48186 		if (Z_TYPE(generator->key) == IS_LONG
48187 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
48188 		) {
48189 			generator->largest_used_integer_key = Z_LVAL(generator->key);
48190 		}
48191 	} else {
48192 		/* If no key was specified we use auto-increment keys */
48193 		generator->largest_used_integer_key++;
48194 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
48195 	}
48196 
48197 	if (RETURN_VALUE_USED(opline)) {
48198 		/* If the return value of yield is used set the send
48199 		 * target and initialize it to NULL */
48200 		generator->send_target = EX_VAR(opline->result.var);
48201 		ZVAL_NULL(generator->send_target);
48202 	} else {
48203 		generator->send_target = NULL;
48204 	}
48205 
48206 	/* We increment to the next op, so we are at the correct position when the
48207 	 * generator is resumed. */
48208 	ZEND_VM_INC_OPCODE();
48209 
48210 	/* The GOTO VM uses a local opline variable. We need to set the opline
48211 	 * variable in execute_data so we don't resume at an old position. */
48212 	SAVE_OPLINE();
48213 
48214 	ZEND_VM_RETURN();
48215 }
48216 
ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48218 {
48219 	USE_OPLINE
48220 	zval *op1, *op2;
48221 	bool result;
48222 
48223 	SAVE_OPLINE();
48224 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48225 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
48226 	result = fast_is_identical_function(op1, op2);
48227 
48228 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48229 	ZEND_VM_SMART_BRANCH(result, 1);
48230 }
48231 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48232 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48233 {
48234 	USE_OPLINE
48235 	zval *op1, *op2;
48236 	bool result;
48237 
48238 	SAVE_OPLINE();
48239 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48240 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
48241 	result = fast_is_not_identical_function(op1, op2);
48242 
48243 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48244 	ZEND_VM_SMART_BRANCH(result, 1);
48245 }
48246 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48247 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48248 {
48249 	USE_OPLINE
48250 	zval *value;
48251 	zval *variable_ptr;
48252 
48253 	SAVE_OPLINE();
48254 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
48255 	variable_ptr = EX_VAR(opline->op1.var);
48256 
48257 	if (0 || UNEXPECTED(0)) {
48258 		zend_refcounted *garbage = NULL;
48259 
48260 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
48261 		if (UNEXPECTED(0)) {
48262 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48263 		}
48264 		if (garbage) {
48265 			GC_DTOR_NO_REF(garbage);
48266 		}
48267 	} else {
48268 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
48269 	}
48270 
48271 	/* zend_assign_to_variable() always takes care of op2, never free it! */
48272 
48273 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48274 }
48275 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48276 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48277 {
48278 	USE_OPLINE
48279 	zval *value;
48280 	zval *variable_ptr;
48281 
48282 	SAVE_OPLINE();
48283 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
48284 	variable_ptr = EX_VAR(opline->op1.var);
48285 
48286 	if (0 || UNEXPECTED(1)) {
48287 		zend_refcounted *garbage = NULL;
48288 
48289 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
48290 		if (UNEXPECTED(1)) {
48291 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48292 		}
48293 		if (garbage) {
48294 			GC_DTOR_NO_REF(garbage);
48295 		}
48296 	} else {
48297 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
48298 	}
48299 
48300 	/* zend_assign_to_variable() always takes care of op2, never free it! */
48301 
48302 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48303 }
48304 
ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48305 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48306 {
48307 	USE_OPLINE
48308 	zval *op1, *op2;
48309 	bool result;
48310 
48311 	SAVE_OPLINE();
48312 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48313 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
48314 	result = fast_is_identical_function(op1, op2);
48315 
48316 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48317 	ZEND_VM_SMART_BRANCH(result, 1);
48318 }
48319 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48320 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48321 {
48322 	USE_OPLINE
48323 	zval *op1, *op2;
48324 	bool result;
48325 
48326 	SAVE_OPLINE();
48327 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48328 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
48329 	result = fast_is_not_identical_function(op1, op2);
48330 
48331 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48332 	ZEND_VM_SMART_BRANCH(result, 1);
48333 }
48334 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48335 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48336 {
48337 	USE_OPLINE
48338 	zval *value;
48339 	zval *variable_ptr;
48340 
48341 	SAVE_OPLINE();
48342 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
48343 	variable_ptr = EX_VAR(opline->op1.var);
48344 
48345 	if (0 || UNEXPECTED(0)) {
48346 		zend_refcounted *garbage = NULL;
48347 
48348 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
48349 		if (UNEXPECTED(0)) {
48350 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48351 		}
48352 		if (garbage) {
48353 			GC_DTOR_NO_REF(garbage);
48354 		}
48355 	} else {
48356 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
48357 	}
48358 
48359 	/* zend_assign_to_variable() always takes care of op2, never free it! */
48360 
48361 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48362 }
48363 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48364 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48365 {
48366 	USE_OPLINE
48367 	zval *value;
48368 	zval *variable_ptr;
48369 
48370 	SAVE_OPLINE();
48371 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
48372 	variable_ptr = EX_VAR(opline->op1.var);
48373 
48374 	if (0 || UNEXPECTED(1)) {
48375 		zend_refcounted *garbage = NULL;
48376 
48377 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
48378 		if (UNEXPECTED(1)) {
48379 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48380 		}
48381 		if (garbage) {
48382 			GC_DTOR_NO_REF(garbage);
48383 		}
48384 	} else {
48385 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
48386 	}
48387 
48388 	/* zend_assign_to_variable() always takes care of op2, never free it! */
48389 
48390 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48391 }
48392 
ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48394 {
48395 	USE_OPLINE
48396 	zval *variable_ptr;
48397 	zval *value_ptr;
48398 	zend_refcounted *garbage = NULL;
48399 
48400 	SAVE_OPLINE();
48401 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
48402 	variable_ptr = EX_VAR(opline->op1.var);
48403 
48404 	if (IS_CV == IS_VAR &&
48405 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
48406 
48407 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
48408 		variable_ptr = &EG(uninitialized_zval);
48409 	} else if (IS_VAR == IS_VAR &&
48410 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
48411 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
48412 
48413 		variable_ptr = zend_wrong_assign_to_variable_reference(
48414 			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
48415 	} else {
48416 		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
48417 	}
48418 
48419 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48420 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
48421 	}
48422 
48423 	if (garbage) {
48424 		GC_DTOR(garbage);
48425 	}
48426 
48427 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48428 
48429 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48430 }
48431 
ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48432 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48433 {
48434 	USE_OPLINE
48435 	zval *expr;
48436 	bool result;
48437 
48438 	SAVE_OPLINE();
48439 	expr = EX_VAR(opline->op1.var);
48440 
48441 try_instanceof:
48442 	if (Z_TYPE_P(expr) == IS_OBJECT) {
48443 		zend_class_entry *ce;
48444 
48445 		if (IS_VAR == IS_CONST) {
48446 			ce = CACHED_PTR(opline->extended_value);
48447 			if (UNEXPECTED(ce == NULL)) {
48448 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
48449 				if (EXPECTED(ce)) {
48450 					CACHE_PTR(opline->extended_value, ce);
48451 				}
48452 			}
48453 		} else if (IS_VAR == IS_UNUSED) {
48454 			ce = zend_fetch_class(NULL, opline->op2.num);
48455 			if (UNEXPECTED(ce == NULL)) {
48456 
48457 				ZVAL_UNDEF(EX_VAR(opline->result.var));
48458 				HANDLE_EXCEPTION();
48459 			}
48460 		} else {
48461 			ce = Z_CE_P(EX_VAR(opline->op2.var));
48462 		}
48463 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
48464 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
48465 		expr = Z_REFVAL_P(expr);
48466 		goto try_instanceof;
48467 	} else {
48468 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
48469 			ZVAL_UNDEFINED_OP1();
48470 		}
48471 		result = 0;
48472 	}
48473 
48474 	ZEND_VM_SMART_BRANCH(result, 1);
48475 }
48476 
ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48477 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48478 {
48479 	USE_OPLINE
48480 	zval *var_ptr;
48481 	zval *value, *container, *dim;
48482 	HashTable *ht;
48483 
48484 	SAVE_OPLINE();
48485 	container = EX_VAR(opline->op1.var);
48486 
48487 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48488 assign_dim_op_array:
48489 		SEPARATE_ARRAY(container);
48490 		ht = Z_ARRVAL_P(container);
48491 assign_dim_op_new_array:
48492 		dim = NULL;
48493 		if (IS_UNUSED == IS_UNUSED) {
48494 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
48495 			if (UNEXPECTED(!var_ptr)) {
48496 				zend_cannot_add_element();
48497 				goto assign_dim_op_ret_null;
48498 			}
48499 		} else {
48500 			if (IS_UNUSED == IS_CONST) {
48501 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
48502 			} else {
48503 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
48504 			}
48505 			if (UNEXPECTED(!var_ptr)) {
48506 				goto assign_dim_op_ret_null;
48507 			}
48508 		}
48509 
48510 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
48511 
48512 		do {
48513 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
48514 				zend_reference *ref = Z_REF_P(var_ptr);
48515 				var_ptr = Z_REFVAL_P(var_ptr);
48516 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
48517 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
48518 					break;
48519 				}
48520 			}
48521 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
48522 		} while (0);
48523 
48524 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48525 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
48526 		}
48527 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
48528 	} else {
48529 		if (EXPECTED(Z_ISREF_P(container))) {
48530 			container = Z_REFVAL_P(container);
48531 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48532 				goto assign_dim_op_array;
48533 			}
48534 		}
48535 
48536 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
48537 			zend_object *obj = Z_OBJ_P(container);
48538 
48539 			dim = NULL;
48540 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48541 				dim++;
48542 			}
48543 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
48544 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
48545 			uint8_t old_type;
48546 
48547 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
48548 				ZVAL_UNDEFINED_OP1();
48549 			}
48550 			ht = zend_new_array(8);
48551 			old_type = Z_TYPE_P(container);
48552 			ZVAL_ARR(container, ht);
48553 			if (UNEXPECTED(old_type == IS_FALSE)) {
48554 				GC_ADDREF(ht);
48555 				zend_false_to_array_deprecated();
48556 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
48557 					zend_array_destroy(ht);
48558 					goto assign_dim_op_ret_null;
48559 				}
48560 			}
48561 			goto assign_dim_op_new_array;
48562 		} else {
48563 			dim = NULL;
48564 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
48565 assign_dim_op_ret_null:
48566 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
48567 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48568 				ZVAL_NULL(EX_VAR(opline->result.var));
48569 			}
48570 		}
48571 	}
48572 
48573 
48574 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48575 }
48576 
zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)48577 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)
48578 {
48579 	USE_OPLINE
48580 	zval *varname;
48581 	zval *retval;
48582 	zend_string *name, *tmp_name;
48583 	HashTable *target_symbol_table;
48584 
48585 	SAVE_OPLINE();
48586 	varname = EX_VAR(opline->op1.var);
48587 
48588 	if (IS_CV == IS_CONST) {
48589 		name = Z_STR_P(varname);
48590 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
48591 		name = Z_STR_P(varname);
48592 		tmp_name = NULL;
48593 	} else {
48594 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
48595 			ZVAL_UNDEFINED_OP1();
48596 		}
48597 		name = zval_try_get_tmp_string(varname, &tmp_name);
48598 		if (UNEXPECTED(!name)) {
48599 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
48600 
48601 			}
48602 			ZVAL_UNDEF(EX_VAR(opline->result.var));
48603 			HANDLE_EXCEPTION();
48604 		}
48605 	}
48606 
48607 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
48608 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
48609 	if (retval == NULL) {
48610 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
48611 fetch_this:
48612 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
48613 			if (IS_CV != IS_CONST) {
48614 				zend_tmp_string_release(tmp_name);
48615 			}
48616 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48617 		}
48618 		if (type == BP_VAR_W) {
48619 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
48620 		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
48621 			retval = &EG(uninitialized_zval);
48622 		} else {
48623 			if (IS_CV == IS_CV) {
48624 				/* Keep name alive in case an error handler tries to free it. */
48625 				zend_string_addref(name);
48626 			}
48627 			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
48628 				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
48629 			if (type == BP_VAR_RW && !EG(exception)) {
48630 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
48631 			} else {
48632 				retval = &EG(uninitialized_zval);
48633 			}
48634 			if (IS_CV == IS_CV) {
48635 				zend_string_release(name);
48636 			}
48637 		}
48638 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
48639 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
48640 		retval = Z_INDIRECT_P(retval);
48641 		if (Z_TYPE_P(retval) == IS_UNDEF) {
48642 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
48643 				goto fetch_this;
48644 			}
48645 			if (type == BP_VAR_W) {
48646 				ZVAL_NULL(retval);
48647 			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
48648 				retval = &EG(uninitialized_zval);
48649 			} else {
48650 				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
48651 					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
48652 				if (type == BP_VAR_RW && !EG(exception)) {
48653 					ZVAL_NULL(retval);
48654 				} else {
48655 					retval = &EG(uninitialized_zval);
48656 				}
48657 			}
48658 		}
48659 	}
48660 
48661 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
48662 
48663 	}
48664 
48665 	if (IS_CV != IS_CONST) {
48666 		zend_tmp_string_release(tmp_name);
48667 	}
48668 
48669 	ZEND_ASSERT(retval != NULL);
48670 	if (type == BP_VAR_R || type == BP_VAR_IS) {
48671 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
48672 	} else {
48673 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
48674 	}
48675 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48676 }
48677 
ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48678 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48679 {
48680 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48681 }
48682 
ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48683 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48684 {
48685 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48686 }
48687 
ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48688 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48689 {
48690 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48691 }
48692 
ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48693 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48694 {
48695 	int fetch_type =
48696 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
48697 			BP_VAR_W : BP_VAR_R;
48698 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48699 }
48700 
ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48701 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48702 {
48703 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48704 }
48705 
ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48706 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48707 {
48708 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48709 }
48710 
48711 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48712 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48713 {
48714 	USE_OPLINE
48715 	zval *container;
48716 
48717 	SAVE_OPLINE();
48718 	container = EX_VAR(opline->op1.var);
48719 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
48720 
48721 	if (IS_CV == IS_VAR) {
48722 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
48723 	}
48724 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48725 }
48726 
ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48727 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48728 {
48729 	USE_OPLINE
48730 	zval *container;
48731 
48732 	SAVE_OPLINE();
48733 	container = EX_VAR(opline->op1.var);
48734 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
48735 
48736 	if (IS_CV == IS_VAR) {
48737 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
48738 	}
48739 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48740 }
48741 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48743 {
48744 #if 0
48745 	USE_OPLINE
48746 #endif
48747 
48748 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
48749 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
48750 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48751 		}
48752 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48753 	} else {
48754 		if (IS_UNUSED == IS_UNUSED) {
48755 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48756 		}
48757 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48758 	}
48759 }
48760 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48761 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48762 {
48763 	USE_OPLINE
48764 	zval *object_ptr, *orig_object_ptr;
48765 	zval *value;
48766 	zval *variable_ptr;
48767 	zval *dim;
48768 	zend_refcounted *garbage = NULL;
48769 
48770 	SAVE_OPLINE();
48771 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48772 
48773 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48774 try_assign_dim_array:
48775 		SEPARATE_ARRAY(object_ptr);
48776 		if (IS_UNUSED == IS_UNUSED) {
48777 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
48778 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
48779 				HashTable *ht = Z_ARRVAL_P(object_ptr);
48780 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
48781 					GC_ADDREF(ht);
48782 				}
48783 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48784 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
48785 					zend_array_destroy(ht);
48786 					goto assign_dim_error;
48787 				}
48788 			}
48789 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
48790 				ZVAL_DEREF(value);
48791 			}
48792 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48793 			if (UNEXPECTED(value == NULL)) {
48794 				zend_cannot_add_element();
48795 				goto assign_dim_error;
48796 			} else if (IS_CONST == IS_CV) {
48797 				if (Z_REFCOUNTED_P(value)) {
48798 					Z_ADDREF_P(value);
48799 				}
48800 			} else if (IS_CONST == IS_VAR) {
48801 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
48802 				if (Z_ISREF_P(free_op_data)) {
48803 					if (Z_REFCOUNTED_P(value)) {
48804 						Z_ADDREF_P(value);
48805 					}
48806 					zval_ptr_dtor_nogc(free_op_data);
48807 				}
48808 			} else if (IS_CONST == IS_CONST) {
48809 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48810 					Z_ADDREF_P(value);
48811 				}
48812 			}
48813 		} else {
48814 			dim = NULL;
48815 			if (IS_UNUSED == IS_CONST) {
48816 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48817 			} else {
48818 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48819 			}
48820 			if (UNEXPECTED(variable_ptr == NULL)) {
48821 				goto assign_dim_error;
48822 			}
48823 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
48824 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
48825 		}
48826 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48827 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48828 		}
48829 		if (garbage) {
48830 			GC_DTOR_NO_REF(garbage);
48831 		}
48832 	} else {
48833 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48834 			object_ptr = Z_REFVAL_P(object_ptr);
48835 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48836 				goto try_assign_dim_array;
48837 			}
48838 		}
48839 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
48840 			zend_object *obj = Z_OBJ_P(object_ptr);
48841 
48842 			GC_ADDREF(obj);
48843 			dim = NULL;
48844 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
48845 				dim = ZVAL_UNDEFINED_OP2();
48846 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48847 				dim++;
48848 			}
48849 
48850 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
48851 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
48852 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48853 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
48854 				ZVAL_DEREF(value);
48855 			}
48856 
48857 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
48858 
48859 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
48860 				zend_objects_store_del(obj);
48861 			}
48862 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
48863 			if (IS_UNUSED == IS_UNUSED) {
48864 				zend_use_new_element_for_string();
48865 
48866 				UNDEF_RESULT();
48867 			} else {
48868 				dim = NULL;
48869 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
48870 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48871 
48872 			}
48873 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
48874 			if (Z_ISREF_P(orig_object_ptr)
48875 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
48876 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
48877 				dim = NULL;
48878 
48879 				UNDEF_RESULT();
48880 			} else {
48881 				HashTable *ht = zend_new_array(8);
48882 				uint8_t old_type = Z_TYPE_P(object_ptr);
48883 
48884 				ZVAL_ARR(object_ptr, ht);
48885 				if (UNEXPECTED(old_type == IS_FALSE)) {
48886 					GC_ADDREF(ht);
48887 					zend_false_to_array_deprecated();
48888 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
48889 						zend_array_destroy(ht);
48890 						goto assign_dim_error;
48891 					}
48892 				}
48893 				goto try_assign_dim_array;
48894 			}
48895 		} else {
48896 			zend_use_scalar_as_array();
48897 			dim = NULL;
48898 assign_dim_error:
48899 
48900 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48901 				ZVAL_NULL(EX_VAR(opline->result.var));
48902 			}
48903 		}
48904 	}
48905 	if (IS_UNUSED != IS_UNUSED) {
48906 
48907 	}
48908 
48909 	/* assign_dim has two opcodes! */
48910 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48911 }
48912 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48913 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48914 {
48915 	USE_OPLINE
48916 	zval *object_ptr, *orig_object_ptr;
48917 	zval *value;
48918 	zval *variable_ptr;
48919 	zval *dim;
48920 	zend_refcounted *garbage = NULL;
48921 
48922 	SAVE_OPLINE();
48923 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48924 
48925 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48926 try_assign_dim_array:
48927 		SEPARATE_ARRAY(object_ptr);
48928 		if (IS_UNUSED == IS_UNUSED) {
48929 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
48930 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
48931 				HashTable *ht = Z_ARRVAL_P(object_ptr);
48932 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
48933 					GC_ADDREF(ht);
48934 				}
48935 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48936 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
48937 					zend_array_destroy(ht);
48938 					goto assign_dim_error;
48939 				}
48940 			}
48941 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
48942 				ZVAL_DEREF(value);
48943 			}
48944 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48945 			if (UNEXPECTED(value == NULL)) {
48946 				zend_cannot_add_element();
48947 				goto assign_dim_error;
48948 			} else if (IS_TMP_VAR == IS_CV) {
48949 				if (Z_REFCOUNTED_P(value)) {
48950 					Z_ADDREF_P(value);
48951 				}
48952 			} else if (IS_TMP_VAR == IS_VAR) {
48953 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
48954 				if (Z_ISREF_P(free_op_data)) {
48955 					if (Z_REFCOUNTED_P(value)) {
48956 						Z_ADDREF_P(value);
48957 					}
48958 					zval_ptr_dtor_nogc(free_op_data);
48959 				}
48960 			} else if (IS_TMP_VAR == IS_CONST) {
48961 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48962 					Z_ADDREF_P(value);
48963 				}
48964 			}
48965 		} else {
48966 			dim = NULL;
48967 			if (IS_UNUSED == IS_CONST) {
48968 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48969 			} else {
48970 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48971 			}
48972 			if (UNEXPECTED(variable_ptr == NULL)) {
48973 				goto assign_dim_error;
48974 			}
48975 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
48976 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
48977 		}
48978 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48979 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48980 		}
48981 		if (garbage) {
48982 			GC_DTOR_NO_REF(garbage);
48983 		}
48984 	} else {
48985 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48986 			object_ptr = Z_REFVAL_P(object_ptr);
48987 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48988 				goto try_assign_dim_array;
48989 			}
48990 		}
48991 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
48992 			zend_object *obj = Z_OBJ_P(object_ptr);
48993 
48994 			GC_ADDREF(obj);
48995 			dim = NULL;
48996 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
48997 				dim = ZVAL_UNDEFINED_OP2();
48998 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48999 				dim++;
49000 			}
49001 
49002 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
49003 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
49004 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
49005 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
49006 				ZVAL_DEREF(value);
49007 			}
49008 
49009 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
49010 
49011 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49012 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
49013 				zend_objects_store_del(obj);
49014 			}
49015 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
49016 			if (IS_UNUSED == IS_UNUSED) {
49017 				zend_use_new_element_for_string();
49018 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49019 				UNDEF_RESULT();
49020 			} else {
49021 				dim = NULL;
49022 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
49023 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
49024 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49025 			}
49026 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
49027 			if (Z_ISREF_P(orig_object_ptr)
49028 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
49029 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
49030 				dim = NULL;
49031 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49032 				UNDEF_RESULT();
49033 			} else {
49034 				HashTable *ht = zend_new_array(8);
49035 				uint8_t old_type = Z_TYPE_P(object_ptr);
49036 
49037 				ZVAL_ARR(object_ptr, ht);
49038 				if (UNEXPECTED(old_type == IS_FALSE)) {
49039 					GC_ADDREF(ht);
49040 					zend_false_to_array_deprecated();
49041 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
49042 						zend_array_destroy(ht);
49043 						goto assign_dim_error;
49044 					}
49045 				}
49046 				goto try_assign_dim_array;
49047 			}
49048 		} else {
49049 			zend_use_scalar_as_array();
49050 			dim = NULL;
49051 assign_dim_error:
49052 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49053 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49054 				ZVAL_NULL(EX_VAR(opline->result.var));
49055 			}
49056 		}
49057 	}
49058 	if (IS_UNUSED != IS_UNUSED) {
49059 
49060 	}
49061 
49062 	/* assign_dim has two opcodes! */
49063 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49064 }
49065 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49066 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49067 {
49068 	USE_OPLINE
49069 	zval *object_ptr, *orig_object_ptr;
49070 	zval *value;
49071 	zval *variable_ptr;
49072 	zval *dim;
49073 	zend_refcounted *garbage = NULL;
49074 
49075 	SAVE_OPLINE();
49076 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
49077 
49078 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
49079 try_assign_dim_array:
49080 		SEPARATE_ARRAY(object_ptr);
49081 		if (IS_UNUSED == IS_UNUSED) {
49082 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
49083 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
49084 				HashTable *ht = Z_ARRVAL_P(object_ptr);
49085 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
49086 					GC_ADDREF(ht);
49087 				}
49088 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
49089 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
49090 					zend_array_destroy(ht);
49091 					goto assign_dim_error;
49092 				}
49093 			}
49094 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
49095 				ZVAL_DEREF(value);
49096 			}
49097 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
49098 			if (UNEXPECTED(value == NULL)) {
49099 				zend_cannot_add_element();
49100 				goto assign_dim_error;
49101 			} else if (IS_VAR == IS_CV) {
49102 				if (Z_REFCOUNTED_P(value)) {
49103 					Z_ADDREF_P(value);
49104 				}
49105 			} else if (IS_VAR == IS_VAR) {
49106 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
49107 				if (Z_ISREF_P(free_op_data)) {
49108 					if (Z_REFCOUNTED_P(value)) {
49109 						Z_ADDREF_P(value);
49110 					}
49111 					zval_ptr_dtor_nogc(free_op_data);
49112 				}
49113 			} else if (IS_VAR == IS_CONST) {
49114 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
49115 					Z_ADDREF_P(value);
49116 				}
49117 			}
49118 		} else {
49119 			dim = NULL;
49120 			if (IS_UNUSED == IS_CONST) {
49121 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
49122 			} else {
49123 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
49124 			}
49125 			if (UNEXPECTED(variable_ptr == NULL)) {
49126 				goto assign_dim_error;
49127 			}
49128 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
49129 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
49130 		}
49131 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49132 			ZVAL_COPY(EX_VAR(opline->result.var), value);
49133 		}
49134 		if (garbage) {
49135 			GC_DTOR_NO_REF(garbage);
49136 		}
49137 	} else {
49138 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
49139 			object_ptr = Z_REFVAL_P(object_ptr);
49140 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
49141 				goto try_assign_dim_array;
49142 			}
49143 		}
49144 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
49145 			zend_object *obj = Z_OBJ_P(object_ptr);
49146 
49147 			GC_ADDREF(obj);
49148 			dim = NULL;
49149 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
49150 				dim = ZVAL_UNDEFINED_OP2();
49151 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
49152 				dim++;
49153 			}
49154 
49155 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
49156 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
49157 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
49158 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
49159 				ZVAL_DEREF(value);
49160 			}
49161 
49162 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
49163 
49164 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49165 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
49166 				zend_objects_store_del(obj);
49167 			}
49168 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
49169 			if (IS_UNUSED == IS_UNUSED) {
49170 				zend_use_new_element_for_string();
49171 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49172 				UNDEF_RESULT();
49173 			} else {
49174 				dim = NULL;
49175 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
49176 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
49177 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49178 			}
49179 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
49180 			if (Z_ISREF_P(orig_object_ptr)
49181 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
49182 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
49183 				dim = NULL;
49184 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49185 				UNDEF_RESULT();
49186 			} else {
49187 				HashTable *ht = zend_new_array(8);
49188 				uint8_t old_type = Z_TYPE_P(object_ptr);
49189 
49190 				ZVAL_ARR(object_ptr, ht);
49191 				if (UNEXPECTED(old_type == IS_FALSE)) {
49192 					GC_ADDREF(ht);
49193 					zend_false_to_array_deprecated();
49194 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
49195 						zend_array_destroy(ht);
49196 						goto assign_dim_error;
49197 					}
49198 				}
49199 				goto try_assign_dim_array;
49200 			}
49201 		} else {
49202 			zend_use_scalar_as_array();
49203 			dim = NULL;
49204 assign_dim_error:
49205 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49206 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49207 				ZVAL_NULL(EX_VAR(opline->result.var));
49208 			}
49209 		}
49210 	}
49211 	if (IS_UNUSED != IS_UNUSED) {
49212 
49213 	}
49214 
49215 	/* assign_dim has two opcodes! */
49216 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49217 }
49218 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49220 {
49221 	USE_OPLINE
49222 	zval *object_ptr, *orig_object_ptr;
49223 	zval *value;
49224 	zval *variable_ptr;
49225 	zval *dim;
49226 	zend_refcounted *garbage = NULL;
49227 
49228 	SAVE_OPLINE();
49229 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
49230 
49231 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
49232 try_assign_dim_array:
49233 		SEPARATE_ARRAY(object_ptr);
49234 		if (IS_UNUSED == IS_UNUSED) {
49235 			value = EX_VAR((opline+1)->op1.var);
49236 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
49237 				HashTable *ht = Z_ARRVAL_P(object_ptr);
49238 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
49239 					GC_ADDREF(ht);
49240 				}
49241 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
49242 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
49243 					zend_array_destroy(ht);
49244 					goto assign_dim_error;
49245 				}
49246 			}
49247 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
49248 				ZVAL_DEREF(value);
49249 			}
49250 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
49251 			if (UNEXPECTED(value == NULL)) {
49252 				zend_cannot_add_element();
49253 				goto assign_dim_error;
49254 			} else if (IS_CV == IS_CV) {
49255 				if (Z_REFCOUNTED_P(value)) {
49256 					Z_ADDREF_P(value);
49257 				}
49258 			} else if (IS_CV == IS_VAR) {
49259 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
49260 				if (Z_ISREF_P(free_op_data)) {
49261 					if (Z_REFCOUNTED_P(value)) {
49262 						Z_ADDREF_P(value);
49263 					}
49264 					zval_ptr_dtor_nogc(free_op_data);
49265 				}
49266 			} else if (IS_CV == IS_CONST) {
49267 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
49268 					Z_ADDREF_P(value);
49269 				}
49270 			}
49271 		} else {
49272 			dim = NULL;
49273 			if (IS_UNUSED == IS_CONST) {
49274 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
49275 			} else {
49276 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
49277 			}
49278 			if (UNEXPECTED(variable_ptr == NULL)) {
49279 				goto assign_dim_error;
49280 			}
49281 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
49282 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
49283 		}
49284 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49285 			ZVAL_COPY(EX_VAR(opline->result.var), value);
49286 		}
49287 		if (garbage) {
49288 			GC_DTOR_NO_REF(garbage);
49289 		}
49290 	} else {
49291 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
49292 			object_ptr = Z_REFVAL_P(object_ptr);
49293 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
49294 				goto try_assign_dim_array;
49295 			}
49296 		}
49297 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
49298 			zend_object *obj = Z_OBJ_P(object_ptr);
49299 
49300 			GC_ADDREF(obj);
49301 			dim = NULL;
49302 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
49303 				dim = ZVAL_UNDEFINED_OP2();
49304 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
49305 				dim++;
49306 			}
49307 
49308 			value = EX_VAR((opline+1)->op1.var);
49309 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
49310 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
49311 			} else if (IS_CV & (IS_CV|IS_VAR)) {
49312 				ZVAL_DEREF(value);
49313 			}
49314 
49315 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
49316 
49317 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
49318 				zend_objects_store_del(obj);
49319 			}
49320 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
49321 			if (IS_UNUSED == IS_UNUSED) {
49322 				zend_use_new_element_for_string();
49323 
49324 				UNDEF_RESULT();
49325 			} else {
49326 				dim = NULL;
49327 				value = EX_VAR((opline+1)->op1.var);
49328 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
49329 
49330 			}
49331 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
49332 			if (Z_ISREF_P(orig_object_ptr)
49333 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
49334 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
49335 				dim = NULL;
49336 
49337 				UNDEF_RESULT();
49338 			} else {
49339 				HashTable *ht = zend_new_array(8);
49340 				uint8_t old_type = Z_TYPE_P(object_ptr);
49341 
49342 				ZVAL_ARR(object_ptr, ht);
49343 				if (UNEXPECTED(old_type == IS_FALSE)) {
49344 					GC_ADDREF(ht);
49345 					zend_false_to_array_deprecated();
49346 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
49347 						zend_array_destroy(ht);
49348 						goto assign_dim_error;
49349 					}
49350 				}
49351 				goto try_assign_dim_array;
49352 			}
49353 		} else {
49354 			zend_use_scalar_as_array();
49355 			dim = NULL;
49356 assign_dim_error:
49357 
49358 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49359 				ZVAL_NULL(EX_VAR(opline->result.var));
49360 			}
49361 		}
49362 	}
49363 	if (IS_UNUSED != IS_UNUSED) {
49364 
49365 	}
49366 
49367 	/* assign_dim has two opcodes! */
49368 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49369 }
49370 
ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49371 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49372 {
49373 	if (IS_CV == IS_UNUSED) {
49374 		SAVE_OPLINE();
49375 		zend_verify_missing_return_type(EX(func));
49376 		HANDLE_EXCEPTION();
49377 	} else {
49378 /* prevents "undefined variable opline" errors */
49379 #if 0 || (IS_CV != IS_UNUSED)
49380 		USE_OPLINE
49381 		zval *retval_ref, *retval_ptr;
49382 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
49383 		retval_ref = retval_ptr = EX_VAR(opline->op1.var);
49384 
49385 		if (IS_CV == IS_CONST) {
49386 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
49387 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
49388 		} else if (IS_CV == IS_VAR) {
49389 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
49390 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
49391 			}
49392 			ZVAL_DEREF(retval_ptr);
49393 		} else if (IS_CV == IS_CV) {
49394 			ZVAL_DEREF(retval_ptr);
49395 		}
49396 
49397 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
49398 			ZEND_VM_NEXT_OPCODE();
49399 		}
49400 
49401 		if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
49402 			SAVE_OPLINE();
49403 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
49404 			if (UNEXPECTED(EG(exception))) {
49405 				HANDLE_EXCEPTION();
49406 			}
49407 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
49408 				ZEND_VM_NEXT_OPCODE();
49409 			}
49410 		}
49411 
49412 		zend_reference *ref = NULL;
49413 		void *cache_slot = CACHE_ADDR(opline->op2.num);
49414 		if (UNEXPECTED(retval_ref != retval_ptr)) {
49415 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
49416 				ref = Z_REF_P(retval_ref);
49417 			} else {
49418 				/* A cast might happen - unwrap the reference if this is a by-value return */
49419 				if (Z_REFCOUNT_P(retval_ref) == 1) {
49420 					ZVAL_UNREF(retval_ref);
49421 				} else {
49422 					Z_DELREF_P(retval_ref);
49423 					ZVAL_COPY(retval_ref, retval_ptr);
49424 				}
49425 				retval_ptr = retval_ref;
49426 			}
49427 		}
49428 
49429 		SAVE_OPLINE();
49430 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
49431 			zend_verify_return_error(EX(func), retval_ptr);
49432 			HANDLE_EXCEPTION();
49433 		}
49434 		ZEND_VM_NEXT_OPCODE();
49435 #endif
49436 	}
49437 }
49438 
ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49439 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49440 {
49441 	USE_OPLINE
49442 	zval *varptr, *arg;
49443 
49444 	if (IS_UNUSED == IS_CONST) {
49445 		SAVE_OPLINE();
49446 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
49447 		uint32_t arg_num;
49448 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
49449 		if (UNEXPECTED(!arg)) {
49450 
49451 			HANDLE_EXCEPTION();
49452 		}
49453 	} else {
49454 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
49455 	}
49456 
49457 	varptr = EX_VAR(opline->op1.var);
49458 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
49459 		SAVE_OPLINE();
49460 		ZVAL_UNDEFINED_OP1();
49461 		ZVAL_NULL(arg);
49462 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49463 	}
49464 
49465 	if (IS_CV == IS_CV) {
49466 		ZVAL_COPY_DEREF(arg, varptr);
49467 	} else /* if (IS_CV == IS_VAR) */ {
49468 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
49469 			zend_refcounted *ref = Z_COUNTED_P(varptr);
49470 
49471 			varptr = Z_REFVAL_P(varptr);
49472 			ZVAL_COPY_VALUE(arg, varptr);
49473 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
49474 				efree_size(ref, sizeof(zend_reference));
49475 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
49476 				Z_ADDREF_P(arg);
49477 			}
49478 		} else {
49479 			ZVAL_COPY_VALUE(arg, varptr);
49480 		}
49481 	}
49482 
49483 	ZEND_VM_NEXT_OPCODE();
49484 }
49485 
ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49486 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49487 {
49488 	USE_OPLINE
49489 	zval *varptr, *arg;
49490 
49491 	SAVE_OPLINE();
49492 	if (IS_UNUSED == IS_CONST) {
49493 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
49494 		uint32_t arg_num;
49495 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
49496 		if (UNEXPECTED(!arg)) {
49497 
49498 			HANDLE_EXCEPTION();
49499 		}
49500 	} else {
49501 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
49502 	}
49503 
49504 	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49505 	if (Z_ISREF_P(varptr)) {
49506 		Z_ADDREF_P(varptr);
49507 	} else {
49508 		ZVAL_MAKE_REF_EX(varptr, 2);
49509 	}
49510 	ZVAL_REF(arg, Z_REF_P(varptr));
49511 
49512 	ZEND_VM_NEXT_OPCODE();
49513 }
49514 
ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49515 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49516 {
49517 	USE_OPLINE
49518 	zval *varptr, *arg;
49519 	uint32_t arg_num;
49520 
49521 	if (IS_UNUSED == IS_CONST) {
49522 		SAVE_OPLINE();
49523 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
49524 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
49525 		if (UNEXPECTED(!arg)) {
49526 
49527 			HANDLE_EXCEPTION();
49528 		}
49529 	} else {
49530 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
49531 		arg_num = opline->op2.num;
49532 	}
49533 
49534 	if (EXPECTED(0)) {
49535 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
49536 			goto send_var_by_ref;
49537 		}
49538 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
49539 send_var_by_ref:
49540 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49541 		if (Z_ISREF_P(varptr)) {
49542 			Z_ADDREF_P(varptr);
49543 		} else {
49544 			ZVAL_MAKE_REF_EX(varptr, 2);
49545 		}
49546 		ZVAL_REF(arg, Z_REF_P(varptr));
49547 
49548 		ZEND_VM_NEXT_OPCODE();
49549 	}
49550 
49551 	varptr = EX_VAR(opline->op1.var);
49552 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
49553 		SAVE_OPLINE();
49554 		ZVAL_UNDEFINED_OP1();
49555 		ZVAL_NULL(arg);
49556 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49557 	}
49558 
49559 	if (IS_CV == IS_CV) {
49560 		ZVAL_COPY_DEREF(arg, varptr);
49561 	} else /* if (IS_CV == IS_VAR) */ {
49562 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
49563 			zend_refcounted *ref = Z_COUNTED_P(varptr);
49564 
49565 			varptr = Z_REFVAL_P(varptr);
49566 			ZVAL_COPY_VALUE(arg, varptr);
49567 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
49568 				efree_size(ref, sizeof(zend_reference));
49569 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
49570 				Z_ADDREF_P(arg);
49571 			}
49572 		} else {
49573 			ZVAL_COPY_VALUE(arg, varptr);
49574 		}
49575 	}
49576 
49577 	ZEND_VM_NEXT_OPCODE();
49578 }
49579 
ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49580 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49581 {
49582 	USE_OPLINE
49583 	zval *varptr, *arg;
49584 	uint32_t arg_num;
49585 
49586 	if (IS_UNUSED == IS_CONST) {
49587 		SAVE_OPLINE();
49588 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
49589 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
49590 		if (UNEXPECTED(!arg)) {
49591 
49592 			HANDLE_EXCEPTION();
49593 		}
49594 	} else {
49595 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
49596 		arg_num = opline->op2.num;
49597 	}
49598 
49599 	if (EXPECTED(1)) {
49600 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
49601 			goto send_var_by_ref;
49602 		}
49603 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
49604 send_var_by_ref:
49605 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49606 		if (Z_ISREF_P(varptr)) {
49607 			Z_ADDREF_P(varptr);
49608 		} else {
49609 			ZVAL_MAKE_REF_EX(varptr, 2);
49610 		}
49611 		ZVAL_REF(arg, Z_REF_P(varptr));
49612 
49613 		ZEND_VM_NEXT_OPCODE();
49614 	}
49615 
49616 	varptr = EX_VAR(opline->op1.var);
49617 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
49618 		SAVE_OPLINE();
49619 		ZVAL_UNDEFINED_OP1();
49620 		ZVAL_NULL(arg);
49621 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49622 	}
49623 
49624 	if (IS_CV == IS_CV) {
49625 		ZVAL_COPY_DEREF(arg, varptr);
49626 	} else /* if (IS_CV == IS_VAR) */ {
49627 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
49628 			zend_refcounted *ref = Z_COUNTED_P(varptr);
49629 
49630 			varptr = Z_REFVAL_P(varptr);
49631 			ZVAL_COPY_VALUE(arg, varptr);
49632 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
49633 				efree_size(ref, sizeof(zend_reference));
49634 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
49635 				Z_ADDREF_P(arg);
49636 			}
49637 		} else {
49638 			ZVAL_COPY_VALUE(arg, varptr);
49639 		}
49640 	}
49641 
49642 	ZEND_VM_NEXT_OPCODE();
49643 }
49644 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49645 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49646 {
49647 	USE_OPLINE
49648 	zval *expr_ptr, new_expr;
49649 
49650 	SAVE_OPLINE();
49651 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
49652 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
49653 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49654 		if (Z_ISREF_P(expr_ptr)) {
49655 			Z_ADDREF_P(expr_ptr);
49656 		} else {
49657 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
49658 		}
49659 
49660 	} else {
49661 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49662 		if (IS_CV == IS_TMP_VAR) {
49663 			/* pass */
49664 		} else if (IS_CV == IS_CONST) {
49665 			Z_TRY_ADDREF_P(expr_ptr);
49666 		} else if (IS_CV == IS_CV) {
49667 			ZVAL_DEREF(expr_ptr);
49668 			Z_TRY_ADDREF_P(expr_ptr);
49669 		} else /* if (IS_CV == IS_VAR) */ {
49670 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
49671 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
49672 
49673 				expr_ptr = Z_REFVAL_P(expr_ptr);
49674 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
49675 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
49676 					expr_ptr = &new_expr;
49677 					efree_size(ref, sizeof(zend_reference));
49678 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
49679 					Z_ADDREF_P(expr_ptr);
49680 				}
49681 			}
49682 		}
49683 	}
49684 
49685 	if (IS_UNUSED != IS_UNUSED) {
49686 		zval *offset = NULL;
49687 		zend_string *str;
49688 		zend_ulong hval;
49689 
49690 add_again:
49691 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
49692 			str = Z_STR_P(offset);
49693 			if (IS_UNUSED != IS_CONST) {
49694 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
49695 					goto num_index;
49696 				}
49697 			}
49698 str_index:
49699 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
49700 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
49701 			hval = Z_LVAL_P(offset);
49702 num_index:
49703 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
49704 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
49705 			offset = Z_REFVAL_P(offset);
49706 			goto add_again;
49707 		} else if (Z_TYPE_P(offset) == IS_NULL) {
49708 			str = ZSTR_EMPTY_ALLOC();
49709 			goto str_index;
49710 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
49711 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
49712 			goto num_index;
49713 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
49714 			hval = 0;
49715 			goto num_index;
49716 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
49717 			hval = 1;
49718 			goto num_index;
49719 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
49720 			zend_use_resource_as_offset(offset);
49721 			hval = Z_RES_HANDLE_P(offset);
49722 			goto num_index;
49723 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
49724 			ZVAL_UNDEFINED_OP2();
49725 			str = ZSTR_EMPTY_ALLOC();
49726 			goto str_index;
49727 		} else {
49728 			zend_illegal_array_offset_access(offset);
49729 			zval_ptr_dtor_nogc(expr_ptr);
49730 		}
49731 
49732 	} else {
49733 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
49734 			zend_cannot_add_element();
49735 			zval_ptr_dtor_nogc(expr_ptr);
49736 		}
49737 	}
49738 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49739 }
49740 
ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49741 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49742 {
49743 	zval *array;
49744 	uint32_t size;
49745 	USE_OPLINE
49746 
49747 	array = EX_VAR(opline->result.var);
49748 	if (IS_CV != IS_UNUSED) {
49749 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
49750 		ZVAL_ARR(array, zend_new_array(size));
49751 		/* Explicitly initialize array as not-packed if flag is set */
49752 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
49753 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
49754 		}
49755 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49756 	} else {
49757 		ZVAL_ARR(array, zend_new_array(0));
49758 		ZEND_VM_NEXT_OPCODE();
49759 	}
49760 }
49761 
ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49762 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49763 {
49764 	USE_OPLINE
49765 	zval *var = EX_VAR(opline->op1.var);
49766 
49767 	if (Z_REFCOUNTED_P(var)) {
49768 		zend_refcounted *garbage = Z_COUNTED_P(var);
49769 
49770 		ZVAL_UNDEF(var);
49771 		SAVE_OPLINE();
49772 		GC_DTOR(garbage);
49773 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49774 	} else {
49775 		ZVAL_UNDEF(var);
49776 	}
49777 	ZEND_VM_NEXT_OPCODE();
49778 }
49779 
ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49780 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49781 {
49782 	USE_OPLINE
49783 	zval *varname;
49784 	zend_string *name, *tmp_name;
49785 	HashTable *target_symbol_table;
49786 
49787 	SAVE_OPLINE();
49788 
49789 	varname = EX_VAR(opline->op1.var);
49790 
49791 	if (IS_CV == IS_CONST) {
49792 		name = Z_STR_P(varname);
49793 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
49794 		name = Z_STR_P(varname);
49795 		tmp_name = NULL;
49796 	} else {
49797 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
49798 			varname = ZVAL_UNDEFINED_OP1();
49799 		}
49800 		name = zval_try_get_tmp_string(varname, &tmp_name);
49801 		if (UNEXPECTED(!name)) {
49802 
49803 			HANDLE_EXCEPTION();
49804 		}
49805 	}
49806 
49807 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
49808 	zend_hash_del_ind(target_symbol_table, name);
49809 
49810 	if (IS_CV != IS_CONST) {
49811 		zend_tmp_string_release(tmp_name);
49812 	}
49813 
49814 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49815 }
49816 
49817 /* 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)49818 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49819 {
49820 	USE_OPLINE
49821 	zval *value;
49822 
49823 	value = EX_VAR(opline->op1.var);
49824 	if (!(0)) {
49825 		if (Z_TYPE_P(value) > IS_NULL &&
49826 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
49827 			ZEND_VM_SMART_BRANCH_TRUE();
49828 		} else {
49829 			ZEND_VM_SMART_BRANCH_FALSE();
49830 		}
49831 	} else {
49832 		bool result;
49833 
49834 		SAVE_OPLINE();
49835 		result = !i_zend_is_true(value);
49836 		ZEND_VM_SMART_BRANCH(result, 1);
49837 	}
49838 }
49839 
ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49840 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49841 {
49842 	USE_OPLINE
49843 	zval *value;
49844 
49845 	value = EX_VAR(opline->op1.var);
49846 	if (!(1)) {
49847 		if (Z_TYPE_P(value) > IS_NULL &&
49848 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
49849 			ZEND_VM_SMART_BRANCH_TRUE();
49850 		} else {
49851 			ZEND_VM_SMART_BRANCH_FALSE();
49852 		}
49853 	} else {
49854 		bool result;
49855 
49856 		SAVE_OPLINE();
49857 		result = !i_zend_is_true(value);
49858 		ZEND_VM_SMART_BRANCH(result, 1);
49859 	}
49860 }
49861 
ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49863 {
49864 	USE_OPLINE
49865 	zval *value;
49866 	bool result;
49867 	zval *varname;
49868 	zend_string *name, *tmp_name;
49869 	HashTable *target_symbol_table;
49870 
49871 	SAVE_OPLINE();
49872 	varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
49873 	if (IS_CV == IS_CONST) {
49874 		name = Z_STR_P(varname);
49875 	} else {
49876 		name = zval_get_tmp_string(varname, &tmp_name);
49877 	}
49878 
49879 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
49880 	value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
49881 
49882 	if (IS_CV != IS_CONST) {
49883 		zend_tmp_string_release(tmp_name);
49884 	}
49885 
49886 	if (!value) {
49887 		result = (opline->extended_value & ZEND_ISEMPTY);
49888 	} else {
49889 		if (Z_TYPE_P(value) == IS_INDIRECT) {
49890 			value = Z_INDIRECT_P(value);
49891 		}
49892 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
49893 			if (Z_ISREF_P(value)) {
49894 				value = Z_REFVAL_P(value);
49895 			}
49896 			result = Z_TYPE_P(value) > IS_NULL;
49897 		} else {
49898 			result = !i_zend_is_true(value);
49899 		}
49900 	}
49901 
49902 	ZEND_VM_SMART_BRANCH(result, true);
49903 }
49904 
49905 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49906 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49907 {
49908 	USE_OPLINE
49909 	zval *expr;
49910 	bool result;
49911 
49912 	SAVE_OPLINE();
49913 	expr = EX_VAR(opline->op1.var);
49914 
49915 try_instanceof:
49916 	if (Z_TYPE_P(expr) == IS_OBJECT) {
49917 		zend_class_entry *ce;
49918 
49919 		if (IS_UNUSED == IS_CONST) {
49920 			ce = CACHED_PTR(opline->extended_value);
49921 			if (UNEXPECTED(ce == NULL)) {
49922 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
49923 				if (EXPECTED(ce)) {
49924 					CACHE_PTR(opline->extended_value, ce);
49925 				}
49926 			}
49927 		} else if (IS_UNUSED == IS_UNUSED) {
49928 			ce = zend_fetch_class(NULL, opline->op2.num);
49929 			if (UNEXPECTED(ce == NULL)) {
49930 
49931 				ZVAL_UNDEF(EX_VAR(opline->result.var));
49932 				HANDLE_EXCEPTION();
49933 			}
49934 		} else {
49935 			ce = Z_CE_P(EX_VAR(opline->op2.var));
49936 		}
49937 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
49938 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
49939 		expr = Z_REFVAL_P(expr);
49940 		goto try_instanceof;
49941 	} else {
49942 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
49943 			ZVAL_UNDEFINED_OP1();
49944 		}
49945 		result = 0;
49946 	}
49947 
49948 	ZEND_VM_SMART_BRANCH(result, 1);
49949 }
49950 
ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49951 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49952 {
49953 	USE_OPLINE
49954 
49955 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
49956 
49957 	SAVE_OPLINE();
49958 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
49959 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49960 	}
49961 
49962 	/* Destroy the previously yielded value */
49963 	zval_ptr_dtor(&generator->value);
49964 
49965 	/* Destroy the previously yielded key */
49966 	zval_ptr_dtor(&generator->key);
49967 
49968 	/* Set the new yielded value */
49969 	if (IS_CV != IS_UNUSED) {
49970 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
49971 			/* Constants and temporary variables aren't yieldable by reference,
49972 			 * but we still allow them with a notice. */
49973 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
49974 				zval *value;
49975 
49976 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
49977 
49978 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49979 				ZVAL_COPY_VALUE(&generator->value, value);
49980 				if (IS_CV == IS_CONST) {
49981 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
49982 						Z_ADDREF(generator->value);
49983 					}
49984 				}
49985 			} else {
49986 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49987 
49988 				/* If a function call result is yielded and the function did
49989 				 * not return by reference we throw a notice. */
49990 				do {
49991 					if (IS_CV == IS_VAR) {
49992 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
49993 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
49994 						 && !Z_ISREF_P(value_ptr)) {
49995 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
49996 							ZVAL_COPY(&generator->value, value_ptr);
49997 							break;
49998 						}
49999 					}
50000 					if (Z_ISREF_P(value_ptr)) {
50001 						Z_ADDREF_P(value_ptr);
50002 					} else {
50003 						ZVAL_MAKE_REF_EX(value_ptr, 2);
50004 					}
50005 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
50006 				} while (0);
50007 
50008 			}
50009 		} else {
50010 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50011 
50012 			/* Consts, temporary variables and references need copying */
50013 			if (IS_CV == IS_CONST) {
50014 				ZVAL_COPY_VALUE(&generator->value, value);
50015 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
50016 					Z_ADDREF(generator->value);
50017 				}
50018 			} else if (IS_CV == IS_TMP_VAR) {
50019 				ZVAL_COPY_VALUE(&generator->value, value);
50020 			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
50021 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
50022 
50023 			} else {
50024 				ZVAL_COPY_VALUE(&generator->value, value);
50025 				if (IS_CV == IS_CV) {
50026 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
50027 				}
50028 			}
50029 		}
50030 	} else {
50031 		/* If no value was specified yield null */
50032 		ZVAL_NULL(&generator->value);
50033 	}
50034 
50035 	/* Set the new yielded key */
50036 	if (IS_UNUSED != IS_UNUSED) {
50037 		zval *key = NULL;
50038 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
50039 			key = Z_REFVAL_P(key);
50040 		}
50041 		ZVAL_COPY(&generator->key, key);
50042 
50043 		if (Z_TYPE(generator->key) == IS_LONG
50044 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
50045 		) {
50046 			generator->largest_used_integer_key = Z_LVAL(generator->key);
50047 		}
50048 	} else {
50049 		/* If no key was specified we use auto-increment keys */
50050 		generator->largest_used_integer_key++;
50051 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
50052 	}
50053 
50054 	if (RETURN_VALUE_USED(opline)) {
50055 		/* If the return value of yield is used set the send
50056 		 * target and initialize it to NULL */
50057 		generator->send_target = EX_VAR(opline->result.var);
50058 		ZVAL_NULL(generator->send_target);
50059 	} else {
50060 		generator->send_target = NULL;
50061 	}
50062 
50063 	/* We increment to the next op, so we are at the correct position when the
50064 	 * generator is resumed. */
50065 	ZEND_VM_INC_OPCODE();
50066 
50067 	/* The GOTO VM uses a local opline variable. We need to set the opline
50068 	 * variable in execute_data so we don't resume at an old position. */
50069 	SAVE_OPLINE();
50070 
50071 	ZEND_VM_RETURN();
50072 }
50073 
ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50075 {
50076 	USE_OPLINE
50077 	zval *op1 = EX_VAR(opline->op1.var);
50078 
50079 	if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
50080 		SAVE_OPLINE();
50081 		ZVAL_UNDEFINED_OP1();
50082 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50083 	}
50084 	ZEND_VM_NEXT_OPCODE();
50085 }
50086 
ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50087 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50088 {
50089 	USE_OPLINE
50090 	zval *op1 = EX_VAR(opline->op1.var);
50091 
50092 	if (IS_CV == IS_CV) {
50093 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
50094 			ZVAL_NEW_EMPTY_REF(op1);
50095 			Z_SET_REFCOUNT_P(op1, 2);
50096 			ZVAL_NULL(Z_REFVAL_P(op1));
50097 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
50098 		} else {
50099 			if (Z_ISREF_P(op1)) {
50100 				Z_ADDREF_P(op1);
50101 			} else {
50102 				ZVAL_MAKE_REF_EX(op1, 2);
50103 			}
50104 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
50105 		}
50106 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
50107 		op1 = Z_INDIRECT_P(op1);
50108 		if (EXPECTED(!Z_ISREF_P(op1))) {
50109 			ZVAL_MAKE_REF_EX(op1, 2);
50110 		} else {
50111 			GC_ADDREF(Z_REF_P(op1));
50112 		}
50113 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
50114 	} else {
50115 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
50116 	}
50117 	ZEND_VM_NEXT_OPCODE();
50118 }
50119 
ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50120 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50121 {
50122 	USE_OPLINE
50123 	zval *op1;
50124 	zend_long count;
50125 
50126 	SAVE_OPLINE();
50127 	op1 = EX_VAR(opline->op1.var);
50128 
50129 	while (1) {
50130 		if (Z_TYPE_P(op1) == IS_ARRAY) {
50131 			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
50132 			break;
50133 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
50134 			zend_object *zobj = Z_OBJ_P(op1);
50135 
50136 			/* first, we check if the handler is defined */
50137 			if (zobj->handlers->count_elements) {
50138 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
50139 					break;
50140 				}
50141 				if (UNEXPECTED(EG(exception))) {
50142 					count = 0;
50143 					break;
50144 				}
50145 			}
50146 
50147 			/* if not and the object implements Countable we call its count() method */
50148 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
50149 				zval retval;
50150 
50151 				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
50152 				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
50153 				count = zval_get_long(&retval);
50154 				zval_ptr_dtor(&retval);
50155 				break;
50156 			}
50157 
50158 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
50159 		} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
50160 			op1 = Z_REFVAL_P(op1);
50161 			continue;
50162 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
50163 			ZVAL_UNDEFINED_OP1();
50164 		}
50165 		count = 0;
50166 		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
50167 		break;
50168 	}
50169 
50170 	ZVAL_LONG(EX_VAR(opline->result.var), count);
50171 
50172 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50173 }
50174 
ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50176 {
50177 	USE_OPLINE
50178 	zend_array *ht = Z_ARRVAL_P(EX_VAR(opline->op1.var));
50179 	ZVAL_LONG(EX_VAR(opline->result.var), zend_hash_num_elements(ht));
50180 	if (IS_CV & (IS_TMP_VAR|IS_VAR) && !(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
50181 		SAVE_OPLINE();
50182 		zend_array_destroy(ht);
50183 		if (EG(exception)) {
50184 			HANDLE_EXCEPTION();
50185 		}
50186 	}
50187 	ZEND_VM_NEXT_OPCODE();
50188 }
50189 
ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50190 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50191 {
50192 	USE_OPLINE
50193 
50194 	if (IS_CV == IS_UNUSED) {
50195 		SAVE_OPLINE();
50196 		if (UNEXPECTED(!EX(func)->common.scope)) {
50197 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
50198 			ZVAL_UNDEF(EX_VAR(opline->result.var));
50199 			HANDLE_EXCEPTION();
50200 		} else {
50201 			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
50202 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
50203 			if (UNEXPECTED(EG(exception))) {
50204 				HANDLE_EXCEPTION();
50205 			}
50206 			ZEND_VM_NEXT_OPCODE();
50207 		}
50208 	} else {
50209 		zval *op1;
50210 
50211 		SAVE_OPLINE();
50212 		op1 = EX_VAR(opline->op1.var);
50213 		while (1) {
50214 			if (Z_TYPE_P(op1) == IS_OBJECT) {
50215 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
50216 			} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
50217 				op1 = Z_REFVAL_P(op1);
50218 				continue;
50219 			} else {
50220 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
50221 					ZVAL_UNDEFINED_OP1();
50222 				}
50223 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
50224 				ZVAL_UNDEF(EX_VAR(opline->result.var));
50225 			}
50226 			break;
50227 		}
50228 
50229 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50230 	}
50231 }
50232 
ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50234 {
50235 	USE_OPLINE
50236 	zval *op1;
50237 	zend_string *type;
50238 
50239 	SAVE_OPLINE();
50240 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50241 	type = zend_zval_get_legacy_type(op1);
50242 	if (EXPECTED(type)) {
50243 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
50244 	} else {
50245 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
50246 	}
50247 
50248 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50249 }
50250 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50251 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50252 {
50253 	USE_OPLINE
50254 	zval *varptr, *arg;
50255 	uint32_t arg_num = opline->op2.num;
50256 
50257 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
50258 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
50259 	}
50260 
50261 	varptr = EX_VAR(opline->op1.var);
50262 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
50263 
50264 	if (IS_CV == IS_CV) {
50265 		ZVAL_COPY(arg, varptr);
50266 	} else /* if (IS_CV == IS_VAR) */ {
50267 		ZVAL_COPY_VALUE(arg, varptr);
50268 	}
50269 
50270 	ZEND_VM_NEXT_OPCODE();
50271 }
50272 
ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50273 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50274 {
50275 	USE_OPLINE
50276 	zval *op1, *op2;
50277 
50278 	SAVE_OPLINE();
50279 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50280 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50281 	div_function(EX_VAR(opline->result.var), op1, op2);
50282 
50283 
50284 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50285 }
50286 
ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50287 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50288 {
50289 	USE_OPLINE
50290 	zval *op1, *op2;
50291 
50292 	SAVE_OPLINE();
50293 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50294 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50295 	pow_function(EX_VAR(opline->result.var), op1, op2);
50296 
50297 
50298 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50299 }
50300 
ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50301 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50302 {
50303 	USE_OPLINE
50304 	zval *op1, *op2;
50305 
50306 	op1 = EX_VAR(opline->op1.var);
50307 	op2 = EX_VAR(opline->op2.var);
50308 
50309 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
50310 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
50311 		zend_string *op1_str = Z_STR_P(op1);
50312 		zend_string *op2_str = Z_STR_P(op2);
50313 		zend_string *str;
50314 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
50315 
50316 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
50317 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
50318 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
50319 			} else {
50320 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
50321 			}
50322 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50323 				zend_string_release_ex(op1_str, 0);
50324 			}
50325 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
50326 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
50327 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
50328 			} else {
50329 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
50330 			}
50331 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50332 				zend_string_release_ex(op2_str, 0);
50333 			}
50334 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
50335 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
50336 			size_t len = ZSTR_LEN(op1_str);
50337 
50338 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
50339 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
50340 			}
50341 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
50342 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
50343 			GC_ADD_FLAGS(str, flags);
50344 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
50345 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50346 				zend_string_release_ex(op2_str, 0);
50347 			}
50348 		} else {
50349 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
50350 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
50351 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
50352 			GC_ADD_FLAGS(str, flags);
50353 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
50354 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50355 				zend_string_release_ex(op1_str, 0);
50356 			}
50357 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50358 				zend_string_release_ex(op2_str, 0);
50359 			}
50360 		}
50361 		ZEND_VM_NEXT_OPCODE();
50362 	} else {
50363 		SAVE_OPLINE();
50364 
50365 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
50366 			op1 = ZVAL_UNDEFINED_OP1();
50367 		}
50368 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
50369 			op2 = ZVAL_UNDEFINED_OP2();
50370 		}
50371 		concat_function(EX_VAR(opline->result.var), op1, op2);
50372 
50373 
50374 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50375 	}
50376 }
50377 
ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50378 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50379 {
50380 	USE_OPLINE
50381 	zval *op1, *op2;
50382 	bool result;
50383 
50384 	SAVE_OPLINE();
50385 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50386 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50387 	result = fast_is_identical_function(op1, op2);
50388 
50389 
50390 	ZEND_VM_SMART_BRANCH(result, 1);
50391 }
50392 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50394 {
50395 	USE_OPLINE
50396 	zval *op1, *op2;
50397 	bool result;
50398 
50399 	SAVE_OPLINE();
50400 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50401 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50402 	result = fast_is_not_identical_function(op1, op2);
50403 
50404 
50405 	ZEND_VM_SMART_BRANCH(result, 1);
50406 }
50407 
ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50408 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50409 {
50410 	USE_OPLINE
50411 	zval *op1, *op2;
50412 	double d1, d2;
50413 
50414 	op1 = EX_VAR(opline->op1.var);
50415 	op2 = EX_VAR(opline->op2.var);
50416 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50417 		/* pass */
50418 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50419 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50420 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
50421 is_equal_true:
50422 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
50423 			} else {
50424 is_equal_false:
50425 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
50426 			}
50427 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50428 			d1 = (double)Z_LVAL_P(op1);
50429 			d2 = Z_DVAL_P(op2);
50430 			goto is_equal_double;
50431 		}
50432 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50433 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50434 			d1 = Z_DVAL_P(op1);
50435 			d2 = Z_DVAL_P(op2);
50436 is_equal_double:
50437 			if (d1 == d2) {
50438 				goto is_equal_true;
50439 			} else {
50440 				goto is_equal_false;
50441 			}
50442 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50443 			d1 = Z_DVAL_P(op1);
50444 			d2 = (double)Z_LVAL_P(op2);
50445 			goto is_equal_double;
50446 		}
50447 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50448 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50449 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50450 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50451 				zval_ptr_dtor_str(op1);
50452 			}
50453 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50454 				zval_ptr_dtor_str(op2);
50455 			}
50456 			if (result) {
50457 				goto is_equal_true;
50458 			} else {
50459 				goto is_equal_false;
50460 			}
50461 		}
50462 	}
50463 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50464 }
50465 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50466 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50467 {
50468 	USE_OPLINE
50469 	zval *op1, *op2;
50470 	double d1, d2;
50471 
50472 	op1 = EX_VAR(opline->op1.var);
50473 	op2 = EX_VAR(opline->op2.var);
50474 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50475 		/* pass */
50476 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50477 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50478 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
50479 is_equal_true:
50480 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
50481 			} else {
50482 is_equal_false:
50483 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
50484 			}
50485 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50486 			d1 = (double)Z_LVAL_P(op1);
50487 			d2 = Z_DVAL_P(op2);
50488 			goto is_equal_double;
50489 		}
50490 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50491 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50492 			d1 = Z_DVAL_P(op1);
50493 			d2 = Z_DVAL_P(op2);
50494 is_equal_double:
50495 			if (d1 == d2) {
50496 				goto is_equal_true;
50497 			} else {
50498 				goto is_equal_false;
50499 			}
50500 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50501 			d1 = Z_DVAL_P(op1);
50502 			d2 = (double)Z_LVAL_P(op2);
50503 			goto is_equal_double;
50504 		}
50505 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50506 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50507 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50508 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50509 				zval_ptr_dtor_str(op1);
50510 			}
50511 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50512 				zval_ptr_dtor_str(op2);
50513 			}
50514 			if (result) {
50515 				goto is_equal_true;
50516 			} else {
50517 				goto is_equal_false;
50518 			}
50519 		}
50520 	}
50521 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50522 }
50523 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50524 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50525 {
50526 	USE_OPLINE
50527 	zval *op1, *op2;
50528 	double d1, d2;
50529 
50530 	op1 = EX_VAR(opline->op1.var);
50531 	op2 = EX_VAR(opline->op2.var);
50532 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50533 		/* pass */
50534 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50535 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50536 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
50537 is_equal_true:
50538 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
50539 			} else {
50540 is_equal_false:
50541 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
50542 			}
50543 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50544 			d1 = (double)Z_LVAL_P(op1);
50545 			d2 = Z_DVAL_P(op2);
50546 			goto is_equal_double;
50547 		}
50548 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50549 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50550 			d1 = Z_DVAL_P(op1);
50551 			d2 = Z_DVAL_P(op2);
50552 is_equal_double:
50553 			if (d1 == d2) {
50554 				goto is_equal_true;
50555 			} else {
50556 				goto is_equal_false;
50557 			}
50558 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50559 			d1 = Z_DVAL_P(op1);
50560 			d2 = (double)Z_LVAL_P(op2);
50561 			goto is_equal_double;
50562 		}
50563 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50564 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50565 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50566 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50567 				zval_ptr_dtor_str(op1);
50568 			}
50569 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50570 				zval_ptr_dtor_str(op2);
50571 			}
50572 			if (result) {
50573 				goto is_equal_true;
50574 			} else {
50575 				goto is_equal_false;
50576 			}
50577 		}
50578 	}
50579 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50580 }
50581 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50582 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50583 {
50584 	USE_OPLINE
50585 	zval *op1, *op2;
50586 	double d1, d2;
50587 
50588 	op1 = EX_VAR(opline->op1.var);
50589 	op2 = EX_VAR(opline->op2.var);
50590 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50591 		/* pass */
50592 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50593 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50594 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
50595 is_not_equal_true:
50596 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
50597 			} else {
50598 is_not_equal_false:
50599 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
50600 			}
50601 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50602 			d1 = (double)Z_LVAL_P(op1);
50603 			d2 = Z_DVAL_P(op2);
50604 			goto is_not_equal_double;
50605 		}
50606 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50607 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50608 			d1 = Z_DVAL_P(op1);
50609 			d2 = Z_DVAL_P(op2);
50610 is_not_equal_double:
50611 			if (d1 != d2) {
50612 				goto is_not_equal_true;
50613 			} else {
50614 				goto is_not_equal_false;
50615 			}
50616 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50617 			d1 = Z_DVAL_P(op1);
50618 			d2 = (double)Z_LVAL_P(op2);
50619 			goto is_not_equal_double;
50620 		}
50621 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50622 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50623 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50624 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50625 				zval_ptr_dtor_str(op1);
50626 			}
50627 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50628 				zval_ptr_dtor_str(op2);
50629 			}
50630 			if (!result) {
50631 				goto is_not_equal_true;
50632 			} else {
50633 				goto is_not_equal_false;
50634 			}
50635 		}
50636 	}
50637 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50638 }
50639 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50640 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50641 {
50642 	USE_OPLINE
50643 	zval *op1, *op2;
50644 	double d1, d2;
50645 
50646 	op1 = EX_VAR(opline->op1.var);
50647 	op2 = EX_VAR(opline->op2.var);
50648 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50649 		/* pass */
50650 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50651 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50652 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
50653 is_not_equal_true:
50654 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
50655 			} else {
50656 is_not_equal_false:
50657 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
50658 			}
50659 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50660 			d1 = (double)Z_LVAL_P(op1);
50661 			d2 = Z_DVAL_P(op2);
50662 			goto is_not_equal_double;
50663 		}
50664 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50665 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50666 			d1 = Z_DVAL_P(op1);
50667 			d2 = Z_DVAL_P(op2);
50668 is_not_equal_double:
50669 			if (d1 != d2) {
50670 				goto is_not_equal_true;
50671 			} else {
50672 				goto is_not_equal_false;
50673 			}
50674 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50675 			d1 = Z_DVAL_P(op1);
50676 			d2 = (double)Z_LVAL_P(op2);
50677 			goto is_not_equal_double;
50678 		}
50679 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50680 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50681 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50682 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50683 				zval_ptr_dtor_str(op1);
50684 			}
50685 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50686 				zval_ptr_dtor_str(op2);
50687 			}
50688 			if (!result) {
50689 				goto is_not_equal_true;
50690 			} else {
50691 				goto is_not_equal_false;
50692 			}
50693 		}
50694 	}
50695 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50696 }
50697 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50698 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50699 {
50700 	USE_OPLINE
50701 	zval *op1, *op2;
50702 	double d1, d2;
50703 
50704 	op1 = EX_VAR(opline->op1.var);
50705 	op2 = EX_VAR(opline->op2.var);
50706 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50707 		/* pass */
50708 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50709 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50710 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
50711 is_not_equal_true:
50712 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
50713 			} else {
50714 is_not_equal_false:
50715 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
50716 			}
50717 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50718 			d1 = (double)Z_LVAL_P(op1);
50719 			d2 = Z_DVAL_P(op2);
50720 			goto is_not_equal_double;
50721 		}
50722 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50723 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50724 			d1 = Z_DVAL_P(op1);
50725 			d2 = Z_DVAL_P(op2);
50726 is_not_equal_double:
50727 			if (d1 != d2) {
50728 				goto is_not_equal_true;
50729 			} else {
50730 				goto is_not_equal_false;
50731 			}
50732 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50733 			d1 = Z_DVAL_P(op1);
50734 			d2 = (double)Z_LVAL_P(op2);
50735 			goto is_not_equal_double;
50736 		}
50737 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50738 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50739 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50740 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50741 				zval_ptr_dtor_str(op1);
50742 			}
50743 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50744 				zval_ptr_dtor_str(op2);
50745 			}
50746 			if (!result) {
50747 				goto is_not_equal_true;
50748 			} else {
50749 				goto is_not_equal_false;
50750 			}
50751 		}
50752 	}
50753 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50754 }
50755 
ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50756 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50757 {
50758 	USE_OPLINE
50759 	zval *op1, *op2;
50760 
50761 	SAVE_OPLINE();
50762 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50763 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50764 	compare_function(EX_VAR(opline->result.var), op1, op2);
50765 
50766 
50767 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50768 }
50769 
ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50771 {
50772 	USE_OPLINE
50773 	zval *op1, *op2;
50774 
50775 	SAVE_OPLINE();
50776 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50777 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50778 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
50779 
50780 
50781 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50782 }
50783 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50784 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50785 {
50786 	USE_OPLINE
50787 	zval *object;
50788 	zval *property;
50789 	zval *value;
50790 	zval *zptr;
50791 	void **cache_slot;
50792 	zend_property_info *prop_info;
50793 	zend_object *zobj;
50794 	zend_string *name, *tmp_name;
50795 
50796 	SAVE_OPLINE();
50797 	object = EX_VAR(opline->op1.var);
50798 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50799 
50800 	do {
50801 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
50802 
50803 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
50804 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
50805 				object = Z_REFVAL_P(object);
50806 				goto assign_op_object;
50807 			}
50808 			if (IS_CV == IS_CV
50809 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
50810 				ZVAL_UNDEFINED_OP1();
50811 			}
50812 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
50813 			break;
50814 		}
50815 
50816 assign_op_object:
50817 		/* here we are sure we are dealing with an object */
50818 		zobj = Z_OBJ_P(object);
50819 		if (IS_CV == IS_CONST) {
50820 			name = Z_STR_P(property);
50821 		} else {
50822 			name = zval_try_get_tmp_string(property, &tmp_name);
50823 			if (UNEXPECTED(!name)) {
50824 				UNDEF_RESULT();
50825 				break;
50826 			}
50827 		}
50828 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
50829 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
50830 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
50831 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50832 					ZVAL_NULL(EX_VAR(opline->result.var));
50833 				}
50834 			} else {
50835 				zval *orig_zptr = zptr;
50836 				zend_reference *ref;
50837 
50838 				do {
50839 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
50840 						ref = Z_REF_P(zptr);
50841 						zptr = Z_REFVAL_P(zptr);
50842 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
50843 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
50844 							break;
50845 						}
50846 					}
50847 
50848 					if (IS_CV == IS_CONST) {
50849 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
50850 					} else {
50851 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
50852 					}
50853 					if (prop_info) {
50854 						/* special case for typed properties */
50855 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
50856 					} else {
50857 						zend_binary_op(zptr, zptr, value OPLINE_CC);
50858 					}
50859 				} while (0);
50860 
50861 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50862 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
50863 				}
50864 			}
50865 		} else {
50866 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
50867 		}
50868 		if (IS_CV != IS_CONST) {
50869 			zend_tmp_string_release(tmp_name);
50870 		}
50871 	} while (0);
50872 
50873 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
50874 
50875 
50876 	/* assign_obj has two opcodes! */
50877 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50878 }
50879 
50880 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50881 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50882 {
50883 	USE_OPLINE
50884 	zval *var_ptr;
50885 	zval *value, *container, *dim;
50886 	HashTable *ht;
50887 
50888 	SAVE_OPLINE();
50889 	container = EX_VAR(opline->op1.var);
50890 
50891 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
50892 assign_dim_op_array:
50893 		SEPARATE_ARRAY(container);
50894 		ht = Z_ARRVAL_P(container);
50895 assign_dim_op_new_array:
50896 		dim = EX_VAR(opline->op2.var);
50897 		if (IS_CV == IS_UNUSED) {
50898 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
50899 			if (UNEXPECTED(!var_ptr)) {
50900 				zend_cannot_add_element();
50901 				goto assign_dim_op_ret_null;
50902 			}
50903 		} else {
50904 			if (IS_CV == IS_CONST) {
50905 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
50906 			} else {
50907 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
50908 			}
50909 			if (UNEXPECTED(!var_ptr)) {
50910 				goto assign_dim_op_ret_null;
50911 			}
50912 		}
50913 
50914 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
50915 
50916 		do {
50917 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
50918 				zend_reference *ref = Z_REF_P(var_ptr);
50919 				var_ptr = Z_REFVAL_P(var_ptr);
50920 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
50921 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
50922 					break;
50923 				}
50924 			}
50925 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
50926 		} while (0);
50927 
50928 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50929 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
50930 		}
50931 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
50932 	} else {
50933 		if (EXPECTED(Z_ISREF_P(container))) {
50934 			container = Z_REFVAL_P(container);
50935 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
50936 				goto assign_dim_op_array;
50937 			}
50938 		}
50939 
50940 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
50941 			zend_object *obj = Z_OBJ_P(container);
50942 
50943 			dim = EX_VAR(opline->op2.var);
50944 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
50945 				dim++;
50946 			}
50947 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
50948 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
50949 			uint8_t old_type;
50950 
50951 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
50952 				ZVAL_UNDEFINED_OP1();
50953 			}
50954 			ht = zend_new_array(8);
50955 			old_type = Z_TYPE_P(container);
50956 			ZVAL_ARR(container, ht);
50957 			if (UNEXPECTED(old_type == IS_FALSE)) {
50958 				GC_ADDREF(ht);
50959 				zend_false_to_array_deprecated();
50960 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
50961 					zend_array_destroy(ht);
50962 					goto assign_dim_op_ret_null;
50963 				}
50964 			}
50965 			goto assign_dim_op_new_array;
50966 		} else {
50967 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50968 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
50969 assign_dim_op_ret_null:
50970 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
50971 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50972 				ZVAL_NULL(EX_VAR(opline->result.var));
50973 			}
50974 		}
50975 	}
50976 
50977 
50978 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50979 }
50980 
ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50982 {
50983 	USE_OPLINE
50984 	zval *var_ptr;
50985 	zval *value;
50986 
50987 	SAVE_OPLINE();
50988 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50989 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
50990 
50991 	do {
50992 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
50993 			zend_reference *ref = Z_REF_P(var_ptr);
50994 			var_ptr = Z_REFVAL_P(var_ptr);
50995 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
50996 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
50997 				break;
50998 			}
50999 		}
51000 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
51001 	} while (0);
51002 
51003 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51004 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
51005 	}
51006 
51007 
51008 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51009 }
51010 
ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51011 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51012 {
51013 	USE_OPLINE
51014 	zval *object;
51015 	zval *property;
51016 	zval *zptr;
51017 	void **cache_slot;
51018 	zend_property_info *prop_info;
51019 	zend_object *zobj;
51020 	zend_string *name, *tmp_name;
51021 
51022 	SAVE_OPLINE();
51023 	object = EX_VAR(opline->op1.var);
51024 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51025 
51026 	do {
51027 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51028 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51029 				object = Z_REFVAL_P(object);
51030 				goto pre_incdec_object;
51031 			}
51032 			if (IS_CV == IS_CV
51033 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
51034 				ZVAL_UNDEFINED_OP1();
51035 			}
51036 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
51037 			break;
51038 		}
51039 
51040 pre_incdec_object:
51041 		/* here we are sure we are dealing with an object */
51042 		zobj = Z_OBJ_P(object);
51043 		if (IS_CV == IS_CONST) {
51044 			name = Z_STR_P(property);
51045 		} else {
51046 			name = zval_try_get_tmp_string(property, &tmp_name);
51047 			if (UNEXPECTED(!name)) {
51048 				UNDEF_RESULT();
51049 				break;
51050 			}
51051 		}
51052 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
51053 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
51054 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
51055 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51056 					ZVAL_NULL(EX_VAR(opline->result.var));
51057 				}
51058 			} else {
51059 				if (IS_CV == IS_CONST) {
51060 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
51061 				} else {
51062 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
51063 				}
51064 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
51065 			}
51066 		} else {
51067 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
51068 		}
51069 		if (IS_CV != IS_CONST) {
51070 			zend_tmp_string_release(tmp_name);
51071 		}
51072 	} while (0);
51073 
51074 
51075 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51076 }
51077 
ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51078 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51079 {
51080 	USE_OPLINE
51081 	zval *object;
51082 	zval *property;
51083 	zval *zptr;
51084 	void **cache_slot;
51085 	zend_property_info *prop_info;
51086 	zend_object *zobj;
51087 	zend_string *name, *tmp_name;
51088 
51089 	SAVE_OPLINE();
51090 	object = EX_VAR(opline->op1.var);
51091 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51092 
51093 	do {
51094 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51095 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51096 				object = Z_REFVAL_P(object);
51097 				goto post_incdec_object;
51098 			}
51099 			if (IS_CV == IS_CV
51100 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
51101 				ZVAL_UNDEFINED_OP1();
51102 			}
51103 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
51104 			break;
51105 		}
51106 
51107 post_incdec_object:
51108 		/* here we are sure we are dealing with an object */
51109 		zobj = Z_OBJ_P(object);
51110 		if (IS_CV == IS_CONST) {
51111 			name = Z_STR_P(property);
51112 		} else {
51113 			name = zval_try_get_tmp_string(property, &tmp_name);
51114 			if (UNEXPECTED(!name)) {
51115 				ZVAL_UNDEF(EX_VAR(opline->result.var));
51116 				break;
51117 			}
51118 		}
51119 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
51120 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
51121 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
51122 				ZVAL_NULL(EX_VAR(opline->result.var));
51123 			} else {
51124 				if (IS_CV == IS_CONST) {
51125 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
51126 				} else {
51127 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
51128 				}
51129 
51130 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
51131 			}
51132 		} else {
51133 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
51134 		}
51135 		if (IS_CV != IS_CONST) {
51136 			zend_tmp_string_release(tmp_name);
51137 		}
51138 	} while (0);
51139 
51140 
51141 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51142 }
51143 
ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51144 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51145 {
51146 	USE_OPLINE
51147 	zval *container, *dim, *value;
51148 
51149 	SAVE_OPLINE();
51150 	container = EX_VAR(opline->op1.var);
51151 	dim = EX_VAR(opline->op2.var);
51152 	if (IS_CV != IS_CONST) {
51153 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51154 fetch_dim_r_array:
51155 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
51156 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
51157 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
51158 			container = Z_REFVAL_P(container);
51159 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51160 				goto fetch_dim_r_array;
51161 			} else {
51162 				goto fetch_dim_r_slow;
51163 			}
51164 		} else {
51165 fetch_dim_r_slow:
51166 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
51167 				dim++;
51168 			}
51169 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
51170 		}
51171 	} else {
51172 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
51173 	}
51174 
51175 
51176 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51177 }
51178 
ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51179 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51180 {
51181 	USE_OPLINE
51182 	zval *container;
51183 
51184 	SAVE_OPLINE();
51185 	container = EX_VAR(opline->op1.var);
51186 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
51187 
51188 	if (IS_CV == IS_VAR) {
51189 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
51190 	}
51191 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51192 }
51193 
ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51194 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51195 {
51196 	USE_OPLINE
51197 	zval *container;
51198 
51199 	SAVE_OPLINE();
51200 	container = EX_VAR(opline->op1.var);
51201 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
51202 
51203 	if (IS_CV == IS_VAR) {
51204 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
51205 	}
51206 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51207 }
51208 
ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51209 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51210 {
51211 	USE_OPLINE
51212 	zval *container;
51213 
51214 	SAVE_OPLINE();
51215 	container = EX_VAR(opline->op1.var);
51216 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
51217 
51218 
51219 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51220 }
51221 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51223 {
51224 #if 0
51225 	USE_OPLINE
51226 #endif
51227 
51228 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
51229 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
51230 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51231 		}
51232 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51233 	} else {
51234 		if (IS_CV == IS_UNUSED) {
51235 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51236 		}
51237 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51238 	}
51239 }
51240 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51241 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51242 {
51243 	USE_OPLINE
51244 	zval *container;
51245 
51246 	SAVE_OPLINE();
51247 	container = EX_VAR(opline->op1.var);
51248 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
51249 
51250 	if (IS_CV == IS_VAR) {
51251 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
51252 	}
51253 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51254 }
51255 
ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51257 {
51258 	USE_OPLINE
51259 	zval *container;
51260 	void **cache_slot = NULL;
51261 
51262 	SAVE_OPLINE();
51263 	container = EX_VAR(opline->op1.var);
51264 
51265 	if (IS_CV == IS_CONST ||
51266 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
51267 		do {
51268 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
51269 				container = Z_REFVAL_P(container);
51270 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
51271 					break;
51272 				}
51273 			}
51274 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
51275 				ZVAL_UNDEFINED_OP1();
51276 			}
51277 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51278 			ZVAL_NULL(EX_VAR(opline->result.var));
51279 			goto fetch_obj_r_finish;
51280 		} while (0);
51281 	}
51282 
51283 	/* here we are sure we are dealing with an object */
51284 	do {
51285 		zend_object *zobj = Z_OBJ_P(container);
51286 		zend_string *name, *tmp_name;
51287 		zval *retval;
51288 
51289 		if (IS_CV == IS_CONST) {
51290 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
51291 
51292 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
51293 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51294 
51295 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51296 					retval = OBJ_PROP(zobj, prop_offset);
51297 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
51298 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51299 							goto fetch_obj_r_copy;
51300 						} else {
51301 fetch_obj_r_fast_copy:
51302 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
51303 							ZEND_VM_NEXT_OPCODE();
51304 						}
51305 					}
51306 				} else if (EXPECTED(zobj->properties != NULL)) {
51307 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51308 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
51309 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
51310 
51311 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
51312 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
51313 
51314 							if (EXPECTED(p->key == name) ||
51315 							    (EXPECTED(p->h == ZSTR_H(name)) &&
51316 							     EXPECTED(p->key != NULL) &&
51317 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
51318 								retval = &p->val;
51319 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51320 									goto fetch_obj_r_copy;
51321 								} else {
51322 									goto fetch_obj_r_fast_copy;
51323 								}
51324 							}
51325 						}
51326 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
51327 					}
51328 					retval = zend_hash_find_known_hash(zobj->properties, name);
51329 					if (EXPECTED(retval)) {
51330 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
51331 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
51332 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51333 							goto fetch_obj_r_copy;
51334 						} else {
51335 							goto fetch_obj_r_fast_copy;
51336 						}
51337 					}
51338 				}
51339 			}
51340 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51341 		} else {
51342 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51343 			if (UNEXPECTED(!name)) {
51344 				ZVAL_UNDEF(EX_VAR(opline->result.var));
51345 				break;
51346 			}
51347 		}
51348 
51349 #if ZEND_DEBUG
51350 		/* For non-standard object handlers, verify a declared property type in debug builds.
51351 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
51352 		zend_property_info *prop_info = NULL;
51353 		if (zobj->handlers->read_property != zend_std_read_property) {
51354 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
51355 		}
51356 #endif
51357 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
51358 #if ZEND_DEBUG
51359 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
51360 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
51361 			ZVAL_OPT_DEREF(retval);
51362 			zend_verify_property_type(prop_info, retval, /* strict */ true);
51363 		}
51364 #endif
51365 
51366 		if (IS_CV != IS_CONST) {
51367 			zend_tmp_string_release(tmp_name);
51368 		}
51369 
51370 		if (retval != EX_VAR(opline->result.var)) {
51371 fetch_obj_r_copy:
51372 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
51373 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
51374 			zend_unwrap_reference(retval);
51375 		}
51376 	} while (0);
51377 
51378 fetch_obj_r_finish:
51379 
51380 
51381 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51382 }
51383 
ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51384 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51385 {
51386 	USE_OPLINE
51387 	zval *property, *container, *result;
51388 
51389 	SAVE_OPLINE();
51390 
51391 	container = EX_VAR(opline->op1.var);
51392 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51393 	result = EX_VAR(opline->result.var);
51394 	zend_fetch_property_address(
51395 		result, container, IS_CV, property, IS_CV,
51396 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
51397 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
51398 
51399 	if (IS_CV == IS_VAR) {
51400 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
51401 	}
51402 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51403 }
51404 
ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51405 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51406 {
51407 	USE_OPLINE
51408 	zval *property, *container, *result;
51409 
51410 	SAVE_OPLINE();
51411 	container = EX_VAR(opline->op1.var);
51412 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51413 	result = EX_VAR(opline->result.var);
51414 	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 OPLINE_CC EXECUTE_DATA_CC);
51415 
51416 	if (IS_CV == IS_VAR) {
51417 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
51418 	}
51419 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51420 }
51421 
ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51423 {
51424 	USE_OPLINE
51425 	zval *container;
51426 	void **cache_slot = NULL;
51427 
51428 	SAVE_OPLINE();
51429 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
51430 
51431 	if (IS_CV == IS_CONST ||
51432 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
51433 		do {
51434 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
51435 				container = Z_REFVAL_P(container);
51436 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
51437 					break;
51438 				}
51439 			}
51440 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
51441 				ZVAL_UNDEFINED_OP2();
51442 			}
51443 			ZVAL_NULL(EX_VAR(opline->result.var));
51444 			goto fetch_obj_is_finish;
51445 		} while (0);
51446 	}
51447 
51448 	/* here we are sure we are dealing with an object */
51449 	do {
51450 		zend_object *zobj = Z_OBJ_P(container);
51451 		zend_string *name, *tmp_name;
51452 		zval *retval;
51453 
51454 		if (IS_CV == IS_CONST) {
51455 			cache_slot = CACHE_ADDR(opline->extended_value);
51456 
51457 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
51458 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51459 
51460 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51461 					retval = OBJ_PROP(zobj, prop_offset);
51462 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
51463 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51464 							goto fetch_obj_is_copy;
51465 						} else {
51466 fetch_obj_is_fast_copy:
51467 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
51468 							ZEND_VM_NEXT_OPCODE();
51469 						}
51470 					}
51471 				} else if (EXPECTED(zobj->properties != NULL)) {
51472 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51473 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
51474 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
51475 
51476 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
51477 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
51478 
51479 							if (EXPECTED(p->key == name) ||
51480 							    (EXPECTED(p->h == ZSTR_H(name)) &&
51481 							     EXPECTED(p->key != NULL) &&
51482 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
51483 								retval = &p->val;
51484 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51485 									goto fetch_obj_is_copy;
51486 								} else {
51487 									goto fetch_obj_is_fast_copy;
51488 								}
51489 							}
51490 						}
51491 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
51492 					}
51493 					retval = zend_hash_find_known_hash(zobj->properties, name);
51494 					if (EXPECTED(retval)) {
51495 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
51496 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
51497 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51498 							goto fetch_obj_is_copy;
51499 						} else {
51500 							goto fetch_obj_is_fast_copy;
51501 						}
51502 					}
51503 				}
51504 			}
51505 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51506 		} else {
51507 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51508 			if (UNEXPECTED(!name)) {
51509 				ZVAL_UNDEF(EX_VAR(opline->result.var));
51510 				break;
51511 			}
51512 		}
51513 
51514 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
51515 
51516 		if (IS_CV != IS_CONST) {
51517 			zend_tmp_string_release(tmp_name);
51518 		}
51519 
51520 		if (retval != EX_VAR(opline->result.var)) {
51521 fetch_obj_is_copy:
51522 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
51523 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
51524 			zend_unwrap_reference(retval);
51525 		}
51526 	} while (0);
51527 
51528 fetch_obj_is_finish:
51529 
51530 
51531 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51532 }
51533 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51534 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51535 {
51536 #if 0
51537 	USE_OPLINE
51538 #endif
51539 
51540 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
51541 		/* Behave like FETCH_OBJ_W */
51542 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
51543 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51544 		}
51545 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51546 	} else {
51547 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51548 	}
51549 }
51550 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51551 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51552 {
51553 	USE_OPLINE
51554 	zval *container, *property, *result;
51555 
51556 	SAVE_OPLINE();
51557 	container = EX_VAR(opline->op1.var);
51558 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51559 	result = EX_VAR(opline->result.var);
51560 	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 OPLINE_CC EXECUTE_DATA_CC);
51561 
51562 	if (IS_CV == IS_VAR) {
51563 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
51564 	}
51565 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51566 }
51567 
ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51568 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51569 {
51570 	USE_OPLINE
51571 	zval *object, *value, tmp;
51572 	zend_object *zobj;
51573 	zend_string *name, *tmp_name;
51574 	zend_refcounted *garbage = NULL;
51575 
51576 	SAVE_OPLINE();
51577 	object = EX_VAR(opline->op1.var);
51578 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
51579 
51580 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51581 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51582 			object = Z_REFVAL_P(object);
51583 			goto assign_object;
51584 		}
51585 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
51586 		value = &EG(uninitialized_zval);
51587 		goto free_and_exit_assign_obj;
51588 	}
51589 
51590 assign_object:
51591 	zobj = Z_OBJ_P(object);
51592 	if (IS_CV == IS_CONST) {
51593 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
51594 			void **cache_slot = CACHE_ADDR(opline->extended_value);
51595 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51596 			zval *property_val;
51597 
51598 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51599 				property_val = OBJ_PROP(zobj, prop_offset);
51600 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
51601 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
51602 
51603 					if (prop_info != NULL) {
51604 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
51605 						goto free_and_exit_assign_obj;
51606 					} else {
51607 fast_assign_obj:
51608 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
51609 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51610 							ZVAL_COPY(EX_VAR(opline->result.var), value);
51611 						}
51612 						goto exit_assign_obj;
51613 					}
51614 				}
51615 			} else {
51616 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51617 				if (EXPECTED(zobj->properties != NULL)) {
51618 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
51619 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
51620 							GC_DELREF(zobj->properties);
51621 						}
51622 						zobj->properties = zend_array_dup(zobj->properties);
51623 					}
51624 					property_val = zend_hash_find_known_hash(zobj->properties, name);
51625 					if (property_val) {
51626 						goto fast_assign_obj;
51627 					}
51628 				}
51629 
51630 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
51631 					if (EXPECTED(zobj->properties == NULL)) {
51632 						rebuild_object_properties(zobj);
51633 					}
51634 					if (IS_CONST == IS_CONST) {
51635 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
51636 							Z_ADDREF_P(value);
51637 						}
51638 					} else if (IS_CONST != IS_TMP_VAR) {
51639 						if (Z_ISREF_P(value)) {
51640 							if (IS_CONST == IS_VAR) {
51641 								zend_reference *ref = Z_REF_P(value);
51642 								if (GC_DELREF(ref) == 0) {
51643 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
51644 									efree_size(ref, sizeof(zend_reference));
51645 									value = &tmp;
51646 								} else {
51647 									value = Z_REFVAL_P(value);
51648 									Z_TRY_ADDREF_P(value);
51649 								}
51650 							} else {
51651 								value = Z_REFVAL_P(value);
51652 								Z_TRY_ADDREF_P(value);
51653 							}
51654 						} else if (IS_CONST == IS_CV) {
51655 							Z_TRY_ADDREF_P(value);
51656 						}
51657 						}
51658 					zend_hash_add_new(zobj->properties, name, value);
51659 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51660 						ZVAL_COPY(EX_VAR(opline->result.var), value);
51661 					}
51662 					goto exit_assign_obj;
51663 				}
51664 			}
51665 		}
51666 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51667 	} else {
51668 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51669 		if (UNEXPECTED(!name)) {
51670 
51671 			UNDEF_RESULT();
51672 			goto exit_assign_obj;
51673 		}
51674 	}
51675 
51676 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
51677 		ZVAL_DEREF(value);
51678 	}
51679 
51680 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
51681 
51682 	if (IS_CV != IS_CONST) {
51683 		zend_tmp_string_release(tmp_name);
51684 	}
51685 
51686 free_and_exit_assign_obj:
51687 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
51688 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
51689 	}
51690 
51691 exit_assign_obj:
51692 	if (garbage) {
51693 		GC_DTOR_NO_REF(garbage);
51694 	}
51695 
51696 
51697 	/* assign_obj has two opcodes! */
51698 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51699 }
51700 
51701 /* 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)51702 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51703 {
51704 	USE_OPLINE
51705 	zval *object, *value, tmp;
51706 	zend_object *zobj;
51707 	zend_string *name, *tmp_name;
51708 	zend_refcounted *garbage = NULL;
51709 
51710 	SAVE_OPLINE();
51711 	object = EX_VAR(opline->op1.var);
51712 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
51713 
51714 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51715 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51716 			object = Z_REFVAL_P(object);
51717 			goto assign_object;
51718 		}
51719 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
51720 		value = &EG(uninitialized_zval);
51721 		goto free_and_exit_assign_obj;
51722 	}
51723 
51724 assign_object:
51725 	zobj = Z_OBJ_P(object);
51726 	if (IS_CV == IS_CONST) {
51727 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
51728 			void **cache_slot = CACHE_ADDR(opline->extended_value);
51729 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51730 			zval *property_val;
51731 
51732 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51733 				property_val = OBJ_PROP(zobj, prop_offset);
51734 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
51735 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
51736 
51737 					if (prop_info != NULL) {
51738 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
51739 						goto free_and_exit_assign_obj;
51740 					} else {
51741 fast_assign_obj:
51742 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
51743 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51744 							ZVAL_COPY(EX_VAR(opline->result.var), value);
51745 						}
51746 						goto exit_assign_obj;
51747 					}
51748 				}
51749 			} else {
51750 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51751 				if (EXPECTED(zobj->properties != NULL)) {
51752 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
51753 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
51754 							GC_DELREF(zobj->properties);
51755 						}
51756 						zobj->properties = zend_array_dup(zobj->properties);
51757 					}
51758 					property_val = zend_hash_find_known_hash(zobj->properties, name);
51759 					if (property_val) {
51760 						goto fast_assign_obj;
51761 					}
51762 				}
51763 
51764 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
51765 					if (EXPECTED(zobj->properties == NULL)) {
51766 						rebuild_object_properties(zobj);
51767 					}
51768 					if (IS_TMP_VAR == IS_CONST) {
51769 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
51770 							Z_ADDREF_P(value);
51771 						}
51772 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
51773 						if (Z_ISREF_P(value)) {
51774 							if (IS_TMP_VAR == IS_VAR) {
51775 								zend_reference *ref = Z_REF_P(value);
51776 								if (GC_DELREF(ref) == 0) {
51777 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
51778 									efree_size(ref, sizeof(zend_reference));
51779 									value = &tmp;
51780 								} else {
51781 									value = Z_REFVAL_P(value);
51782 									Z_TRY_ADDREF_P(value);
51783 								}
51784 							} else {
51785 								value = Z_REFVAL_P(value);
51786 								Z_TRY_ADDREF_P(value);
51787 							}
51788 						} else if (IS_TMP_VAR == IS_CV) {
51789 							Z_TRY_ADDREF_P(value);
51790 						}
51791 						}
51792 					zend_hash_add_new(zobj->properties, name, value);
51793 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51794 						ZVAL_COPY(EX_VAR(opline->result.var), value);
51795 					}
51796 					goto exit_assign_obj;
51797 				}
51798 			}
51799 		}
51800 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51801 	} else {
51802 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51803 		if (UNEXPECTED(!name)) {
51804 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
51805 			UNDEF_RESULT();
51806 			goto exit_assign_obj;
51807 		}
51808 	}
51809 
51810 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
51811 		ZVAL_DEREF(value);
51812 	}
51813 
51814 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
51815 
51816 	if (IS_CV != IS_CONST) {
51817 		zend_tmp_string_release(tmp_name);
51818 	}
51819 
51820 free_and_exit_assign_obj:
51821 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
51822 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
51823 	}
51824 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
51825 exit_assign_obj:
51826 	if (garbage) {
51827 		GC_DTOR_NO_REF(garbage);
51828 	}
51829 
51830 
51831 	/* assign_obj has two opcodes! */
51832 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51833 }
51834 
51835 /* 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)51836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51837 {
51838 	USE_OPLINE
51839 	zval *object, *value, tmp;
51840 	zend_object *zobj;
51841 	zend_string *name, *tmp_name;
51842 	zend_refcounted *garbage = NULL;
51843 
51844 	SAVE_OPLINE();
51845 	object = EX_VAR(opline->op1.var);
51846 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
51847 
51848 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51849 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51850 			object = Z_REFVAL_P(object);
51851 			goto assign_object;
51852 		}
51853 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
51854 		value = &EG(uninitialized_zval);
51855 		goto free_and_exit_assign_obj;
51856 	}
51857 
51858 assign_object:
51859 	zobj = Z_OBJ_P(object);
51860 	if (IS_CV == IS_CONST) {
51861 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
51862 			void **cache_slot = CACHE_ADDR(opline->extended_value);
51863 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51864 			zval *property_val;
51865 
51866 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51867 				property_val = OBJ_PROP(zobj, prop_offset);
51868 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
51869 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
51870 
51871 					if (prop_info != NULL) {
51872 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
51873 						goto free_and_exit_assign_obj;
51874 					} else {
51875 fast_assign_obj:
51876 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
51877 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51878 							ZVAL_COPY(EX_VAR(opline->result.var), value);
51879 						}
51880 						goto exit_assign_obj;
51881 					}
51882 				}
51883 			} else {
51884 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51885 				if (EXPECTED(zobj->properties != NULL)) {
51886 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
51887 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
51888 							GC_DELREF(zobj->properties);
51889 						}
51890 						zobj->properties = zend_array_dup(zobj->properties);
51891 					}
51892 					property_val = zend_hash_find_known_hash(zobj->properties, name);
51893 					if (property_val) {
51894 						goto fast_assign_obj;
51895 					}
51896 				}
51897 
51898 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
51899 					if (EXPECTED(zobj->properties == NULL)) {
51900 						rebuild_object_properties(zobj);
51901 					}
51902 					if (IS_VAR == IS_CONST) {
51903 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
51904 							Z_ADDREF_P(value);
51905 						}
51906 					} else if (IS_VAR != IS_TMP_VAR) {
51907 						if (Z_ISREF_P(value)) {
51908 							if (IS_VAR == IS_VAR) {
51909 								zend_reference *ref = Z_REF_P(value);
51910 								if (GC_DELREF(ref) == 0) {
51911 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
51912 									efree_size(ref, sizeof(zend_reference));
51913 									value = &tmp;
51914 								} else {
51915 									value = Z_REFVAL_P(value);
51916 									Z_TRY_ADDREF_P(value);
51917 								}
51918 							} else {
51919 								value = Z_REFVAL_P(value);
51920 								Z_TRY_ADDREF_P(value);
51921 							}
51922 						} else if (IS_VAR == IS_CV) {
51923 							Z_TRY_ADDREF_P(value);
51924 						}
51925 						}
51926 					zend_hash_add_new(zobj->properties, name, value);
51927 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51928 						ZVAL_COPY(EX_VAR(opline->result.var), value);
51929 					}
51930 					goto exit_assign_obj;
51931 				}
51932 			}
51933 		}
51934 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51935 	} else {
51936 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51937 		if (UNEXPECTED(!name)) {
51938 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
51939 			UNDEF_RESULT();
51940 			goto exit_assign_obj;
51941 		}
51942 	}
51943 
51944 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
51945 		ZVAL_DEREF(value);
51946 	}
51947 
51948 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
51949 
51950 	if (IS_CV != IS_CONST) {
51951 		zend_tmp_string_release(tmp_name);
51952 	}
51953 
51954 free_and_exit_assign_obj:
51955 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
51956 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
51957 	}
51958 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
51959 exit_assign_obj:
51960 	if (garbage) {
51961 		GC_DTOR_NO_REF(garbage);
51962 	}
51963 
51964 
51965 	/* assign_obj has two opcodes! */
51966 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51967 }
51968 
51969 /* 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)51970 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51971 {
51972 	USE_OPLINE
51973 	zval *object, *value, tmp;
51974 	zend_object *zobj;
51975 	zend_string *name, *tmp_name;
51976 	zend_refcounted *garbage = NULL;
51977 
51978 	SAVE_OPLINE();
51979 	object = EX_VAR(opline->op1.var);
51980 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
51981 
51982 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51983 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51984 			object = Z_REFVAL_P(object);
51985 			goto assign_object;
51986 		}
51987 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
51988 		value = &EG(uninitialized_zval);
51989 		goto free_and_exit_assign_obj;
51990 	}
51991 
51992 assign_object:
51993 	zobj = Z_OBJ_P(object);
51994 	if (IS_CV == IS_CONST) {
51995 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
51996 			void **cache_slot = CACHE_ADDR(opline->extended_value);
51997 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51998 			zval *property_val;
51999 
52000 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
52001 				property_val = OBJ_PROP(zobj, prop_offset);
52002 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
52003 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
52004 
52005 					if (prop_info != NULL) {
52006 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
52007 						goto free_and_exit_assign_obj;
52008 					} else {
52009 fast_assign_obj:
52010 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
52011 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52012 							ZVAL_COPY(EX_VAR(opline->result.var), value);
52013 						}
52014 						goto exit_assign_obj;
52015 					}
52016 				}
52017 			} else {
52018 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
52019 				if (EXPECTED(zobj->properties != NULL)) {
52020 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
52021 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
52022 							GC_DELREF(zobj->properties);
52023 						}
52024 						zobj->properties = zend_array_dup(zobj->properties);
52025 					}
52026 					property_val = zend_hash_find_known_hash(zobj->properties, name);
52027 					if (property_val) {
52028 						goto fast_assign_obj;
52029 					}
52030 				}
52031 
52032 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
52033 					if (EXPECTED(zobj->properties == NULL)) {
52034 						rebuild_object_properties(zobj);
52035 					}
52036 					if (IS_CV == IS_CONST) {
52037 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
52038 							Z_ADDREF_P(value);
52039 						}
52040 					} else if (IS_CV != IS_TMP_VAR) {
52041 						if (Z_ISREF_P(value)) {
52042 							if (IS_CV == IS_VAR) {
52043 								zend_reference *ref = Z_REF_P(value);
52044 								if (GC_DELREF(ref) == 0) {
52045 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
52046 									efree_size(ref, sizeof(zend_reference));
52047 									value = &tmp;
52048 								} else {
52049 									value = Z_REFVAL_P(value);
52050 									Z_TRY_ADDREF_P(value);
52051 								}
52052 							} else {
52053 								value = Z_REFVAL_P(value);
52054 								Z_TRY_ADDREF_P(value);
52055 							}
52056 						} else if (IS_CV == IS_CV) {
52057 							Z_TRY_ADDREF_P(value);
52058 						}
52059 						}
52060 					zend_hash_add_new(zobj->properties, name, value);
52061 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52062 						ZVAL_COPY(EX_VAR(opline->result.var), value);
52063 					}
52064 					goto exit_assign_obj;
52065 				}
52066 			}
52067 		}
52068 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
52069 	} else {
52070 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
52071 		if (UNEXPECTED(!name)) {
52072 
52073 			UNDEF_RESULT();
52074 			goto exit_assign_obj;
52075 		}
52076 	}
52077 
52078 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
52079 		ZVAL_DEREF(value);
52080 	}
52081 
52082 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
52083 
52084 	if (IS_CV != IS_CONST) {
52085 		zend_tmp_string_release(tmp_name);
52086 	}
52087 
52088 free_and_exit_assign_obj:
52089 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
52090 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
52091 	}
52092 
52093 exit_assign_obj:
52094 	if (garbage) {
52095 		GC_DTOR_NO_REF(garbage);
52096 	}
52097 
52098 
52099 	/* assign_obj has two opcodes! */
52100 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52101 }
52102 
52103 /* 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)52104 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52105 {
52106 	USE_OPLINE
52107 	zval *object_ptr, *orig_object_ptr;
52108 	zval *value;
52109 	zval *variable_ptr;
52110 	zval *dim;
52111 	zend_refcounted *garbage = NULL;
52112 
52113 	SAVE_OPLINE();
52114 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
52115 
52116 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52117 try_assign_dim_array:
52118 		SEPARATE_ARRAY(object_ptr);
52119 		if (IS_CV == IS_UNUSED) {
52120 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
52121 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
52122 				HashTable *ht = Z_ARRVAL_P(object_ptr);
52123 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
52124 					GC_ADDREF(ht);
52125 				}
52126 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52127 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
52128 					zend_array_destroy(ht);
52129 					goto assign_dim_error;
52130 				}
52131 			}
52132 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
52133 				ZVAL_DEREF(value);
52134 			}
52135 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
52136 			if (UNEXPECTED(value == NULL)) {
52137 				zend_cannot_add_element();
52138 				goto assign_dim_error;
52139 			} else if (IS_CONST == IS_CV) {
52140 				if (Z_REFCOUNTED_P(value)) {
52141 					Z_ADDREF_P(value);
52142 				}
52143 			} else if (IS_CONST == IS_VAR) {
52144 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
52145 				if (Z_ISREF_P(free_op_data)) {
52146 					if (Z_REFCOUNTED_P(value)) {
52147 						Z_ADDREF_P(value);
52148 					}
52149 					zval_ptr_dtor_nogc(free_op_data);
52150 				}
52151 			} else if (IS_CONST == IS_CONST) {
52152 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
52153 					Z_ADDREF_P(value);
52154 				}
52155 			}
52156 		} else {
52157 			dim = EX_VAR(opline->op2.var);
52158 			if (IS_CV == IS_CONST) {
52159 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52160 			} else {
52161 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52162 			}
52163 			if (UNEXPECTED(variable_ptr == NULL)) {
52164 				goto assign_dim_error;
52165 			}
52166 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
52167 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
52168 		}
52169 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52170 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52171 		}
52172 		if (garbage) {
52173 			GC_DTOR_NO_REF(garbage);
52174 		}
52175 	} else {
52176 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
52177 			object_ptr = Z_REFVAL_P(object_ptr);
52178 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52179 				goto try_assign_dim_array;
52180 			}
52181 		}
52182 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
52183 			zend_object *obj = Z_OBJ_P(object_ptr);
52184 
52185 			GC_ADDREF(obj);
52186 			dim = EX_VAR(opline->op2.var);
52187 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
52188 				dim = ZVAL_UNDEFINED_OP2();
52189 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
52190 				dim++;
52191 			}
52192 
52193 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
52194 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
52195 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52196 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
52197 				ZVAL_DEREF(value);
52198 			}
52199 
52200 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
52201 
52202 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
52203 				zend_objects_store_del(obj);
52204 			}
52205 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
52206 			if (IS_CV == IS_UNUSED) {
52207 				zend_use_new_element_for_string();
52208 
52209 				UNDEF_RESULT();
52210 			} else {
52211 				dim = EX_VAR(opline->op2.var);
52212 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
52213 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
52214 
52215 			}
52216 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
52217 			if (Z_ISREF_P(orig_object_ptr)
52218 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
52219 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
52220 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52221 
52222 				UNDEF_RESULT();
52223 			} else {
52224 				HashTable *ht = zend_new_array(8);
52225 				uint8_t old_type = Z_TYPE_P(object_ptr);
52226 
52227 				ZVAL_ARR(object_ptr, ht);
52228 				if (UNEXPECTED(old_type == IS_FALSE)) {
52229 					GC_ADDREF(ht);
52230 					zend_false_to_array_deprecated();
52231 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
52232 						zend_array_destroy(ht);
52233 						goto assign_dim_error;
52234 					}
52235 				}
52236 				goto try_assign_dim_array;
52237 			}
52238 		} else {
52239 			zend_use_scalar_as_array();
52240 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52241 assign_dim_error:
52242 
52243 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52244 				ZVAL_NULL(EX_VAR(opline->result.var));
52245 			}
52246 		}
52247 	}
52248 	if (IS_CV != IS_UNUSED) {
52249 
52250 	}
52251 
52252 	/* assign_dim has two opcodes! */
52253 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52254 }
52255 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52257 {
52258 	USE_OPLINE
52259 	zval *object_ptr, *orig_object_ptr;
52260 	zval *value;
52261 	zval *variable_ptr;
52262 	zval *dim;
52263 	zend_refcounted *garbage = NULL;
52264 
52265 	SAVE_OPLINE();
52266 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
52267 
52268 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52269 try_assign_dim_array:
52270 		SEPARATE_ARRAY(object_ptr);
52271 		if (IS_CV == IS_UNUSED) {
52272 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
52273 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
52274 				HashTable *ht = Z_ARRVAL_P(object_ptr);
52275 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
52276 					GC_ADDREF(ht);
52277 				}
52278 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52279 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
52280 					zend_array_destroy(ht);
52281 					goto assign_dim_error;
52282 				}
52283 			}
52284 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
52285 				ZVAL_DEREF(value);
52286 			}
52287 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
52288 			if (UNEXPECTED(value == NULL)) {
52289 				zend_cannot_add_element();
52290 				goto assign_dim_error;
52291 			} else if (IS_TMP_VAR == IS_CV) {
52292 				if (Z_REFCOUNTED_P(value)) {
52293 					Z_ADDREF_P(value);
52294 				}
52295 			} else if (IS_TMP_VAR == IS_VAR) {
52296 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
52297 				if (Z_ISREF_P(free_op_data)) {
52298 					if (Z_REFCOUNTED_P(value)) {
52299 						Z_ADDREF_P(value);
52300 					}
52301 					zval_ptr_dtor_nogc(free_op_data);
52302 				}
52303 			} else if (IS_TMP_VAR == IS_CONST) {
52304 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
52305 					Z_ADDREF_P(value);
52306 				}
52307 			}
52308 		} else {
52309 			dim = EX_VAR(opline->op2.var);
52310 			if (IS_CV == IS_CONST) {
52311 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52312 			} else {
52313 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52314 			}
52315 			if (UNEXPECTED(variable_ptr == NULL)) {
52316 				goto assign_dim_error;
52317 			}
52318 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
52319 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
52320 		}
52321 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52322 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52323 		}
52324 		if (garbage) {
52325 			GC_DTOR_NO_REF(garbage);
52326 		}
52327 	} else {
52328 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
52329 			object_ptr = Z_REFVAL_P(object_ptr);
52330 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52331 				goto try_assign_dim_array;
52332 			}
52333 		}
52334 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
52335 			zend_object *obj = Z_OBJ_P(object_ptr);
52336 
52337 			GC_ADDREF(obj);
52338 			dim = EX_VAR(opline->op2.var);
52339 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
52340 				dim = ZVAL_UNDEFINED_OP2();
52341 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
52342 				dim++;
52343 			}
52344 
52345 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
52346 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
52347 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52348 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
52349 				ZVAL_DEREF(value);
52350 			}
52351 
52352 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
52353 
52354 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52355 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
52356 				zend_objects_store_del(obj);
52357 			}
52358 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
52359 			if (IS_CV == IS_UNUSED) {
52360 				zend_use_new_element_for_string();
52361 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52362 				UNDEF_RESULT();
52363 			} else {
52364 				dim = EX_VAR(opline->op2.var);
52365 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
52366 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
52367 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52368 			}
52369 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
52370 			if (Z_ISREF_P(orig_object_ptr)
52371 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
52372 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
52373 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52374 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52375 				UNDEF_RESULT();
52376 			} else {
52377 				HashTable *ht = zend_new_array(8);
52378 				uint8_t old_type = Z_TYPE_P(object_ptr);
52379 
52380 				ZVAL_ARR(object_ptr, ht);
52381 				if (UNEXPECTED(old_type == IS_FALSE)) {
52382 					GC_ADDREF(ht);
52383 					zend_false_to_array_deprecated();
52384 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
52385 						zend_array_destroy(ht);
52386 						goto assign_dim_error;
52387 					}
52388 				}
52389 				goto try_assign_dim_array;
52390 			}
52391 		} else {
52392 			zend_use_scalar_as_array();
52393 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52394 assign_dim_error:
52395 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52396 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52397 				ZVAL_NULL(EX_VAR(opline->result.var));
52398 			}
52399 		}
52400 	}
52401 	if (IS_CV != IS_UNUSED) {
52402 
52403 	}
52404 
52405 	/* assign_dim has two opcodes! */
52406 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52407 }
52408 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52410 {
52411 	USE_OPLINE
52412 	zval *object_ptr, *orig_object_ptr;
52413 	zval *value;
52414 	zval *variable_ptr;
52415 	zval *dim;
52416 	zend_refcounted *garbage = NULL;
52417 
52418 	SAVE_OPLINE();
52419 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
52420 
52421 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52422 try_assign_dim_array:
52423 		SEPARATE_ARRAY(object_ptr);
52424 		if (IS_CV == IS_UNUSED) {
52425 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52426 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
52427 				HashTable *ht = Z_ARRVAL_P(object_ptr);
52428 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
52429 					GC_ADDREF(ht);
52430 				}
52431 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52432 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
52433 					zend_array_destroy(ht);
52434 					goto assign_dim_error;
52435 				}
52436 			}
52437 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
52438 				ZVAL_DEREF(value);
52439 			}
52440 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
52441 			if (UNEXPECTED(value == NULL)) {
52442 				zend_cannot_add_element();
52443 				goto assign_dim_error;
52444 			} else if (IS_VAR == IS_CV) {
52445 				if (Z_REFCOUNTED_P(value)) {
52446 					Z_ADDREF_P(value);
52447 				}
52448 			} else if (IS_VAR == IS_VAR) {
52449 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
52450 				if (Z_ISREF_P(free_op_data)) {
52451 					if (Z_REFCOUNTED_P(value)) {
52452 						Z_ADDREF_P(value);
52453 					}
52454 					zval_ptr_dtor_nogc(free_op_data);
52455 				}
52456 			} else if (IS_VAR == IS_CONST) {
52457 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
52458 					Z_ADDREF_P(value);
52459 				}
52460 			}
52461 		} else {
52462 			dim = EX_VAR(opline->op2.var);
52463 			if (IS_CV == IS_CONST) {
52464 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52465 			} else {
52466 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52467 			}
52468 			if (UNEXPECTED(variable_ptr == NULL)) {
52469 				goto assign_dim_error;
52470 			}
52471 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52472 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
52473 		}
52474 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52475 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52476 		}
52477 		if (garbage) {
52478 			GC_DTOR_NO_REF(garbage);
52479 		}
52480 	} else {
52481 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
52482 			object_ptr = Z_REFVAL_P(object_ptr);
52483 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52484 				goto try_assign_dim_array;
52485 			}
52486 		}
52487 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
52488 			zend_object *obj = Z_OBJ_P(object_ptr);
52489 
52490 			GC_ADDREF(obj);
52491 			dim = EX_VAR(opline->op2.var);
52492 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
52493 				dim = ZVAL_UNDEFINED_OP2();
52494 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
52495 				dim++;
52496 			}
52497 
52498 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52499 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
52500 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52501 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
52502 				ZVAL_DEREF(value);
52503 			}
52504 
52505 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
52506 
52507 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52508 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
52509 				zend_objects_store_del(obj);
52510 			}
52511 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
52512 			if (IS_CV == IS_UNUSED) {
52513 				zend_use_new_element_for_string();
52514 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52515 				UNDEF_RESULT();
52516 			} else {
52517 				dim = EX_VAR(opline->op2.var);
52518 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52519 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
52520 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52521 			}
52522 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
52523 			if (Z_ISREF_P(orig_object_ptr)
52524 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
52525 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
52526 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52527 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52528 				UNDEF_RESULT();
52529 			} else {
52530 				HashTable *ht = zend_new_array(8);
52531 				uint8_t old_type = Z_TYPE_P(object_ptr);
52532 
52533 				ZVAL_ARR(object_ptr, ht);
52534 				if (UNEXPECTED(old_type == IS_FALSE)) {
52535 					GC_ADDREF(ht);
52536 					zend_false_to_array_deprecated();
52537 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
52538 						zend_array_destroy(ht);
52539 						goto assign_dim_error;
52540 					}
52541 				}
52542 				goto try_assign_dim_array;
52543 			}
52544 		} else {
52545 			zend_use_scalar_as_array();
52546 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52547 assign_dim_error:
52548 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52549 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52550 				ZVAL_NULL(EX_VAR(opline->result.var));
52551 			}
52552 		}
52553 	}
52554 	if (IS_CV != IS_UNUSED) {
52555 
52556 	}
52557 
52558 	/* assign_dim has two opcodes! */
52559 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52560 }
52561 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52562 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52563 {
52564 	USE_OPLINE
52565 	zval *object_ptr, *orig_object_ptr;
52566 	zval *value;
52567 	zval *variable_ptr;
52568 	zval *dim;
52569 	zend_refcounted *garbage = NULL;
52570 
52571 	SAVE_OPLINE();
52572 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
52573 
52574 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52575 try_assign_dim_array:
52576 		SEPARATE_ARRAY(object_ptr);
52577 		if (IS_CV == IS_UNUSED) {
52578 			value = EX_VAR((opline+1)->op1.var);
52579 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
52580 				HashTable *ht = Z_ARRVAL_P(object_ptr);
52581 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
52582 					GC_ADDREF(ht);
52583 				}
52584 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52585 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
52586 					zend_array_destroy(ht);
52587 					goto assign_dim_error;
52588 				}
52589 			}
52590 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
52591 				ZVAL_DEREF(value);
52592 			}
52593 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
52594 			if (UNEXPECTED(value == NULL)) {
52595 				zend_cannot_add_element();
52596 				goto assign_dim_error;
52597 			} else if (IS_CV == IS_CV) {
52598 				if (Z_REFCOUNTED_P(value)) {
52599 					Z_ADDREF_P(value);
52600 				}
52601 			} else if (IS_CV == IS_VAR) {
52602 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
52603 				if (Z_ISREF_P(free_op_data)) {
52604 					if (Z_REFCOUNTED_P(value)) {
52605 						Z_ADDREF_P(value);
52606 					}
52607 					zval_ptr_dtor_nogc(free_op_data);
52608 				}
52609 			} else if (IS_CV == IS_CONST) {
52610 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
52611 					Z_ADDREF_P(value);
52612 				}
52613 			}
52614 		} else {
52615 			dim = EX_VAR(opline->op2.var);
52616 			if (IS_CV == IS_CONST) {
52617 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52618 			} else {
52619 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52620 			}
52621 			if (UNEXPECTED(variable_ptr == NULL)) {
52622 				goto assign_dim_error;
52623 			}
52624 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
52625 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
52626 		}
52627 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52628 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52629 		}
52630 		if (garbage) {
52631 			GC_DTOR_NO_REF(garbage);
52632 		}
52633 	} else {
52634 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
52635 			object_ptr = Z_REFVAL_P(object_ptr);
52636 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52637 				goto try_assign_dim_array;
52638 			}
52639 		}
52640 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
52641 			zend_object *obj = Z_OBJ_P(object_ptr);
52642 
52643 			GC_ADDREF(obj);
52644 			dim = EX_VAR(opline->op2.var);
52645 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
52646 				dim = ZVAL_UNDEFINED_OP2();
52647 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
52648 				dim++;
52649 			}
52650 
52651 			value = EX_VAR((opline+1)->op1.var);
52652 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
52653 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52654 			} else if (IS_CV & (IS_CV|IS_VAR)) {
52655 				ZVAL_DEREF(value);
52656 			}
52657 
52658 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
52659 
52660 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
52661 				zend_objects_store_del(obj);
52662 			}
52663 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
52664 			if (IS_CV == IS_UNUSED) {
52665 				zend_use_new_element_for_string();
52666 
52667 				UNDEF_RESULT();
52668 			} else {
52669 				dim = EX_VAR(opline->op2.var);
52670 				value = EX_VAR((opline+1)->op1.var);
52671 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
52672 
52673 			}
52674 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
52675 			if (Z_ISREF_P(orig_object_ptr)
52676 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
52677 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
52678 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52679 
52680 				UNDEF_RESULT();
52681 			} else {
52682 				HashTable *ht = zend_new_array(8);
52683 				uint8_t old_type = Z_TYPE_P(object_ptr);
52684 
52685 				ZVAL_ARR(object_ptr, ht);
52686 				if (UNEXPECTED(old_type == IS_FALSE)) {
52687 					GC_ADDREF(ht);
52688 					zend_false_to_array_deprecated();
52689 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
52690 						zend_array_destroy(ht);
52691 						goto assign_dim_error;
52692 					}
52693 				}
52694 				goto try_assign_dim_array;
52695 			}
52696 		} else {
52697 			zend_use_scalar_as_array();
52698 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52699 assign_dim_error:
52700 
52701 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52702 				ZVAL_NULL(EX_VAR(opline->result.var));
52703 			}
52704 		}
52705 	}
52706 	if (IS_CV != IS_UNUSED) {
52707 
52708 	}
52709 
52710 	/* assign_dim has two opcodes! */
52711 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52712 }
52713 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52714 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52715 {
52716 	USE_OPLINE
52717 	zval *value;
52718 	zval *variable_ptr;
52719 
52720 	SAVE_OPLINE();
52721 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52722 	variable_ptr = EX_VAR(opline->op1.var);
52723 
52724 	if (0 || UNEXPECTED(0)) {
52725 		zend_refcounted *garbage = NULL;
52726 
52727 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
52728 		if (UNEXPECTED(0)) {
52729 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52730 		}
52731 		if (garbage) {
52732 			GC_DTOR_NO_REF(garbage);
52733 		}
52734 	} else {
52735 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
52736 	}
52737 
52738 	/* zend_assign_to_variable() always takes care of op2, never free it! */
52739 
52740 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52741 }
52742 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52744 {
52745 	USE_OPLINE
52746 	zval *value;
52747 	zval *variable_ptr;
52748 
52749 	SAVE_OPLINE();
52750 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52751 	variable_ptr = EX_VAR(opline->op1.var);
52752 
52753 	if (0 || UNEXPECTED(1)) {
52754 		zend_refcounted *garbage = NULL;
52755 
52756 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
52757 		if (UNEXPECTED(1)) {
52758 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52759 		}
52760 		if (garbage) {
52761 			GC_DTOR_NO_REF(garbage);
52762 		}
52763 	} else {
52764 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
52765 	}
52766 
52767 	/* zend_assign_to_variable() always takes care of op2, never free it! */
52768 
52769 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52770 }
52771 
ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52772 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52773 {
52774 	USE_OPLINE
52775 	zval *variable_ptr;
52776 	zval *value_ptr;
52777 	zend_refcounted *garbage = NULL;
52778 
52779 	SAVE_OPLINE();
52780 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
52781 	variable_ptr = EX_VAR(opline->op1.var);
52782 
52783 	if (IS_CV == IS_VAR &&
52784 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
52785 
52786 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
52787 		variable_ptr = &EG(uninitialized_zval);
52788 	} else if (IS_CV == IS_VAR &&
52789 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
52790 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
52791 
52792 		variable_ptr = zend_wrong_assign_to_variable_reference(
52793 			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
52794 	} else {
52795 		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
52796 	}
52797 
52798 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52799 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
52800 	}
52801 
52802 	if (garbage) {
52803 		GC_DTOR(garbage);
52804 	}
52805 
52806 
52807 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52808 }
52809 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52810 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52811 {
52812 	USE_OPLINE
52813 	zval *property, *container, *value_ptr;
52814 
52815 	SAVE_OPLINE();
52816 
52817 	container = EX_VAR(opline->op1.var);
52818 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52819 
52820 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52821 
52822 	if (1) {
52823 		if (IS_CV == IS_UNUSED) {
52824 			if (IS_CV == IS_CONST) {
52825 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52826 			} else {
52827 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52828 			}
52829 		} else {
52830 			if (IS_CV == IS_CONST) {
52831 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52832 			} else {
52833 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52834 			}
52835 		}
52836 	} else {
52837 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52838 	}
52839 
52840 
52841 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52842 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52843 }
52844 
52845 /* 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)52846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52847 {
52848 	USE_OPLINE
52849 	zval *property, *container, *value_ptr;
52850 
52851 	SAVE_OPLINE();
52852 
52853 	container = EX_VAR(opline->op1.var);
52854 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52855 
52856 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
52857 
52858 	if (1) {
52859 		if (IS_CV == IS_UNUSED) {
52860 			if (IS_CV == IS_CONST) {
52861 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52862 			} else {
52863 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52864 			}
52865 		} else {
52866 			if (IS_CV == IS_CONST) {
52867 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52868 			} else {
52869 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52870 			}
52871 		}
52872 	} else {
52873 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52874 	}
52875 
52876 
52877 
52878 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52879 }
52880 
52881 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52883 {
52884 	USE_OPLINE
52885 	zval *op1, *op2;
52886 	zend_string *op1_str, *op2_str, *str;
52887 
52888 
52889 	op1 = EX_VAR(opline->op1.var);
52890 	op2 = EX_VAR(opline->op2.var);
52891 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
52892 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
52893 		zend_string *op1_str = Z_STR_P(op1);
52894 		zend_string *op2_str = Z_STR_P(op2);
52895 		zend_string *str;
52896 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
52897 
52898 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
52899 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
52900 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
52901 			} else {
52902 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
52903 			}
52904 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52905 				zend_string_release_ex(op1_str, 0);
52906 			}
52907 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
52908 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
52909 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
52910 			} else {
52911 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
52912 			}
52913 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52914 				zend_string_release_ex(op2_str, 0);
52915 			}
52916 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
52917 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
52918 			size_t len = ZSTR_LEN(op1_str);
52919 
52920 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
52921 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
52922 			GC_ADD_FLAGS(str, flags);
52923 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
52924 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52925 				zend_string_release_ex(op2_str, 0);
52926 			}
52927 		} else {
52928 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
52929 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
52930 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
52931 			GC_ADD_FLAGS(str, flags);
52932 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
52933 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52934 				zend_string_release_ex(op1_str, 0);
52935 			}
52936 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52937 				zend_string_release_ex(op2_str, 0);
52938 			}
52939 		}
52940 		ZEND_VM_NEXT_OPCODE();
52941 	}
52942 
52943 	SAVE_OPLINE();
52944 	if (IS_CV == IS_CONST) {
52945 		op1_str = Z_STR_P(op1);
52946 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
52947 		op1_str = zend_string_copy(Z_STR_P(op1));
52948 	} else {
52949 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
52950 			ZVAL_UNDEFINED_OP1();
52951 		}
52952 		op1_str = zval_get_string_func(op1);
52953 	}
52954 	if (IS_CV == IS_CONST) {
52955 		op2_str = Z_STR_P(op2);
52956 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
52957 		op2_str = zend_string_copy(Z_STR_P(op2));
52958 	} else {
52959 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
52960 			ZVAL_UNDEFINED_OP2();
52961 		}
52962 		op2_str = zval_get_string_func(op2);
52963 	}
52964 	do {
52965 		if (IS_CV != IS_CONST) {
52966 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
52967 				if (IS_CV == IS_CONST) {
52968 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
52969 						GC_ADDREF(op2_str);
52970 					}
52971 				}
52972 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
52973 				zend_string_release_ex(op1_str, 0);
52974 				break;
52975 			}
52976 		}
52977 		if (IS_CV != IS_CONST) {
52978 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
52979 				if (IS_CV == IS_CONST) {
52980 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
52981 						GC_ADDREF(op1_str);
52982 					}
52983 				}
52984 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
52985 				zend_string_release_ex(op2_str, 0);
52986 				break;
52987 			}
52988 		}
52989 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
52990 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
52991 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
52992 
52993 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
52994 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
52995 		if (IS_CV != IS_CONST) {
52996 			zend_string_release_ex(op1_str, 0);
52997 		}
52998 		if (IS_CV != IS_CONST) {
52999 			zend_string_release_ex(op2_str, 0);
53000 		}
53001 	} while (0);
53002 
53003 
53004 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53005 }
53006 
ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53008 {
53009 	USE_OPLINE
53010 	zval *function_name;
53011 	zval *object;
53012 	zend_function *fbc;
53013 	zend_class_entry *called_scope;
53014 	zend_object *obj;
53015 	zend_execute_data *call;
53016 	uint32_t call_info;
53017 
53018 	SAVE_OPLINE();
53019 
53020 	object = EX_VAR(opline->op1.var);
53021 
53022 	if (IS_CV != IS_CONST) {
53023 		function_name = EX_VAR(opline->op2.var);
53024 	}
53025 
53026 	if (IS_CV != IS_CONST &&
53027 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
53028 		do {
53029 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
53030 				function_name = Z_REFVAL_P(function_name);
53031 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
53032 					break;
53033 				}
53034 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
53035 				ZVAL_UNDEFINED_OP2();
53036 				if (UNEXPECTED(EG(exception) != NULL)) {
53037 
53038 					HANDLE_EXCEPTION();
53039 				}
53040 			}
53041 			zend_throw_error(NULL, "Method name must be a string");
53042 
53043 
53044 			HANDLE_EXCEPTION();
53045 		} while (0);
53046 	}
53047 
53048 	if (IS_CV == IS_UNUSED) {
53049 		obj = Z_OBJ_P(object);
53050 	} else {
53051 		do {
53052 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
53053 				obj = Z_OBJ_P(object);
53054 			} else {
53055 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
53056 					zend_reference *ref = Z_REF_P(object);
53057 
53058 					object = &ref->val;
53059 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
53060 						obj = Z_OBJ_P(object);
53061 						if (IS_CV & IS_VAR) {
53062 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
53063 								efree_size(ref, sizeof(zend_reference));
53064 							} else {
53065 								Z_ADDREF_P(object);
53066 							}
53067 						}
53068 						break;
53069 					}
53070 				}
53071 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
53072 					object = ZVAL_UNDEFINED_OP1();
53073 					if (UNEXPECTED(EG(exception) != NULL)) {
53074 						if (IS_CV != IS_CONST) {
53075 
53076 						}
53077 						HANDLE_EXCEPTION();
53078 					}
53079 				}
53080 				if (IS_CV == IS_CONST) {
53081 					function_name = EX_VAR(opline->op2.var);
53082 				}
53083 				zend_invalid_method_call(object, function_name);
53084 
53085 
53086 				HANDLE_EXCEPTION();
53087 			}
53088 		} while (0);
53089 	}
53090 
53091 	called_scope = obj->ce;
53092 
53093 	if (IS_CV == IS_CONST &&
53094 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
53095 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
53096 	} else {
53097 		zend_object *orig_obj = obj;
53098 
53099 		if (IS_CV == IS_CONST) {
53100 			function_name = EX_VAR(opline->op2.var);
53101 		}
53102 
53103 		/* First, locate the function. */
53104 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
53105 		if (UNEXPECTED(fbc == NULL)) {
53106 			if (EXPECTED(!EG(exception))) {
53107 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
53108 			}
53109 
53110 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
53111 				zend_objects_store_del(orig_obj);
53112 			}
53113 			HANDLE_EXCEPTION();
53114 		}
53115 		if (IS_CV == IS_CONST &&
53116 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
53117 		    EXPECTED(obj == orig_obj)) {
53118 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
53119 		}
53120 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
53121 			GC_ADDREF(obj); /* For $this pointer */
53122 			if (GC_DELREF(orig_obj) == 0) {
53123 				zend_objects_store_del(orig_obj);
53124 			}
53125 		}
53126 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
53127 			init_func_run_time_cache(&fbc->op_array);
53128 		}
53129 	}
53130 
53131 	if (IS_CV != IS_CONST) {
53132 
53133 	}
53134 
53135 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
53136 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
53137 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
53138 			zend_objects_store_del(obj);
53139 			if (UNEXPECTED(EG(exception))) {
53140 				HANDLE_EXCEPTION();
53141 			}
53142 		}
53143 		/* call static method */
53144 		obj = (zend_object*)called_scope;
53145 		call_info = ZEND_CALL_NESTED_FUNCTION;
53146 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
53147 		if (IS_CV == IS_CV) {
53148 			GC_ADDREF(obj); /* For $this pointer */
53149 		}
53150 		/* CV may be changed indirectly (e.g. when it's a reference) */
53151 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
53152 	}
53153 
53154 	call = zend_vm_stack_push_call_frame(call_info,
53155 		fbc, opline->extended_value, obj);
53156 	call->prev_execute_data = EX(call);
53157 	EX(call) = call;
53158 
53159 	ZEND_VM_NEXT_OPCODE();
53160 }
53161 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53162 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53163 {
53164 	USE_OPLINE
53165 	zval *expr_ptr, new_expr;
53166 
53167 	SAVE_OPLINE();
53168 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
53169 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
53170 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
53171 		if (Z_ISREF_P(expr_ptr)) {
53172 			Z_ADDREF_P(expr_ptr);
53173 		} else {
53174 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
53175 		}
53176 
53177 	} else {
53178 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
53179 		if (IS_CV == IS_TMP_VAR) {
53180 			/* pass */
53181 		} else if (IS_CV == IS_CONST) {
53182 			Z_TRY_ADDREF_P(expr_ptr);
53183 		} else if (IS_CV == IS_CV) {
53184 			ZVAL_DEREF(expr_ptr);
53185 			Z_TRY_ADDREF_P(expr_ptr);
53186 		} else /* if (IS_CV == IS_VAR) */ {
53187 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
53188 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
53189 
53190 				expr_ptr = Z_REFVAL_P(expr_ptr);
53191 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
53192 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
53193 					expr_ptr = &new_expr;
53194 					efree_size(ref, sizeof(zend_reference));
53195 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
53196 					Z_ADDREF_P(expr_ptr);
53197 				}
53198 			}
53199 		}
53200 	}
53201 
53202 	if (IS_CV != IS_UNUSED) {
53203 		zval *offset = EX_VAR(opline->op2.var);
53204 		zend_string *str;
53205 		zend_ulong hval;
53206 
53207 add_again:
53208 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
53209 			str = Z_STR_P(offset);
53210 			if (IS_CV != IS_CONST) {
53211 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
53212 					goto num_index;
53213 				}
53214 			}
53215 str_index:
53216 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
53217 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
53218 			hval = Z_LVAL_P(offset);
53219 num_index:
53220 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
53221 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
53222 			offset = Z_REFVAL_P(offset);
53223 			goto add_again;
53224 		} else if (Z_TYPE_P(offset) == IS_NULL) {
53225 			str = ZSTR_EMPTY_ALLOC();
53226 			goto str_index;
53227 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
53228 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
53229 			goto num_index;
53230 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
53231 			hval = 0;
53232 			goto num_index;
53233 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
53234 			hval = 1;
53235 			goto num_index;
53236 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
53237 			zend_use_resource_as_offset(offset);
53238 			hval = Z_RES_HANDLE_P(offset);
53239 			goto num_index;
53240 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
53241 			ZVAL_UNDEFINED_OP2();
53242 			str = ZSTR_EMPTY_ALLOC();
53243 			goto str_index;
53244 		} else {
53245 			zend_illegal_array_offset_access(offset);
53246 			zval_ptr_dtor_nogc(expr_ptr);
53247 		}
53248 
53249 	} else {
53250 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
53251 			zend_cannot_add_element();
53252 			zval_ptr_dtor_nogc(expr_ptr);
53253 		}
53254 	}
53255 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53256 }
53257 
ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53258 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53259 {
53260 	zval *array;
53261 	uint32_t size;
53262 	USE_OPLINE
53263 
53264 	array = EX_VAR(opline->result.var);
53265 	if (IS_CV != IS_UNUSED) {
53266 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
53267 		ZVAL_ARR(array, zend_new_array(size));
53268 		/* Explicitly initialize array as not-packed if flag is set */
53269 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
53270 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
53271 		}
53272 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
53273 	} else {
53274 		ZVAL_ARR(array, zend_new_array(0));
53275 		ZEND_VM_NEXT_OPCODE();
53276 	}
53277 }
53278 
ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53279 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53280 {
53281 	USE_OPLINE
53282 	zval *container;
53283 	zval *offset;
53284 	zend_ulong hval;
53285 	zend_string *key;
53286 
53287 	SAVE_OPLINE();
53288 	container = EX_VAR(opline->op1.var);
53289 	offset = EX_VAR(opline->op2.var);
53290 
53291 	do {
53292 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53293 			HashTable *ht;
53294 
53295 unset_dim_array:
53296 			SEPARATE_ARRAY(container);
53297 			ht = Z_ARRVAL_P(container);
53298 offset_again:
53299 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
53300 				key = Z_STR_P(offset);
53301 				if (IS_CV != IS_CONST) {
53302 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
53303 						goto num_index_dim;
53304 					}
53305 				}
53306 str_index_dim:
53307 				ZEND_ASSERT(ht != &EG(symbol_table));
53308 				zend_hash_del(ht, key);
53309 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
53310 				hval = Z_LVAL_P(offset);
53311 num_index_dim:
53312 				zend_hash_index_del(ht, hval);
53313 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
53314 				offset = Z_REFVAL_P(offset);
53315 				goto offset_again;
53316 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
53317 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
53318 				goto num_index_dim;
53319 			} else if (Z_TYPE_P(offset) == IS_NULL) {
53320 				key = ZSTR_EMPTY_ALLOC();
53321 				goto str_index_dim;
53322 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
53323 				hval = 0;
53324 				goto num_index_dim;
53325 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
53326 				hval = 1;
53327 				goto num_index_dim;
53328 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
53329 				zend_use_resource_as_offset(offset);
53330 				hval = Z_RES_HANDLE_P(offset);
53331 				goto num_index_dim;
53332 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
53333 				ZVAL_UNDEFINED_OP2();
53334 				key = ZSTR_EMPTY_ALLOC();
53335 				goto str_index_dim;
53336 			} else {
53337 				zend_illegal_array_offset_unset(offset);
53338 			}
53339 			break;
53340 		} else if (Z_ISREF_P(container)) {
53341 			container = Z_REFVAL_P(container);
53342 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53343 				goto unset_dim_array;
53344 			}
53345 		}
53346 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
53347 			container = ZVAL_UNDEFINED_OP1();
53348 		}
53349 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
53350 			offset = ZVAL_UNDEFINED_OP2();
53351 		}
53352 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
53353 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
53354 				offset++;
53355 			}
53356 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
53357 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
53358 			zend_throw_error(NULL, "Cannot unset string offsets");
53359 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
53360 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
53361 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
53362 			zend_false_to_array_deprecated();
53363 		}
53364 	} while (0);
53365 
53366 
53367 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53368 }
53369 
ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53370 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53371 {
53372 	USE_OPLINE
53373 	zval *container;
53374 	zval *offset;
53375 	zend_string *name, *tmp_name;
53376 
53377 	SAVE_OPLINE();
53378 	container = EX_VAR(opline->op1.var);
53379 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
53380 
53381 	do {
53382 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
53383 			if (Z_ISREF_P(container)) {
53384 				container = Z_REFVAL_P(container);
53385 				if (Z_TYPE_P(container) != IS_OBJECT) {
53386 					if (IS_CV == IS_CV
53387 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
53388 						ZVAL_UNDEFINED_OP1();
53389 					}
53390 					break;
53391 				}
53392 			} else {
53393 				break;
53394 			}
53395 		}
53396 		if (IS_CV == IS_CONST) {
53397 			name = Z_STR_P(offset);
53398 		} else {
53399 			name = zval_try_get_tmp_string(offset, &tmp_name);
53400 			if (UNEXPECTED(!name)) {
53401 				break;
53402 			}
53403 		}
53404 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
53405 		if (IS_CV != IS_CONST) {
53406 			zend_tmp_string_release(tmp_name);
53407 		}
53408 	} while (0);
53409 
53410 
53411 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53412 }
53413 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53414 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53415 {
53416 	USE_OPLINE
53417 	zval *container;
53418 	bool result;
53419 	zend_ulong hval;
53420 	zval *offset;
53421 
53422 	SAVE_OPLINE();
53423 	container = EX_VAR(opline->op1.var);
53424 	offset = EX_VAR(opline->op2.var);
53425 
53426 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53427 		HashTable *ht;
53428 		zval *value;
53429 		zend_string *str;
53430 
53431 isset_dim_obj_array:
53432 		ht = Z_ARRVAL_P(container);
53433 isset_again:
53434 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
53435 			str = Z_STR_P(offset);
53436 			if (IS_CV != IS_CONST) {
53437 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
53438 					goto num_index_prop;
53439 				}
53440 			}
53441 			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
53442 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
53443 			hval = Z_LVAL_P(offset);
53444 num_index_prop:
53445 			value = zend_hash_index_find(ht, hval);
53446 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
53447 			offset = Z_REFVAL_P(offset);
53448 			goto isset_again;
53449 		} else {
53450 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
53451 			if (UNEXPECTED(EG(exception))) {
53452 				result = 0;
53453 				goto isset_dim_obj_exit;
53454 			}
53455 		}
53456 
53457 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
53458 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
53459 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
53460 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
53461 
53462 			if (IS_CV & (IS_CONST|IS_CV)) {
53463 				/* avoid exception check */
53464 
53465 				ZEND_VM_SMART_BRANCH(result, 0);
53466 			}
53467 		} else {
53468 			result = (value == NULL || !i_zend_is_true(value));
53469 		}
53470 		goto isset_dim_obj_exit;
53471 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
53472 		container = Z_REFVAL_P(container);
53473 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53474 			goto isset_dim_obj_array;
53475 		}
53476 	}
53477 
53478 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
53479 		offset++;
53480 	}
53481 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
53482 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
53483 	} else {
53484 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
53485 	}
53486 
53487 isset_dim_obj_exit:
53488 
53489 
53490 	ZEND_VM_SMART_BRANCH(result, 1);
53491 }
53492 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53493 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53494 {
53495 	USE_OPLINE
53496 	zval *container;
53497 	int result;
53498 	zval *offset;
53499 	zend_string *name, *tmp_name;
53500 
53501 	SAVE_OPLINE();
53502 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
53503 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
53504 
53505 	if (IS_CV == IS_CONST ||
53506 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
53507 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
53508 			container = Z_REFVAL_P(container);
53509 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
53510 				result = (opline->extended_value & ZEND_ISEMPTY);
53511 				goto isset_object_finish;
53512 			}
53513 		} else {
53514 			result = (opline->extended_value & ZEND_ISEMPTY);
53515 			goto isset_object_finish;
53516 		}
53517 	}
53518 
53519 	if (IS_CV == IS_CONST) {
53520 		name = Z_STR_P(offset);
53521 	} else {
53522 		name = zval_try_get_tmp_string(offset, &tmp_name);
53523 		if (UNEXPECTED(!name)) {
53524 			result = 0;
53525 			goto isset_object_finish;
53526 		}
53527 	}
53528 
53529 	result =
53530 		(opline->extended_value & ZEND_ISEMPTY) ^
53531 		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
53532 
53533 	if (IS_CV != IS_CONST) {
53534 		zend_tmp_string_release(tmp_name);
53535 	}
53536 
53537 isset_object_finish:
53538 
53539 
53540 	ZEND_VM_SMART_BRANCH(result, 1);
53541 }
53542 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53543 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53544 {
53545 	USE_OPLINE
53546 
53547 	zval *key, *subject;
53548 	HashTable *ht;
53549 	bool result;
53550 
53551 	SAVE_OPLINE();
53552 
53553 	key = EX_VAR(opline->op1.var);
53554 	subject = EX_VAR(opline->op2.var);
53555 
53556 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
53557 array_key_exists_array:
53558 		ht = Z_ARRVAL_P(subject);
53559 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
53560 	} else {
53561 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
53562 			subject = Z_REFVAL_P(subject);
53563 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
53564 				goto array_key_exists_array;
53565 			}
53566 		}
53567 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
53568 		result = 0;
53569 	}
53570 
53571 
53572 	ZEND_VM_SMART_BRANCH(result, 1);
53573 }
53574 
53575 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53576 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53577 {
53578 	USE_OPLINE
53579 
53580 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
53581 
53582 	SAVE_OPLINE();
53583 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
53584 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
53585 	}
53586 
53587 	/* Destroy the previously yielded value */
53588 	zval_ptr_dtor(&generator->value);
53589 
53590 	/* Destroy the previously yielded key */
53591 	zval_ptr_dtor(&generator->key);
53592 
53593 	/* Set the new yielded value */
53594 	if (IS_CV != IS_UNUSED) {
53595 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
53596 			/* Constants and temporary variables aren't yieldable by reference,
53597 			 * but we still allow them with a notice. */
53598 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
53599 				zval *value;
53600 
53601 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
53602 
53603 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
53604 				ZVAL_COPY_VALUE(&generator->value, value);
53605 				if (IS_CV == IS_CONST) {
53606 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
53607 						Z_ADDREF(generator->value);
53608 					}
53609 				}
53610 			} else {
53611 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
53612 
53613 				/* If a function call result is yielded and the function did
53614 				 * not return by reference we throw a notice. */
53615 				do {
53616 					if (IS_CV == IS_VAR) {
53617 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
53618 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
53619 						 && !Z_ISREF_P(value_ptr)) {
53620 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
53621 							ZVAL_COPY(&generator->value, value_ptr);
53622 							break;
53623 						}
53624 					}
53625 					if (Z_ISREF_P(value_ptr)) {
53626 						Z_ADDREF_P(value_ptr);
53627 					} else {
53628 						ZVAL_MAKE_REF_EX(value_ptr, 2);
53629 					}
53630 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
53631 				} while (0);
53632 
53633 			}
53634 		} else {
53635 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
53636 
53637 			/* Consts, temporary variables and references need copying */
53638 			if (IS_CV == IS_CONST) {
53639 				ZVAL_COPY_VALUE(&generator->value, value);
53640 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
53641 					Z_ADDREF(generator->value);
53642 				}
53643 			} else if (IS_CV == IS_TMP_VAR) {
53644 				ZVAL_COPY_VALUE(&generator->value, value);
53645 			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
53646 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
53647 
53648 			} else {
53649 				ZVAL_COPY_VALUE(&generator->value, value);
53650 				if (IS_CV == IS_CV) {
53651 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
53652 				}
53653 			}
53654 		}
53655 	} else {
53656 		/* If no value was specified yield null */
53657 		ZVAL_NULL(&generator->value);
53658 	}
53659 
53660 	/* Set the new yielded key */
53661 	if (IS_CV != IS_UNUSED) {
53662 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
53663 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
53664 			key = Z_REFVAL_P(key);
53665 		}
53666 		ZVAL_COPY(&generator->key, key);
53667 
53668 		if (Z_TYPE(generator->key) == IS_LONG
53669 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
53670 		) {
53671 			generator->largest_used_integer_key = Z_LVAL(generator->key);
53672 		}
53673 	} else {
53674 		/* If no key was specified we use auto-increment keys */
53675 		generator->largest_used_integer_key++;
53676 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
53677 	}
53678 
53679 	if (RETURN_VALUE_USED(opline)) {
53680 		/* If the return value of yield is used set the send
53681 		 * target and initialize it to NULL */
53682 		generator->send_target = EX_VAR(opline->result.var);
53683 		ZVAL_NULL(generator->send_target);
53684 	} else {
53685 		generator->send_target = NULL;
53686 	}
53687 
53688 	/* We increment to the next op, so we are at the correct position when the
53689 	 * generator is resumed. */
53690 	ZEND_VM_INC_OPCODE();
53691 
53692 	/* The GOTO VM uses a local opline variable. We need to set the opline
53693 	 * variable in execute_data so we don't resume at an old position. */
53694 	SAVE_OPLINE();
53695 
53696 	ZEND_VM_RETURN();
53697 }
53698 
ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53699 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53700 {
53701 	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
53702 	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
53703 	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
53704 	USE_OPLINE
53705 	zval *op1, *op2;
53706 	bool result;
53707 
53708 	op1 = EX_VAR(opline->op1.var);
53709 	op2 = EX_VAR(opline->op2.var);
53710 	result = fast_is_identical_function(op1, op2);
53711 	/* Free is a no-op for const/cv */
53712 	ZEND_VM_SMART_BRANCH(result, 0);
53713 }
53714 
ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53715 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53716 {
53717 	USE_OPLINE
53718 	zval *op1, *op2;
53719 	bool result;
53720 
53721 	op1 = EX_VAR(opline->op1.var);
53722 	op2 = EX_VAR(opline->op2.var);
53723 	result = fast_is_identical_function(op1, op2);
53724 	/* Free is a no-op for const/cv */
53725 	ZEND_VM_SMART_BRANCH(!result, 0);
53726 }
53727 
ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53728 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53729 {
53730 	USE_OPLINE
53731 
53732 	SAVE_OPLINE();
53733 	zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
53734 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
53735 }
53736 
53737 
53738 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
53739 # undef ZEND_VM_TAIL_CALL
53740 # undef ZEND_VM_CONTINUE
53741 # undef ZEND_VM_RETURN
53742 
53743 # define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE()
53744 # define ZEND_VM_CONTINUE()      HYBRID_NEXT()
53745 # define ZEND_VM_RETURN()        goto HYBRID_HALT_LABEL
53746 #endif
53747 
53748 
53749 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
53750 # pragma GCC push_options
53751 # pragma GCC optimize("no-gcse")
53752 # pragma GCC optimize("no-ivopts")
53753 #endif
execute_ex(zend_execute_data * ex)53754 ZEND_API void execute_ex(zend_execute_data *ex)
53755 {
53756 	DCL_OPLINE
53757 
53758 #if defined(ZEND_VM_IP_GLOBAL_REG) || defined(ZEND_VM_FP_GLOBAL_REG)
53759 	struct {
53760 #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
53761 		char hybrid_jit_red_zone[ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE];
53762 #endif
53763 #ifdef ZEND_VM_IP_GLOBAL_REG
53764 		const zend_op *orig_opline;
53765 #endif
53766 #ifdef ZEND_VM_FP_GLOBAL_REG
53767 		zend_execute_data *orig_execute_data;
53768 #endif
53769 	} vm_stack_data;
53770 #endif
53771 #ifdef ZEND_VM_IP_GLOBAL_REG
53772 	vm_stack_data.orig_opline = opline;
53773 #endif
53774 #ifdef ZEND_VM_FP_GLOBAL_REG
53775 	vm_stack_data.orig_execute_data = execute_data;
53776 	execute_data = ex;
53777 #else
53778 	zend_execute_data *execute_data = ex;
53779 #endif
53780 
53781 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
53782 	if (UNEXPECTED(execute_data == NULL)) {
53783 		static const void * const labels[] = {
53784 			(void*)&&ZEND_NOP_SPEC_LABEL,
53785 			(void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
53786 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
53787 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
53788 			(void*)&&ZEND_NULL_LABEL,
53789 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
53790 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
53791 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53792 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53793 			(void*)&&ZEND_NULL_LABEL,
53794 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53795 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
53796 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53797 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53798 			(void*)&&ZEND_NULL_LABEL,
53799 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53800 			(void*)&&ZEND_NULL_LABEL,
53801 			(void*)&&ZEND_NULL_LABEL,
53802 			(void*)&&ZEND_NULL_LABEL,
53803 			(void*)&&ZEND_NULL_LABEL,
53804 			(void*)&&ZEND_NULL_LABEL,
53805 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
53806 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53807 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53808 			(void*)&&ZEND_NULL_LABEL,
53809 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53810 			(void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
53811 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
53812 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
53813 			(void*)&&ZEND_NULL_LABEL,
53814 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
53815 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
53816 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53817 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53818 			(void*)&&ZEND_NULL_LABEL,
53819 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53820 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
53821 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53822 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53823 			(void*)&&ZEND_NULL_LABEL,
53824 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53825 			(void*)&&ZEND_NULL_LABEL,
53826 			(void*)&&ZEND_NULL_LABEL,
53827 			(void*)&&ZEND_NULL_LABEL,
53828 			(void*)&&ZEND_NULL_LABEL,
53829 			(void*)&&ZEND_NULL_LABEL,
53830 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
53831 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53832 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53833 			(void*)&&ZEND_NULL_LABEL,
53834 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53835 			(void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
53836 			(void*)&&ZEND_NULL_LABEL,
53837 			(void*)&&ZEND_NULL_LABEL,
53838 			(void*)&&ZEND_NULL_LABEL,
53839 			(void*)&&ZEND_NULL_LABEL,
53840 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
53841 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53842 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53843 			(void*)&&ZEND_NULL_LABEL,
53844 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53845 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
53846 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53847 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53848 			(void*)&&ZEND_NULL_LABEL,
53849 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53850 			(void*)&&ZEND_NULL_LABEL,
53851 			(void*)&&ZEND_NULL_LABEL,
53852 			(void*)&&ZEND_NULL_LABEL,
53853 			(void*)&&ZEND_NULL_LABEL,
53854 			(void*)&&ZEND_NULL_LABEL,
53855 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
53856 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53857 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53858 			(void*)&&ZEND_NULL_LABEL,
53859 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53860 			(void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
53861 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
53862 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
53863 			(void*)&&ZEND_NULL_LABEL,
53864 			(void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
53865 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
53866 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
53867 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
53868 			(void*)&&ZEND_NULL_LABEL,
53869 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
53870 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
53871 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
53872 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
53873 			(void*)&&ZEND_NULL_LABEL,
53874 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
53875 			(void*)&&ZEND_NULL_LABEL,
53876 			(void*)&&ZEND_NULL_LABEL,
53877 			(void*)&&ZEND_NULL_LABEL,
53878 			(void*)&&ZEND_NULL_LABEL,
53879 			(void*)&&ZEND_NULL_LABEL,
53880 			(void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
53881 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
53882 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
53883 			(void*)&&ZEND_NULL_LABEL,
53884 			(void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
53885 			(void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
53886 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
53887 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
53888 			(void*)&&ZEND_NULL_LABEL,
53889 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
53890 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
53891 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53892 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53893 			(void*)&&ZEND_NULL_LABEL,
53894 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53895 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
53896 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53897 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53898 			(void*)&&ZEND_NULL_LABEL,
53899 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53900 			(void*)&&ZEND_NULL_LABEL,
53901 			(void*)&&ZEND_NULL_LABEL,
53902 			(void*)&&ZEND_NULL_LABEL,
53903 			(void*)&&ZEND_NULL_LABEL,
53904 			(void*)&&ZEND_NULL_LABEL,
53905 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
53906 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53907 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53908 			(void*)&&ZEND_NULL_LABEL,
53909 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53910 			(void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
53911 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
53912 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
53913 			(void*)&&ZEND_NULL_LABEL,
53914 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
53915 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
53916 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53917 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53918 			(void*)&&ZEND_NULL_LABEL,
53919 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53920 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
53921 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53922 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53923 			(void*)&&ZEND_NULL_LABEL,
53924 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53925 			(void*)&&ZEND_NULL_LABEL,
53926 			(void*)&&ZEND_NULL_LABEL,
53927 			(void*)&&ZEND_NULL_LABEL,
53928 			(void*)&&ZEND_NULL_LABEL,
53929 			(void*)&&ZEND_NULL_LABEL,
53930 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
53931 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53932 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53933 			(void*)&&ZEND_NULL_LABEL,
53934 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53935 			(void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
53936 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
53937 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
53938 			(void*)&&ZEND_NULL_LABEL,
53939 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
53940 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
53941 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53942 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53943 			(void*)&&ZEND_NULL_LABEL,
53944 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53945 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
53946 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53947 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53948 			(void*)&&ZEND_NULL_LABEL,
53949 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53950 			(void*)&&ZEND_NULL_LABEL,
53951 			(void*)&&ZEND_NULL_LABEL,
53952 			(void*)&&ZEND_NULL_LABEL,
53953 			(void*)&&ZEND_NULL_LABEL,
53954 			(void*)&&ZEND_NULL_LABEL,
53955 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
53956 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53957 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53958 			(void*)&&ZEND_NULL_LABEL,
53959 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53960 			(void*)&&ZEND_NULL_LABEL,
53961 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
53962 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
53963 			(void*)&&ZEND_NULL_LABEL,
53964 			(void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
53965 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
53966 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53967 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53968 			(void*)&&ZEND_NULL_LABEL,
53969 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
53970 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
53971 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53972 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53973 			(void*)&&ZEND_NULL_LABEL,
53974 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
53975 			(void*)&&ZEND_NULL_LABEL,
53976 			(void*)&&ZEND_NULL_LABEL,
53977 			(void*)&&ZEND_NULL_LABEL,
53978 			(void*)&&ZEND_NULL_LABEL,
53979 			(void*)&&ZEND_NULL_LABEL,
53980 			(void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
53981 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
53982 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
53983 			(void*)&&ZEND_NULL_LABEL,
53984 			(void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
53985 			(void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
53986 			(void*)&&ZEND_NULL_LABEL,
53987 			(void*)&&ZEND_NULL_LABEL,
53988 			(void*)&&ZEND_NULL_LABEL,
53989 			(void*)&&ZEND_NULL_LABEL,
53990 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
53991 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53992 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53993 			(void*)&&ZEND_NULL_LABEL,
53994 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53995 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
53996 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53997 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53998 			(void*)&&ZEND_NULL_LABEL,
53999 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54000 			(void*)&&ZEND_NULL_LABEL,
54001 			(void*)&&ZEND_NULL_LABEL,
54002 			(void*)&&ZEND_NULL_LABEL,
54003 			(void*)&&ZEND_NULL_LABEL,
54004 			(void*)&&ZEND_NULL_LABEL,
54005 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
54006 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54007 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54008 			(void*)&&ZEND_NULL_LABEL,
54009 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54010 			(void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
54011 			(void*)&&ZEND_NULL_LABEL,
54012 			(void*)&&ZEND_NULL_LABEL,
54013 			(void*)&&ZEND_NULL_LABEL,
54014 			(void*)&&ZEND_NULL_LABEL,
54015 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
54016 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
54017 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
54018 			(void*)&&ZEND_NULL_LABEL,
54019 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
54020 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
54021 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
54022 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
54023 			(void*)&&ZEND_NULL_LABEL,
54024 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
54025 			(void*)&&ZEND_NULL_LABEL,
54026 			(void*)&&ZEND_NULL_LABEL,
54027 			(void*)&&ZEND_NULL_LABEL,
54028 			(void*)&&ZEND_NULL_LABEL,
54029 			(void*)&&ZEND_NULL_LABEL,
54030 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
54031 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
54032 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
54033 			(void*)&&ZEND_NULL_LABEL,
54034 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
54035 			(void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
54036 			(void*)&&ZEND_NULL_LABEL,
54037 			(void*)&&ZEND_NULL_LABEL,
54038 			(void*)&&ZEND_NULL_LABEL,
54039 			(void*)&&ZEND_NULL_LABEL,
54040 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
54041 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54042 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54043 			(void*)&&ZEND_NULL_LABEL,
54044 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54045 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
54046 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54047 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54048 			(void*)&&ZEND_NULL_LABEL,
54049 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54050 			(void*)&&ZEND_NULL_LABEL,
54051 			(void*)&&ZEND_NULL_LABEL,
54052 			(void*)&&ZEND_NULL_LABEL,
54053 			(void*)&&ZEND_NULL_LABEL,
54054 			(void*)&&ZEND_NULL_LABEL,
54055 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
54056 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54057 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54058 			(void*)&&ZEND_NULL_LABEL,
54059 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
54060 			(void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
54061 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
54062 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
54063 			(void*)&&ZEND_NULL_LABEL,
54064 			(void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
54065 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
54066 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
54067 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
54068 			(void*)&&ZEND_NULL_LABEL,
54069 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
54070 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
54071 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
54072 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
54073 			(void*)&&ZEND_NULL_LABEL,
54074 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
54075 			(void*)&&ZEND_NULL_LABEL,
54076 			(void*)&&ZEND_NULL_LABEL,
54077 			(void*)&&ZEND_NULL_LABEL,
54078 			(void*)&&ZEND_NULL_LABEL,
54079 			(void*)&&ZEND_NULL_LABEL,
54080 			(void*)&&ZEND_POW_SPEC_CV_CONST_LABEL,
54081 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
54082 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
54083 			(void*)&&ZEND_NULL_LABEL,
54084 			(void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
54085 			(void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
54086 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
54087 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
54088 			(void*)&&ZEND_NULL_LABEL,
54089 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
54090 			(void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
54091 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
54092 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
54093 			(void*)&&ZEND_NULL_LABEL,
54094 			(void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
54095 			(void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
54096 			(void*)&&ZEND_NULL_LABEL,
54097 			(void*)&&ZEND_NULL_LABEL,
54098 			(void*)&&ZEND_NULL_LABEL,
54099 			(void*)&&ZEND_NULL_LABEL,
54100 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
54101 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
54102 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
54103 			(void*)&&ZEND_NULL_LABEL,
54104 			(void*)&&ZEND_NULL_LABEL,
54105 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
54106 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
54107 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
54108 			(void*)&&ZEND_NULL_LABEL,
54109 			(void*)&&ZEND_NULL_LABEL,
54110 			(void*)&&ZEND_NULL_LABEL,
54111 			(void*)&&ZEND_NULL_LABEL,
54112 			(void*)&&ZEND_NULL_LABEL,
54113 			(void*)&&ZEND_NULL_LABEL,
54114 			(void*)&&ZEND_NULL_LABEL,
54115 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
54116 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
54117 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
54118 			(void*)&&ZEND_NULL_LABEL,
54119 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
54120 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
54121 			(void*)&&ZEND_NULL_LABEL,
54122 			(void*)&&ZEND_NULL_LABEL,
54123 			(void*)&&ZEND_NULL_LABEL,
54124 			(void*)&&ZEND_NULL_LABEL,
54125 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
54126 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
54127 			(void*)&&ZEND_NULL_LABEL,
54128 			(void*)&&ZEND_NULL_LABEL,
54129 			(void*)&&ZEND_NULL_LABEL,
54130 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
54131 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
54132 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
54133 			(void*)&&ZEND_NULL_LABEL,
54134 			(void*)&&ZEND_NULL_LABEL,
54135 			(void*)&&ZEND_NULL_LABEL,
54136 			(void*)&&ZEND_NULL_LABEL,
54137 			(void*)&&ZEND_NULL_LABEL,
54138 			(void*)&&ZEND_NULL_LABEL,
54139 			(void*)&&ZEND_NULL_LABEL,
54140 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
54141 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
54142 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
54143 			(void*)&&ZEND_NULL_LABEL,
54144 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
54145 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
54146 			(void*)&&ZEND_NULL_LABEL,
54147 			(void*)&&ZEND_NULL_LABEL,
54148 			(void*)&&ZEND_NULL_LABEL,
54149 			(void*)&&ZEND_NULL_LABEL,
54150 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
54151 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
54152 			(void*)&&ZEND_NULL_LABEL,
54153 			(void*)&&ZEND_NULL_LABEL,
54154 			(void*)&&ZEND_NULL_LABEL,
54155 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
54156 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
54157 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
54158 			(void*)&&ZEND_NULL_LABEL,
54159 			(void*)&&ZEND_NULL_LABEL,
54160 			(void*)&&ZEND_NULL_LABEL,
54161 			(void*)&&ZEND_NULL_LABEL,
54162 			(void*)&&ZEND_NULL_LABEL,
54163 			(void*)&&ZEND_NULL_LABEL,
54164 			(void*)&&ZEND_NULL_LABEL,
54165 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
54166 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
54167 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
54168 			(void*)&&ZEND_NULL_LABEL,
54169 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
54170 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
54171 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
54172 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
54173 			(void*)&&ZEND_NULL_LABEL,
54174 			(void*)&&ZEND_NULL_LABEL,
54175 			(void*)&&ZEND_NULL_LABEL,
54176 			(void*)&&ZEND_NULL_LABEL,
54177 			(void*)&&ZEND_NULL_LABEL,
54178 			(void*)&&ZEND_NULL_LABEL,
54179 			(void*)&&ZEND_NULL_LABEL,
54180 			(void*)&&ZEND_NULL_LABEL,
54181 			(void*)&&ZEND_NULL_LABEL,
54182 			(void*)&&ZEND_NULL_LABEL,
54183 			(void*)&&ZEND_NULL_LABEL,
54184 			(void*)&&ZEND_NULL_LABEL,
54185 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
54186 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
54187 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
54188 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
54189 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
54190 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
54191 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
54192 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
54193 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
54194 			(void*)&&ZEND_NULL_LABEL,
54195 			(void*)&&ZEND_NULL_LABEL,
54196 			(void*)&&ZEND_NULL_LABEL,
54197 			(void*)&&ZEND_NULL_LABEL,
54198 			(void*)&&ZEND_NULL_LABEL,
54199 			(void*)&&ZEND_NULL_LABEL,
54200 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
54201 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
54202 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
54203 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
54204 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
54205 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
54206 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
54207 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
54208 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
54209 			(void*)&&ZEND_NULL_LABEL,
54210 			(void*)&&ZEND_NULL_LABEL,
54211 			(void*)&&ZEND_NULL_LABEL,
54212 			(void*)&&ZEND_NULL_LABEL,
54213 			(void*)&&ZEND_NULL_LABEL,
54214 			(void*)&&ZEND_NULL_LABEL,
54215 			(void*)&&ZEND_NULL_LABEL,
54216 			(void*)&&ZEND_NULL_LABEL,
54217 			(void*)&&ZEND_NULL_LABEL,
54218 			(void*)&&ZEND_NULL_LABEL,
54219 			(void*)&&ZEND_NULL_LABEL,
54220 			(void*)&&ZEND_NULL_LABEL,
54221 			(void*)&&ZEND_NULL_LABEL,
54222 			(void*)&&ZEND_NULL_LABEL,
54223 			(void*)&&ZEND_NULL_LABEL,
54224 			(void*)&&ZEND_NULL_LABEL,
54225 			(void*)&&ZEND_NULL_LABEL,
54226 			(void*)&&ZEND_NULL_LABEL,
54227 			(void*)&&ZEND_NULL_LABEL,
54228 			(void*)&&ZEND_NULL_LABEL,
54229 			(void*)&&ZEND_NULL_LABEL,
54230 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
54231 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
54232 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
54233 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
54234 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
54235 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
54236 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
54237 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
54238 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
54239 			(void*)&&ZEND_NULL_LABEL,
54240 			(void*)&&ZEND_NULL_LABEL,
54241 			(void*)&&ZEND_NULL_LABEL,
54242 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
54243 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
54244 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
54245 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
54246 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
54247 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
54248 			(void*)&&ZEND_NULL_LABEL,
54249 			(void*)&&ZEND_NULL_LABEL,
54250 			(void*)&&ZEND_NULL_LABEL,
54251 			(void*)&&ZEND_NULL_LABEL,
54252 			(void*)&&ZEND_NULL_LABEL,
54253 			(void*)&&ZEND_NULL_LABEL,
54254 			(void*)&&ZEND_NULL_LABEL,
54255 			(void*)&&ZEND_NULL_LABEL,
54256 			(void*)&&ZEND_NULL_LABEL,
54257 			(void*)&&ZEND_NULL_LABEL,
54258 			(void*)&&ZEND_NULL_LABEL,
54259 			(void*)&&ZEND_NULL_LABEL,
54260 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
54261 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
54262 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
54263 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
54264 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
54265 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
54266 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
54267 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
54268 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
54269 			(void*)&&ZEND_NULL_LABEL,
54270 			(void*)&&ZEND_NULL_LABEL,
54271 			(void*)&&ZEND_NULL_LABEL,
54272 			(void*)&&ZEND_NULL_LABEL,
54273 			(void*)&&ZEND_NULL_LABEL,
54274 			(void*)&&ZEND_NULL_LABEL,
54275 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
54276 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
54277 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
54278 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
54279 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
54280 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
54281 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
54282 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
54283 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
54284 			(void*)&&ZEND_NULL_LABEL,
54285 			(void*)&&ZEND_NULL_LABEL,
54286 			(void*)&&ZEND_NULL_LABEL,
54287 			(void*)&&ZEND_NULL_LABEL,
54288 			(void*)&&ZEND_NULL_LABEL,
54289 			(void*)&&ZEND_NULL_LABEL,
54290 			(void*)&&ZEND_NULL_LABEL,
54291 			(void*)&&ZEND_NULL_LABEL,
54292 			(void*)&&ZEND_NULL_LABEL,
54293 			(void*)&&ZEND_NULL_LABEL,
54294 			(void*)&&ZEND_NULL_LABEL,
54295 			(void*)&&ZEND_NULL_LABEL,
54296 			(void*)&&ZEND_NULL_LABEL,
54297 			(void*)&&ZEND_NULL_LABEL,
54298 			(void*)&&ZEND_NULL_LABEL,
54299 			(void*)&&ZEND_NULL_LABEL,
54300 			(void*)&&ZEND_NULL_LABEL,
54301 			(void*)&&ZEND_NULL_LABEL,
54302 			(void*)&&ZEND_NULL_LABEL,
54303 			(void*)&&ZEND_NULL_LABEL,
54304 			(void*)&&ZEND_NULL_LABEL,
54305 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
54306 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
54307 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
54308 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
54309 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
54310 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
54311 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
54312 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
54313 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
54314 			(void*)&&ZEND_NULL_LABEL,
54315 			(void*)&&ZEND_NULL_LABEL,
54316 			(void*)&&ZEND_NULL_LABEL,
54317 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
54318 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
54319 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
54320 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
54321 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
54322 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
54323 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
54324 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54325 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54326 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
54327 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54328 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54329 			(void*)&&ZEND_NULL_LABEL,
54330 			(void*)&&ZEND_NULL_LABEL,
54331 			(void*)&&ZEND_NULL_LABEL,
54332 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
54333 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54334 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54335 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
54336 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54337 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54338 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54339 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54340 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54341 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54342 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54343 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54344 			(void*)&&ZEND_NULL_LABEL,
54345 			(void*)&&ZEND_NULL_LABEL,
54346 			(void*)&&ZEND_NULL_LABEL,
54347 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54348 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54349 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54350 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
54351 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54352 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54353 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54354 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54355 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54356 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54357 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54358 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54359 			(void*)&&ZEND_NULL_LABEL,
54360 			(void*)&&ZEND_NULL_LABEL,
54361 			(void*)&&ZEND_NULL_LABEL,
54362 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54363 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54364 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54365 			(void*)&&ZEND_NULL_LABEL,
54366 			(void*)&&ZEND_NULL_LABEL,
54367 			(void*)&&ZEND_NULL_LABEL,
54368 			(void*)&&ZEND_NULL_LABEL,
54369 			(void*)&&ZEND_NULL_LABEL,
54370 			(void*)&&ZEND_NULL_LABEL,
54371 			(void*)&&ZEND_NULL_LABEL,
54372 			(void*)&&ZEND_NULL_LABEL,
54373 			(void*)&&ZEND_NULL_LABEL,
54374 			(void*)&&ZEND_NULL_LABEL,
54375 			(void*)&&ZEND_NULL_LABEL,
54376 			(void*)&&ZEND_NULL_LABEL,
54377 			(void*)&&ZEND_NULL_LABEL,
54378 			(void*)&&ZEND_NULL_LABEL,
54379 			(void*)&&ZEND_NULL_LABEL,
54380 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
54381 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54382 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54383 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54384 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54385 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54386 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54387 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54388 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54389 			(void*)&&ZEND_NULL_LABEL,
54390 			(void*)&&ZEND_NULL_LABEL,
54391 			(void*)&&ZEND_NULL_LABEL,
54392 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54393 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54394 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54395 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
54396 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
54397 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
54398 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
54399 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54400 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54401 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
54402 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54403 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54404 			(void*)&&ZEND_NULL_LABEL,
54405 			(void*)&&ZEND_NULL_LABEL,
54406 			(void*)&&ZEND_NULL_LABEL,
54407 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
54408 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54409 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54410 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
54411 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54412 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54413 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54414 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54415 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54416 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54417 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54418 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54419 			(void*)&&ZEND_NULL_LABEL,
54420 			(void*)&&ZEND_NULL_LABEL,
54421 			(void*)&&ZEND_NULL_LABEL,
54422 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54423 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54424 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54425 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
54426 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54427 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54428 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54429 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54430 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54431 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54432 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54433 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54434 			(void*)&&ZEND_NULL_LABEL,
54435 			(void*)&&ZEND_NULL_LABEL,
54436 			(void*)&&ZEND_NULL_LABEL,
54437 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54438 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54439 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54440 			(void*)&&ZEND_NULL_LABEL,
54441 			(void*)&&ZEND_NULL_LABEL,
54442 			(void*)&&ZEND_NULL_LABEL,
54443 			(void*)&&ZEND_NULL_LABEL,
54444 			(void*)&&ZEND_NULL_LABEL,
54445 			(void*)&&ZEND_NULL_LABEL,
54446 			(void*)&&ZEND_NULL_LABEL,
54447 			(void*)&&ZEND_NULL_LABEL,
54448 			(void*)&&ZEND_NULL_LABEL,
54449 			(void*)&&ZEND_NULL_LABEL,
54450 			(void*)&&ZEND_NULL_LABEL,
54451 			(void*)&&ZEND_NULL_LABEL,
54452 			(void*)&&ZEND_NULL_LABEL,
54453 			(void*)&&ZEND_NULL_LABEL,
54454 			(void*)&&ZEND_NULL_LABEL,
54455 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
54456 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54457 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54458 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54459 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54460 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54461 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54462 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54463 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54464 			(void*)&&ZEND_NULL_LABEL,
54465 			(void*)&&ZEND_NULL_LABEL,
54466 			(void*)&&ZEND_NULL_LABEL,
54467 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54468 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54469 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54470 			(void*)&&ZEND_NULL_LABEL,
54471 			(void*)&&ZEND_NULL_LABEL,
54472 			(void*)&&ZEND_NULL_LABEL,
54473 			(void*)&&ZEND_NULL_LABEL,
54474 			(void*)&&ZEND_NULL_LABEL,
54475 			(void*)&&ZEND_NULL_LABEL,
54476 			(void*)&&ZEND_NULL_LABEL,
54477 			(void*)&&ZEND_NULL_LABEL,
54478 			(void*)&&ZEND_NULL_LABEL,
54479 			(void*)&&ZEND_NULL_LABEL,
54480 			(void*)&&ZEND_NULL_LABEL,
54481 			(void*)&&ZEND_NULL_LABEL,
54482 			(void*)&&ZEND_NULL_LABEL,
54483 			(void*)&&ZEND_NULL_LABEL,
54484 			(void*)&&ZEND_NULL_LABEL,
54485 			(void*)&&ZEND_NULL_LABEL,
54486 			(void*)&&ZEND_NULL_LABEL,
54487 			(void*)&&ZEND_NULL_LABEL,
54488 			(void*)&&ZEND_NULL_LABEL,
54489 			(void*)&&ZEND_NULL_LABEL,
54490 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
54491 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
54492 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
54493 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
54494 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
54495 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
54496 			(void*)&&ZEND_NULL_LABEL,
54497 			(void*)&&ZEND_NULL_LABEL,
54498 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
54499 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL,
54500 			(void*)&&ZEND_NULL_LABEL,
54501 			(void*)&&ZEND_NULL_LABEL,
54502 			(void*)&&ZEND_NULL_LABEL,
54503 			(void*)&&ZEND_NULL_LABEL,
54504 			(void*)&&ZEND_NULL_LABEL,
54505 			(void*)&&ZEND_NULL_LABEL,
54506 			(void*)&&ZEND_NULL_LABEL,
54507 			(void*)&&ZEND_NULL_LABEL,
54508 			(void*)&&ZEND_NULL_LABEL,
54509 			(void*)&&ZEND_NULL_LABEL,
54510 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
54511 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
54512 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
54513 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
54514 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
54515 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
54516 			(void*)&&ZEND_NULL_LABEL,
54517 			(void*)&&ZEND_NULL_LABEL,
54518 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
54519 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL,
54520 			(void*)&&ZEND_NULL_LABEL,
54521 			(void*)&&ZEND_NULL_LABEL,
54522 			(void*)&&ZEND_NULL_LABEL,
54523 			(void*)&&ZEND_NULL_LABEL,
54524 			(void*)&&ZEND_NULL_LABEL,
54525 			(void*)&&ZEND_NULL_LABEL,
54526 			(void*)&&ZEND_NULL_LABEL,
54527 			(void*)&&ZEND_NULL_LABEL,
54528 			(void*)&&ZEND_NULL_LABEL,
54529 			(void*)&&ZEND_NULL_LABEL,
54530 			(void*)&&ZEND_NULL_LABEL,
54531 			(void*)&&ZEND_NULL_LABEL,
54532 			(void*)&&ZEND_NULL_LABEL,
54533 			(void*)&&ZEND_NULL_LABEL,
54534 			(void*)&&ZEND_NULL_LABEL,
54535 			(void*)&&ZEND_NULL_LABEL,
54536 			(void*)&&ZEND_NULL_LABEL,
54537 			(void*)&&ZEND_NULL_LABEL,
54538 			(void*)&&ZEND_NULL_LABEL,
54539 			(void*)&&ZEND_NULL_LABEL,
54540 			(void*)&&ZEND_NULL_LABEL,
54541 			(void*)&&ZEND_NULL_LABEL,
54542 			(void*)&&ZEND_NULL_LABEL,
54543 			(void*)&&ZEND_NULL_LABEL,
54544 			(void*)&&ZEND_NULL_LABEL,
54545 			(void*)&&ZEND_NULL_LABEL,
54546 			(void*)&&ZEND_NULL_LABEL,
54547 			(void*)&&ZEND_NULL_LABEL,
54548 			(void*)&&ZEND_NULL_LABEL,
54549 			(void*)&&ZEND_NULL_LABEL,
54550 			(void*)&&ZEND_NULL_LABEL,
54551 			(void*)&&ZEND_NULL_LABEL,
54552 			(void*)&&ZEND_NULL_LABEL,
54553 			(void*)&&ZEND_NULL_LABEL,
54554 			(void*)&&ZEND_NULL_LABEL,
54555 			(void*)&&ZEND_NULL_LABEL,
54556 			(void*)&&ZEND_NULL_LABEL,
54557 			(void*)&&ZEND_NULL_LABEL,
54558 			(void*)&&ZEND_NULL_LABEL,
54559 			(void*)&&ZEND_NULL_LABEL,
54560 			(void*)&&ZEND_NULL_LABEL,
54561 			(void*)&&ZEND_NULL_LABEL,
54562 			(void*)&&ZEND_NULL_LABEL,
54563 			(void*)&&ZEND_NULL_LABEL,
54564 			(void*)&&ZEND_NULL_LABEL,
54565 			(void*)&&ZEND_NULL_LABEL,
54566 			(void*)&&ZEND_NULL_LABEL,
54567 			(void*)&&ZEND_NULL_LABEL,
54568 			(void*)&&ZEND_NULL_LABEL,
54569 			(void*)&&ZEND_NULL_LABEL,
54570 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
54571 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
54572 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
54573 			(void*)&&ZEND_NULL_LABEL,
54574 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
54575 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
54576 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
54577 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54578 			(void*)&&ZEND_NULL_LABEL,
54579 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54580 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
54581 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
54582 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54583 			(void*)&&ZEND_NULL_LABEL,
54584 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54585 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
54586 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
54587 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
54588 			(void*)&&ZEND_NULL_LABEL,
54589 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
54590 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
54591 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
54592 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
54593 			(void*)&&ZEND_NULL_LABEL,
54594 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL,
54595 			(void*)&&ZEND_NULL_LABEL,
54596 			(void*)&&ZEND_NULL_LABEL,
54597 			(void*)&&ZEND_NULL_LABEL,
54598 			(void*)&&ZEND_NULL_LABEL,
54599 			(void*)&&ZEND_NULL_LABEL,
54600 			(void*)&&ZEND_NULL_LABEL,
54601 			(void*)&&ZEND_NULL_LABEL,
54602 			(void*)&&ZEND_NULL_LABEL,
54603 			(void*)&&ZEND_NULL_LABEL,
54604 			(void*)&&ZEND_NULL_LABEL,
54605 			(void*)&&ZEND_NULL_LABEL,
54606 			(void*)&&ZEND_NULL_LABEL,
54607 			(void*)&&ZEND_NULL_LABEL,
54608 			(void*)&&ZEND_NULL_LABEL,
54609 			(void*)&&ZEND_NULL_LABEL,
54610 			(void*)&&ZEND_NULL_LABEL,
54611 			(void*)&&ZEND_NULL_LABEL,
54612 			(void*)&&ZEND_NULL_LABEL,
54613 			(void*)&&ZEND_NULL_LABEL,
54614 			(void*)&&ZEND_NULL_LABEL,
54615 			(void*)&&ZEND_NULL_LABEL,
54616 			(void*)&&ZEND_NULL_LABEL,
54617 			(void*)&&ZEND_NULL_LABEL,
54618 			(void*)&&ZEND_NULL_LABEL,
54619 			(void*)&&ZEND_NULL_LABEL,
54620 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
54621 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
54622 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
54623 			(void*)&&ZEND_NULL_LABEL,
54624 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
54625 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
54626 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
54627 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54628 			(void*)&&ZEND_NULL_LABEL,
54629 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54630 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
54631 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
54632 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54633 			(void*)&&ZEND_NULL_LABEL,
54634 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54635 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
54636 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
54637 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
54638 			(void*)&&ZEND_NULL_LABEL,
54639 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
54640 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
54641 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
54642 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
54643 			(void*)&&ZEND_NULL_LABEL,
54644 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL,
54645 			(void*)&&ZEND_NULL_LABEL,
54646 			(void*)&&ZEND_NULL_LABEL,
54647 			(void*)&&ZEND_NULL_LABEL,
54648 			(void*)&&ZEND_NULL_LABEL,
54649 			(void*)&&ZEND_NULL_LABEL,
54650 			(void*)&&ZEND_NULL_LABEL,
54651 			(void*)&&ZEND_NULL_LABEL,
54652 			(void*)&&ZEND_NULL_LABEL,
54653 			(void*)&&ZEND_NULL_LABEL,
54654 			(void*)&&ZEND_NULL_LABEL,
54655 			(void*)&&ZEND_NULL_LABEL,
54656 			(void*)&&ZEND_NULL_LABEL,
54657 			(void*)&&ZEND_NULL_LABEL,
54658 			(void*)&&ZEND_NULL_LABEL,
54659 			(void*)&&ZEND_NULL_LABEL,
54660 			(void*)&&ZEND_NULL_LABEL,
54661 			(void*)&&ZEND_NULL_LABEL,
54662 			(void*)&&ZEND_NULL_LABEL,
54663 			(void*)&&ZEND_NULL_LABEL,
54664 			(void*)&&ZEND_NULL_LABEL,
54665 			(void*)&&ZEND_NULL_LABEL,
54666 			(void*)&&ZEND_NULL_LABEL,
54667 			(void*)&&ZEND_NULL_LABEL,
54668 			(void*)&&ZEND_NULL_LABEL,
54669 			(void*)&&ZEND_NULL_LABEL,
54670 			(void*)&&ZEND_NULL_LABEL,
54671 			(void*)&&ZEND_NULL_LABEL,
54672 			(void*)&&ZEND_NULL_LABEL,
54673 			(void*)&&ZEND_NULL_LABEL,
54674 			(void*)&&ZEND_NULL_LABEL,
54675 			(void*)&&ZEND_NULL_LABEL,
54676 			(void*)&&ZEND_NULL_LABEL,
54677 			(void*)&&ZEND_NULL_LABEL,
54678 			(void*)&&ZEND_NULL_LABEL,
54679 			(void*)&&ZEND_NULL_LABEL,
54680 			(void*)&&ZEND_NULL_LABEL,
54681 			(void*)&&ZEND_NULL_LABEL,
54682 			(void*)&&ZEND_NULL_LABEL,
54683 			(void*)&&ZEND_NULL_LABEL,
54684 			(void*)&&ZEND_NULL_LABEL,
54685 			(void*)&&ZEND_NULL_LABEL,
54686 			(void*)&&ZEND_NULL_LABEL,
54687 			(void*)&&ZEND_NULL_LABEL,
54688 			(void*)&&ZEND_NULL_LABEL,
54689 			(void*)&&ZEND_NULL_LABEL,
54690 			(void*)&&ZEND_NULL_LABEL,
54691 			(void*)&&ZEND_NULL_LABEL,
54692 			(void*)&&ZEND_NULL_LABEL,
54693 			(void*)&&ZEND_NULL_LABEL,
54694 			(void*)&&ZEND_NULL_LABEL,
54695 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
54696 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
54697 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
54698 			(void*)&&ZEND_NULL_LABEL,
54699 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
54700 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
54701 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
54702 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54703 			(void*)&&ZEND_NULL_LABEL,
54704 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54705 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
54706 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
54707 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54708 			(void*)&&ZEND_NULL_LABEL,
54709 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54710 			(void*)&&ZEND_NULL_LABEL,
54711 			(void*)&&ZEND_NULL_LABEL,
54712 			(void*)&&ZEND_NULL_LABEL,
54713 			(void*)&&ZEND_NULL_LABEL,
54714 			(void*)&&ZEND_NULL_LABEL,
54715 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
54716 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
54717 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
54718 			(void*)&&ZEND_NULL_LABEL,
54719 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
54720 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
54721 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
54722 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
54723 			(void*)&&ZEND_NULL_LABEL,
54724 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
54725 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
54726 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
54727 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
54728 			(void*)&&ZEND_NULL_LABEL,
54729 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
54730 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
54731 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
54732 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
54733 			(void*)&&ZEND_NULL_LABEL,
54734 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
54735 			(void*)&&ZEND_NULL_LABEL,
54736 			(void*)&&ZEND_NULL_LABEL,
54737 			(void*)&&ZEND_NULL_LABEL,
54738 			(void*)&&ZEND_NULL_LABEL,
54739 			(void*)&&ZEND_NULL_LABEL,
54740 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
54741 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
54742 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
54743 			(void*)&&ZEND_NULL_LABEL,
54744 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
54745 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
54746 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
54747 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
54748 			(void*)&&ZEND_NULL_LABEL,
54749 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
54750 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
54751 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
54752 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54753 			(void*)&&ZEND_NULL_LABEL,
54754 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54755 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
54756 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
54757 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54758 			(void*)&&ZEND_NULL_LABEL,
54759 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54760 			(void*)&&ZEND_NULL_LABEL,
54761 			(void*)&&ZEND_NULL_LABEL,
54762 			(void*)&&ZEND_NULL_LABEL,
54763 			(void*)&&ZEND_NULL_LABEL,
54764 			(void*)&&ZEND_NULL_LABEL,
54765 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
54766 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
54767 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
54768 			(void*)&&ZEND_NULL_LABEL,
54769 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
54770 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_LABEL,
54771 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_LABEL,
54772 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_LABEL,
54773 			(void*)&&ZEND_NULL_LABEL,
54774 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_LABEL,
54775 			(void*)&&ZEND_NULL_LABEL,
54776 			(void*)&&ZEND_NULL_LABEL,
54777 			(void*)&&ZEND_NULL_LABEL,
54778 			(void*)&&ZEND_NULL_LABEL,
54779 			(void*)&&ZEND_NULL_LABEL,
54780 			(void*)&&ZEND_NULL_LABEL,
54781 			(void*)&&ZEND_NULL_LABEL,
54782 			(void*)&&ZEND_NULL_LABEL,
54783 			(void*)&&ZEND_NULL_LABEL,
54784 			(void*)&&ZEND_NULL_LABEL,
54785 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CONST_LABEL,
54786 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
54787 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
54788 			(void*)&&ZEND_NULL_LABEL,
54789 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CV_LABEL,
54790 			(void*)&&ZEND_NULL_LABEL,
54791 			(void*)&&ZEND_NULL_LABEL,
54792 			(void*)&&ZEND_NULL_LABEL,
54793 			(void*)&&ZEND_NULL_LABEL,
54794 			(void*)&&ZEND_NULL_LABEL,
54795 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CONST_LABEL,
54796 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
54797 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
54798 			(void*)&&ZEND_NULL_LABEL,
54799 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CV_LABEL,
54800 			(void*)&&ZEND_NULL_LABEL,
54801 			(void*)&&ZEND_NULL_LABEL,
54802 			(void*)&&ZEND_NULL_LABEL,
54803 			(void*)&&ZEND_NULL_LABEL,
54804 			(void*)&&ZEND_NULL_LABEL,
54805 			(void*)&&ZEND_NULL_LABEL,
54806 			(void*)&&ZEND_NULL_LABEL,
54807 			(void*)&&ZEND_NULL_LABEL,
54808 			(void*)&&ZEND_NULL_LABEL,
54809 			(void*)&&ZEND_NULL_LABEL,
54810 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_LABEL,
54811 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
54812 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
54813 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_LABEL,
54814 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_LABEL,
54815 			(void*)&&ZEND_NULL_LABEL,
54816 			(void*)&&ZEND_NULL_LABEL,
54817 			(void*)&&ZEND_NULL_LABEL,
54818 			(void*)&&ZEND_NULL_LABEL,
54819 			(void*)&&ZEND_NULL_LABEL,
54820 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_LABEL,
54821 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
54822 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
54823 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_LABEL,
54824 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_LABEL,
54825 			(void*)&&ZEND_NULL_LABEL,
54826 			(void*)&&ZEND_NULL_LABEL,
54827 			(void*)&&ZEND_NULL_LABEL,
54828 			(void*)&&ZEND_NULL_LABEL,
54829 			(void*)&&ZEND_NULL_LABEL,
54830 			(void*)&&ZEND_NULL_LABEL,
54831 			(void*)&&ZEND_NULL_LABEL,
54832 			(void*)&&ZEND_NULL_LABEL,
54833 			(void*)&&ZEND_NULL_LABEL,
54834 			(void*)&&ZEND_NULL_LABEL,
54835 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_LABEL,
54836 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
54837 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
54838 			(void*)&&ZEND_NULL_LABEL,
54839 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_LABEL,
54840 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_LABEL,
54841 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
54842 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
54843 			(void*)&&ZEND_NULL_LABEL,
54844 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_LABEL,
54845 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_LABEL,
54846 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
54847 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
54848 			(void*)&&ZEND_NULL_LABEL,
54849 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_LABEL,
54850 			(void*)&&ZEND_ASSIGN_STATIC_PROP_OP_SPEC_LABEL,
54851 			(void*)&&ZEND_NULL_LABEL,
54852 			(void*)&&ZEND_NULL_LABEL,
54853 			(void*)&&ZEND_NULL_LABEL,
54854 			(void*)&&ZEND_NULL_LABEL,
54855 			(void*)&&ZEND_NULL_LABEL,
54856 			(void*)&&ZEND_NULL_LABEL,
54857 			(void*)&&ZEND_NULL_LABEL,
54858 			(void*)&&ZEND_NULL_LABEL,
54859 			(void*)&&ZEND_NULL_LABEL,
54860 			(void*)&&ZEND_NULL_LABEL,
54861 			(void*)&&ZEND_NULL_LABEL,
54862 			(void*)&&ZEND_NULL_LABEL,
54863 			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
54864 			(void*)&&ZEND_NULL_LABEL,
54865 			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_LABEL,
54866 			(void*)&&ZEND_NULL_LABEL,
54867 			(void*)&&ZEND_NULL_LABEL,
54868 			(void*)&&ZEND_NULL_LABEL,
54869 			(void*)&&ZEND_NULL_LABEL,
54870 			(void*)&&ZEND_NULL_LABEL,
54871 			(void*)&&ZEND_NULL_LABEL,
54872 			(void*)&&ZEND_NULL_LABEL,
54873 			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL,
54874 			(void*)&&ZEND_NULL_LABEL,
54875 			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
54876 			(void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
54877 			(void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
54878 			(void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
54879 			(void*)&&ZEND_NULL_LABEL,
54880 			(void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
54881 			(void*)&&ZEND_NULL_LABEL,
54882 			(void*)&&ZEND_NULL_LABEL,
54883 			(void*)&&ZEND_NULL_LABEL,
54884 			(void*)&&ZEND_NULL_LABEL,
54885 			(void*)&&ZEND_NULL_LABEL,
54886 			(void*)&&ZEND_NULL_LABEL,
54887 			(void*)&&ZEND_NULL_LABEL,
54888 			(void*)&&ZEND_NULL_LABEL,
54889 			(void*)&&ZEND_NULL_LABEL,
54890 			(void*)&&ZEND_NULL_LABEL,
54891 			(void*)&&ZEND_NULL_LABEL,
54892 			(void*)&&ZEND_NULL_LABEL,
54893 			(void*)&&ZEND_NULL_LABEL,
54894 			(void*)&&ZEND_NULL_LABEL,
54895 			(void*)&&ZEND_NULL_LABEL,
54896 			(void*)&&ZEND_NULL_LABEL,
54897 			(void*)&&ZEND_NULL_LABEL,
54898 			(void*)&&ZEND_NULL_LABEL,
54899 			(void*)&&ZEND_NULL_LABEL,
54900 			(void*)&&ZEND_NULL_LABEL,
54901 			(void*)&&ZEND_NULL_LABEL,
54902 			(void*)&&ZEND_NULL_LABEL,
54903 			(void*)&&ZEND_NULL_LABEL,
54904 			(void*)&&ZEND_NULL_LABEL,
54905 			(void*)&&ZEND_NULL_LABEL,
54906 			(void*)&&ZEND_NULL_LABEL,
54907 			(void*)&&ZEND_NULL_LABEL,
54908 			(void*)&&ZEND_NULL_LABEL,
54909 			(void*)&&ZEND_NULL_LABEL,
54910 			(void*)&&ZEND_NULL_LABEL,
54911 			(void*)&&ZEND_NULL_LABEL,
54912 			(void*)&&ZEND_NULL_LABEL,
54913 			(void*)&&ZEND_NULL_LABEL,
54914 			(void*)&&ZEND_NULL_LABEL,
54915 			(void*)&&ZEND_NULL_LABEL,
54916 			(void*)&&ZEND_NULL_LABEL,
54917 			(void*)&&ZEND_NULL_LABEL,
54918 			(void*)&&ZEND_NULL_LABEL,
54919 			(void*)&&ZEND_NULL_LABEL,
54920 			(void*)&&ZEND_NULL_LABEL,
54921 			(void*)&&ZEND_NULL_LABEL,
54922 			(void*)&&ZEND_NULL_LABEL,
54923 			(void*)&&ZEND_NULL_LABEL,
54924 			(void*)&&ZEND_NULL_LABEL,
54925 			(void*)&&ZEND_NULL_LABEL,
54926 			(void*)&&ZEND_NULL_LABEL,
54927 			(void*)&&ZEND_NULL_LABEL,
54928 			(void*)&&ZEND_NULL_LABEL,
54929 			(void*)&&ZEND_NULL_LABEL,
54930 			(void*)&&ZEND_NULL_LABEL,
54931 			(void*)&&ZEND_NULL_LABEL,
54932 			(void*)&&ZEND_NULL_LABEL,
54933 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
54934 			(void*)&&ZEND_NULL_LABEL,
54935 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
54936 			(void*)&&ZEND_NULL_LABEL,
54937 			(void*)&&ZEND_NULL_LABEL,
54938 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54939 			(void*)&&ZEND_NULL_LABEL,
54940 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54941 			(void*)&&ZEND_NULL_LABEL,
54942 			(void*)&&ZEND_NULL_LABEL,
54943 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54944 			(void*)&&ZEND_NULL_LABEL,
54945 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54946 			(void*)&&ZEND_NULL_LABEL,
54947 			(void*)&&ZEND_NULL_LABEL,
54948 			(void*)&&ZEND_NULL_LABEL,
54949 			(void*)&&ZEND_NULL_LABEL,
54950 			(void*)&&ZEND_NULL_LABEL,
54951 			(void*)&&ZEND_NULL_LABEL,
54952 			(void*)&&ZEND_NULL_LABEL,
54953 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
54954 			(void*)&&ZEND_NULL_LABEL,
54955 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_LABEL,
54956 			(void*)&&ZEND_NULL_LABEL,
54957 			(void*)&&ZEND_NULL_LABEL,
54958 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
54959 			(void*)&&ZEND_NULL_LABEL,
54960 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
54961 			(void*)&&ZEND_NULL_LABEL,
54962 			(void*)&&ZEND_NULL_LABEL,
54963 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
54964 			(void*)&&ZEND_NULL_LABEL,
54965 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
54966 			(void*)&&ZEND_NULL_LABEL,
54967 			(void*)&&ZEND_NULL_LABEL,
54968 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
54969 			(void*)&&ZEND_NULL_LABEL,
54970 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
54971 			(void*)&&ZEND_NULL_LABEL,
54972 			(void*)&&ZEND_NULL_LABEL,
54973 			(void*)&&ZEND_NULL_LABEL,
54974 			(void*)&&ZEND_NULL_LABEL,
54975 			(void*)&&ZEND_NULL_LABEL,
54976 			(void*)&&ZEND_NULL_LABEL,
54977 			(void*)&&ZEND_NULL_LABEL,
54978 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
54979 			(void*)&&ZEND_NULL_LABEL,
54980 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
54981 			(void*)&&ZEND_NULL_LABEL,
54982 			(void*)&&ZEND_NULL_LABEL,
54983 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
54984 			(void*)&&ZEND_NULL_LABEL,
54985 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_LABEL,
54986 			(void*)&&ZEND_NULL_LABEL,
54987 			(void*)&&ZEND_NULL_LABEL,
54988 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54989 			(void*)&&ZEND_NULL_LABEL,
54990 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54991 			(void*)&&ZEND_NULL_LABEL,
54992 			(void*)&&ZEND_NULL_LABEL,
54993 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54994 			(void*)&&ZEND_NULL_LABEL,
54995 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54996 			(void*)&&ZEND_NULL_LABEL,
54997 			(void*)&&ZEND_NULL_LABEL,
54998 			(void*)&&ZEND_NULL_LABEL,
54999 			(void*)&&ZEND_NULL_LABEL,
55000 			(void*)&&ZEND_NULL_LABEL,
55001 			(void*)&&ZEND_NULL_LABEL,
55002 			(void*)&&ZEND_NULL_LABEL,
55003 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_LABEL,
55004 			(void*)&&ZEND_NULL_LABEL,
55005 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_LABEL,
55006 			(void*)&&ZEND_ASSIGN_STATIC_PROP_REF_SPEC_LABEL,
55007 			(void*)&&ZEND_NULL_LABEL,
55008 			(void*)&&ZEND_NULL_LABEL,
55009 			(void*)&&ZEND_NULL_LABEL,
55010 			(void*)&&ZEND_NULL_LABEL,
55011 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
55012 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
55013 			(void*)&&ZEND_NULL_LABEL,
55014 			(void*)&&ZEND_NULL_LABEL,
55015 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
55016 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
55017 			(void*)&&ZEND_NULL_LABEL,
55018 			(void*)&&ZEND_NULL_LABEL,
55019 			(void*)&&ZEND_NULL_LABEL,
55020 			(void*)&&ZEND_NULL_LABEL,
55021 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
55022 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
55023 			(void*)&&ZEND_NULL_LABEL,
55024 			(void*)&&ZEND_NULL_LABEL,
55025 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
55026 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
55027 			(void*)&&ZEND_NULL_LABEL,
55028 			(void*)&&ZEND_NULL_LABEL,
55029 			(void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
55030 			(void*)&&ZEND_NULL_LABEL,
55031 			(void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
55032 			(void*)&&ZEND_NULL_LABEL,
55033 			(void*)&&ZEND_NULL_LABEL,
55034 			(void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
55035 			(void*)&&ZEND_NULL_LABEL,
55036 			(void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
55037 			(void*)&&ZEND_PRE_INC_STATIC_PROP_SPEC_LABEL,
55038 			(void*)&&ZEND_POST_INC_STATIC_PROP_SPEC_LABEL,
55039 			(void*)&&ZEND_JMP_SPEC_LABEL,
55040 			(void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
55041 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
55042 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
55043 			(void*)&&ZEND_NULL_LABEL,
55044 			(void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
55045 			(void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
55046 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
55047 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
55048 			(void*)&&ZEND_NULL_LABEL,
55049 			(void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
55050 			(void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
55051 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
55052 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
55053 			(void*)&&ZEND_NULL_LABEL,
55054 			(void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
55055 			(void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
55056 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
55057 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
55058 			(void*)&&ZEND_NULL_LABEL,
55059 			(void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
55060 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
55061 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
55062 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
55063 			(void*)&&ZEND_NULL_LABEL,
55064 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
55065 			(void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
55066 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
55067 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
55068 			(void*)&&ZEND_NULL_LABEL,
55069 			(void*)&&ZEND_NULL_LABEL,
55070 			(void*)&&ZEND_NULL_LABEL,
55071 			(void*)&&ZEND_NULL_LABEL,
55072 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_LABEL,
55073 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
55074 			(void*)&&ZEND_NULL_LABEL,
55075 			(void*)&&ZEND_NULL_LABEL,
55076 			(void*)&&ZEND_CAST_SPEC_CONST_LABEL,
55077 			(void*)&&ZEND_CAST_SPEC_TMP_LABEL,
55078 			(void*)&&ZEND_CAST_SPEC_VAR_LABEL,
55079 			(void*)&&ZEND_NULL_LABEL,
55080 			(void*)&&ZEND_CAST_SPEC_CV_LABEL,
55081 			(void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
55082 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
55083 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
55084 			(void*)&&ZEND_NULL_LABEL,
55085 			(void*)&&ZEND_BOOL_SPEC_CV_LABEL,
55086 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
55087 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
55088 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
55089 			(void*)&&ZEND_NULL_LABEL,
55090 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
55091 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
55092 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
55093 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
55094 			(void*)&&ZEND_NULL_LABEL,
55095 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
55096 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
55097 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
55098 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
55099 			(void*)&&ZEND_NULL_LABEL,
55100 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
55101 			(void*)&&ZEND_NULL_LABEL,
55102 			(void*)&&ZEND_NULL_LABEL,
55103 			(void*)&&ZEND_NULL_LABEL,
55104 			(void*)&&ZEND_NULL_LABEL,
55105 			(void*)&&ZEND_NULL_LABEL,
55106 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
55107 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
55108 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
55109 			(void*)&&ZEND_NULL_LABEL,
55110 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
55111 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
55112 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
55113 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
55114 			(void*)&&ZEND_NULL_LABEL,
55115 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
55116 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
55117 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
55118 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
55119 			(void*)&&ZEND_NULL_LABEL,
55120 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
55121 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
55122 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
55123 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
55124 			(void*)&&ZEND_NULL_LABEL,
55125 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
55126 			(void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
55127 			(void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
55128 			(void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
55129 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
55130 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
55131 			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
55132 			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
55133 			(void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
55134 			(void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
55135 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
55136 			(void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
55137 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
55138 			(void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
55139 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
55140 			(void*)&&ZEND_NULL_LABEL,
55141 			(void*)&&ZEND_NULL_LABEL,
55142 			(void*)&&ZEND_RETURN_SPEC_CV_LABEL,
55143 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
55144 			(void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
55145 			(void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
55146 			(void*)&&ZEND_SEND_VAL_SPEC_CONST_CONST_LABEL,
55147 			(void*)&&ZEND_NULL_LABEL,
55148 			(void*)&&ZEND_NULL_LABEL,
55149 			(void*)&&ZEND_SEND_VAL_SPEC_CONST_UNUSED_LABEL,
55150 			(void*)&&ZEND_NULL_LABEL,
55151 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
55152 			(void*)&&ZEND_NULL_LABEL,
55153 			(void*)&&ZEND_NULL_LABEL,
55154 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
55155 			(void*)&&ZEND_NULL_LABEL,
55156 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
55157 			(void*)&&ZEND_NULL_LABEL,
55158 			(void*)&&ZEND_NULL_LABEL,
55159 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
55160 			(void*)&&ZEND_NULL_LABEL,
55161 			(void*)&&ZEND_NULL_LABEL,
55162 			(void*)&&ZEND_NULL_LABEL,
55163 			(void*)&&ZEND_NULL_LABEL,
55164 			(void*)&&ZEND_NULL_LABEL,
55165 			(void*)&&ZEND_NULL_LABEL,
55166 			(void*)&&ZEND_NULL_LABEL,
55167 			(void*)&&ZEND_NULL_LABEL,
55168 			(void*)&&ZEND_NULL_LABEL,
55169 			(void*)&&ZEND_NULL_LABEL,
55170 			(void*)&&ZEND_NULL_LABEL,
55171 			(void*)&&ZEND_NULL_LABEL,
55172 			(void*)&&ZEND_NULL_LABEL,
55173 			(void*)&&ZEND_NULL_LABEL,
55174 			(void*)&&ZEND_NULL_LABEL,
55175 			(void*)&&ZEND_NULL_LABEL,
55176 			(void*)&&ZEND_NULL_LABEL,
55177 			(void*)&&ZEND_NULL_LABEL,
55178 			(void*)&&ZEND_NULL_LABEL,
55179 			(void*)&&ZEND_NULL_LABEL,
55180 			(void*)&&ZEND_NULL_LABEL,
55181 			(void*)&&ZEND_NULL_LABEL,
55182 			(void*)&&ZEND_NULL_LABEL,
55183 			(void*)&&ZEND_NULL_LABEL,
55184 			(void*)&&ZEND_NULL_LABEL,
55185 			(void*)&&ZEND_NULL_LABEL,
55186 			(void*)&&ZEND_NULL_LABEL,
55187 			(void*)&&ZEND_NULL_LABEL,
55188 			(void*)&&ZEND_NULL_LABEL,
55189 			(void*)&&ZEND_NULL_LABEL,
55190 			(void*)&&ZEND_NULL_LABEL,
55191 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
55192 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
55193 			(void*)&&ZEND_NULL_LABEL,
55194 			(void*)&&ZEND_NULL_LABEL,
55195 			(void*)&&ZEND_NULL_LABEL,
55196 			(void*)&&ZEND_NULL_LABEL,
55197 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_LABEL,
55198 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
55199 			(void*)&&ZEND_NULL_LABEL,
55200 			(void*)&&ZEND_NULL_LABEL,
55201 			(void*)&&ZEND_NULL_LABEL,
55202 			(void*)&&ZEND_NULL_LABEL,
55203 			(void*)&&ZEND_NULL_LABEL,
55204 			(void*)&&ZEND_NULL_LABEL,
55205 			(void*)&&ZEND_NULL_LABEL,
55206 			(void*)&&ZEND_NULL_LABEL,
55207 			(void*)&&ZEND_NULL_LABEL,
55208 			(void*)&&ZEND_NULL_LABEL,
55209 			(void*)&&ZEND_NULL_LABEL,
55210 			(void*)&&ZEND_NULL_LABEL,
55211 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
55212 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
55213 			(void*)&&ZEND_NULL_LABEL,
55214 			(void*)&&ZEND_NULL_LABEL,
55215 			(void*)&&ZEND_NULL_LABEL,
55216 			(void*)&&ZEND_NULL_LABEL,
55217 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_LABEL,
55218 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_LABEL,
55219 			(void*)&&ZEND_NULL_LABEL,
55220 			(void*)&&ZEND_NULL_LABEL,
55221 			(void*)&&ZEND_NULL_LABEL,
55222 			(void*)&&ZEND_NULL_LABEL,
55223 			(void*)&&ZEND_NULL_LABEL,
55224 			(void*)&&ZEND_NULL_LABEL,
55225 			(void*)&&ZEND_NULL_LABEL,
55226 			(void*)&&ZEND_NULL_LABEL,
55227 			(void*)&&ZEND_NULL_LABEL,
55228 			(void*)&&ZEND_NULL_LABEL,
55229 			(void*)&&ZEND_NULL_LABEL,
55230 			(void*)&&ZEND_NULL_LABEL,
55231 			(void*)&&ZEND_SEND_REF_SPEC_VAR_CONST_LABEL,
55232 			(void*)&&ZEND_NULL_LABEL,
55233 			(void*)&&ZEND_NULL_LABEL,
55234 			(void*)&&ZEND_SEND_REF_SPEC_VAR_UNUSED_LABEL,
55235 			(void*)&&ZEND_NULL_LABEL,
55236 			(void*)&&ZEND_NULL_LABEL,
55237 			(void*)&&ZEND_NULL_LABEL,
55238 			(void*)&&ZEND_NULL_LABEL,
55239 			(void*)&&ZEND_NULL_LABEL,
55240 			(void*)&&ZEND_NULL_LABEL,
55241 			(void*)&&ZEND_SEND_REF_SPEC_CV_CONST_LABEL,
55242 			(void*)&&ZEND_NULL_LABEL,
55243 			(void*)&&ZEND_NULL_LABEL,
55244 			(void*)&&ZEND_SEND_REF_SPEC_CV_UNUSED_LABEL,
55245 			(void*)&&ZEND_NULL_LABEL,
55246 			(void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL,
55247 			(void*)&&ZEND_NULL_LABEL,
55248 			(void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL,
55249 			(void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL,
55250 			(void*)&&ZEND_NULL_LABEL,
55251 			(void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
55252 			(void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
55253 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
55254 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
55255 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
55256 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
55257 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
55258 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
55259 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
55260 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
55261 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
55262 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
55263 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
55264 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
55265 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
55266 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
55267 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
55268 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_LABEL,
55269 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
55270 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
55271 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_LABEL,
55272 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CV_LABEL,
55273 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
55274 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
55275 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
55276 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
55277 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
55278 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
55279 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
55280 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
55281 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
55282 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
55283 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
55284 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
55285 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
55286 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
55287 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
55288 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
55289 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
55290 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
55291 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
55292 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_LABEL,
55293 			(void*)&&ZEND_NULL_LABEL,
55294 			(void*)&&ZEND_NULL_LABEL,
55295 			(void*)&&ZEND_NULL_LABEL,
55296 			(void*)&&ZEND_NULL_LABEL,
55297 			(void*)&&ZEND_NULL_LABEL,
55298 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
55299 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
55300 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
55301 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
55302 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
55303 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
55304 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
55305 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
55306 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
55307 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
55308 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
55309 			(void*)&&ZEND_NULL_LABEL,
55310 			(void*)&&ZEND_NULL_LABEL,
55311 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
55312 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
55313 			(void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
55314 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
55315 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
55316 			(void*)&&ZEND_NULL_LABEL,
55317 			(void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL,
55318 			(void*)&&ZEND_NULL_LABEL,
55319 			(void*)&&ZEND_NULL_LABEL,
55320 			(void*)&&ZEND_NULL_LABEL,
55321 			(void*)&&ZEND_NULL_LABEL,
55322 			(void*)&&ZEND_NULL_LABEL,
55323 			(void*)&&ZEND_NULL_LABEL,
55324 			(void*)&&ZEND_NULL_LABEL,
55325 			(void*)&&ZEND_NULL_LABEL,
55326 			(void*)&&ZEND_NULL_LABEL,
55327 			(void*)&&ZEND_NULL_LABEL,
55328 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL,
55329 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
55330 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
55331 			(void*)&&ZEND_NULL_LABEL,
55332 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL,
55333 			(void*)&&ZEND_NULL_LABEL,
55334 			(void*)&&ZEND_NULL_LABEL,
55335 			(void*)&&ZEND_NULL_LABEL,
55336 			(void*)&&ZEND_NULL_LABEL,
55337 			(void*)&&ZEND_NULL_LABEL,
55338 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL,
55339 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
55340 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
55341 			(void*)&&ZEND_NULL_LABEL,
55342 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
55343 			(void*)&&ZEND_NULL_LABEL,
55344 			(void*)&&ZEND_NULL_LABEL,
55345 			(void*)&&ZEND_NULL_LABEL,
55346 			(void*)&&ZEND_NULL_LABEL,
55347 			(void*)&&ZEND_NULL_LABEL,
55348 			(void*)&&ZEND_NULL_LABEL,
55349 			(void*)&&ZEND_NULL_LABEL,
55350 			(void*)&&ZEND_NULL_LABEL,
55351 			(void*)&&ZEND_NULL_LABEL,
55352 			(void*)&&ZEND_NULL_LABEL,
55353 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
55354 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
55355 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
55356 			(void*)&&ZEND_NULL_LABEL,
55357 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
55358 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
55359 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55360 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55361 			(void*)&&ZEND_NULL_LABEL,
55362 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
55363 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
55364 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
55365 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
55366 			(void*)&&ZEND_NULL_LABEL,
55367 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
55368 			(void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
55369 			(void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
55370 			(void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
55371 			(void*)&&ZEND_NULL_LABEL,
55372 			(void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
55373 			(void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
55374 			(void*)&&ZEND_EXIT_SPEC_LABEL,
55375 			(void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
55376 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
55377 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
55378 			(void*)&&ZEND_NULL_LABEL,
55379 			(void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
55380 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
55381 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
55382 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
55383 			(void*)&&ZEND_NULL_LABEL,
55384 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
55385 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
55386 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
55387 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
55388 			(void*)&&ZEND_NULL_LABEL,
55389 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
55390 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
55391 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
55392 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
55393 			(void*)&&ZEND_NULL_LABEL,
55394 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
55395 			(void*)&&ZEND_NULL_LABEL,
55396 			(void*)&&ZEND_NULL_LABEL,
55397 			(void*)&&ZEND_NULL_LABEL,
55398 			(void*)&&ZEND_NULL_LABEL,
55399 			(void*)&&ZEND_NULL_LABEL,
55400 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
55401 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
55402 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
55403 			(void*)&&ZEND_NULL_LABEL,
55404 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
55405 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
55406 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
55407 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
55408 			(void*)&&ZEND_NULL_LABEL,
55409 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
55410 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
55411 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
55412 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
55413 			(void*)&&ZEND_NULL_LABEL,
55414 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
55415 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
55416 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
55417 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
55418 			(void*)&&ZEND_NULL_LABEL,
55419 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
55420 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
55421 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
55422 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
55423 			(void*)&&ZEND_NULL_LABEL,
55424 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
55425 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
55426 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
55427 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
55428 			(void*)&&ZEND_NULL_LABEL,
55429 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
55430 			(void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
55431 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
55432 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
55433 			(void*)&&ZEND_NULL_LABEL,
55434 			(void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
55435 			(void*)&&ZEND_NULL_LABEL,
55436 			(void*)&&ZEND_NULL_LABEL,
55437 			(void*)&&ZEND_NULL_LABEL,
55438 			(void*)&&ZEND_NULL_LABEL,
55439 			(void*)&&ZEND_NULL_LABEL,
55440 			(void*)&&ZEND_NULL_LABEL,
55441 			(void*)&&ZEND_NULL_LABEL,
55442 			(void*)&&ZEND_NULL_LABEL,
55443 			(void*)&&ZEND_NULL_LABEL,
55444 			(void*)&&ZEND_NULL_LABEL,
55445 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
55446 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
55447 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
55448 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
55449 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL,
55450 			(void*)&&ZEND_NULL_LABEL,
55451 			(void*)&&ZEND_NULL_LABEL,
55452 			(void*)&&ZEND_NULL_LABEL,
55453 			(void*)&&ZEND_NULL_LABEL,
55454 			(void*)&&ZEND_NULL_LABEL,
55455 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
55456 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
55457 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
55458 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
55459 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
55460 			(void*)&&ZEND_NULL_LABEL,
55461 			(void*)&&ZEND_NULL_LABEL,
55462 			(void*)&&ZEND_NULL_LABEL,
55463 			(void*)&&ZEND_NULL_LABEL,
55464 			(void*)&&ZEND_NULL_LABEL,
55465 			(void*)&&ZEND_NULL_LABEL,
55466 			(void*)&&ZEND_NULL_LABEL,
55467 			(void*)&&ZEND_NULL_LABEL,
55468 			(void*)&&ZEND_NULL_LABEL,
55469 			(void*)&&ZEND_NULL_LABEL,
55470 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
55471 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
55472 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
55473 			(void*)&&ZEND_NULL_LABEL,
55474 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
55475 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
55476 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
55477 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
55478 			(void*)&&ZEND_NULL_LABEL,
55479 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
55480 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
55481 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
55482 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
55483 			(void*)&&ZEND_NULL_LABEL,
55484 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
55485 			(void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
55486 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
55487 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
55488 			(void*)&&ZEND_NULL_LABEL,
55489 			(void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_LABEL,
55490 			(void*)&&ZEND_NULL_LABEL,
55491 			(void*)&&ZEND_NULL_LABEL,
55492 			(void*)&&ZEND_NULL_LABEL,
55493 			(void*)&&ZEND_NULL_LABEL,
55494 			(void*)&&ZEND_NULL_LABEL,
55495 			(void*)&&ZEND_NULL_LABEL,
55496 			(void*)&&ZEND_NULL_LABEL,
55497 			(void*)&&ZEND_NULL_LABEL,
55498 			(void*)&&ZEND_NULL_LABEL,
55499 			(void*)&&ZEND_NULL_LABEL,
55500 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
55501 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
55502 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
55503 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
55504 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_LABEL,
55505 			(void*)&&ZEND_NULL_LABEL,
55506 			(void*)&&ZEND_NULL_LABEL,
55507 			(void*)&&ZEND_NULL_LABEL,
55508 			(void*)&&ZEND_NULL_LABEL,
55509 			(void*)&&ZEND_NULL_LABEL,
55510 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
55511 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
55512 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
55513 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
55514 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_LABEL,
55515 			(void*)&&ZEND_NULL_LABEL,
55516 			(void*)&&ZEND_NULL_LABEL,
55517 			(void*)&&ZEND_NULL_LABEL,
55518 			(void*)&&ZEND_NULL_LABEL,
55519 			(void*)&&ZEND_NULL_LABEL,
55520 			(void*)&&ZEND_NULL_LABEL,
55521 			(void*)&&ZEND_NULL_LABEL,
55522 			(void*)&&ZEND_NULL_LABEL,
55523 			(void*)&&ZEND_NULL_LABEL,
55524 			(void*)&&ZEND_NULL_LABEL,
55525 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
55526 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
55527 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
55528 			(void*)&&ZEND_NULL_LABEL,
55529 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
55530 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
55531 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
55532 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
55533 			(void*)&&ZEND_NULL_LABEL,
55534 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
55535 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
55536 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
55537 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
55538 			(void*)&&ZEND_NULL_LABEL,
55539 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
55540 			(void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
55541 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
55542 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
55543 			(void*)&&ZEND_NULL_LABEL,
55544 			(void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
55545 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
55546 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
55547 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
55548 			(void*)&&ZEND_NULL_LABEL,
55549 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
55550 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
55551 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55552 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55553 			(void*)&&ZEND_NULL_LABEL,
55554 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
55555 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
55556 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55557 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55558 			(void*)&&ZEND_NULL_LABEL,
55559 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
55560 			(void*)&&ZEND_NULL_LABEL,
55561 			(void*)&&ZEND_NULL_LABEL,
55562 			(void*)&&ZEND_NULL_LABEL,
55563 			(void*)&&ZEND_NULL_LABEL,
55564 			(void*)&&ZEND_NULL_LABEL,
55565 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
55566 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
55567 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
55568 			(void*)&&ZEND_NULL_LABEL,
55569 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
55570 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
55571 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
55572 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
55573 			(void*)&&ZEND_NULL_LABEL,
55574 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
55575 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
55576 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55577 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55578 			(void*)&&ZEND_NULL_LABEL,
55579 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
55580 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
55581 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55582 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55583 			(void*)&&ZEND_NULL_LABEL,
55584 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
55585 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
55586 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
55587 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
55588 			(void*)&&ZEND_NULL_LABEL,
55589 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
55590 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
55591 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
55592 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
55593 			(void*)&&ZEND_NULL_LABEL,
55594 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
55595 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
55596 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
55597 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
55598 			(void*)&&ZEND_NULL_LABEL,
55599 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
55600 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
55601 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
55602 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
55603 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
55604 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
55605 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
55606 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
55607 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
55608 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
55609 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
55610 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
55611 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
55612 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
55613 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
55614 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_LABEL,
55615 			(void*)&&ZEND_NULL_LABEL,
55616 			(void*)&&ZEND_NULL_LABEL,
55617 			(void*)&&ZEND_NULL_LABEL,
55618 			(void*)&&ZEND_NULL_LABEL,
55619 			(void*)&&ZEND_NULL_LABEL,
55620 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
55621 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
55622 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
55623 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
55624 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
55625 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
55626 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
55627 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
55628 			(void*)&&ZEND_NULL_LABEL,
55629 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
55630 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
55631 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
55632 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
55633 			(void*)&&ZEND_NULL_LABEL,
55634 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
55635 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
55636 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
55637 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
55638 			(void*)&&ZEND_NULL_LABEL,
55639 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
55640 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
55641 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
55642 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
55643 			(void*)&&ZEND_NULL_LABEL,
55644 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
55645 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
55646 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
55647 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
55648 			(void*)&&ZEND_NULL_LABEL,
55649 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
55650 			(void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
55651 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
55652 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
55653 			(void*)&&ZEND_NULL_LABEL,
55654 			(void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
55655 			(void*)&&ZEND_NULL_LABEL,
55656 			(void*)&&ZEND_NULL_LABEL,
55657 			(void*)&&ZEND_NULL_LABEL,
55658 			(void*)&&ZEND_NULL_LABEL,
55659 			(void*)&&ZEND_NULL_LABEL,
55660 			(void*)&&ZEND_NULL_LABEL,
55661 			(void*)&&ZEND_NULL_LABEL,
55662 			(void*)&&ZEND_NULL_LABEL,
55663 			(void*)&&ZEND_NULL_LABEL,
55664 			(void*)&&ZEND_NULL_LABEL,
55665 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
55666 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
55667 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
55668 			(void*)&&ZEND_NULL_LABEL,
55669 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL,
55670 			(void*)&&ZEND_NULL_LABEL,
55671 			(void*)&&ZEND_NULL_LABEL,
55672 			(void*)&&ZEND_NULL_LABEL,
55673 			(void*)&&ZEND_NULL_LABEL,
55674 			(void*)&&ZEND_NULL_LABEL,
55675 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
55676 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
55677 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
55678 			(void*)&&ZEND_NULL_LABEL,
55679 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
55680 			(void*)&&ZEND_NULL_LABEL,
55681 			(void*)&&ZEND_NULL_LABEL,
55682 			(void*)&&ZEND_NULL_LABEL,
55683 			(void*)&&ZEND_NULL_LABEL,
55684 			(void*)&&ZEND_NULL_LABEL,
55685 			(void*)&&ZEND_NULL_LABEL,
55686 			(void*)&&ZEND_NULL_LABEL,
55687 			(void*)&&ZEND_NULL_LABEL,
55688 			(void*)&&ZEND_NULL_LABEL,
55689 			(void*)&&ZEND_NULL_LABEL,
55690 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
55691 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
55692 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
55693 			(void*)&&ZEND_NULL_LABEL,
55694 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
55695 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
55696 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
55697 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
55698 			(void*)&&ZEND_NULL_LABEL,
55699 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
55700 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
55701 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
55702 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
55703 			(void*)&&ZEND_NULL_LABEL,
55704 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
55705 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL,
55706 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
55707 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
55708 			(void*)&&ZEND_NULL_LABEL,
55709 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL,
55710 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
55711 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55712 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55713 			(void*)&&ZEND_NULL_LABEL,
55714 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
55715 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
55716 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55717 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55718 			(void*)&&ZEND_NULL_LABEL,
55719 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
55720 			(void*)&&ZEND_NULL_LABEL,
55721 			(void*)&&ZEND_NULL_LABEL,
55722 			(void*)&&ZEND_NULL_LABEL,
55723 			(void*)&&ZEND_NULL_LABEL,
55724 			(void*)&&ZEND_NULL_LABEL,
55725 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
55726 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55727 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55728 			(void*)&&ZEND_NULL_LABEL,
55729 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
55730 			(void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
55731 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
55732 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
55733 			(void*)&&ZEND_NULL_LABEL,
55734 			(void*)&&ZEND_NULL_LABEL,
55735 			(void*)&&ZEND_NULL_LABEL,
55736 			(void*)&&ZEND_NULL_LABEL,
55737 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_LABEL,
55738 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_LABEL,
55739 			(void*)&&ZEND_NULL_LABEL,
55740 			(void*)&&ZEND_NULL_LABEL,
55741 			(void*)&&ZEND_EXT_STMT_SPEC_LABEL,
55742 			(void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
55743 			(void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
55744 			(void*)&&ZEND_EXT_NOP_SPEC_LABEL,
55745 			(void*)&&ZEND_TICKS_SPEC_LABEL,
55746 			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_LABEL,
55747 			(void*)&&ZEND_NULL_LABEL,
55748 			(void*)&&ZEND_NULL_LABEL,
55749 			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_LABEL,
55750 			(void*)&&ZEND_NULL_LABEL,
55751 			(void*)&&ZEND_CATCH_SPEC_CONST_LABEL,
55752 			(void*)&&ZEND_THROW_SPEC_CONST_LABEL,
55753 			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
55754 			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
55755 			(void*)&&ZEND_NULL_LABEL,
55756 			(void*)&&ZEND_THROW_SPEC_CV_LABEL,
55757 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL,
55758 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
55759 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
55760 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL,
55761 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL,
55762 			(void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
55763 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
55764 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
55765 			(void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
55766 			(void*)&&ZEND_CLONE_SPEC_CV_LABEL,
55767 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
55768 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
55769 			(void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
55770 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
55771 			(void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
55772 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
55773 			(void*)&&ZEND_NULL_LABEL,
55774 			(void*)&&ZEND_NULL_LABEL,
55775 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
55776 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
55777 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
55778 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
55779 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
55780 			(void*)&&ZEND_NULL_LABEL,
55781 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
55782 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
55783 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
55784 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
55785 			(void*)&&ZEND_NULL_LABEL,
55786 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
55787 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
55788 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
55789 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
55790 			(void*)&&ZEND_NULL_LABEL,
55791 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
55792 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
55793 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
55794 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
55795 			(void*)&&ZEND_NULL_LABEL,
55796 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
55797 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
55798 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
55799 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
55800 			(void*)&&ZEND_NULL_LABEL,
55801 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
55802 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
55803 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
55804 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
55805 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
55806 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_LABEL,
55807 			(void*)&&ZEND_NULL_LABEL,
55808 			(void*)&&ZEND_NULL_LABEL,
55809 			(void*)&&ZEND_NULL_LABEL,
55810 			(void*)&&ZEND_NULL_LABEL,
55811 			(void*)&&ZEND_NULL_LABEL,
55812 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
55813 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
55814 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
55815 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
55816 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
55817 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
55818 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
55819 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
55820 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
55821 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
55822 			(void*)&&ZEND_NULL_LABEL,
55823 			(void*)&&ZEND_NULL_LABEL,
55824 			(void*)&&ZEND_NULL_LABEL,
55825 			(void*)&&ZEND_NULL_LABEL,
55826 			(void*)&&ZEND_NULL_LABEL,
55827 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
55828 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
55829 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
55830 			(void*)&&ZEND_NULL_LABEL,
55831 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
55832 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
55833 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
55834 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
55835 			(void*)&&ZEND_NULL_LABEL,
55836 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
55837 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
55838 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55839 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55840 			(void*)&&ZEND_NULL_LABEL,
55841 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
55842 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
55843 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55844 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55845 			(void*)&&ZEND_NULL_LABEL,
55846 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
55847 			(void*)&&ZEND_NULL_LABEL,
55848 			(void*)&&ZEND_NULL_LABEL,
55849 			(void*)&&ZEND_NULL_LABEL,
55850 			(void*)&&ZEND_NULL_LABEL,
55851 			(void*)&&ZEND_NULL_LABEL,
55852 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
55853 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
55854 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
55855 			(void*)&&ZEND_NULL_LABEL,
55856 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
55857 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
55858 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
55859 			(void*)&&ZEND_NULL_LABEL,
55860 			(void*)&&ZEND_NULL_LABEL,
55861 			(void*)&&ZEND_NULL_LABEL,
55862 			(void*)&&ZEND_NULL_LABEL,
55863 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_LABEL,
55864 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_LABEL,
55865 			(void*)&&ZEND_NULL_LABEL,
55866 			(void*)&&ZEND_NULL_LABEL,
55867 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
55868 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
55869 			(void*)&&ZEND_NULL_LABEL,
55870 			(void*)&&ZEND_NULL_LABEL,
55871 			(void*)&&ZEND_NULL_LABEL,
55872 			(void*)&&ZEND_NULL_LABEL,
55873 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_LABEL,
55874 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_LABEL,
55875 			(void*)&&ZEND_NULL_LABEL,
55876 			(void*)&&ZEND_NULL_LABEL,
55877 			(void*)&&ZEND_NULL_LABEL,
55878 			(void*)&&ZEND_NULL_LABEL,
55879 			(void*)&&ZEND_NULL_LABEL,
55880 			(void*)&&ZEND_NULL_LABEL,
55881 			(void*)&&ZEND_NULL_LABEL,
55882 			(void*)&&ZEND_NULL_LABEL,
55883 			(void*)&&ZEND_NULL_LABEL,
55884 			(void*)&&ZEND_NULL_LABEL,
55885 			(void*)&&ZEND_NULL_LABEL,
55886 			(void*)&&ZEND_NULL_LABEL,
55887 			(void*)&&ZEND_NULL_LABEL,
55888 			(void*)&&ZEND_NULL_LABEL,
55889 			(void*)&&ZEND_NULL_LABEL,
55890 			(void*)&&ZEND_NULL_LABEL,
55891 			(void*)&&ZEND_NULL_LABEL,
55892 			(void*)&&ZEND_NULL_LABEL,
55893 			(void*)&&ZEND_NULL_LABEL,
55894 			(void*)&&ZEND_NULL_LABEL,
55895 			(void*)&&ZEND_NULL_LABEL,
55896 			(void*)&&ZEND_NULL_LABEL,
55897 			(void*)&&ZEND_NULL_LABEL,
55898 			(void*)&&ZEND_NULL_LABEL,
55899 			(void*)&&ZEND_NULL_LABEL,
55900 			(void*)&&ZEND_NULL_LABEL,
55901 			(void*)&&ZEND_NULL_LABEL,
55902 			(void*)&&ZEND_NULL_LABEL,
55903 			(void*)&&ZEND_NULL_LABEL,
55904 			(void*)&&ZEND_NULL_LABEL,
55905 			(void*)&&ZEND_NULL_LABEL,
55906 			(void*)&&ZEND_NULL_LABEL,
55907 			(void*)&&ZEND_NULL_LABEL,
55908 			(void*)&&ZEND_NULL_LABEL,
55909 			(void*)&&ZEND_NULL_LABEL,
55910 			(void*)&&ZEND_NULL_LABEL,
55911 			(void*)&&ZEND_NULL_LABEL,
55912 			(void*)&&ZEND_NULL_LABEL,
55913 			(void*)&&ZEND_NULL_LABEL,
55914 			(void*)&&ZEND_NULL_LABEL,
55915 			(void*)&&ZEND_NULL_LABEL,
55916 			(void*)&&ZEND_NULL_LABEL,
55917 			(void*)&&ZEND_SEND_VAR_SPEC_VAR_CONST_LABEL,
55918 			(void*)&&ZEND_NULL_LABEL,
55919 			(void*)&&ZEND_NULL_LABEL,
55920 			(void*)&&ZEND_SEND_VAR_SPEC_VAR_UNUSED_LABEL,
55921 			(void*)&&ZEND_NULL_LABEL,
55922 			(void*)&&ZEND_NULL_LABEL,
55923 			(void*)&&ZEND_NULL_LABEL,
55924 			(void*)&&ZEND_NULL_LABEL,
55925 			(void*)&&ZEND_NULL_LABEL,
55926 			(void*)&&ZEND_NULL_LABEL,
55927 			(void*)&&ZEND_SEND_VAR_SPEC_CV_CONST_LABEL,
55928 			(void*)&&ZEND_NULL_LABEL,
55929 			(void*)&&ZEND_NULL_LABEL,
55930 			(void*)&&ZEND_SEND_VAR_SPEC_CV_UNUSED_LABEL,
55931 			(void*)&&ZEND_NULL_LABEL,
55932 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
55933 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
55934 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
55935 			(void*)&&ZEND_NULL_LABEL,
55936 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
55937 			(void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
55938 			(void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
55939 			(void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
55940 			(void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
55941 			(void*)&&ZEND_NULL_LABEL,
55942 			(void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
55943 			(void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
55944 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
55945 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
55946 			(void*)&&ZEND_NULL_LABEL,
55947 			(void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
55948 			(void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
55949 			(void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
55950 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
55951 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
55952 			(void*)&&ZEND_NULL_LABEL,
55953 			(void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
55954 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
55955 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
55956 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
55957 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
55958 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
55959 			(void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
55960 			(void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
55961 			(void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
55962 			(void*)&&ZEND_NULL_LABEL,
55963 			(void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
55964 			(void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
55965 			(void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
55966 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
55967 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
55968 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
55969 			(void*)&&ZEND_NULL_LABEL,
55970 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
55971 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
55972 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
55973 			(void*)&&ZEND_DO_ICALL_SPEC_OBSERVER_LABEL,
55974 			(void*)&&ZEND_DO_ICALL_SPEC_OBSERVER_LABEL,
55975 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
55976 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
55977 			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
55978 			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
55979 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
55980 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
55981 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
55982 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
55983 			(void*)&&ZEND_NULL_LABEL,
55984 			(void*)&&ZEND_NULL_LABEL,
55985 			(void*)&&ZEND_NULL_LABEL,
55986 			(void*)&&ZEND_NULL_LABEL,
55987 			(void*)&&ZEND_NULL_LABEL,
55988 			(void*)&&ZEND_NULL_LABEL,
55989 			(void*)&&ZEND_NULL_LABEL,
55990 			(void*)&&ZEND_NULL_LABEL,
55991 			(void*)&&ZEND_NULL_LABEL,
55992 			(void*)&&ZEND_NULL_LABEL,
55993 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
55994 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
55995 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
55996 			(void*)&&ZEND_NULL_LABEL,
55997 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
55998 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
55999 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
56000 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
56001 			(void*)&&ZEND_NULL_LABEL,
56002 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
56003 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
56004 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
56005 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
56006 			(void*)&&ZEND_NULL_LABEL,
56007 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_LABEL,
56008 			(void*)&&ZEND_NULL_LABEL,
56009 			(void*)&&ZEND_NULL_LABEL,
56010 			(void*)&&ZEND_NULL_LABEL,
56011 			(void*)&&ZEND_NULL_LABEL,
56012 			(void*)&&ZEND_NULL_LABEL,
56013 			(void*)&&ZEND_NULL_LABEL,
56014 			(void*)&&ZEND_NULL_LABEL,
56015 			(void*)&&ZEND_NULL_LABEL,
56016 			(void*)&&ZEND_NULL_LABEL,
56017 			(void*)&&ZEND_NULL_LABEL,
56018 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
56019 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
56020 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
56021 			(void*)&&ZEND_NULL_LABEL,
56022 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
56023 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
56024 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
56025 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
56026 			(void*)&&ZEND_NULL_LABEL,
56027 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
56028 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
56029 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
56030 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
56031 			(void*)&&ZEND_NULL_LABEL,
56032 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
56033 			(void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
56034 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
56035 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
56036 			(void*)&&ZEND_NULL_LABEL,
56037 			(void*)&&ZEND_ECHO_SPEC_CV_LABEL,
56038 			(void*)&&ZEND_NULL_LABEL,
56039 			(void*)&&ZEND_NULL_LABEL,
56040 			(void*)&&ZEND_NULL_LABEL,
56041 			(void*)&&ZEND_NULL_LABEL,
56042 			(void*)&&ZEND_NULL_LABEL,
56043 			(void*)&&ZEND_NULL_LABEL,
56044 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
56045 			(void*)&&ZEND_NULL_LABEL,
56046 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
56047 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
56048 			(void*)&&ZEND_NULL_LABEL,
56049 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
56050 			(void*)&&ZEND_NULL_LABEL,
56051 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
56052 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
56053 			(void*)&&ZEND_NULL_LABEL,
56054 			(void*)&&ZEND_NULL_LABEL,
56055 			(void*)&&ZEND_NULL_LABEL,
56056 			(void*)&&ZEND_NULL_LABEL,
56057 			(void*)&&ZEND_NULL_LABEL,
56058 			(void*)&&ZEND_NULL_LABEL,
56059 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
56060 			(void*)&&ZEND_NULL_LABEL,
56061 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
56062 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
56063 			(void*)&&ZEND_NULL_LABEL,
56064 			(void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
56065 			(void*)&&ZEND_NULL_LABEL,
56066 			(void*)&&ZEND_NULL_LABEL,
56067 			(void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
56068 			(void*)&&ZEND_NULL_LABEL,
56069 			(void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
56070 			(void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
56071 			(void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_LABEL,
56072 			(void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
56073 			(void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL,
56074 			(void*)&&ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_LABEL,
56075 			(void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
56076 			(void*)&&ZEND_ADD_ARRAY_UNPACK_SPEC_LABEL,
56077 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
56078 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
56079 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
56080 			(void*)&&ZEND_NULL_LABEL,
56081 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
56082 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
56083 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
56084 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
56085 			(void*)&&ZEND_NULL_LABEL,
56086 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
56087 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
56088 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
56089 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
56090 			(void*)&&ZEND_NULL_LABEL,
56091 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
56092 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
56093 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
56094 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
56095 			(void*)&&ZEND_NULL_LABEL,
56096 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
56097 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
56098 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
56099 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
56100 			(void*)&&ZEND_NULL_LABEL,
56101 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
56102 			(void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
56103 			(void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
56104 			(void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
56105 			(void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
56106 			(void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
56107 			(void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
56108 			(void*)&&ZEND_NULL_LABEL,
56109 			(void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
56110 			(void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
56111 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL,
56112 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL,
56113 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL,
56114 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
56115 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
56116 			(void*)&&ZEND_NULL_LABEL,
56117 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL,
56118 			(void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
56119 			(void*)&&ZEND_NULL_LABEL,
56120 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
56121 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
56122 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
56123 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_CV_LABEL,
56124 			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
56125 			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_LABEL,
56126 			(void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
56127 			(void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
56128 			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
56129 			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
56130 			(void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
56131 			(void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
56132 			(void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
56133 			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
56134 			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
56135 			(void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
56136 			(void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
56137 			(void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
56138 			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
56139 			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
56140 			(void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
56141 			(void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
56142 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
56143 			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
56144 			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
56145 			(void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
56146 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
56147 			(void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
56148 			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
56149 			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
56150 			(void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
56151 			(void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
56152 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
56153 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
56154 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
56155 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
56156 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
56157 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
56158 			(void*)&&ZEND_NULL_LABEL,
56159 			(void*)&&ZEND_NULL_LABEL,
56160 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
56161 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
56162 			(void*)&&ZEND_FAST_CALL_SPEC_LABEL,
56163 			(void*)&&ZEND_FAST_RET_SPEC_LABEL,
56164 			(void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
56165 			(void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
56166 			(void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
56167 			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
56168 			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
56169 			(void*)&&ZEND_NULL_LABEL,
56170 			(void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
56171 			(void*)&&ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_LABEL,
56172 			(void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
56173 			(void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
56174 			(void*)&&ZEND_COALESCE_SPEC_TMP_LABEL,
56175 			(void*)&&ZEND_COALESCE_SPEC_VAR_LABEL,
56176 			(void*)&&ZEND_NULL_LABEL,
56177 			(void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
56178 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
56179 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
56180 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
56181 			(void*)&&ZEND_NULL_LABEL,
56182 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
56183 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
56184 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
56185 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
56186 			(void*)&&ZEND_NULL_LABEL,
56187 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
56188 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
56189 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
56190 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
56191 			(void*)&&ZEND_NULL_LABEL,
56192 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
56193 			(void*)&&ZEND_NULL_LABEL,
56194 			(void*)&&ZEND_NULL_LABEL,
56195 			(void*)&&ZEND_NULL_LABEL,
56196 			(void*)&&ZEND_NULL_LABEL,
56197 			(void*)&&ZEND_NULL_LABEL,
56198 			(void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL,
56199 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
56200 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
56201 			(void*)&&ZEND_NULL_LABEL,
56202 			(void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
56203 			(void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
56204 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
56205 			(void*)&&ZEND_NULL_LABEL,
56206 			(void*)&&ZEND_NULL_LABEL,
56207 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
56208 			(void*)&&ZEND_NULL_LABEL,
56209 			(void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_LABEL,
56210 			(void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_LABEL,
56211 			(void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_LABEL,
56212 			(void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_LABEL,
56213 			(void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_LABEL,
56214 			(void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_LABEL,
56215 			(void*)&&ZEND_UNSET_STATIC_PROP_SPEC_LABEL,
56216 			(void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_LABEL,
56217 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
56218 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_LABEL,
56219 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_LABEL,
56220 			(void*)&&ZEND_NULL_LABEL,
56221 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_LABEL,
56222 			(void*)&&ZEND_NULL_LABEL,
56223 			(void*)&&ZEND_NULL_LABEL,
56224 			(void*)&&ZEND_NULL_LABEL,
56225 			(void*)&&ZEND_NULL_LABEL,
56226 			(void*)&&ZEND_NULL_LABEL,
56227 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
56228 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_LABEL,
56229 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_LABEL,
56230 			(void*)&&ZEND_NULL_LABEL,
56231 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_LABEL,
56232 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
56233 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_LABEL,
56234 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_LABEL,
56235 			(void*)&&ZEND_NULL_LABEL,
56236 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_LABEL,
56237 			(void*)&&ZEND_NULL_LABEL,
56238 			(void*)&&ZEND_NULL_LABEL,
56239 			(void*)&&ZEND_NULL_LABEL,
56240 			(void*)&&ZEND_NULL_LABEL,
56241 			(void*)&&ZEND_NULL_LABEL,
56242 			(void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
56243 			(void*)&&ZEND_BIND_STATIC_SPEC_CV_LABEL,
56244 			(void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
56245 			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_LABEL,
56246 			(void*)&&ZEND_NULL_LABEL,
56247 			(void*)&&ZEND_NULL_LABEL,
56248 			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
56249 			(void*)&&ZEND_NULL_LABEL,
56250 			(void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
56251 			(void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
56252 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
56253 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
56254 			(void*)&&ZEND_NULL_LABEL,
56255 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
56256 			(void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
56257 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
56258 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
56259 			(void*)&&ZEND_NULL_LABEL,
56260 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
56261 			(void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
56262 			(void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
56263 			(void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
56264 			(void*)&&ZEND_NULL_LABEL,
56265 			(void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
56266 			(void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
56267 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
56268 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
56269 			(void*)&&ZEND_NULL_LABEL,
56270 			(void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
56271 			(void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
56272 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
56273 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
56274 			(void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
56275 			(void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
56276 			(void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
56277 			(void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
56278 			(void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
56279 			(void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
56280 			(void*)&&ZEND_NULL_LABEL,
56281 			(void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
56282 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_LABEL,
56283 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
56284 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
56285 			(void*)&&ZEND_NULL_LABEL,
56286 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_LABEL,
56287 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
56288 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
56289 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
56290 			(void*)&&ZEND_NULL_LABEL,
56291 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
56292 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
56293 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
56294 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
56295 			(void*)&&ZEND_NULL_LABEL,
56296 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
56297 			(void*)&&ZEND_NULL_LABEL,
56298 			(void*)&&ZEND_NULL_LABEL,
56299 			(void*)&&ZEND_NULL_LABEL,
56300 			(void*)&&ZEND_NULL_LABEL,
56301 			(void*)&&ZEND_NULL_LABEL,
56302 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_LABEL,
56303 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
56304 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
56305 			(void*)&&ZEND_NULL_LABEL,
56306 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_LABEL,
56307 			(void*)&&ZEND_MATCH_SPEC_CONST_CONST_LABEL,
56308 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
56309 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
56310 			(void*)&&ZEND_NULL_LABEL,
56311 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
56312 			(void*)&&ZEND_NULL_LABEL,
56313 			(void*)&&ZEND_NULL_LABEL,
56314 			(void*)&&ZEND_NULL_LABEL,
56315 			(void*)&&ZEND_NULL_LABEL,
56316 			(void*)&&ZEND_NULL_LABEL,
56317 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_CONST_LABEL,
56318 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_TMP_LABEL,
56319 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_VAR_LABEL,
56320 			(void*)&&ZEND_NULL_LABEL,
56321 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_CV_LABEL,
56322 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CONST_LABEL,
56323 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_TMP_LABEL,
56324 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_VAR_LABEL,
56325 			(void*)&&ZEND_NULL_LABEL,
56326 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CV_LABEL,
56327 			(void*)&&ZEND_NULL_LABEL,
56328 			(void*)&&ZEND_NULL_LABEL,
56329 			(void*)&&ZEND_NULL_LABEL,
56330 			(void*)&&ZEND_NULL_LABEL,
56331 			(void*)&&ZEND_NULL_LABEL,
56332 			(void*)&&ZEND_NULL_LABEL,
56333 			(void*)&&ZEND_NULL_LABEL,
56334 			(void*)&&ZEND_NULL_LABEL,
56335 			(void*)&&ZEND_NULL_LABEL,
56336 			(void*)&&ZEND_NULL_LABEL,
56337 			(void*)&&ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_LABEL,
56338 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
56339 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
56340 			(void*)&&ZEND_NULL_LABEL,
56341 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
56342 			(void*)&&ZEND_JMP_NULL_SPEC_CONST_LABEL,
56343 			(void*)&&ZEND_JMP_NULL_SPEC_TMP_LABEL,
56344 			(void*)&&ZEND_JMP_NULL_SPEC_VAR_LABEL,
56345 			(void*)&&ZEND_NULL_LABEL,
56346 			(void*)&&ZEND_JMP_NULL_SPEC_CV_LABEL,
56347 			(void*)&&ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_LABEL,
56348 			(void*)&&ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_LABEL,
56349 			(void*)&&ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_LABEL,
56350 			(void*)&&ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_LABEL,
56351 			(void*)&&ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_LABEL,
56352 			(void*)&&ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_LABEL,
56353 			(void*)&&ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_LABEL,
56354 			(void*)&&ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_LABEL,
56355 			(void*)&&ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_LABEL,
56356 			(void*)&&ZEND_FRAMELESS_ICALL_2_SPEC_LABEL,
56357 			(void*)&&ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_LABEL,
56358 			(void*)&&ZEND_FRAMELESS_ICALL_3_SPEC_LABEL,
56359 			(void*)&&ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_LABEL,
56360 			(void*)&&ZEND_JMP_FRAMELESS_SPEC_CONST_LABEL,
56361 			(void*)&&ZEND_INIT_FCALL_OFFSET_SPEC_CONST_LABEL,
56362 			(void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
56363 			(void*)&&ZEND_NULL_LABEL,
56364 			(void*)&&ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_LABEL,
56365 			(void*)&&ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_LABEL,
56366 			(void*)&&ZEND_NULL_LABEL,
56367 			(void*)&&ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_LABEL,
56368 			(void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
56369 			(void*)&&ZEND_NULL_LABEL,
56370 			(void*)&&ZEND_NULL_LABEL,
56371 			(void*)&&ZEND_NULL_LABEL,
56372 			(void*)&&ZEND_NULL_LABEL,
56373 			(void*)&&ZEND_NULL_LABEL,
56374 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56375 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56376 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56377 			(void*)&&ZEND_NULL_LABEL,
56378 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56379 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56380 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56381 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56382 			(void*)&&ZEND_NULL_LABEL,
56383 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56384 			(void*)&&ZEND_NULL_LABEL,
56385 			(void*)&&ZEND_NULL_LABEL,
56386 			(void*)&&ZEND_NULL_LABEL,
56387 			(void*)&&ZEND_NULL_LABEL,
56388 			(void*)&&ZEND_NULL_LABEL,
56389 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56390 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56391 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56392 			(void*)&&ZEND_NULL_LABEL,
56393 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56394 			(void*)&&ZEND_NULL_LABEL,
56395 			(void*)&&ZEND_NULL_LABEL,
56396 			(void*)&&ZEND_NULL_LABEL,
56397 			(void*)&&ZEND_NULL_LABEL,
56398 			(void*)&&ZEND_NULL_LABEL,
56399 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
56400 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56401 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56402 			(void*)&&ZEND_NULL_LABEL,
56403 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56404 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
56405 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56406 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56407 			(void*)&&ZEND_NULL_LABEL,
56408 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56409 			(void*)&&ZEND_NULL_LABEL,
56410 			(void*)&&ZEND_NULL_LABEL,
56411 			(void*)&&ZEND_NULL_LABEL,
56412 			(void*)&&ZEND_NULL_LABEL,
56413 			(void*)&&ZEND_NULL_LABEL,
56414 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
56415 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56416 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56417 			(void*)&&ZEND_NULL_LABEL,
56418 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56419 			(void*)&&ZEND_NULL_LABEL,
56420 			(void*)&&ZEND_NULL_LABEL,
56421 			(void*)&&ZEND_NULL_LABEL,
56422 			(void*)&&ZEND_NULL_LABEL,
56423 			(void*)&&ZEND_NULL_LABEL,
56424 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56425 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56426 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56427 			(void*)&&ZEND_NULL_LABEL,
56428 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56429 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56430 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56431 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56432 			(void*)&&ZEND_NULL_LABEL,
56433 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56434 			(void*)&&ZEND_NULL_LABEL,
56435 			(void*)&&ZEND_NULL_LABEL,
56436 			(void*)&&ZEND_NULL_LABEL,
56437 			(void*)&&ZEND_NULL_LABEL,
56438 			(void*)&&ZEND_NULL_LABEL,
56439 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56440 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56441 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56442 			(void*)&&ZEND_NULL_LABEL,
56443 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56444 			(void*)&&ZEND_NULL_LABEL,
56445 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
56446 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
56447 			(void*)&&ZEND_NULL_LABEL,
56448 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
56449 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56450 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56451 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56452 			(void*)&&ZEND_NULL_LABEL,
56453 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56454 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56455 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56456 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56457 			(void*)&&ZEND_NULL_LABEL,
56458 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56459 			(void*)&&ZEND_NULL_LABEL,
56460 			(void*)&&ZEND_NULL_LABEL,
56461 			(void*)&&ZEND_NULL_LABEL,
56462 			(void*)&&ZEND_NULL_LABEL,
56463 			(void*)&&ZEND_NULL_LABEL,
56464 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56465 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56466 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56467 			(void*)&&ZEND_NULL_LABEL,
56468 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56469 			(void*)&&ZEND_NULL_LABEL,
56470 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
56471 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
56472 			(void*)&&ZEND_NULL_LABEL,
56473 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
56474 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
56475 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56476 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56477 			(void*)&&ZEND_NULL_LABEL,
56478 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56479 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
56480 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56481 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56482 			(void*)&&ZEND_NULL_LABEL,
56483 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56484 			(void*)&&ZEND_NULL_LABEL,
56485 			(void*)&&ZEND_NULL_LABEL,
56486 			(void*)&&ZEND_NULL_LABEL,
56487 			(void*)&&ZEND_NULL_LABEL,
56488 			(void*)&&ZEND_NULL_LABEL,
56489 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
56490 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56491 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56492 			(void*)&&ZEND_NULL_LABEL,
56493 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56494 			(void*)&&ZEND_NULL_LABEL,
56495 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56496 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56497 			(void*)&&ZEND_NULL_LABEL,
56498 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56499 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56500 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56501 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56502 			(void*)&&ZEND_NULL_LABEL,
56503 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56504 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56505 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56506 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56507 			(void*)&&ZEND_NULL_LABEL,
56508 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56509 			(void*)&&ZEND_NULL_LABEL,
56510 			(void*)&&ZEND_NULL_LABEL,
56511 			(void*)&&ZEND_NULL_LABEL,
56512 			(void*)&&ZEND_NULL_LABEL,
56513 			(void*)&&ZEND_NULL_LABEL,
56514 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56515 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56516 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56517 			(void*)&&ZEND_NULL_LABEL,
56518 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56519 			(void*)&&ZEND_NULL_LABEL,
56520 			(void*)&&ZEND_NULL_LABEL,
56521 			(void*)&&ZEND_NULL_LABEL,
56522 			(void*)&&ZEND_NULL_LABEL,
56523 			(void*)&&ZEND_NULL_LABEL,
56524 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56525 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56526 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56527 			(void*)&&ZEND_NULL_LABEL,
56528 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56529 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56530 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56531 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56532 			(void*)&&ZEND_NULL_LABEL,
56533 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56534 			(void*)&&ZEND_NULL_LABEL,
56535 			(void*)&&ZEND_NULL_LABEL,
56536 			(void*)&&ZEND_NULL_LABEL,
56537 			(void*)&&ZEND_NULL_LABEL,
56538 			(void*)&&ZEND_NULL_LABEL,
56539 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56540 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56541 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56542 			(void*)&&ZEND_NULL_LABEL,
56543 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56544 			(void*)&&ZEND_NULL_LABEL,
56545 			(void*)&&ZEND_NULL_LABEL,
56546 			(void*)&&ZEND_NULL_LABEL,
56547 			(void*)&&ZEND_NULL_LABEL,
56548 			(void*)&&ZEND_NULL_LABEL,
56549 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56550 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56551 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56552 			(void*)&&ZEND_NULL_LABEL,
56553 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56554 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56555 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56556 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56557 			(void*)&&ZEND_NULL_LABEL,
56558 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56559 			(void*)&&ZEND_NULL_LABEL,
56560 			(void*)&&ZEND_NULL_LABEL,
56561 			(void*)&&ZEND_NULL_LABEL,
56562 			(void*)&&ZEND_NULL_LABEL,
56563 			(void*)&&ZEND_NULL_LABEL,
56564 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56565 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56566 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56567 			(void*)&&ZEND_NULL_LABEL,
56568 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56569 			(void*)&&ZEND_NULL_LABEL,
56570 			(void*)&&ZEND_NULL_LABEL,
56571 			(void*)&&ZEND_NULL_LABEL,
56572 			(void*)&&ZEND_NULL_LABEL,
56573 			(void*)&&ZEND_NULL_LABEL,
56574 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56575 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56576 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56577 			(void*)&&ZEND_NULL_LABEL,
56578 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56579 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56580 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56581 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56582 			(void*)&&ZEND_NULL_LABEL,
56583 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56584 			(void*)&&ZEND_NULL_LABEL,
56585 			(void*)&&ZEND_NULL_LABEL,
56586 			(void*)&&ZEND_NULL_LABEL,
56587 			(void*)&&ZEND_NULL_LABEL,
56588 			(void*)&&ZEND_NULL_LABEL,
56589 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56590 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56591 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56592 			(void*)&&ZEND_NULL_LABEL,
56593 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56594 			(void*)&&ZEND_NULL_LABEL,
56595 			(void*)&&ZEND_NULL_LABEL,
56596 			(void*)&&ZEND_NULL_LABEL,
56597 			(void*)&&ZEND_NULL_LABEL,
56598 			(void*)&&ZEND_NULL_LABEL,
56599 			(void*)&&ZEND_NULL_LABEL,
56600 			(void*)&&ZEND_NULL_LABEL,
56601 			(void*)&&ZEND_NULL_LABEL,
56602 			(void*)&&ZEND_NULL_LABEL,
56603 			(void*)&&ZEND_NULL_LABEL,
56604 			(void*)&&ZEND_NULL_LABEL,
56605 			(void*)&&ZEND_NULL_LABEL,
56606 			(void*)&&ZEND_NULL_LABEL,
56607 			(void*)&&ZEND_NULL_LABEL,
56608 			(void*)&&ZEND_NULL_LABEL,
56609 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56610 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56611 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56612 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56613 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56614 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56615 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56616 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56617 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56618 			(void*)&&ZEND_NULL_LABEL,
56619 			(void*)&&ZEND_NULL_LABEL,
56620 			(void*)&&ZEND_NULL_LABEL,
56621 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56622 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56623 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56624 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56625 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56626 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56627 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56628 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56629 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56630 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56631 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56632 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56633 			(void*)&&ZEND_NULL_LABEL,
56634 			(void*)&&ZEND_NULL_LABEL,
56635 			(void*)&&ZEND_NULL_LABEL,
56636 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56637 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56638 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56639 			(void*)&&ZEND_NULL_LABEL,
56640 			(void*)&&ZEND_NULL_LABEL,
56641 			(void*)&&ZEND_NULL_LABEL,
56642 			(void*)&&ZEND_NULL_LABEL,
56643 			(void*)&&ZEND_NULL_LABEL,
56644 			(void*)&&ZEND_NULL_LABEL,
56645 			(void*)&&ZEND_NULL_LABEL,
56646 			(void*)&&ZEND_NULL_LABEL,
56647 			(void*)&&ZEND_NULL_LABEL,
56648 			(void*)&&ZEND_NULL_LABEL,
56649 			(void*)&&ZEND_NULL_LABEL,
56650 			(void*)&&ZEND_NULL_LABEL,
56651 			(void*)&&ZEND_NULL_LABEL,
56652 			(void*)&&ZEND_NULL_LABEL,
56653 			(void*)&&ZEND_NULL_LABEL,
56654 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56655 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56656 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56657 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56658 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56659 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56660 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56661 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56662 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56663 			(void*)&&ZEND_NULL_LABEL,
56664 			(void*)&&ZEND_NULL_LABEL,
56665 			(void*)&&ZEND_NULL_LABEL,
56666 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56667 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56668 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56669 			(void*)&&ZEND_NULL_LABEL,
56670 			(void*)&&ZEND_NULL_LABEL,
56671 			(void*)&&ZEND_NULL_LABEL,
56672 			(void*)&&ZEND_NULL_LABEL,
56673 			(void*)&&ZEND_NULL_LABEL,
56674 			(void*)&&ZEND_NULL_LABEL,
56675 			(void*)&&ZEND_NULL_LABEL,
56676 			(void*)&&ZEND_NULL_LABEL,
56677 			(void*)&&ZEND_NULL_LABEL,
56678 			(void*)&&ZEND_NULL_LABEL,
56679 			(void*)&&ZEND_NULL_LABEL,
56680 			(void*)&&ZEND_NULL_LABEL,
56681 			(void*)&&ZEND_NULL_LABEL,
56682 			(void*)&&ZEND_NULL_LABEL,
56683 			(void*)&&ZEND_NULL_LABEL,
56684 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56685 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56686 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56687 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56688 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56689 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56690 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56691 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56692 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56693 			(void*)&&ZEND_NULL_LABEL,
56694 			(void*)&&ZEND_NULL_LABEL,
56695 			(void*)&&ZEND_NULL_LABEL,
56696 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56697 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56698 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56699 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56700 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56701 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56702 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56703 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56704 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56705 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56706 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56707 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56708 			(void*)&&ZEND_NULL_LABEL,
56709 			(void*)&&ZEND_NULL_LABEL,
56710 			(void*)&&ZEND_NULL_LABEL,
56711 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56712 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56713 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56714 			(void*)&&ZEND_NULL_LABEL,
56715 			(void*)&&ZEND_NULL_LABEL,
56716 			(void*)&&ZEND_NULL_LABEL,
56717 			(void*)&&ZEND_NULL_LABEL,
56718 			(void*)&&ZEND_NULL_LABEL,
56719 			(void*)&&ZEND_NULL_LABEL,
56720 			(void*)&&ZEND_NULL_LABEL,
56721 			(void*)&&ZEND_NULL_LABEL,
56722 			(void*)&&ZEND_NULL_LABEL,
56723 			(void*)&&ZEND_NULL_LABEL,
56724 			(void*)&&ZEND_NULL_LABEL,
56725 			(void*)&&ZEND_NULL_LABEL,
56726 			(void*)&&ZEND_NULL_LABEL,
56727 			(void*)&&ZEND_NULL_LABEL,
56728 			(void*)&&ZEND_NULL_LABEL,
56729 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56730 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56731 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56732 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56733 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56734 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56735 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56736 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56737 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56738 			(void*)&&ZEND_NULL_LABEL,
56739 			(void*)&&ZEND_NULL_LABEL,
56740 			(void*)&&ZEND_NULL_LABEL,
56741 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56742 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56743 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56744 			(void*)&&ZEND_NULL_LABEL,
56745 			(void*)&&ZEND_NULL_LABEL,
56746 			(void*)&&ZEND_NULL_LABEL,
56747 			(void*)&&ZEND_NULL_LABEL,
56748 			(void*)&&ZEND_NULL_LABEL,
56749 			(void*)&&ZEND_NULL_LABEL,
56750 			(void*)&&ZEND_NULL_LABEL,
56751 			(void*)&&ZEND_NULL_LABEL,
56752 			(void*)&&ZEND_NULL_LABEL,
56753 			(void*)&&ZEND_NULL_LABEL,
56754 			(void*)&&ZEND_NULL_LABEL,
56755 			(void*)&&ZEND_NULL_LABEL,
56756 			(void*)&&ZEND_NULL_LABEL,
56757 			(void*)&&ZEND_NULL_LABEL,
56758 			(void*)&&ZEND_NULL_LABEL,
56759 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56760 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56761 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56762 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56763 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56764 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56765 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56766 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56767 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56768 			(void*)&&ZEND_NULL_LABEL,
56769 			(void*)&&ZEND_NULL_LABEL,
56770 			(void*)&&ZEND_NULL_LABEL,
56771 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56772 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56773 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56774 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56775 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56776 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56777 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56778 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56779 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56780 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56781 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56782 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56783 			(void*)&&ZEND_NULL_LABEL,
56784 			(void*)&&ZEND_NULL_LABEL,
56785 			(void*)&&ZEND_NULL_LABEL,
56786 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56787 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56788 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56789 			(void*)&&ZEND_NULL_LABEL,
56790 			(void*)&&ZEND_NULL_LABEL,
56791 			(void*)&&ZEND_NULL_LABEL,
56792 			(void*)&&ZEND_NULL_LABEL,
56793 			(void*)&&ZEND_NULL_LABEL,
56794 			(void*)&&ZEND_NULL_LABEL,
56795 			(void*)&&ZEND_NULL_LABEL,
56796 			(void*)&&ZEND_NULL_LABEL,
56797 			(void*)&&ZEND_NULL_LABEL,
56798 			(void*)&&ZEND_NULL_LABEL,
56799 			(void*)&&ZEND_NULL_LABEL,
56800 			(void*)&&ZEND_NULL_LABEL,
56801 			(void*)&&ZEND_NULL_LABEL,
56802 			(void*)&&ZEND_NULL_LABEL,
56803 			(void*)&&ZEND_NULL_LABEL,
56804 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56805 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56806 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56807 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56808 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56809 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56810 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56811 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56812 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56813 			(void*)&&ZEND_NULL_LABEL,
56814 			(void*)&&ZEND_NULL_LABEL,
56815 			(void*)&&ZEND_NULL_LABEL,
56816 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56817 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56818 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56819 			(void*)&&ZEND_NULL_LABEL,
56820 			(void*)&&ZEND_NULL_LABEL,
56821 			(void*)&&ZEND_NULL_LABEL,
56822 			(void*)&&ZEND_NULL_LABEL,
56823 			(void*)&&ZEND_NULL_LABEL,
56824 			(void*)&&ZEND_NULL_LABEL,
56825 			(void*)&&ZEND_NULL_LABEL,
56826 			(void*)&&ZEND_NULL_LABEL,
56827 			(void*)&&ZEND_NULL_LABEL,
56828 			(void*)&&ZEND_NULL_LABEL,
56829 			(void*)&&ZEND_NULL_LABEL,
56830 			(void*)&&ZEND_NULL_LABEL,
56831 			(void*)&&ZEND_NULL_LABEL,
56832 			(void*)&&ZEND_NULL_LABEL,
56833 			(void*)&&ZEND_NULL_LABEL,
56834 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56835 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56836 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56837 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56838 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56839 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56840 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56841 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56842 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56843 			(void*)&&ZEND_NULL_LABEL,
56844 			(void*)&&ZEND_NULL_LABEL,
56845 			(void*)&&ZEND_NULL_LABEL,
56846 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56847 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56848 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56849 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56850 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56851 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56852 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56853 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56854 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56855 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56856 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56857 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56858 			(void*)&&ZEND_NULL_LABEL,
56859 			(void*)&&ZEND_NULL_LABEL,
56860 			(void*)&&ZEND_NULL_LABEL,
56861 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56862 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56863 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56864 			(void*)&&ZEND_NULL_LABEL,
56865 			(void*)&&ZEND_NULL_LABEL,
56866 			(void*)&&ZEND_NULL_LABEL,
56867 			(void*)&&ZEND_NULL_LABEL,
56868 			(void*)&&ZEND_NULL_LABEL,
56869 			(void*)&&ZEND_NULL_LABEL,
56870 			(void*)&&ZEND_NULL_LABEL,
56871 			(void*)&&ZEND_NULL_LABEL,
56872 			(void*)&&ZEND_NULL_LABEL,
56873 			(void*)&&ZEND_NULL_LABEL,
56874 			(void*)&&ZEND_NULL_LABEL,
56875 			(void*)&&ZEND_NULL_LABEL,
56876 			(void*)&&ZEND_NULL_LABEL,
56877 			(void*)&&ZEND_NULL_LABEL,
56878 			(void*)&&ZEND_NULL_LABEL,
56879 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56880 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56881 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56882 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56883 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56884 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56885 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56886 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56887 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56888 			(void*)&&ZEND_NULL_LABEL,
56889 			(void*)&&ZEND_NULL_LABEL,
56890 			(void*)&&ZEND_NULL_LABEL,
56891 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56892 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56893 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56894 			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
56895 			(void*)&&ZEND_NULL_LABEL,
56896 			(void*)&&ZEND_NULL_LABEL,
56897 			(void*)&&ZEND_NULL_LABEL,
56898 			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
56899 			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
56900 			(void*)&&ZEND_NULL_LABEL,
56901 			(void*)&&ZEND_NULL_LABEL,
56902 			(void*)&&ZEND_NULL_LABEL,
56903 			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
56904 			(void*)&&ZEND_NULL_LABEL,
56905 			(void*)&&ZEND_NULL_LABEL,
56906 			(void*)&&ZEND_NULL_LABEL,
56907 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
56908 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56909 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56910 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
56911 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56912 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56913 			(void*)&&ZEND_NULL_LABEL,
56914 			(void*)&&ZEND_NULL_LABEL,
56915 			(void*)&&ZEND_NULL_LABEL,
56916 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
56917 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56918 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56919 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
56920 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56921 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56922 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56923 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56924 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56925 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56926 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56927 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56928 			(void*)&&ZEND_NULL_LABEL,
56929 			(void*)&&ZEND_NULL_LABEL,
56930 			(void*)&&ZEND_NULL_LABEL,
56931 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56932 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56933 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56934 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
56935 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56936 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56937 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56938 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56939 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56940 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56941 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56942 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56943 			(void*)&&ZEND_NULL_LABEL,
56944 			(void*)&&ZEND_NULL_LABEL,
56945 			(void*)&&ZEND_NULL_LABEL,
56946 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56947 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56948 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56949 			(void*)&&ZEND_NULL_LABEL,
56950 			(void*)&&ZEND_NULL_LABEL,
56951 			(void*)&&ZEND_NULL_LABEL,
56952 			(void*)&&ZEND_NULL_LABEL,
56953 			(void*)&&ZEND_NULL_LABEL,
56954 			(void*)&&ZEND_NULL_LABEL,
56955 			(void*)&&ZEND_NULL_LABEL,
56956 			(void*)&&ZEND_NULL_LABEL,
56957 			(void*)&&ZEND_NULL_LABEL,
56958 			(void*)&&ZEND_NULL_LABEL,
56959 			(void*)&&ZEND_NULL_LABEL,
56960 			(void*)&&ZEND_NULL_LABEL,
56961 			(void*)&&ZEND_NULL_LABEL,
56962 			(void*)&&ZEND_NULL_LABEL,
56963 			(void*)&&ZEND_NULL_LABEL,
56964 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
56965 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56966 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56967 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56968 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56969 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56970 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56971 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56972 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56973 			(void*)&&ZEND_NULL_LABEL,
56974 			(void*)&&ZEND_NULL_LABEL,
56975 			(void*)&&ZEND_NULL_LABEL,
56976 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56977 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56978 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56979 			(void*)&&ZEND_NULL_LABEL,
56980 			(void*)&&ZEND_NULL_LABEL,
56981 			(void*)&&ZEND_NULL_LABEL,
56982 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56983 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56984 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56985 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56986 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56987 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56988 			(void*)&&ZEND_NULL_LABEL,
56989 			(void*)&&ZEND_NULL_LABEL,
56990 			(void*)&&ZEND_NULL_LABEL,
56991 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56992 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56993 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56994 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56995 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56996 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56997 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56998 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56999 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57000 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57001 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57002 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57003 			(void*)&&ZEND_NULL_LABEL,
57004 			(void*)&&ZEND_NULL_LABEL,
57005 			(void*)&&ZEND_NULL_LABEL,
57006 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57007 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57008 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57009 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
57010 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
57011 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
57012 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57013 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57014 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57015 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57016 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57017 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57018 			(void*)&&ZEND_NULL_LABEL,
57019 			(void*)&&ZEND_NULL_LABEL,
57020 			(void*)&&ZEND_NULL_LABEL,
57021 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57022 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57023 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57024 			(void*)&&ZEND_NULL_LABEL,
57025 			(void*)&&ZEND_NULL_LABEL,
57026 			(void*)&&ZEND_NULL_LABEL,
57027 			(void*)&&ZEND_NULL_LABEL,
57028 			(void*)&&ZEND_NULL_LABEL,
57029 			(void*)&&ZEND_NULL_LABEL,
57030 			(void*)&&ZEND_NULL_LABEL,
57031 			(void*)&&ZEND_NULL_LABEL,
57032 			(void*)&&ZEND_NULL_LABEL,
57033 			(void*)&&ZEND_NULL_LABEL,
57034 			(void*)&&ZEND_NULL_LABEL,
57035 			(void*)&&ZEND_NULL_LABEL,
57036 			(void*)&&ZEND_NULL_LABEL,
57037 			(void*)&&ZEND_NULL_LABEL,
57038 			(void*)&&ZEND_NULL_LABEL,
57039 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
57040 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
57041 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
57042 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57043 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57044 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57045 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57046 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57047 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57048 			(void*)&&ZEND_NULL_LABEL,
57049 			(void*)&&ZEND_NULL_LABEL,
57050 			(void*)&&ZEND_NULL_LABEL,
57051 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57052 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57053 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57054 			(void*)&&ZEND_NULL_LABEL,
57055 			(void*)&&ZEND_NULL_LABEL,
57056 			(void*)&&ZEND_NULL_LABEL,
57057 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
57058 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
57059 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
57060 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
57061 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
57062 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
57063 			(void*)&&ZEND_NULL_LABEL,
57064 			(void*)&&ZEND_NULL_LABEL,
57065 			(void*)&&ZEND_NULL_LABEL,
57066 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
57067 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
57068 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
57069 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
57070 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
57071 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
57072 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
57073 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57074 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57075 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
57076 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57077 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57078 			(void*)&&ZEND_NULL_LABEL,
57079 			(void*)&&ZEND_NULL_LABEL,
57080 			(void*)&&ZEND_NULL_LABEL,
57081 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
57082 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57083 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57084 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
57085 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
57086 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
57087 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
57088 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57089 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57090 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
57091 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57092 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57093 			(void*)&&ZEND_NULL_LABEL,
57094 			(void*)&&ZEND_NULL_LABEL,
57095 			(void*)&&ZEND_NULL_LABEL,
57096 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
57097 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57098 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57099 			(void*)&&ZEND_NULL_LABEL,
57100 			(void*)&&ZEND_NULL_LABEL,
57101 			(void*)&&ZEND_NULL_LABEL,
57102 			(void*)&&ZEND_NULL_LABEL,
57103 			(void*)&&ZEND_NULL_LABEL,
57104 			(void*)&&ZEND_NULL_LABEL,
57105 			(void*)&&ZEND_NULL_LABEL,
57106 			(void*)&&ZEND_NULL_LABEL,
57107 			(void*)&&ZEND_NULL_LABEL,
57108 			(void*)&&ZEND_NULL_LABEL,
57109 			(void*)&&ZEND_NULL_LABEL,
57110 			(void*)&&ZEND_NULL_LABEL,
57111 			(void*)&&ZEND_NULL_LABEL,
57112 			(void*)&&ZEND_NULL_LABEL,
57113 			(void*)&&ZEND_NULL_LABEL,
57114 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
57115 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
57116 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
57117 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
57118 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57119 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57120 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
57121 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57122 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57123 			(void*)&&ZEND_NULL_LABEL,
57124 			(void*)&&ZEND_NULL_LABEL,
57125 			(void*)&&ZEND_NULL_LABEL,
57126 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
57127 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57128 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57129 			(void*)&&ZEND_NULL_LABEL,
57130 			(void*)&&ZEND_NULL_LABEL,
57131 			(void*)&&ZEND_NULL_LABEL,
57132 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
57133 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
57134 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
57135 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
57136 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
57137 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
57138 			(void*)&&ZEND_NULL_LABEL,
57139 			(void*)&&ZEND_NULL_LABEL,
57140 			(void*)&&ZEND_NULL_LABEL,
57141 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
57142 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
57143 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
57144 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
57145 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
57146 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
57147 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57148 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57149 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57150 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57151 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57152 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57153 			(void*)&&ZEND_NULL_LABEL,
57154 			(void*)&&ZEND_NULL_LABEL,
57155 			(void*)&&ZEND_NULL_LABEL,
57156 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57157 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57158 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57159 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
57160 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
57161 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
57162 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57163 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57164 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57165 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57166 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57167 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57168 			(void*)&&ZEND_NULL_LABEL,
57169 			(void*)&&ZEND_NULL_LABEL,
57170 			(void*)&&ZEND_NULL_LABEL,
57171 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57172 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57173 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57174 			(void*)&&ZEND_NULL_LABEL,
57175 			(void*)&&ZEND_NULL_LABEL,
57176 			(void*)&&ZEND_NULL_LABEL,
57177 			(void*)&&ZEND_NULL_LABEL,
57178 			(void*)&&ZEND_NULL_LABEL,
57179 			(void*)&&ZEND_NULL_LABEL,
57180 			(void*)&&ZEND_NULL_LABEL,
57181 			(void*)&&ZEND_NULL_LABEL,
57182 			(void*)&&ZEND_NULL_LABEL,
57183 			(void*)&&ZEND_NULL_LABEL,
57184 			(void*)&&ZEND_NULL_LABEL,
57185 			(void*)&&ZEND_NULL_LABEL,
57186 			(void*)&&ZEND_NULL_LABEL,
57187 			(void*)&&ZEND_NULL_LABEL,
57188 			(void*)&&ZEND_NULL_LABEL,
57189 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
57190 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
57191 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
57192 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57193 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57194 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57195 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57196 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57197 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57198 			(void*)&&ZEND_NULL_LABEL,
57199 			(void*)&&ZEND_NULL_LABEL,
57200 			(void*)&&ZEND_NULL_LABEL,
57201 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
57202 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
57203 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
57204 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
57205 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
57206 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
57207 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL,
57208 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
57209 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
57210 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
57211 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL,
57212 			(void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
57213 			(void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL,
57214 			(void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
57215 			(void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL,
57216 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_CONST_LABEL,
57217 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
57218 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
57219 			(void*)&&ZEND_NULL_LABEL,
57220 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
57221 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
57222 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
57223 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
57224 			(void*)&&ZEND_NULL_LABEL,
57225 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
57226 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
57227 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
57228 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
57229 			(void*)&&ZEND_NULL_LABEL,
57230 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
57231 			(void*)&&ZEND_NULL_LABEL,
57232 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
57233 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
57234 			(void*)&&ZEND_NULL_LABEL,
57235 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
57236 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
57237 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
57238 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
57239 			(void*)&&ZEND_NULL_LABEL,
57240 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
57241 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
57242 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
57243 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
57244 			(void*)&&ZEND_NULL_LABEL,
57245 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
57246 			(void*)&&ZEND_NULL_LABEL,
57247 			(void*)&&ZEND_NULL_LABEL,
57248 			(void*)&&ZEND_NULL_LABEL,
57249 			(void*)&&ZEND_NULL_LABEL,
57250 			(void*)&&ZEND_NULL_LABEL,
57251 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
57252 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
57253 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
57254 			(void*)&&ZEND_NULL_LABEL,
57255 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
57256 			(void*)&&ZEND_NULL_LABEL,
57257 			(void*)&&ZEND_NULL_LABEL,
57258 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
57259 			(void*)&&ZEND_NULL_LABEL,
57260 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
57261 			(void*)&&ZEND_NULL_LABEL,
57262 			(void*)&&ZEND_NULL_LABEL,
57263 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_LABEL,
57264 			(void*)&&ZEND_NULL_LABEL,
57265 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_LABEL,
57266 			(void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL,
57267 			(void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL,
57268 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
57269 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
57270 			(void*)&&ZEND_NULL_LABEL
57271 		};
57272 		zend_opcode_handlers = (const void **) labels;
57273 		zend_handlers_count = sizeof(labels) / sizeof(void*);
57274 		memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
57275 		hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
57276 #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
57277 		memset(vm_stack_data.hybrid_jit_red_zone, 0, ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE);
57278 #endif
57279 		if (zend_touch_vm_stack_data) {
57280 			zend_touch_vm_stack_data(&vm_stack_data);
57281 		}
57282 		goto HYBRID_HALT_LABEL;
57283 	}
57284 #endif
57285 
57286 	LOAD_OPLINE();
57287 	ZEND_VM_LOOP_INTERRUPT_CHECK();
57288 
57289 #ifdef ZEND_CHECK_STACK_LIMIT
57290 	if (UNEXPECTED(zend_call_stack_overflowed(EG(stack_limit)))) {
57291 		zend_call_stack_size_error();
57292 		/* No opline was executed before exception */
57293 		EG(opline_before_exception) = NULL;
57294 		LOAD_OPLINE();
57295 		/* Fall through to handle exception below. */
57296 	}
57297 #endif /* ZEND_CHECK_STACK_LIMIT */
57298 
57299 	while (1) {
57300 #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
57301 			int ret;
57302 #endif
57303 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
57304 		HYBRID_SWITCH() {
57305 #else
57306 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
57307 		((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57308 		if (UNEXPECTED(!OPLINE)) {
57309 #else
57310 		if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
57311 #endif
57312 #endif
57313 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
57314 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC):
57315 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
57316 				ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57317 				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
57318 				HYBRID_BREAK();
57319 			HYBRID_CASE(ZEND_PRE_INC_STATIC_PROP_SPEC):
57320 				VM_TRACE(ZEND_PRE_INC_STATIC_PROP_SPEC)
57321 				ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57322 				VM_TRACE_OP_END(ZEND_PRE_INC_STATIC_PROP_SPEC)
57323 				HYBRID_BREAK();
57324 			HYBRID_CASE(ZEND_POST_INC_STATIC_PROP_SPEC):
57325 				VM_TRACE(ZEND_POST_INC_STATIC_PROP_SPEC)
57326 				ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57327 				VM_TRACE_OP_END(ZEND_POST_INC_STATIC_PROP_SPEC)
57328 				HYBRID_BREAK();
57329 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC):
57330 				VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC)
57331 				ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57332 				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_R_SPEC)
57333 				HYBRID_BREAK();
57334 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC):
57335 				VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC)
57336 				ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57337 				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_W_SPEC)
57338 				HYBRID_BREAK();
57339 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC):
57340 				VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC)
57341 				ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57342 				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_RW_SPEC)
57343 				HYBRID_BREAK();
57344 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC):
57345 				VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
57346 				ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57347 				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
57348 				HYBRID_BREAK();
57349 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC):
57350 				VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
57351 				ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57352 				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
57353 				HYBRID_BREAK();
57354 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC):
57355 				VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC)
57356 				ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57357 				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_IS_SPEC)
57358 				HYBRID_BREAK();
57359 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST):
57360 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
57361 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57362 				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
57363 				HYBRID_BREAK();
57364 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP):
57365 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
57366 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57367 				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
57368 				HYBRID_BREAK();
57369 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR):
57370 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
57371 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57372 				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
57373 				HYBRID_BREAK();
57374 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV):
57375 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
57376 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57377 				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
57378 				HYBRID_BREAK();
57379 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC):
57380 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
57381 				ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57382 				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
57383 				HYBRID_BREAK();
57384 zend_leave_helper_SPEC_LABEL:
57385 {
57386 	zend_execute_data *old_execute_data;
57387 	uint32_t call_info = EX_CALL_INFO();
57388 	SAVE_OPLINE();
57389 
57390 	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) == 0)) {
57391 		EG(current_execute_data) = EX(prev_execute_data);
57392 		i_free_compiled_variables(execute_data);
57393 
57394 #ifdef ZEND_PREFER_RELOAD
57395 		call_info = EX_CALL_INFO();
57396 #endif
57397 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
57398 			OBJ_RELEASE(Z_OBJ(execute_data->This));
57399 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
57400 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
57401 		}
57402 		EG(vm_stack_top) = (zval*)execute_data;
57403 		execute_data = EX(prev_execute_data);
57404 
57405 		if (UNEXPECTED(EG(exception) != NULL)) {
57406 			zend_rethrow_exception(execute_data);
57407 			HANDLE_EXCEPTION_LEAVE();
57408 		}
57409 
57410 		LOAD_NEXT_OPLINE();
57411 		ZEND_VM_LEAVE();
57412 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
57413 		EG(current_execute_data) = EX(prev_execute_data);
57414 		i_free_compiled_variables(execute_data);
57415 
57416 #ifdef ZEND_PREFER_RELOAD
57417 		call_info = EX_CALL_INFO();
57418 #endif
57419 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
57420 			zend_clean_and_cache_symbol_table(EX(symbol_table));
57421 		}
57422 
57423 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
57424 			zend_free_extra_named_params(EX(extra_named_params));
57425 		}
57426 
57427 		/* Free extra args before releasing the closure,
57428 		 * as that may free the op_array. */
57429 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
57430 
57431 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
57432 			OBJ_RELEASE(Z_OBJ(execute_data->This));
57433 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
57434 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
57435 		}
57436 
57437 		old_execute_data = execute_data;
57438 		execute_data = EX(prev_execute_data);
57439 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
57440 
57441 		if (UNEXPECTED(EG(exception) != NULL)) {
57442 			zend_rethrow_exception(execute_data);
57443 			HANDLE_EXCEPTION_LEAVE();
57444 		}
57445 
57446 		LOAD_NEXT_OPLINE();
57447 		ZEND_VM_LEAVE();
57448 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
57449 		if (EX(func)->op_array.last_var > 0) {
57450 			zend_detach_symbol_table(execute_data);
57451 			call_info |= ZEND_CALL_NEEDS_REATTACH;
57452 		}
57453 		zend_destroy_static_vars(&EX(func)->op_array);
57454 		destroy_op_array(&EX(func)->op_array);
57455 		efree_size(EX(func), sizeof(zend_op_array));
57456 		old_execute_data = execute_data;
57457 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
57458 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
57459 
57460 		if (call_info & ZEND_CALL_NEEDS_REATTACH) {
57461 			if (EX(func)->op_array.last_var > 0) {
57462 				zend_attach_symbol_table(execute_data);
57463 			} else {
57464 				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
57465 			}
57466 		}
57467 		if (UNEXPECTED(EG(exception) != NULL)) {
57468 			zend_rethrow_exception(execute_data);
57469 			HANDLE_EXCEPTION_LEAVE();
57470 		}
57471 
57472 		LOAD_NEXT_OPLINE();
57473 		ZEND_VM_LEAVE();
57474 	} else {
57475 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
57476 			EG(current_execute_data) = EX(prev_execute_data);
57477 			i_free_compiled_variables(execute_data);
57478 #ifdef ZEND_PREFER_RELOAD
57479 			call_info = EX_CALL_INFO();
57480 #endif
57481 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
57482 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
57483 					zend_clean_and_cache_symbol_table(EX(symbol_table));
57484 				}
57485 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
57486 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
57487 					zend_free_extra_named_params(EX(extra_named_params));
57488 				}
57489 			}
57490 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
57491 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
57492 			}
57493 			ZEND_VM_RETURN();
57494 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
57495 			zend_array *symbol_table = EX(symbol_table);
57496 
57497 			if (EX(func)->op_array.last_var > 0) {
57498 				zend_detach_symbol_table(execute_data);
57499 				call_info |= ZEND_CALL_NEEDS_REATTACH;
57500 			}
57501 			if (call_info & ZEND_CALL_NEEDS_REATTACH) {
57502 				old_execute_data = EX(prev_execute_data);
57503 				while (old_execute_data) {
57504 					if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
57505 						if (old_execute_data->symbol_table == symbol_table) {
57506 							if (old_execute_data->func->op_array.last_var > 0) {
57507 								zend_attach_symbol_table(old_execute_data);
57508 							} else {
57509 								ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
57510 							}
57511 						}
57512 						break;
57513 					}
57514 					old_execute_data = old_execute_data->prev_execute_data;
57515 				}
57516 			}
57517 			EG(current_execute_data) = EX(prev_execute_data);
57518 			ZEND_VM_RETURN();
57519 		}
57520 	}
57521 }
57522 
57523 			HYBRID_CASE(ZEND_JMP_SPEC):
57524 				VM_TRACE(ZEND_JMP_SPEC)
57525 				ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57526 				VM_TRACE_OP_END(ZEND_JMP_SPEC)
57527 				HYBRID_BREAK();
57528 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
57529 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
57530 				ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57531 				VM_TRACE_OP_END(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
57532 				HYBRID_BREAK();
57533 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
57534 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
57535 				ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57536 				VM_TRACE_OP_END(ZEND_DO_ICALL_SPEC_RETVAL_USED)
57537 				HYBRID_BREAK();
57538 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_OBSERVER):
57539 				VM_TRACE(ZEND_DO_ICALL_SPEC_OBSERVER)
57540 				ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57541 				VM_TRACE_OP_END(ZEND_DO_ICALL_SPEC_OBSERVER)
57542 				HYBRID_BREAK();
57543 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
57544 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
57545 				ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57546 				VM_TRACE_OP_END(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
57547 				HYBRID_BREAK();
57548 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
57549 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
57550 				ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57551 				VM_TRACE_OP_END(ZEND_DO_UCALL_SPEC_RETVAL_USED)
57552 				HYBRID_BREAK();
57553 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_OBSERVER):
57554 				VM_TRACE(ZEND_DO_UCALL_SPEC_OBSERVER)
57555 				ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57556 				VM_TRACE_OP_END(ZEND_DO_UCALL_SPEC_OBSERVER)
57557 				HYBRID_BREAK();
57558 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
57559 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
57560 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57561 				VM_TRACE_OP_END(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
57562 				HYBRID_BREAK();
57563 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
57564 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
57565 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57566 				VM_TRACE_OP_END(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
57567 				HYBRID_BREAK();
57568 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER):
57569 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER)
57570 				ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57571 				VM_TRACE_OP_END(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER)
57572 				HYBRID_BREAK();
57573 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
57574 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
57575 				ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57576 				VM_TRACE_OP_END(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
57577 				HYBRID_BREAK();
57578 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
57579 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
57580 				ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57581 				VM_TRACE_OP_END(ZEND_DO_FCALL_SPEC_RETVAL_USED)
57582 				HYBRID_BREAK();
57583 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_OBSERVER):
57584 				VM_TRACE(ZEND_DO_FCALL_SPEC_OBSERVER)
57585 				ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57586 				VM_TRACE_OP_END(ZEND_DO_FCALL_SPEC_OBSERVER)
57587 				HYBRID_BREAK();
57588 			HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
57589 				VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
57590 				ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57591 				VM_TRACE_OP_END(ZEND_GENERATOR_CREATE_SPEC)
57592 				HYBRID_BREAK();
57593 			HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
57594 				VM_TRACE(ZEND_SEND_UNPACK_SPEC)
57595 				ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57596 				VM_TRACE_OP_END(ZEND_SEND_UNPACK_SPEC)
57597 				HYBRID_BREAK();
57598 			HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
57599 				VM_TRACE(ZEND_SEND_ARRAY_SPEC)
57600 				ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57601 				VM_TRACE_OP_END(ZEND_SEND_ARRAY_SPEC)
57602 				HYBRID_BREAK();
57603 			HYBRID_CASE(ZEND_RECV_NOTYPE_SPEC):
57604 				VM_TRACE(ZEND_RECV_NOTYPE_SPEC)
57605 				ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57606 				VM_TRACE_OP_END(ZEND_RECV_NOTYPE_SPEC)
57607 				HYBRID_BREAK();
57608 			HYBRID_CASE(ZEND_ADD_ARRAY_UNPACK_SPEC):
57609 				VM_TRACE(ZEND_ADD_ARRAY_UNPACK_SPEC)
57610 				ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57611 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_UNPACK_SPEC)
57612 				HYBRID_BREAK();
57613 			HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC):
57614 				VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC)
57615 				ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57616 				VM_TRACE_OP_END(ZEND_UNSET_STATIC_PROP_SPEC)
57617 				HYBRID_BREAK();
57618 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC):
57619 				VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
57620 				ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57621 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
57622 				HYBRID_BREAK();
57623 			HYBRID_CASE(ZEND_EXIT_SPEC):
57624 				VM_TRACE(ZEND_EXIT_SPEC)
57625 				ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57626 				VM_TRACE_OP_END(ZEND_EXIT_SPEC)
57627 				HYBRID_BREAK();
57628 			HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
57629 				VM_TRACE(ZEND_BEGIN_SILENCE_SPEC)
57630 				ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57631 				VM_TRACE_OP_END(ZEND_BEGIN_SILENCE_SPEC)
57632 				HYBRID_BREAK();
57633 			HYBRID_CASE(ZEND_EXT_STMT_SPEC):
57634 				VM_TRACE(ZEND_EXT_STMT_SPEC)
57635 				ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57636 				VM_TRACE_OP_END(ZEND_EXT_STMT_SPEC)
57637 				HYBRID_BREAK();
57638 			HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
57639 				VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC)
57640 				ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57641 				VM_TRACE_OP_END(ZEND_EXT_FCALL_BEGIN_SPEC)
57642 				HYBRID_BREAK();
57643 			HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
57644 				VM_TRACE(ZEND_EXT_FCALL_END_SPEC)
57645 				ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57646 				VM_TRACE_OP_END(ZEND_EXT_FCALL_END_SPEC)
57647 				HYBRID_BREAK();
57648 			HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
57649 				VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC)
57650 				ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57651 				VM_TRACE_OP_END(ZEND_DECLARE_ANON_CLASS_SPEC)
57652 				HYBRID_BREAK();
57653 			HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
57654 				VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC)
57655 				ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57656 				VM_TRACE_OP_END(ZEND_DECLARE_FUNCTION_SPEC)
57657 				HYBRID_BREAK();
57658 			HYBRID_CASE(ZEND_TICKS_SPEC):
57659 				VM_TRACE(ZEND_TICKS_SPEC)
57660 				ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57661 				VM_TRACE_OP_END(ZEND_TICKS_SPEC)
57662 				HYBRID_BREAK();
57663 			HYBRID_CASE(ZEND_EXT_NOP_SPEC):
57664 				VM_TRACE(ZEND_EXT_NOP_SPEC)
57665 				ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57666 				VM_TRACE_OP_END(ZEND_EXT_NOP_SPEC)
57667 				HYBRID_BREAK();
57668 			HYBRID_CASE(ZEND_NOP_SPEC):
57669 				VM_TRACE(ZEND_NOP_SPEC)
57670 				ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57671 				VM_TRACE_OP_END(ZEND_NOP_SPEC)
57672 				HYBRID_BREAK();
57673 			HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
57674 				VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
57675 				ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57676 				VM_TRACE_OP_END(ZEND_HANDLE_EXCEPTION_SPEC)
57677 				HYBRID_BREAK();
57678 			HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
57679 				VM_TRACE(ZEND_USER_OPCODE_SPEC)
57680 				ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57681 				VM_TRACE_OP_END(ZEND_USER_OPCODE_SPEC)
57682 				HYBRID_BREAK();
57683 			HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
57684 				VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC)
57685 				ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57686 				VM_TRACE_OP_END(ZEND_DISCARD_EXCEPTION_SPEC)
57687 				HYBRID_BREAK();
57688 			HYBRID_CASE(ZEND_FAST_CALL_SPEC):
57689 				VM_TRACE(ZEND_FAST_CALL_SPEC)
57690 				ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57691 				VM_TRACE_OP_END(ZEND_FAST_CALL_SPEC)
57692 				HYBRID_BREAK();
57693 			HYBRID_CASE(ZEND_FAST_RET_SPEC):
57694 				VM_TRACE(ZEND_FAST_RET_SPEC)
57695 				ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57696 				VM_TRACE_OP_END(ZEND_FAST_RET_SPEC)
57697 				HYBRID_BREAK();
57698 			HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
57699 				VM_TRACE(ZEND_ASSERT_CHECK_SPEC)
57700 				ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57701 				VM_TRACE_OP_END(ZEND_ASSERT_CHECK_SPEC)
57702 				HYBRID_BREAK();
57703 			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
57704 				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
57705 				ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57706 				VM_TRACE_OP_END(ZEND_CALL_TRAMPOLINE_SPEC)
57707 				HYBRID_BREAK();
57708 			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER):
57709 				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
57710 				ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57711 				VM_TRACE_OP_END(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
57712 				HYBRID_BREAK();
57713 			HYBRID_CASE(ZEND_FRAMELESS_ICALL_2_SPEC):
57714 				VM_TRACE(ZEND_FRAMELESS_ICALL_2_SPEC)
57715 				ZEND_FRAMELESS_ICALL_2_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57716 				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_2_SPEC)
57717 				HYBRID_BREAK();
57718 			HYBRID_CASE(ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER):
57719 				VM_TRACE(ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER)
57720 				ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57721 				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER)
57722 				HYBRID_BREAK();
57723 			HYBRID_CASE(ZEND_FRAMELESS_ICALL_3_SPEC):
57724 				VM_TRACE(ZEND_FRAMELESS_ICALL_3_SPEC)
57725 				ZEND_FRAMELESS_ICALL_3_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57726 				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_3_SPEC)
57727 				HYBRID_BREAK();
57728 			HYBRID_CASE(ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER):
57729 				VM_TRACE(ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER)
57730 				ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57731 				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER)
57732 				HYBRID_BREAK();
57733 			HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
57734 				VM_TRACE(ZEND_JMP_FORWARD_SPEC)
57735 				ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57736 				VM_TRACE_OP_END(ZEND_JMP_FORWARD_SPEC)
57737 				HYBRID_BREAK();
57738 			HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
57739 				VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
57740 				ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57741 				VM_TRACE_OP_END(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
57742 				HYBRID_BREAK();
57743 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
57744 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
57745 				ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57746 				VM_TRACE_OP_END(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
57747 				HYBRID_BREAK();
57748 			HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
57749 				VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
57750 				ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57751 				VM_TRACE_OP_END(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
57752 				HYBRID_BREAK();
57753 			HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
57754 				VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST)
57755 				ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57756 				VM_TRACE_OP_END(ZEND_INIT_FCALL_SPEC_CONST)
57757 				HYBRID_BREAK();
57758 			HYBRID_CASE(ZEND_INIT_FCALL_OFFSET_SPEC_CONST):
57759 				VM_TRACE(ZEND_INIT_FCALL_OFFSET_SPEC_CONST)
57760 				ZEND_INIT_FCALL_OFFSET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57761 				VM_TRACE_OP_END(ZEND_INIT_FCALL_OFFSET_SPEC_CONST)
57762 				HYBRID_BREAK();
57763 			HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
57764 				VM_TRACE(ZEND_RECV_INIT_SPEC_CONST)
57765 				ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57766 				VM_TRACE_OP_END(ZEND_RECV_INIT_SPEC_CONST)
57767 				HYBRID_BREAK();
57768 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
57769 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
57770 				ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57771 				VM_TRACE_OP_END(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
57772 				HYBRID_BREAK();
57773 			HYBRID_CASE(ZEND_RECV_SPEC_UNUSED):
57774 				VM_TRACE(ZEND_RECV_SPEC_UNUSED)
57775 				ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57776 				VM_TRACE_OP_END(ZEND_RECV_SPEC_UNUSED)
57777 				HYBRID_BREAK();
57778 			HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED):
57779 				VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED)
57780 				ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57781 				VM_TRACE_OP_END(ZEND_RECV_VARIADIC_SPEC_UNUSED)
57782 				HYBRID_BREAK();
57783 			HYBRID_CASE(ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED):
57784 				VM_TRACE(ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED)
57785 				ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57786 				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED)
57787 				HYBRID_BREAK();
57788 			HYBRID_CASE(ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER):
57789 				VM_TRACE(ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER)
57790 				ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57791 				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER)
57792 				HYBRID_BREAK();
57793 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
57794 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
57795 				ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57796 				VM_TRACE_OP_END(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
57797 				HYBRID_BREAK();
57798 			HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
57799 				VM_TRACE(ZEND_BW_NOT_SPEC_CONST)
57800 				ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57801 				VM_TRACE_OP_END(ZEND_BW_NOT_SPEC_CONST)
57802 				HYBRID_BREAK();
57803 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
57804 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST)
57805 				ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57806 				VM_TRACE_OP_END(ZEND_BOOL_NOT_SPEC_CONST)
57807 				HYBRID_BREAK();
57808 			HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
57809 				VM_TRACE(ZEND_ECHO_SPEC_CONST)
57810 				ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57811 				VM_TRACE_OP_END(ZEND_ECHO_SPEC_CONST)
57812 				HYBRID_BREAK();
57813 			HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
57814 				VM_TRACE(ZEND_JMPZ_SPEC_CONST)
57815 				ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57816 				VM_TRACE_OP_END(ZEND_JMPZ_SPEC_CONST)
57817 				HYBRID_BREAK();
57818 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
57819 				VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
57820 				ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57821 				VM_TRACE_OP_END(ZEND_JMPNZ_SPEC_CONST)
57822 				HYBRID_BREAK();
57823 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
57824 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
57825 				ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57826 				VM_TRACE_OP_END(ZEND_JMPZ_EX_SPEC_CONST)
57827 				HYBRID_BREAK();
57828 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
57829 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST)
57830 				ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57831 				VM_TRACE_OP_END(ZEND_JMPNZ_EX_SPEC_CONST)
57832 				HYBRID_BREAK();
57833 			HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
57834 				VM_TRACE(ZEND_RETURN_SPEC_CONST)
57835 {
57836 	USE_OPLINE
57837 	zval *retval_ptr;
57838 	zval *return_value;
57839 
57840 	retval_ptr = RT_CONSTANT(opline, opline->op1);
57841 	return_value = EX(return_value);
57842 
57843 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
57844 		SAVE_OPLINE();
57845 		retval_ptr = ZVAL_UNDEFINED_OP1();
57846 		if (return_value) {
57847 			ZVAL_NULL(return_value);
57848 		}
57849 	} else if (!return_value) {
57850 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
57851 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
57852 				SAVE_OPLINE();
57853 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
57854 			}
57855 		}
57856 	} else {
57857 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
57858 			ZVAL_COPY_VALUE(return_value, retval_ptr);
57859 			if (IS_CONST == IS_CONST) {
57860 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
57861 					Z_ADDREF_P(return_value);
57862 				}
57863 			}
57864 		} else if (IS_CONST == IS_CV) {
57865 			do {
57866 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57867 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
57868 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
57869 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57870 							ZVAL_COPY_VALUE(return_value, retval_ptr);
57871 							if (GC_MAY_LEAK(ref)) {
57872 								SAVE_OPLINE();
57873 								gc_possible_root(ref);
57874 							}
57875 							ZVAL_NULL(retval_ptr);
57876 							break;
57877 						} else {
57878 							Z_ADDREF_P(retval_ptr);
57879 						}
57880 					} else {
57881 						retval_ptr = Z_REFVAL_P(retval_ptr);
57882 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57883 							Z_ADDREF_P(retval_ptr);
57884 						}
57885 					}
57886 				}
57887 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57888 			} while (0);
57889 		} else /* if (IS_CONST == IS_VAR) */ {
57890 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
57891 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57892 
57893 				retval_ptr = Z_REFVAL_P(retval_ptr);
57894 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57895 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
57896 					efree_size(ref, sizeof(zend_reference));
57897 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57898 					Z_ADDREF_P(retval_ptr);
57899 				}
57900 			} else {
57901 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57902 			}
57903 		}
57904 	}
57905 
57906 
57907 
57908 	goto zend_leave_helper_SPEC_LABEL;
57909 }
57910 
57911 				VM_TRACE_OP_END(ZEND_RETURN_SPEC_CONST)
57912 			HYBRID_CASE(ZEND_RETURN_SPEC_OBSERVER):
57913 				VM_TRACE(ZEND_RETURN_SPEC_OBSERVER)
57914 {
57915 	USE_OPLINE
57916 	zval *retval_ptr;
57917 	zval *return_value;
57918 	zval observer_retval;
57919 
57920 	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
57921 	return_value = EX(return_value);
57922 	if (!return_value) { return_value = &observer_retval; };
57923 	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
57924 		SAVE_OPLINE();
57925 		retval_ptr = ZVAL_UNDEFINED_OP1();
57926 		if (return_value) {
57927 			ZVAL_NULL(return_value);
57928 		}
57929 	} else if (!return_value) {
57930 		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
57931 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
57932 				SAVE_OPLINE();
57933 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
57934 			}
57935 		}
57936 	} else {
57937 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
57938 			ZVAL_COPY_VALUE(return_value, retval_ptr);
57939 			if (opline->op1_type == IS_CONST) {
57940 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
57941 					Z_ADDREF_P(return_value);
57942 				}
57943 			}
57944 		} else if (opline->op1_type == IS_CV) {
57945 			do {
57946 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57947 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
57948 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
57949 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57950 							ZVAL_COPY_VALUE(return_value, retval_ptr);
57951 							if (GC_MAY_LEAK(ref)) {
57952 								SAVE_OPLINE();
57953 								gc_possible_root(ref);
57954 							}
57955 							ZVAL_NULL(retval_ptr);
57956 							break;
57957 						} else {
57958 							Z_ADDREF_P(retval_ptr);
57959 						}
57960 					} else {
57961 						retval_ptr = Z_REFVAL_P(retval_ptr);
57962 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57963 							Z_ADDREF_P(retval_ptr);
57964 						}
57965 					}
57966 				}
57967 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57968 			} while (0);
57969 		} else /* if (opline->op1_type == IS_VAR) */ {
57970 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
57971 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57972 
57973 				retval_ptr = Z_REFVAL_P(retval_ptr);
57974 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57975 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
57976 					efree_size(ref, sizeof(zend_reference));
57977 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57978 					Z_ADDREF_P(retval_ptr);
57979 				}
57980 			} else {
57981 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57982 			}
57983 		}
57984 	}
57985 	SAVE_OPLINE();
57986 	zend_observer_fcall_end(execute_data, return_value);
57987 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
57988 	goto zend_leave_helper_SPEC_LABEL;
57989 }
57990 
57991 				VM_TRACE_OP_END(ZEND_RETURN_SPEC_OBSERVER)
57992 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
57993 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
57994 				ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57995 				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_CONST)
57996 				HYBRID_BREAK();
57997 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_OBSERVER):
57998 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_OBSERVER)
57999 				ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58000 				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_OBSERVER)
58001 				HYBRID_BREAK();
58002 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
58003 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
58004 				ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58005 				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_CONST)
58006 				HYBRID_BREAK();
58007 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER):
58008 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER)
58009 				ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58010 				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_OBSERVER)
58011 				HYBRID_BREAK();
58012 			HYBRID_CASE(ZEND_THROW_SPEC_CONST):
58013 				VM_TRACE(ZEND_THROW_SPEC_CONST)
58014 				ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58015 				VM_TRACE_OP_END(ZEND_THROW_SPEC_CONST)
58016 				HYBRID_BREAK();
58017 			HYBRID_CASE(ZEND_CATCH_SPEC_CONST):
58018 				VM_TRACE(ZEND_CATCH_SPEC_CONST)
58019 				ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58020 				VM_TRACE_OP_END(ZEND_CATCH_SPEC_CONST)
58021 				HYBRID_BREAK();
58022 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
58023 				VM_TRACE(ZEND_SEND_USER_SPEC_CONST)
58024 				ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58025 				VM_TRACE_OP_END(ZEND_SEND_USER_SPEC_CONST)
58026 				HYBRID_BREAK();
58027 			HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
58028 				VM_TRACE(ZEND_BOOL_SPEC_CONST)
58029 				ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58030 				VM_TRACE_OP_END(ZEND_BOOL_SPEC_CONST)
58031 				HYBRID_BREAK();
58032 			HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
58033 				VM_TRACE(ZEND_CLONE_SPEC_CONST)
58034 				ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58035 				VM_TRACE_OP_END(ZEND_CLONE_SPEC_CONST)
58036 				HYBRID_BREAK();
58037 			HYBRID_CASE(ZEND_CAST_SPEC_CONST):
58038 				VM_TRACE(ZEND_CAST_SPEC_CONST)
58039 				ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58040 				VM_TRACE_OP_END(ZEND_CAST_SPEC_CONST)
58041 				HYBRID_BREAK();
58042 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
58043 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
58044 				ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58045 				VM_TRACE_OP_END(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
58046 				HYBRID_BREAK();
58047 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER):
58048 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER)
58049 				ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58050 				VM_TRACE_OP_END(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER)
58051 				HYBRID_BREAK();
58052 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
58053 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
58054 				ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58055 				VM_TRACE_OP_END(ZEND_FE_RESET_R_SPEC_CONST)
58056 				HYBRID_BREAK();
58057 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
58058 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST)
58059 				ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58060 				VM_TRACE_OP_END(ZEND_FE_RESET_RW_SPEC_CONST)
58061 				HYBRID_BREAK();
58062 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
58063 				VM_TRACE(ZEND_JMP_SET_SPEC_CONST)
58064 				ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58065 				VM_TRACE_OP_END(ZEND_JMP_SET_SPEC_CONST)
58066 				HYBRID_BREAK();
58067 			HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
58068 				VM_TRACE(ZEND_COALESCE_SPEC_CONST)
58069 				ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58070 				VM_TRACE_OP_END(ZEND_COALESCE_SPEC_CONST)
58071 				HYBRID_BREAK();
58072 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CONST):
58073 				VM_TRACE(ZEND_JMP_NULL_SPEC_CONST)
58074 				ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58075 				VM_TRACE_OP_END(ZEND_JMP_NULL_SPEC_CONST)
58076 				HYBRID_BREAK();
58077 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
58078 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST)
58079 				ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58080 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_SPEC_CONST)
58081 				HYBRID_BREAK();
58082 			HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST):
58083 				VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST)
58084 				ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58085 				VM_TRACE_OP_END(ZEND_DECLARE_CLASS_SPEC_CONST)
58086 				HYBRID_BREAK();
58087 			HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST):
58088 				VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST)
58089 				ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58090 				VM_TRACE_OP_END(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST)
58091 				HYBRID_BREAK();
58092 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
58093 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST)
58094 				ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58095 				VM_TRACE_OP_END(ZEND_YIELD_FROM_SPEC_CONST)
58096 				HYBRID_BREAK();
58097 			HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
58098 				VM_TRACE(ZEND_STRLEN_SPEC_CONST)
58099 				ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58100 				VM_TRACE_OP_END(ZEND_STRLEN_SPEC_CONST)
58101 				HYBRID_BREAK();
58102 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
58103 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST)
58104 				ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58105 				VM_TRACE_OP_END(ZEND_TYPE_CHECK_SPEC_CONST)
58106 				HYBRID_BREAK();
58107 			HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
58108 				VM_TRACE(ZEND_DEFINED_SPEC_CONST)
58109 				ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58110 				VM_TRACE_OP_END(ZEND_DEFINED_SPEC_CONST)
58111 				HYBRID_BREAK();
58112 			HYBRID_CASE(ZEND_JMP_FRAMELESS_SPEC_CONST):
58113 				VM_TRACE(ZEND_JMP_FRAMELESS_SPEC_CONST)
58114 				ZEND_JMP_FRAMELESS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58115 				VM_TRACE_OP_END(ZEND_JMP_FRAMELESS_SPEC_CONST)
58116 				HYBRID_BREAK();
58117 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_CONST):
58118 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
58119 				ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58120 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
58121 				HYBRID_BREAK();
58122 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
58123 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
58124 				ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58125 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
58126 				HYBRID_BREAK();
58127 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
58128 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
58129 				ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58130 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
58131 				HYBRID_BREAK();
58132 			HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST):
58133 				VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
58134 				ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58135 				VM_TRACE_OP_END(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
58136 				HYBRID_BREAK();
58137 			HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST):
58138 				VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
58139 				ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58140 				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
58141 				HYBRID_BREAK();
58142 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
58143 				VM_TRACE(ZEND_ADD_SPEC_CONST_CONST)
58144 				ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58145 				VM_TRACE_OP_END(ZEND_ADD_SPEC_CONST_CONST)
58146 				HYBRID_BREAK();
58147 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
58148 				VM_TRACE(ZEND_SUB_SPEC_CONST_CONST)
58149 				ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58150 				VM_TRACE_OP_END(ZEND_SUB_SPEC_CONST_CONST)
58151 				HYBRID_BREAK();
58152 			HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
58153 				VM_TRACE(ZEND_MUL_SPEC_CONST_CONST)
58154 				ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58155 				VM_TRACE_OP_END(ZEND_MUL_SPEC_CONST_CONST)
58156 				HYBRID_BREAK();
58157 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
58158 				VM_TRACE(ZEND_DIV_SPEC_CONST_CONST)
58159 				ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58160 				VM_TRACE_OP_END(ZEND_DIV_SPEC_CONST_CONST)
58161 				HYBRID_BREAK();
58162 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
58163 				VM_TRACE(ZEND_MOD_SPEC_CONST_CONST)
58164 				ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58165 				VM_TRACE_OP_END(ZEND_MOD_SPEC_CONST_CONST)
58166 				HYBRID_BREAK();
58167 			HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
58168 				VM_TRACE(ZEND_SL_SPEC_CONST_CONST)
58169 				ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58170 				VM_TRACE_OP_END(ZEND_SL_SPEC_CONST_CONST)
58171 				HYBRID_BREAK();
58172 			HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
58173 				VM_TRACE(ZEND_SR_SPEC_CONST_CONST)
58174 				ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58175 				VM_TRACE_OP_END(ZEND_SR_SPEC_CONST_CONST)
58176 				HYBRID_BREAK();
58177 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
58178 				VM_TRACE(ZEND_POW_SPEC_CONST_CONST)
58179 				ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58180 				VM_TRACE_OP_END(ZEND_POW_SPEC_CONST_CONST)
58181 				HYBRID_BREAK();
58182 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
58183 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
58184 				ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58185 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
58186 				HYBRID_BREAK();
58187 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
58188 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
58189 				ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58190 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
58191 				HYBRID_BREAK();
58192 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
58193 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST)
58194 				ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58195 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CONST_CONST)
58196 				HYBRID_BREAK();
58197 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
58198 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
58199 				ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58200 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
58201 				HYBRID_BREAK();
58202 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
58203 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST)
58204 				ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58205 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_CONST_CONST)
58206 				HYBRID_BREAK();
58207 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
58208 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
58209 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58210 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
58211 				HYBRID_BREAK();
58212 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
58213 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST)
58214 				ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58215 				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CONST_CONST)
58216 				HYBRID_BREAK();
58217 			HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
58218 				VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST)
58219 				ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58220 				VM_TRACE_OP_END(ZEND_BW_OR_SPEC_CONST_CONST)
58221 				HYBRID_BREAK();
58222 			HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
58223 				VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST)
58224 				ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58225 				VM_TRACE_OP_END(ZEND_BW_AND_SPEC_CONST_CONST)
58226 				HYBRID_BREAK();
58227 			HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
58228 				VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST)
58229 				ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58230 				VM_TRACE_OP_END(ZEND_BW_XOR_SPEC_CONST_CONST)
58231 				HYBRID_BREAK();
58232 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
58233 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST)
58234 				ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58235 				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_CONST_CONST)
58236 				HYBRID_BREAK();
58237 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
58238 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
58239 				ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58240 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
58241 				HYBRID_BREAK();
58242 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
58243 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
58244 				ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58245 				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
58246 				HYBRID_BREAK();
58247 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
58248 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
58249 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58250 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
58251 				HYBRID_BREAK();
58252 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
58253 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
58254 				ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58255 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
58256 				HYBRID_BREAK();
58257 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
58258 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
58259 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58260 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
58261 				HYBRID_BREAK();
58262 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
58263 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
58264 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58265 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
58266 				HYBRID_BREAK();
58267 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST):
58268 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
58269 				ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58270 				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
58271 				HYBRID_BREAK();
58272 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
58273 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
58274 				ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58275 				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
58276 				HYBRID_BREAK();
58277 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
58278 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
58279 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58280 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
58281 				HYBRID_BREAK();
58282 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
58283 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
58284 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58285 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
58286 				HYBRID_BREAK();
58287 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
58288 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
58289 				ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58290 				VM_TRACE_OP_END(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
58291 				HYBRID_BREAK();
58292 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_CONST):
58293 				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_CONST)
58294 				ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58295 				VM_TRACE_OP_END(ZEND_SEND_VAL_SPEC_CONST_CONST)
58296 				HYBRID_BREAK();
58297 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST):
58298 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST)
58299 				ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58300 				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_CONST_CONST)
58301 				HYBRID_BREAK();
58302 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
58303 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
58304 				ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58305 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
58306 				HYBRID_BREAK();
58307 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
58308 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
58309 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58310 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
58311 				HYBRID_BREAK();
58312 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
58313 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
58314 				ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58315 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
58316 				HYBRID_BREAK();
58317 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
58318 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
58319 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58320 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
58321 				HYBRID_BREAK();
58322 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
58323 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
58324 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58325 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
58326 				HYBRID_BREAK();
58327 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST):
58328 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
58329 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58330 				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
58331 				HYBRID_BREAK();
58332 			HYBRID_CASE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST):
58333 				VM_TRACE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
58334 				ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58335 				VM_TRACE_OP_END(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
58336 				HYBRID_BREAK();
58337 			HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
58338 				VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
58339 				ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58340 				VM_TRACE_OP_END(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
58341 				HYBRID_BREAK();
58342 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
58343 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST)
58344 				ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58345 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CONST_CONST)
58346 				HYBRID_BREAK();
58347 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
58348 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
58349 				ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58350 				VM_TRACE_OP_END(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
58351 				HYBRID_BREAK();
58352 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
58353 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
58354 				ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58355 				VM_TRACE_OP_END(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
58356 				HYBRID_BREAK();
58357 			HYBRID_CASE(ZEND_MATCH_SPEC_CONST_CONST):
58358 				VM_TRACE(ZEND_MATCH_SPEC_CONST_CONST)
58359 				ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58360 				VM_TRACE_OP_END(ZEND_MATCH_SPEC_CONST_CONST)
58361 				HYBRID_BREAK();
58362 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
58363 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST)
58364 				ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58365 				VM_TRACE_OP_END(ZEND_IN_ARRAY_SPEC_CONST_CONST)
58366 				HYBRID_BREAK();
58367 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVARCV):
58368 				VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVARCV)
58369 				ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58370 				VM_TRACE_OP_END(ZEND_ADD_SPEC_CONST_TMPVARCV)
58371 				HYBRID_BREAK();
58372 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVARCV):
58373 				VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVARCV)
58374 				ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58375 				VM_TRACE_OP_END(ZEND_SUB_SPEC_CONST_TMPVARCV)
58376 				HYBRID_BREAK();
58377 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVARCV):
58378 				VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVARCV)
58379 				ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58380 				VM_TRACE_OP_END(ZEND_MOD_SPEC_CONST_TMPVARCV)
58381 				HYBRID_BREAK();
58382 			HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVARCV):
58383 				VM_TRACE(ZEND_SL_SPEC_CONST_TMPVARCV)
58384 				ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58385 				VM_TRACE_OP_END(ZEND_SL_SPEC_CONST_TMPVARCV)
58386 				HYBRID_BREAK();
58387 			HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVARCV):
58388 				VM_TRACE(ZEND_SR_SPEC_CONST_TMPVARCV)
58389 				ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58390 				VM_TRACE_OP_END(ZEND_SR_SPEC_CONST_TMPVARCV)
58391 				HYBRID_BREAK();
58392 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV):
58393 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
58394 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58395 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
58396 				HYBRID_BREAK();
58397 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ):
58398 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
58399 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58400 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
58401 				HYBRID_BREAK();
58402 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ):
58403 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
58404 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58405 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
58406 				HYBRID_BREAK();
58407 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV):
58408 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
58409 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58410 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
58411 				HYBRID_BREAK();
58412 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ):
58413 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
58414 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58415 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
58416 				HYBRID_BREAK();
58417 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ):
58418 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
58419 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58420 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
58421 				HYBRID_BREAK();
58422 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV):
58423 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV)
58424 				ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58425 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV)
58426 				HYBRID_BREAK();
58427 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
58428 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
58429 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58430 				VM_TRACE_OP_END(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
58431 				HYBRID_BREAK();
58432 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
58433 				VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
58434 				ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58435 				VM_TRACE_OP_END(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
58436 				HYBRID_BREAK();
58437 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
58438 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
58439 				ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58440 				VM_TRACE_OP_END(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
58441 				HYBRID_BREAK();
58442 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
58443 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
58444 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58445 				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
58446 				HYBRID_BREAK();
58447 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
58448 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
58449 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58450 				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
58451 				HYBRID_BREAK();
58452 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
58453 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
58454 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58455 				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
58456 				HYBRID_BREAK();
58457 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
58458 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
58459 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58460 				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
58461 				HYBRID_BREAK();
58462 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
58463 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
58464 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58465 				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
58466 				HYBRID_BREAK();
58467 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
58468 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
58469 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58470 				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
58471 				HYBRID_BREAK();
58472 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
58473 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
58474 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58475 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
58476 				HYBRID_BREAK();
58477 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
58478 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
58479 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58480 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
58481 				HYBRID_BREAK();
58482 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
58483 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
58484 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58485 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
58486 				HYBRID_BREAK();
58487 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
58488 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
58489 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58490 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
58491 				HYBRID_BREAK();
58492 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
58493 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
58494 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58495 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
58496 				HYBRID_BREAK();
58497 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
58498 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
58499 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58500 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
58501 				HYBRID_BREAK();
58502 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV):
58503 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
58504 				ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58505 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
58506 				HYBRID_BREAK();
58507 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
58508 				VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR)
58509 				ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58510 				VM_TRACE_OP_END(ZEND_DIV_SPEC_CONST_TMPVAR)
58511 				HYBRID_BREAK();
58512 			HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
58513 				VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR)
58514 				ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58515 				VM_TRACE_OP_END(ZEND_POW_SPEC_CONST_TMPVAR)
58516 				HYBRID_BREAK();
58517 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
58518 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR)
58519 				ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58520 				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CONST_TMPVAR)
58521 				HYBRID_BREAK();
58522 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
58523 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
58524 				ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58525 				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
58526 				HYBRID_BREAK();
58527 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
58528 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
58529 				ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58530 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
58531 				HYBRID_BREAK();
58532 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
58533 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
58534 				ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58535 				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
58536 				HYBRID_BREAK();
58537 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
58538 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
58539 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58540 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
58541 				HYBRID_BREAK();
58542 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
58543 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
58544 				ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58545 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
58546 				HYBRID_BREAK();
58547 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
58548 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
58549 				ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58550 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
58551 				HYBRID_BREAK();
58552 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
58553 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
58554 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58555 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
58556 				HYBRID_BREAK();
58557 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR):
58558 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
58559 				ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58560 				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
58561 				HYBRID_BREAK();
58562 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
58563 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
58564 				ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58565 				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
58566 				HYBRID_BREAK();
58567 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
58568 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
58569 				ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58570 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
58571 				HYBRID_BREAK();
58572 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
58573 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
58574 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58575 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
58576 				HYBRID_BREAK();
58577 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
58578 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
58579 				ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58580 				VM_TRACE_OP_END(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
58581 				HYBRID_BREAK();
58582 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
58583 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
58584 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58585 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
58586 				HYBRID_BREAK();
58587 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
58588 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
58589 				ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58590 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
58591 				HYBRID_BREAK();
58592 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
58593 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
58594 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58595 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
58596 				HYBRID_BREAK();
58597 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
58598 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
58599 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58600 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
58601 				HYBRID_BREAK();
58602 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR):
58603 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
58604 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58605 				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
58606 				HYBRID_BREAK();
58607 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMPVAR):
58608 				VM_TRACE(ZEND_YIELD_SPEC_CONST_TMPVAR)
58609 				ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58610 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CONST_TMPVAR)
58611 				HYBRID_BREAK();
58612 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
58613 				VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED)
58614 				ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58615 				VM_TRACE_OP_END(ZEND_FETCH_R_SPEC_CONST_UNUSED)
58616 				HYBRID_BREAK();
58617 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
58618 				VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED)
58619 				ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58620 				VM_TRACE_OP_END(ZEND_FETCH_W_SPEC_CONST_UNUSED)
58621 				HYBRID_BREAK();
58622 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
58623 				VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
58624 				ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58625 				VM_TRACE_OP_END(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
58626 				HYBRID_BREAK();
58627 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
58628 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
58629 				ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58630 				VM_TRACE_OP_END(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
58631 				HYBRID_BREAK();
58632 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
58633 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
58634 				ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58635 				VM_TRACE_OP_END(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
58636 				HYBRID_BREAK();
58637 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
58638 				VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
58639 				ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58640 				VM_TRACE_OP_END(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
58641 				HYBRID_BREAK();
58642 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
58643 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
58644 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58645 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
58646 				HYBRID_BREAK();
58647 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
58648 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
58649 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58650 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
58651 				HYBRID_BREAK();
58652 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
58653 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
58654 				ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58655 				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
58656 				HYBRID_BREAK();
58657 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_UNUSED):
58658 				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_UNUSED)
58659 				ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58660 				VM_TRACE_OP_END(ZEND_SEND_VAL_SPEC_CONST_UNUSED)
58661 				HYBRID_BREAK();
58662 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED):
58663 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED)
58664 				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58665 				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED)
58666 				HYBRID_BREAK();
58667 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK):
58668 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK)
58669 				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58670 				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK)
58671 				HYBRID_BREAK();
58672 			HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED):
58673 				VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED)
58674 				ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58675 				VM_TRACE_OP_END(ZEND_NEW_SPEC_CONST_UNUSED)
58676 				HYBRID_BREAK();
58677 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
58678 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
58679 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58680 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
58681 				HYBRID_BREAK();
58682 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
58683 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
58684 				ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58685 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
58686 				HYBRID_BREAK();
58687 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
58688 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
58689 				ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58690 				VM_TRACE_OP_END(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
58691 				HYBRID_BREAK();
58692 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
58693 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
58694 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58695 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
58696 				HYBRID_BREAK();
58697 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
58698 				VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED)
58699 				ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58700 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CONST_UNUSED)
58701 				HYBRID_BREAK();
58702 			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED):
58703 				VM_TRACE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED)
58704 				ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58705 				VM_TRACE_OP_END(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED)
58706 				HYBRID_BREAK();
58707 			HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
58708 				VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED)
58709 				ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58710 				VM_TRACE_OP_END(ZEND_COUNT_SPEC_CONST_UNUSED)
58711 				HYBRID_BREAK();
58712 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
58713 				VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
58714 				ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58715 				VM_TRACE_OP_END(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
58716 				HYBRID_BREAK();
58717 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
58718 				VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
58719 				ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58720 				VM_TRACE_OP_END(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
58721 				HYBRID_BREAK();
58722 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
58723 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
58724 				ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58725 				VM_TRACE_OP_END(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
58726 				HYBRID_BREAK();
58727 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
58728 				VM_TRACE(ZEND_DIV_SPEC_CONST_CV)
58729 				ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58730 				VM_TRACE_OP_END(ZEND_DIV_SPEC_CONST_CV)
58731 				HYBRID_BREAK();
58732 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
58733 				VM_TRACE(ZEND_POW_SPEC_CONST_CV)
58734 				ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58735 				VM_TRACE_OP_END(ZEND_POW_SPEC_CONST_CV)
58736 				HYBRID_BREAK();
58737 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
58738 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV)
58739 				ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58740 				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CONST_CV)
58741 				HYBRID_BREAK();
58742 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
58743 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV)
58744 				ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58745 				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CONST_CV)
58746 				HYBRID_BREAK();
58747 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
58748 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
58749 				ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58750 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
58751 				HYBRID_BREAK();
58752 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
58753 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
58754 				ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58755 				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
58756 				HYBRID_BREAK();
58757 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
58758 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
58759 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58760 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
58761 				HYBRID_BREAK();
58762 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
58763 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
58764 				ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58765 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
58766 				HYBRID_BREAK();
58767 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
58768 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
58769 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58770 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
58771 				HYBRID_BREAK();
58772 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
58773 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
58774 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58775 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
58776 				HYBRID_BREAK();
58777 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV):
58778 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
58779 				ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58780 				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
58781 				HYBRID_BREAK();
58782 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
58783 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV)
58784 				ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58785 				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CONST_CV)
58786 				HYBRID_BREAK();
58787 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
58788 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
58789 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58790 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
58791 				HYBRID_BREAK();
58792 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
58793 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
58794 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58795 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
58796 				HYBRID_BREAK();
58797 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
58798 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
58799 				ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58800 				VM_TRACE_OP_END(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
58801 				HYBRID_BREAK();
58802 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
58803 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
58804 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58805 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
58806 				HYBRID_BREAK();
58807 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
58808 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV)
58809 				ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58810 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CONST_CV)
58811 				HYBRID_BREAK();
58812 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
58813 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
58814 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58815 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
58816 				HYBRID_BREAK();
58817 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
58818 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
58819 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58820 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
58821 				HYBRID_BREAK();
58822 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV):
58823 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
58824 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58825 				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
58826 				HYBRID_BREAK();
58827 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
58828 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CV)
58829 				ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58830 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CONST_CV)
58831 				HYBRID_BREAK();
58832 			HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVARCV):
58833 				VM_TRACE(ZEND_BW_NOT_SPEC_TMPVARCV)
58834 				ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58835 				VM_TRACE_OP_END(ZEND_BW_NOT_SPEC_TMPVARCV)
58836 				HYBRID_BREAK();
58837 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
58838 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
58839 				ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58840 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
58841 				HYBRID_BREAK();
58842 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
58843 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
58844 				ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58845 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
58846 				HYBRID_BREAK();
58847 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
58848 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
58849 				ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58850 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
58851 				HYBRID_BREAK();
58852 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_CONST):
58853 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_CONST)
58854 				ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58855 				VM_TRACE_OP_END(ZEND_ADD_SPEC_TMPVARCV_CONST)
58856 				HYBRID_BREAK();
58857 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_CONST):
58858 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_CONST)
58859 				ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58860 				VM_TRACE_OP_END(ZEND_SUB_SPEC_TMPVARCV_CONST)
58861 				HYBRID_BREAK();
58862 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_CONST):
58863 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_CONST)
58864 				ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58865 				VM_TRACE_OP_END(ZEND_MUL_SPEC_TMPVARCV_CONST)
58866 				HYBRID_BREAK();
58867 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_CONST):
58868 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_CONST)
58869 				ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58870 				VM_TRACE_OP_END(ZEND_MOD_SPEC_TMPVARCV_CONST)
58871 				HYBRID_BREAK();
58872 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_CONST):
58873 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_CONST)
58874 				ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58875 				VM_TRACE_OP_END(ZEND_SL_SPEC_TMPVARCV_CONST)
58876 				HYBRID_BREAK();
58877 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_CONST):
58878 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_CONST)
58879 				ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58880 				VM_TRACE_OP_END(ZEND_SR_SPEC_TMPVARCV_CONST)
58881 				HYBRID_BREAK();
58882 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST):
58883 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
58884 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58885 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
58886 				HYBRID_BREAK();
58887 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ):
58888 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
58889 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58890 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
58891 				HYBRID_BREAK();
58892 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ):
58893 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
58894 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58895 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
58896 				HYBRID_BREAK();
58897 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST):
58898 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
58899 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58900 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
58901 				HYBRID_BREAK();
58902 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ):
58903 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
58904 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58905 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
58906 				HYBRID_BREAK();
58907 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ):
58908 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
58909 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58910 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
58911 				HYBRID_BREAK();
58912 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_CONST):
58913 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
58914 				ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58915 				VM_TRACE_OP_END(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
58916 				HYBRID_BREAK();
58917 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_CONST):
58918 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
58919 				ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58920 				VM_TRACE_OP_END(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
58921 				HYBRID_BREAK();
58922 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST):
58923 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
58924 				ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58925 				VM_TRACE_OP_END(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
58926 				HYBRID_BREAK();
58927 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST):
58928 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
58929 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58930 				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
58931 				HYBRID_BREAK();
58932 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST):
58933 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
58934 				ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58935 				VM_TRACE_OP_END(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
58936 				HYBRID_BREAK();
58937 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST):
58938 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
58939 				ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58940 				VM_TRACE_OP_END(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
58941 				HYBRID_BREAK();
58942 			HYBRID_CASE(ZEND_MATCH_SPEC_TMPVARCV_CONST):
58943 				VM_TRACE(ZEND_MATCH_SPEC_TMPVARCV_CONST)
58944 				ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58945 				VM_TRACE_OP_END(ZEND_MATCH_SPEC_TMPVARCV_CONST)
58946 				HYBRID_BREAK();
58947 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
58948 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
58949 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58950 				VM_TRACE_OP_END(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
58951 				HYBRID_BREAK();
58952 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST):
58953 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
58954 				ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58955 				VM_TRACE_OP_END(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
58956 				HYBRID_BREAK();
58957 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST):
58958 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
58959 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58960 				VM_TRACE_OP_END(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
58961 				HYBRID_BREAK();
58962 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
58963 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
58964 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58965 				VM_TRACE_OP_END(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
58966 				HYBRID_BREAK();
58967 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
58968 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
58969 				ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58970 				VM_TRACE_OP_END(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
58971 				HYBRID_BREAK();
58972 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
58973 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
58974 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58975 				VM_TRACE_OP_END(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
58976 				HYBRID_BREAK();
58977 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
58978 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
58979 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58980 				VM_TRACE_OP_END(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
58981 				HYBRID_BREAK();
58982 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST):
58983 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
58984 				ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58985 				VM_TRACE_OP_END(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
58986 				HYBRID_BREAK();
58987 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST):
58988 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
58989 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58990 				VM_TRACE_OP_END(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
58991 				HYBRID_BREAK();
58992 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST):
58993 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
58994 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58995 				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
58996 				HYBRID_BREAK();
58997 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
58998 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
58999 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59000 				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
59001 				HYBRID_BREAK();
59002 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
59003 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
59004 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59005 				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
59006 				HYBRID_BREAK();
59007 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
59008 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
59009 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59010 				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
59011 				HYBRID_BREAK();
59012 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
59013 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
59014 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59015 				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
59016 				HYBRID_BREAK();
59017 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
59018 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
59019 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59020 				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
59021 				HYBRID_BREAK();
59022 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST):
59023 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
59024 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59025 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
59026 				HYBRID_BREAK();
59027 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
59028 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
59029 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59030 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
59031 				HYBRID_BREAK();
59032 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
59033 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
59034 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59035 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
59036 				HYBRID_BREAK();
59037 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
59038 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
59039 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59040 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
59041 				HYBRID_BREAK();
59042 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
59043 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
59044 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59045 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
59046 				HYBRID_BREAK();
59047 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
59048 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
59049 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59050 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
59051 				HYBRID_BREAK();
59052 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
59053 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
59054 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59055 				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
59056 				HYBRID_BREAK();
59057 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
59058 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
59059 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59060 				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
59061 				HYBRID_BREAK();
59062 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
59063 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
59064 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59065 				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
59066 				HYBRID_BREAK();
59067 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
59068 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
59069 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59070 				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
59071 				HYBRID_BREAK();
59072 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
59073 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
59074 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59075 				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
59076 				HYBRID_BREAK();
59077 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
59078 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
59079 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59080 				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
59081 				HYBRID_BREAK();
59082 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
59083 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
59084 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59085 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
59086 				HYBRID_BREAK();
59087 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
59088 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
59089 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59090 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
59091 				HYBRID_BREAK();
59092 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
59093 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
59094 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59095 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
59096 				HYBRID_BREAK();
59097 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
59098 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
59099 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59100 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
59101 				HYBRID_BREAK();
59102 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
59103 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
59104 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59105 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
59106 				HYBRID_BREAK();
59107 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
59108 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
59109 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59110 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
59111 				HYBRID_BREAK();
59112 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV):
59113 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
59114 				ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59115 				VM_TRACE_OP_END(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
59116 				HYBRID_BREAK();
59117 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV):
59118 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
59119 				ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59120 				VM_TRACE_OP_END(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
59121 				HYBRID_BREAK();
59122 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV):
59123 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
59124 				ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59125 				VM_TRACE_OP_END(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
59126 				HYBRID_BREAK();
59127 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV):
59128 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
59129 				ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59130 				VM_TRACE_OP_END(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
59131 				HYBRID_BREAK();
59132 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV):
59133 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
59134 				ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59135 				VM_TRACE_OP_END(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
59136 				HYBRID_BREAK();
59137 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV):
59138 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
59139 				ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59140 				VM_TRACE_OP_END(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
59141 				HYBRID_BREAK();
59142 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV):
59143 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
59144 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59145 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
59146 				HYBRID_BREAK();
59147 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59148 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59149 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59150 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59151 				HYBRID_BREAK();
59152 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59153 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59154 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59155 				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59156 				HYBRID_BREAK();
59157 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV):
59158 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
59159 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59160 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
59161 				HYBRID_BREAK();
59162 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59163 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59164 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59165 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59166 				HYBRID_BREAK();
59167 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59168 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59169 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59170 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59171 				HYBRID_BREAK();
59172 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV):
59173 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
59174 				ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59175 				VM_TRACE_OP_END(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
59176 				HYBRID_BREAK();
59177 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV):
59178 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
59179 				ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59180 				VM_TRACE_OP_END(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
59181 				HYBRID_BREAK();
59182 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV):
59183 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
59184 				ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59185 				VM_TRACE_OP_END(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
59186 				HYBRID_BREAK();
59187 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
59188 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
59189 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59190 				VM_TRACE_OP_END(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
59191 				HYBRID_BREAK();
59192 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
59193 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
59194 				ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59195 				VM_TRACE_OP_END(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
59196 				HYBRID_BREAK();
59197 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
59198 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59199 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59200 				VM_TRACE_OP_END(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59201 				HYBRID_BREAK();
59202 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
59203 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
59204 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59205 				VM_TRACE_OP_END(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
59206 				HYBRID_BREAK();
59207 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
59208 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
59209 				ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59210 				VM_TRACE_OP_END(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
59211 				HYBRID_BREAK();
59212 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
59213 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59214 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59215 				VM_TRACE_OP_END(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59216 				HYBRID_BREAK();
59217 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
59218 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
59219 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59220 				VM_TRACE_OP_END(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
59221 				HYBRID_BREAK();
59222 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
59223 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
59224 				ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59225 				VM_TRACE_OP_END(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
59226 				HYBRID_BREAK();
59227 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
59228 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59229 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59230 				VM_TRACE_OP_END(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59231 				HYBRID_BREAK();
59232 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
59233 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
59234 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59235 				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
59236 				HYBRID_BREAK();
59237 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59238 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59239 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59240 				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59241 				HYBRID_BREAK();
59242 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59243 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59244 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59245 				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59246 				HYBRID_BREAK();
59247 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
59248 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59249 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59250 				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59251 				HYBRID_BREAK();
59252 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59253 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59254 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59255 				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59256 				HYBRID_BREAK();
59257 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59258 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59259 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59260 				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59261 				HYBRID_BREAK();
59262 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
59263 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
59264 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59265 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
59266 				HYBRID_BREAK();
59267 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59268 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59269 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59270 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59271 				HYBRID_BREAK();
59272 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59273 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59274 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59275 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59276 				HYBRID_BREAK();
59277 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
59278 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59279 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59280 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59281 				HYBRID_BREAK();
59282 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59283 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59284 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59285 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59286 				HYBRID_BREAK();
59287 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59288 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59289 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59290 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59291 				HYBRID_BREAK();
59292 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
59293 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
59294 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59295 				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
59296 				HYBRID_BREAK();
59297 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59298 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59299 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59300 				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59301 				HYBRID_BREAK();
59302 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59303 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59304 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59305 				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59306 				HYBRID_BREAK();
59307 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
59308 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59309 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59310 				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59311 				HYBRID_BREAK();
59312 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59313 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59314 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59315 				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59316 				HYBRID_BREAK();
59317 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59318 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59319 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59320 				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59321 				HYBRID_BREAK();
59322 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
59323 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
59324 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59325 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
59326 				HYBRID_BREAK();
59327 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59328 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59329 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59330 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59331 				HYBRID_BREAK();
59332 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59333 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59334 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59335 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59336 				HYBRID_BREAK();
59337 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
59338 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59339 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59340 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
59341 				HYBRID_BREAK();
59342 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
59343 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59344 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59345 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
59346 				HYBRID_BREAK();
59347 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
59348 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59349 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59350 				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
59351 				HYBRID_BREAK();
59352 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR):
59353 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
59354 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59355 				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
59356 				HYBRID_BREAK();
59357 			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED):
59358 				VM_TRACE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED)
59359 				ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59360 				VM_TRACE_OP_END(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED)
59361 				HYBRID_BREAK();
59362 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV):
59363 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
59364 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59365 				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
59366 				HYBRID_BREAK();
59367 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
59368 				VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR)
59369 				ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59370 				VM_TRACE_OP_END(ZEND_BOOL_NOT_SPEC_TMPVAR)
59371 				HYBRID_BREAK();
59372 			HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
59373 				VM_TRACE(ZEND_ECHO_SPEC_TMPVAR)
59374 				ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59375 				VM_TRACE_OP_END(ZEND_ECHO_SPEC_TMPVAR)
59376 				HYBRID_BREAK();
59377 			HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
59378 				VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR)
59379 				ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59380 				VM_TRACE_OP_END(ZEND_JMPZ_SPEC_TMPVAR)
59381 				HYBRID_BREAK();
59382 			HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
59383 				VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
59384 				ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59385 				VM_TRACE_OP_END(ZEND_JMPNZ_SPEC_TMPVAR)
59386 				HYBRID_BREAK();
59387 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
59388 				VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
59389 				ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59390 				VM_TRACE_OP_END(ZEND_JMPZ_EX_SPEC_TMPVAR)
59391 				HYBRID_BREAK();
59392 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
59393 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR)
59394 				ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59395 				VM_TRACE_OP_END(ZEND_JMPNZ_EX_SPEC_TMPVAR)
59396 				HYBRID_BREAK();
59397 			HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
59398 				VM_TRACE(ZEND_FREE_SPEC_TMPVAR)
59399 				ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59400 				VM_TRACE_OP_END(ZEND_FREE_SPEC_TMPVAR)
59401 				HYBRID_BREAK();
59402 			HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
59403 				VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR)
59404 				ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59405 				VM_TRACE_OP_END(ZEND_FE_FREE_SPEC_TMPVAR)
59406 				HYBRID_BREAK();
59407 			HYBRID_CASE(ZEND_THROW_SPEC_TMPVAR):
59408 				VM_TRACE(ZEND_THROW_SPEC_TMPVAR)
59409 				ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59410 				VM_TRACE_OP_END(ZEND_THROW_SPEC_TMPVAR)
59411 				HYBRID_BREAK();
59412 			HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
59413 				VM_TRACE(ZEND_BOOL_SPEC_TMPVAR)
59414 				ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59415 				VM_TRACE_OP_END(ZEND_BOOL_SPEC_TMPVAR)
59416 				HYBRID_BREAK();
59417 			HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
59418 				VM_TRACE(ZEND_CLONE_SPEC_TMPVAR)
59419 				ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59420 				VM_TRACE_OP_END(ZEND_CLONE_SPEC_TMPVAR)
59421 				HYBRID_BREAK();
59422 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
59423 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
59424 				ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59425 				VM_TRACE_OP_END(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
59426 				HYBRID_BREAK();
59427 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
59428 				VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
59429 				ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59430 				VM_TRACE_OP_END(ZEND_YIELD_FROM_SPEC_TMPVAR)
59431 				HYBRID_BREAK();
59432 			HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
59433 				VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
59434 				ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59435 				VM_TRACE_OP_END(ZEND_STRLEN_SPEC_TMPVAR)
59436 				HYBRID_BREAK();
59437 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR):
59438 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR)
59439 				ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59440 				VM_TRACE_OP_END(ZEND_TYPE_CHECK_SPEC_TMPVAR)
59441 				HYBRID_BREAK();
59442 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR):
59443 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR)
59444 				ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59445 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR)
59446 				HYBRID_BREAK();
59447 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
59448 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST)
59449 				ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59450 				VM_TRACE_OP_END(ZEND_DIV_SPEC_TMPVAR_CONST)
59451 				HYBRID_BREAK();
59452 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
59453 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST)
59454 				ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59455 				VM_TRACE_OP_END(ZEND_POW_SPEC_TMPVAR_CONST)
59456 				HYBRID_BREAK();
59457 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
59458 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST)
59459 				ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59460 				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_TMPVAR_CONST)
59461 				HYBRID_BREAK();
59462 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
59463 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
59464 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59465 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
59466 				HYBRID_BREAK();
59467 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
59468 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
59469 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59470 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
59471 				HYBRID_BREAK();
59472 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
59473 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
59474 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59475 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
59476 				HYBRID_BREAK();
59477 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
59478 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
59479 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59480 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
59481 				HYBRID_BREAK();
59482 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
59483 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
59484 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59485 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
59486 				HYBRID_BREAK();
59487 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
59488 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
59489 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59490 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
59491 				HYBRID_BREAK();
59492 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
59493 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
59494 				ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59495 				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
59496 				HYBRID_BREAK();
59497 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
59498 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
59499 				ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59500 				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
59501 				HYBRID_BREAK();
59502 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
59503 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
59504 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59505 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
59506 				HYBRID_BREAK();
59507 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
59508 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
59509 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59510 				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
59511 				HYBRID_BREAK();
59512 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST):
59513 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
59514 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59515 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
59516 				HYBRID_BREAK();
59517 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
59518 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
59519 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59520 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
59521 				HYBRID_BREAK();
59522 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
59523 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
59524 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59525 				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
59526 				HYBRID_BREAK();
59527 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
59528 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
59529 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59530 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
59531 				HYBRID_BREAK();
59532 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST):
59533 				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST)
59534 				ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59535 				VM_TRACE_OP_END(ZEND_SEND_VAL_SPEC_TMPVAR_CONST)
59536 				HYBRID_BREAK();
59537 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
59538 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST)
59539 				ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59540 				VM_TRACE_OP_END(ZEND_CASE_SPEC_TMPVAR_CONST)
59541 				HYBRID_BREAK();
59542 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
59543 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
59544 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59545 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
59546 				HYBRID_BREAK();
59547 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
59548 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
59549 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59550 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
59551 				HYBRID_BREAK();
59552 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST):
59553 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
59554 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59555 				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
59556 				HYBRID_BREAK();
59557 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
59558 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
59559 				ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59560 				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
59561 				HYBRID_BREAK();
59562 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
59563 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
59564 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59565 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
59566 				HYBRID_BREAK();
59567 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV):
59568 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
59569 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59570 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
59571 				HYBRID_BREAK();
59572 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
59573 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
59574 				ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59575 				VM_TRACE_OP_END(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
59576 				HYBRID_BREAK();
59577 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
59578 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR)
59579 				ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59580 				VM_TRACE_OP_END(ZEND_POW_SPEC_TMPVAR_TMPVAR)
59581 				HYBRID_BREAK();
59582 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
59583 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
59584 				ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59585 				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
59586 				HYBRID_BREAK();
59587 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
59588 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
59589 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59590 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
59591 				HYBRID_BREAK();
59592 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
59593 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
59594 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59595 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
59596 				HYBRID_BREAK();
59597 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
59598 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
59599 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59600 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
59601 				HYBRID_BREAK();
59602 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
59603 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
59604 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59605 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
59606 				HYBRID_BREAK();
59607 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
59608 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
59609 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59610 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
59611 				HYBRID_BREAK();
59612 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
59613 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
59614 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59615 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
59616 				HYBRID_BREAK();
59617 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
59618 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
59619 				ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59620 				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
59621 				HYBRID_BREAK();
59622 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
59623 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
59624 				ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59625 				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
59626 				HYBRID_BREAK();
59627 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
59628 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
59629 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59630 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
59631 				HYBRID_BREAK();
59632 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
59633 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
59634 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59635 				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
59636 				HYBRID_BREAK();
59637 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR):
59638 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
59639 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59640 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
59641 				HYBRID_BREAK();
59642 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
59643 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
59644 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59645 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
59646 				HYBRID_BREAK();
59647 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
59648 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
59649 				ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59650 				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
59651 				HYBRID_BREAK();
59652 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
59653 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
59654 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59655 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
59656 				HYBRID_BREAK();
59657 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
59658 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
59659 				ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59660 				VM_TRACE_OP_END(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
59661 				HYBRID_BREAK();
59662 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
59663 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
59664 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59665 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
59666 				HYBRID_BREAK();
59667 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
59668 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
59669 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59670 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
59671 				HYBRID_BREAK();
59672 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR):
59673 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
59674 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59675 				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
59676 				HYBRID_BREAK();
59677 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
59678 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
59679 				ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59680 				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
59681 				HYBRID_BREAK();
59682 			HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
59683 				VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
59684 				ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59685 				VM_TRACE_OP_END(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
59686 				HYBRID_BREAK();
59687 			HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
59688 				VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
59689 				ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59690 				VM_TRACE_OP_END(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
59691 				HYBRID_BREAK();
59692 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
59693 				VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
59694 				ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59695 				VM_TRACE_OP_END(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
59696 				HYBRID_BREAK();
59697 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
59698 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
59699 				ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59700 				VM_TRACE_OP_END(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
59701 				HYBRID_BREAK();
59702 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
59703 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
59704 				ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59705 				VM_TRACE_OP_END(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
59706 				HYBRID_BREAK();
59707 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
59708 				VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
59709 				ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59710 				VM_TRACE_OP_END(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
59711 				HYBRID_BREAK();
59712 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED):
59713 				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED)
59714 				ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59715 				VM_TRACE_OP_END(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED)
59716 				HYBRID_BREAK();
59717 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
59718 				VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
59719 				ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59720 				VM_TRACE_OP_END(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
59721 				HYBRID_BREAK();
59722 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
59723 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
59724 				ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59725 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
59726 				HYBRID_BREAK();
59727 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
59728 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
59729 				ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59730 				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
59731 				HYBRID_BREAK();
59732 			HYBRID_CASE(ZEND_COUNT_SPEC_TMPVAR_UNUSED):
59733 				VM_TRACE(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
59734 				ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59735 				VM_TRACE_OP_END(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
59736 				HYBRID_BREAK();
59737 			HYBRID_CASE(ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED):
59738 				VM_TRACE(ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED)
59739 				ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59740 				VM_TRACE_OP_END(ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED)
59741 				HYBRID_BREAK();
59742 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED):
59743 				VM_TRACE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
59744 				ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59745 				VM_TRACE_OP_END(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
59746 				HYBRID_BREAK();
59747 			HYBRID_CASE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED):
59748 				VM_TRACE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
59749 				ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59750 				VM_TRACE_OP_END(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
59751 				HYBRID_BREAK();
59752 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
59753 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV)
59754 				ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59755 				VM_TRACE_OP_END(ZEND_DIV_SPEC_TMPVAR_CV)
59756 				HYBRID_BREAK();
59757 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
59758 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV)
59759 				ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59760 				VM_TRACE_OP_END(ZEND_POW_SPEC_TMPVAR_CV)
59761 				HYBRID_BREAK();
59762 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
59763 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV)
59764 				ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59765 				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_TMPVAR_CV)
59766 				HYBRID_BREAK();
59767 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
59768 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
59769 				ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59770 				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
59771 				HYBRID_BREAK();
59772 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
59773 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
59774 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59775 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
59776 				HYBRID_BREAK();
59777 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
59778 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
59779 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59780 				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
59781 				HYBRID_BREAK();
59782 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV):
59783 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
59784 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59785 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
59786 				HYBRID_BREAK();
59787 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
59788 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
59789 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59790 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
59791 				HYBRID_BREAK();
59792 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
59793 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
59794 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59795 				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
59796 				HYBRID_BREAK();
59797 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
59798 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
59799 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59800 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
59801 				HYBRID_BREAK();
59802 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
59803 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV)
59804 				ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59805 				VM_TRACE_OP_END(ZEND_CASE_SPEC_TMPVAR_CV)
59806 				HYBRID_BREAK();
59807 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
59808 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
59809 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59810 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
59811 				HYBRID_BREAK();
59812 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
59813 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
59814 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59815 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
59816 				HYBRID_BREAK();
59817 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV):
59818 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
59819 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59820 				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
59821 				HYBRID_BREAK();
59822 			HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
59823 				VM_TRACE(ZEND_RETURN_SPEC_TMP)
59824 {
59825 	USE_OPLINE
59826 	zval *retval_ptr;
59827 	zval *return_value;
59828 
59829 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
59830 	return_value = EX(return_value);
59831 
59832 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
59833 		SAVE_OPLINE();
59834 		retval_ptr = ZVAL_UNDEFINED_OP1();
59835 		if (return_value) {
59836 			ZVAL_NULL(return_value);
59837 		}
59838 	} else if (!return_value) {
59839 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
59840 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
59841 				SAVE_OPLINE();
59842 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
59843 			}
59844 		}
59845 	} else {
59846 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
59847 			ZVAL_COPY_VALUE(return_value, retval_ptr);
59848 			if (IS_TMP_VAR == IS_CONST) {
59849 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
59850 					Z_ADDREF_P(return_value);
59851 				}
59852 			}
59853 		} else if (IS_TMP_VAR == IS_CV) {
59854 			do {
59855 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59856 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
59857 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
59858 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
59859 							ZVAL_COPY_VALUE(return_value, retval_ptr);
59860 							if (GC_MAY_LEAK(ref)) {
59861 								SAVE_OPLINE();
59862 								gc_possible_root(ref);
59863 							}
59864 							ZVAL_NULL(retval_ptr);
59865 							break;
59866 						} else {
59867 							Z_ADDREF_P(retval_ptr);
59868 						}
59869 					} else {
59870 						retval_ptr = Z_REFVAL_P(retval_ptr);
59871 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59872 							Z_ADDREF_P(retval_ptr);
59873 						}
59874 					}
59875 				}
59876 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59877 			} while (0);
59878 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
59879 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
59880 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
59881 
59882 				retval_ptr = Z_REFVAL_P(retval_ptr);
59883 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59884 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
59885 					efree_size(ref, sizeof(zend_reference));
59886 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59887 					Z_ADDREF_P(retval_ptr);
59888 				}
59889 			} else {
59890 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59891 			}
59892 		}
59893 	}
59894 
59895 
59896 
59897 	goto zend_leave_helper_SPEC_LABEL;
59898 }
59899 
59900 				VM_TRACE_OP_END(ZEND_RETURN_SPEC_TMP)
59901 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
59902 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
59903 				ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59904 				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_TMP)
59905 				HYBRID_BREAK();
59906 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
59907 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
59908 				ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59909 				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_TMP)
59910 				HYBRID_BREAK();
59911 			HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
59912 				VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
59913 				ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59914 				VM_TRACE_OP_END(ZEND_SEND_USER_SPEC_TMP)
59915 				HYBRID_BREAK();
59916 			HYBRID_CASE(ZEND_CAST_SPEC_TMP):
59917 				VM_TRACE(ZEND_CAST_SPEC_TMP)
59918 				ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59919 				VM_TRACE_OP_END(ZEND_CAST_SPEC_TMP)
59920 				HYBRID_BREAK();
59921 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
59922 				VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP)
59923 				ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59924 				VM_TRACE_OP_END(ZEND_FE_RESET_R_SPEC_TMP)
59925 				HYBRID_BREAK();
59926 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
59927 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP)
59928 				ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59929 				VM_TRACE_OP_END(ZEND_FE_RESET_RW_SPEC_TMP)
59930 				HYBRID_BREAK();
59931 			HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
59932 				VM_TRACE(ZEND_END_SILENCE_SPEC_TMP)
59933 				ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59934 				VM_TRACE_OP_END(ZEND_END_SILENCE_SPEC_TMP)
59935 				HYBRID_BREAK();
59936 			HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
59937 				VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
59938 				ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59939 				VM_TRACE_OP_END(ZEND_JMP_SET_SPEC_TMP)
59940 				HYBRID_BREAK();
59941 			HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
59942 				VM_TRACE(ZEND_COALESCE_SPEC_TMP)
59943 				ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59944 				VM_TRACE_OP_END(ZEND_COALESCE_SPEC_TMP)
59945 				HYBRID_BREAK();
59946 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMP):
59947 				VM_TRACE(ZEND_JMP_NULL_SPEC_TMP)
59948 				ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59949 				VM_TRACE_OP_END(ZEND_JMP_NULL_SPEC_TMP)
59950 				HYBRID_BREAK();
59951 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
59952 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
59953 				ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59954 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_SPEC_TMP)
59955 				HYBRID_BREAK();
59956 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
59957 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
59958 				ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59959 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
59960 				HYBRID_BREAK();
59961 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CONST):
59962 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CONST)
59963 				ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59964 				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_TMP_CONST)
59965 				HYBRID_BREAK();
59966 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
59967 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
59968 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59969 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
59970 				HYBRID_BREAK();
59971 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
59972 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
59973 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59974 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
59975 				HYBRID_BREAK();
59976 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
59977 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
59978 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59979 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
59980 				HYBRID_BREAK();
59981 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
59982 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
59983 				ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59984 				VM_TRACE_OP_END(ZEND_ROPE_ADD_SPEC_TMP_CONST)
59985 				HYBRID_BREAK();
59986 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
59987 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST)
59988 				ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59989 				VM_TRACE_OP_END(ZEND_ROPE_END_SPEC_TMP_CONST)
59990 				HYBRID_BREAK();
59991 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST):
59992 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST)
59993 				ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59994 				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_TMP_CONST)
59995 				HYBRID_BREAK();
59996 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
59997 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
59998 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59999 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
60000 				HYBRID_BREAK();
60001 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
60002 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
60003 				ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60004 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
60005 				HYBRID_BREAK();
60006 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
60007 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST)
60008 				ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60009 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_TMP_CONST)
60010 				HYBRID_BREAK();
60011 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
60012 				VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST)
60013 				ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60014 				VM_TRACE_OP_END(ZEND_IN_ARRAY_SPEC_TMP_CONST)
60015 				HYBRID_BREAK();
60016 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
60017 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
60018 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60019 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
60020 				HYBRID_BREAK();
60021 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
60022 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
60023 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60024 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
60025 				HYBRID_BREAK();
60026 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
60027 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
60028 				ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60029 				VM_TRACE_OP_END(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
60030 				HYBRID_BREAK();
60031 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
60032 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
60033 				ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60034 				VM_TRACE_OP_END(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
60035 				HYBRID_BREAK();
60036 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
60037 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
60038 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60039 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
60040 				HYBRID_BREAK();
60041 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
60042 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
60043 				ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60044 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
60045 				HYBRID_BREAK();
60046 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMPVAR):
60047 				VM_TRACE(ZEND_YIELD_SPEC_TMP_TMPVAR)
60048 				ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60049 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_TMP_TMPVAR)
60050 				HYBRID_BREAK();
60051 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
60052 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
60053 				ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60054 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
60055 				HYBRID_BREAK();
60056 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_TMP):
60057 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_TMP)
60058 				ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60059 				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_TMP_TMP)
60060 				HYBRID_BREAK();
60061 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
60062 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
60063 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60064 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
60065 				HYBRID_BREAK();
60066 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_VAR):
60067 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_VAR)
60068 				ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60069 				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_TMP_VAR)
60070 				HYBRID_BREAK();
60071 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
60072 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
60073 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60074 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
60075 				HYBRID_BREAK();
60076 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
60077 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
60078 				ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60079 				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
60080 				HYBRID_BREAK();
60081 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED):
60082 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED)
60083 				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60084 				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED)
60085 				HYBRID_BREAK();
60086 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK):
60087 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK)
60088 				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60089 				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK)
60090 				HYBRID_BREAK();
60091 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
60092 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
60093 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60094 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
60095 				HYBRID_BREAK();
60096 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
60097 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
60098 				ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60099 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
60100 				HYBRID_BREAK();
60101 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
60102 				VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED)
60103 				ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60104 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_TMP_UNUSED)
60105 				HYBRID_BREAK();
60106 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
60107 				VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
60108 				ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60109 				VM_TRACE_OP_END(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
60110 				HYBRID_BREAK();
60111 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CV):
60112 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CV)
60113 				ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60114 				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_TMP_CV)
60115 				HYBRID_BREAK();
60116 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
60117 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
60118 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60119 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
60120 				HYBRID_BREAK();
60121 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
60122 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
60123 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60124 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
60125 				HYBRID_BREAK();
60126 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
60127 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
60128 				ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60129 				VM_TRACE_OP_END(ZEND_ROPE_ADD_SPEC_TMP_CV)
60130 				HYBRID_BREAK();
60131 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
60132 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV)
60133 				ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60134 				VM_TRACE_OP_END(ZEND_ROPE_END_SPEC_TMP_CV)
60135 				HYBRID_BREAK();
60136 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
60137 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
60138 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60139 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
60140 				HYBRID_BREAK();
60141 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
60142 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV)
60143 				ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60144 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_TMP_CV)
60145 				HYBRID_BREAK();
60146 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
60147 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CV)
60148 				ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60149 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_TMP_CV)
60150 				HYBRID_BREAK();
60151 			HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
60152 				VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
60153 				ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60154 				VM_TRACE_OP_END(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
60155 				HYBRID_BREAK();
60156 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
60157 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
60158 				ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60159 				VM_TRACE_OP_END(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
60160 				HYBRID_BREAK();
60161 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
60162 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
60163 				ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60164 				VM_TRACE_OP_END(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
60165 				HYBRID_BREAK();
60166 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
60167 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
60168 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60169 				VM_TRACE_OP_END(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
60170 				HYBRID_BREAK();
60171 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
60172 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
60173 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60174 				VM_TRACE_OP_END(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
60175 				HYBRID_BREAK();
60176 			HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
60177 				VM_TRACE(ZEND_POST_INC_SPEC_VAR)
60178 				ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60179 				VM_TRACE_OP_END(ZEND_POST_INC_SPEC_VAR)
60180 				HYBRID_BREAK();
60181 			HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
60182 				VM_TRACE(ZEND_POST_DEC_SPEC_VAR)
60183 				ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60184 				VM_TRACE_OP_END(ZEND_POST_DEC_SPEC_VAR)
60185 				HYBRID_BREAK();
60186 			HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
60187 				VM_TRACE(ZEND_RETURN_SPEC_VAR)
60188 {
60189 	USE_OPLINE
60190 	zval *retval_ptr;
60191 	zval *return_value;
60192 
60193 	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
60194 	return_value = EX(return_value);
60195 
60196 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
60197 		SAVE_OPLINE();
60198 		retval_ptr = ZVAL_UNDEFINED_OP1();
60199 		if (return_value) {
60200 			ZVAL_NULL(return_value);
60201 		}
60202 	} else if (!return_value) {
60203 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
60204 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
60205 				SAVE_OPLINE();
60206 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
60207 			}
60208 		}
60209 	} else {
60210 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
60211 			ZVAL_COPY_VALUE(return_value, retval_ptr);
60212 			if (IS_VAR == IS_CONST) {
60213 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
60214 					Z_ADDREF_P(return_value);
60215 				}
60216 			}
60217 		} else if (IS_VAR == IS_CV) {
60218 			do {
60219 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
60220 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
60221 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
60222 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
60223 							ZVAL_COPY_VALUE(return_value, retval_ptr);
60224 							if (GC_MAY_LEAK(ref)) {
60225 								SAVE_OPLINE();
60226 								gc_possible_root(ref);
60227 							}
60228 							ZVAL_NULL(retval_ptr);
60229 							break;
60230 						} else {
60231 							Z_ADDREF_P(retval_ptr);
60232 						}
60233 					} else {
60234 						retval_ptr = Z_REFVAL_P(retval_ptr);
60235 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
60236 							Z_ADDREF_P(retval_ptr);
60237 						}
60238 					}
60239 				}
60240 				ZVAL_COPY_VALUE(return_value, retval_ptr);
60241 			} while (0);
60242 		} else /* if (IS_VAR == IS_VAR) */ {
60243 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
60244 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
60245 
60246 				retval_ptr = Z_REFVAL_P(retval_ptr);
60247 				ZVAL_COPY_VALUE(return_value, retval_ptr);
60248 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
60249 					efree_size(ref, sizeof(zend_reference));
60250 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
60251 					Z_ADDREF_P(retval_ptr);
60252 				}
60253 			} else {
60254 				ZVAL_COPY_VALUE(return_value, retval_ptr);
60255 			}
60256 		}
60257 	}
60258 
60259 
60260 
60261 	goto zend_leave_helper_SPEC_LABEL;
60262 }
60263 
60264 				VM_TRACE_OP_END(ZEND_RETURN_SPEC_VAR)
60265 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
60266 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
60267 				ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60268 				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_VAR)
60269 				HYBRID_BREAK();
60270 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
60271 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
60272 				ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60273 				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_VAR)
60274 				HYBRID_BREAK();
60275 			HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
60276 				VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
60277 				ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60278 				VM_TRACE_OP_END(ZEND_SEND_USER_SPEC_VAR)
60279 				HYBRID_BREAK();
60280 			HYBRID_CASE(ZEND_CAST_SPEC_VAR):
60281 				VM_TRACE(ZEND_CAST_SPEC_VAR)
60282 				ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60283 				VM_TRACE_OP_END(ZEND_CAST_SPEC_VAR)
60284 				HYBRID_BREAK();
60285 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
60286 				VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR)
60287 				ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60288 				VM_TRACE_OP_END(ZEND_FE_RESET_R_SPEC_VAR)
60289 				HYBRID_BREAK();
60290 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
60291 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR)
60292 				ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60293 				VM_TRACE_OP_END(ZEND_FE_RESET_RW_SPEC_VAR)
60294 				HYBRID_BREAK();
60295 			HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
60296 				VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR)
60297 				ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60298 				VM_TRACE_OP_END(ZEND_FE_FETCH_R_SPEC_VAR)
60299 				HYBRID_BREAK();
60300 			HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
60301 				VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR)
60302 				ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60303 				VM_TRACE_OP_END(ZEND_FE_FETCH_RW_SPEC_VAR)
60304 				HYBRID_BREAK();
60305 			HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
60306 				VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
60307 				ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60308 				VM_TRACE_OP_END(ZEND_JMP_SET_SPEC_VAR)
60309 				HYBRID_BREAK();
60310 			HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
60311 				VM_TRACE(ZEND_COALESCE_SPEC_VAR)
60312 				ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60313 				VM_TRACE_OP_END(ZEND_COALESCE_SPEC_VAR)
60314 				HYBRID_BREAK();
60315 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_VAR):
60316 				VM_TRACE(ZEND_JMP_NULL_SPEC_VAR)
60317 				ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60318 				VM_TRACE_OP_END(ZEND_JMP_NULL_SPEC_VAR)
60319 				HYBRID_BREAK();
60320 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
60321 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
60322 				ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60323 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_SPEC_VAR)
60324 				HYBRID_BREAK();
60325 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
60326 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
60327 				ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60328 				VM_TRACE_OP_END(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
60329 				HYBRID_BREAK();
60330 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
60331 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
60332 				ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60333 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
60334 				HYBRID_BREAK();
60335 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CONST):
60336 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CONST)
60337 				ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60338 				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_VAR_CONST)
60339 				HYBRID_BREAK();
60340 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
60341 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
60342 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60343 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
60344 				HYBRID_BREAK();
60345 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST):
60346 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
60347 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60348 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
60349 				HYBRID_BREAK();
60350 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST):
60351 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
60352 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60353 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
60354 				HYBRID_BREAK();
60355 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CONST):
60356 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
60357 				ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60358 				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
60359 				HYBRID_BREAK();
60360 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
60361 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
60362 				ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60363 				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
60364 				HYBRID_BREAK();
60365 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
60366 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
60367 				ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60368 				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
60369 				HYBRID_BREAK();
60370 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
60371 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
60372 				ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60373 				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
60374 				HYBRID_BREAK();
60375 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
60376 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
60377 				ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60378 				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
60379 				HYBRID_BREAK();
60380 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
60381 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
60382 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60383 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
60384 				HYBRID_BREAK();
60385 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
60386 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
60387 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60388 				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
60389 				HYBRID_BREAK();
60390 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
60391 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
60392 				ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60393 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
60394 				HYBRID_BREAK();
60395 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
60396 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
60397 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60398 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
60399 				HYBRID_BREAK();
60400 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
60401 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
60402 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60403 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
60404 				HYBRID_BREAK();
60405 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
60406 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
60407 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60408 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
60409 				HYBRID_BREAK();
60410 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST):
60411 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
60412 				ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60413 				VM_TRACE_OP_END(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
60414 				HYBRID_BREAK();
60415 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
60416 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
60417 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60418 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
60419 				HYBRID_BREAK();
60420 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
60421 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
60422 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60423 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
60424 				HYBRID_BREAK();
60425 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
60426 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
60427 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60428 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
60429 				HYBRID_BREAK();
60430 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
60431 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
60432 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60433 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
60434 				HYBRID_BREAK();
60435 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
60436 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
60437 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60438 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
60439 				HYBRID_BREAK();
60440 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
60441 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
60442 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60443 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
60444 				HYBRID_BREAK();
60445 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
60446 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
60447 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60448 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
60449 				HYBRID_BREAK();
60450 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
60451 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
60452 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60453 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
60454 				HYBRID_BREAK();
60455 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
60456 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
60457 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60458 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
60459 				HYBRID_BREAK();
60460 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
60461 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
60462 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60463 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
60464 				HYBRID_BREAK();
60465 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR):
60466 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
60467 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60468 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
60469 				HYBRID_BREAK();
60470 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV):
60471 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
60472 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60473 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
60474 				HYBRID_BREAK();
60475 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
60476 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
60477 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60478 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
60479 				HYBRID_BREAK();
60480 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_CONST):
60481 				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_CONST)
60482 				ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60483 				VM_TRACE_OP_END(ZEND_SEND_VAR_SPEC_VAR_CONST)
60484 				HYBRID_BREAK();
60485 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST):
60486 				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST)
60487 				ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60488 				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST)
60489 				HYBRID_BREAK();
60490 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST):
60491 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST)
60492 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60493 				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST)
60494 				HYBRID_BREAK();
60495 			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_CONST):
60496 				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_CONST)
60497 				ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60498 				VM_TRACE_OP_END(ZEND_SEND_REF_SPEC_VAR_CONST)
60499 				HYBRID_BREAK();
60500 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST):
60501 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST)
60502 				ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60503 				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_VAR_CONST)
60504 				HYBRID_BREAK();
60505 			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST):
60506 				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST)
60507 				ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60508 				VM_TRACE_OP_END(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST)
60509 				HYBRID_BREAK();
60510 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
60511 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
60512 				ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60513 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
60514 				HYBRID_BREAK();
60515 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
60516 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
60517 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60518 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
60519 				HYBRID_BREAK();
60520 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
60521 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
60522 				ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60523 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
60524 				HYBRID_BREAK();
60525 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
60526 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST)
60527 				ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60528 				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_VAR_CONST)
60529 				HYBRID_BREAK();
60530 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
60531 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
60532 				ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60533 				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
60534 				HYBRID_BREAK();
60535 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
60536 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST)
60537 				ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60538 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_VAR_CONST)
60539 				HYBRID_BREAK();
60540 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
60541 				VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
60542 				ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60543 				VM_TRACE_OP_END(ZEND_IN_ARRAY_SPEC_VAR_CONST)
60544 				HYBRID_BREAK();
60545 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV):
60546 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV)
60547 				ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60548 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV)
60549 				HYBRID_BREAK();
60550 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR):
60551 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
60552 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60553 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
60554 				HYBRID_BREAK();
60555 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR):
60556 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
60557 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60558 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
60559 				HYBRID_BREAK();
60560 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR):
60561 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
60562 				ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60563 				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
60564 				HYBRID_BREAK();
60565 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
60566 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
60567 				ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60568 				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
60569 				HYBRID_BREAK();
60570 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
60571 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
60572 				ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60573 				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
60574 				HYBRID_BREAK();
60575 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
60576 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
60577 				ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60578 				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
60579 				HYBRID_BREAK();
60580 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
60581 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
60582 				ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60583 				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
60584 				HYBRID_BREAK();
60585 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
60586 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
60587 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60588 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
60589 				HYBRID_BREAK();
60590 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
60591 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
60592 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60593 				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
60594 				HYBRID_BREAK();
60595 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
60596 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
60597 				ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60598 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
60599 				HYBRID_BREAK();
60600 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
60601 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
60602 				ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60603 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
60604 				HYBRID_BREAK();
60605 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
60606 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
60607 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60608 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
60609 				HYBRID_BREAK();
60610 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
60611 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
60612 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60613 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
60614 				HYBRID_BREAK();
60615 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR):
60616 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
60617 				ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60618 				VM_TRACE_OP_END(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
60619 				HYBRID_BREAK();
60620 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
60621 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
60622 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60623 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
60624 				HYBRID_BREAK();
60625 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
60626 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
60627 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60628 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
60629 				HYBRID_BREAK();
60630 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
60631 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
60632 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60633 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
60634 				HYBRID_BREAK();
60635 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
60636 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
60637 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60638 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
60639 				HYBRID_BREAK();
60640 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
60641 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
60642 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60643 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
60644 				HYBRID_BREAK();
60645 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
60646 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
60647 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60648 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
60649 				HYBRID_BREAK();
60650 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
60651 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
60652 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60653 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
60654 				HYBRID_BREAK();
60655 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
60656 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
60657 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60658 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
60659 				HYBRID_BREAK();
60660 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR):
60661 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
60662 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60663 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
60664 				HYBRID_BREAK();
60665 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV):
60666 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
60667 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60668 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
60669 				HYBRID_BREAK();
60670 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
60671 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
60672 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60673 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
60674 				HYBRID_BREAK();
60675 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
60676 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
60677 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60678 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
60679 				HYBRID_BREAK();
60680 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
60681 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
60682 				ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60683 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
60684 				HYBRID_BREAK();
60685 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
60686 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
60687 				ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60688 				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
60689 				HYBRID_BREAK();
60690 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
60691 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
60692 				ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60693 				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
60694 				HYBRID_BREAK();
60695 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMPVAR):
60696 				VM_TRACE(ZEND_YIELD_SPEC_VAR_TMPVAR)
60697 				ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60698 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_VAR_TMPVAR)
60699 				HYBRID_BREAK();
60700 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
60701 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
60702 				ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60703 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
60704 				HYBRID_BREAK();
60705 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_TMP):
60706 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_TMP)
60707 				ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60708 				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_VAR_TMP)
60709 				HYBRID_BREAK();
60710 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
60711 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
60712 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60713 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
60714 				HYBRID_BREAK();
60715 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
60716 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
60717 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60718 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
60719 				HYBRID_BREAK();
60720 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
60721 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
60722 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60723 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
60724 				HYBRID_BREAK();
60725 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
60726 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
60727 				ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60728 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
60729 				HYBRID_BREAK();
60730 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_VAR):
60731 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_VAR)
60732 				ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60733 				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_VAR_VAR)
60734 				HYBRID_BREAK();
60735 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
60736 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
60737 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60738 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
60739 				HYBRID_BREAK();
60740 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
60741 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
60742 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60743 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
60744 				HYBRID_BREAK();
60745 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
60746 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
60747 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60748 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
60749 				HYBRID_BREAK();
60750 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
60751 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
60752 				ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60753 				VM_TRACE_OP_END(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
60754 				HYBRID_BREAK();
60755 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED):
60756 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
60757 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60758 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
60759 				HYBRID_BREAK();
60760 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
60761 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
60762 				ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60763 				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
60764 				HYBRID_BREAK();
60765 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
60766 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
60767 				ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60768 				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
60769 				HYBRID_BREAK();
60770 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
60771 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
60772 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60773 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
60774 				HYBRID_BREAK();
60775 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
60776 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
60777 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60778 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
60779 				HYBRID_BREAK();
60780 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
60781 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
60782 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60783 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
60784 				HYBRID_BREAK();
60785 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
60786 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
60787 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60788 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
60789 				HYBRID_BREAK();
60790 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
60791 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
60792 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60793 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
60794 				HYBRID_BREAK();
60795 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
60796 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
60797 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60798 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
60799 				HYBRID_BREAK();
60800 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
60801 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
60802 				ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60803 				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
60804 				HYBRID_BREAK();
60805 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_UNUSED):
60806 				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_UNUSED)
60807 				ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60808 				VM_TRACE_OP_END(ZEND_SEND_VAR_SPEC_VAR_UNUSED)
60809 				HYBRID_BREAK();
60810 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED):
60811 				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED)
60812 				ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60813 				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED)
60814 				HYBRID_BREAK();
60815 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED):
60816 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED)
60817 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60818 				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED)
60819 				HYBRID_BREAK();
60820 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK):
60821 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK)
60822 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60823 				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK)
60824 				HYBRID_BREAK();
60825 			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_UNUSED):
60826 				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_UNUSED)
60827 				ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60828 				VM_TRACE_OP_END(ZEND_SEND_REF_SPEC_VAR_UNUSED)
60829 				HYBRID_BREAK();
60830 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED):
60831 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED)
60832 				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60833 				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED)
60834 				HYBRID_BREAK();
60835 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK):
60836 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK)
60837 				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60838 				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK)
60839 				HYBRID_BREAK();
60840 			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED):
60841 				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED)
60842 				ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60843 				VM_TRACE_OP_END(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED)
60844 				HYBRID_BREAK();
60845 			HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED):
60846 				VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED)
60847 				ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60848 				VM_TRACE_OP_END(ZEND_NEW_SPEC_VAR_UNUSED)
60849 				HYBRID_BREAK();
60850 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
60851 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
60852 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60853 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
60854 				HYBRID_BREAK();
60855 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
60856 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
60857 				ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60858 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
60859 				HYBRID_BREAK();
60860 			HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
60861 				VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED)
60862 				ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60863 				VM_TRACE_OP_END(ZEND_SEPARATE_SPEC_VAR_UNUSED)
60864 				HYBRID_BREAK();
60865 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
60866 				VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED)
60867 				ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60868 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_VAR_UNUSED)
60869 				HYBRID_BREAK();
60870 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
60871 				VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
60872 				ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60873 				VM_TRACE_OP_END(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
60874 				HYBRID_BREAK();
60875 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
60876 				VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
60877 				ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60878 				VM_TRACE_OP_END(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
60879 				HYBRID_BREAK();
60880 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED):
60881 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED)
60882 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60883 				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED)
60884 				HYBRID_BREAK();
60885 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CV):
60886 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CV)
60887 				ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60888 				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_VAR_CV)
60889 				HYBRID_BREAK();
60890 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV):
60891 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
60892 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60893 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
60894 				HYBRID_BREAK();
60895 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV):
60896 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
60897 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60898 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
60899 				HYBRID_BREAK();
60900 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CV):
60901 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CV)
60902 				ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60903 				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_VAR_CV)
60904 				HYBRID_BREAK();
60905 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
60906 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
60907 				ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60908 				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
60909 				HYBRID_BREAK();
60910 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
60911 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
60912 				ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60913 				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
60914 				HYBRID_BREAK();
60915 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
60916 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
60917 				ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60918 				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
60919 				HYBRID_BREAK();
60920 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
60921 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
60922 				ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60923 				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
60924 				HYBRID_BREAK();
60925 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
60926 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
60927 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60928 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
60929 				HYBRID_BREAK();
60930 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
60931 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
60932 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60933 				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
60934 				HYBRID_BREAK();
60935 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
60936 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
60937 				ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60938 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
60939 				HYBRID_BREAK();
60940 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
60941 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
60942 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60943 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
60944 				HYBRID_BREAK();
60945 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
60946 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
60947 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60948 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
60949 				HYBRID_BREAK();
60950 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
60951 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
60952 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60953 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
60954 				HYBRID_BREAK();
60955 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV):
60956 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
60957 				ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60958 				VM_TRACE_OP_END(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
60959 				HYBRID_BREAK();
60960 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
60961 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
60962 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60963 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
60964 				HYBRID_BREAK();
60965 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
60966 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
60967 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60968 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
60969 				HYBRID_BREAK();
60970 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
60971 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
60972 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60973 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
60974 				HYBRID_BREAK();
60975 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
60976 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
60977 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60978 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
60979 				HYBRID_BREAK();
60980 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
60981 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
60982 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60983 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
60984 				HYBRID_BREAK();
60985 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
60986 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
60987 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60988 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
60989 				HYBRID_BREAK();
60990 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
60991 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
60992 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60993 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
60994 				HYBRID_BREAK();
60995 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
60996 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
60997 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60998 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
60999 				HYBRID_BREAK();
61000 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
61001 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
61002 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61003 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
61004 				HYBRID_BREAK();
61005 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
61006 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
61007 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61008 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
61009 				HYBRID_BREAK();
61010 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
61011 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
61012 				ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61013 				VM_TRACE_OP_END(ZEND_ASSIGN_REF_SPEC_VAR_CV)
61014 				HYBRID_BREAK();
61015 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR):
61016 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
61017 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61018 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
61019 				HYBRID_BREAK();
61020 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV):
61021 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
61022 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61023 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
61024 				HYBRID_BREAK();
61025 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
61026 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
61027 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61028 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
61029 				HYBRID_BREAK();
61030 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
61031 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
61032 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61033 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
61034 				HYBRID_BREAK();
61035 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
61036 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV)
61037 				ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61038 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_VAR_CV)
61039 				HYBRID_BREAK();
61040 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
61041 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV)
61042 				ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61043 				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_VAR_CV)
61044 				HYBRID_BREAK();
61045 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
61046 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV)
61047 				ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61048 				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_VAR_CV)
61049 				HYBRID_BREAK();
61050 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
61051 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CV)
61052 				ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61053 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_VAR_CV)
61054 				HYBRID_BREAK();
61055 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
61056 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
61057 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61058 				VM_TRACE_OP_END(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
61059 				HYBRID_BREAK();
61060 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
61061 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
61062 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61063 				VM_TRACE_OP_END(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
61064 				HYBRID_BREAK();
61065 			HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
61066 				VM_TRACE(ZEND_CLONE_SPEC_UNUSED)
61067 				ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61068 				VM_TRACE_OP_END(ZEND_CLONE_SPEC_UNUSED)
61069 				HYBRID_BREAK();
61070 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED):
61071 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
61072 				ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61073 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
61074 				HYBRID_BREAK();
61075 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST):
61076 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
61077 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61078 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
61079 				HYBRID_BREAK();
61080 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
61081 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
61082 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61083 				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
61084 				HYBRID_BREAK();
61085 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
61086 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
61087 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61088 				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
61089 				HYBRID_BREAK();
61090 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
61091 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
61092 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61093 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
61094 				HYBRID_BREAK();
61095 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
61096 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
61097 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61098 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
61099 				HYBRID_BREAK();
61100 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
61101 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
61102 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61103 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
61104 				HYBRID_BREAK();
61105 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
61106 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
61107 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61108 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
61109 				HYBRID_BREAK();
61110 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
61111 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
61112 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61113 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
61114 				HYBRID_BREAK();
61115 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
61116 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
61117 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61118 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
61119 				HYBRID_BREAK();
61120 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
61121 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
61122 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61123 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
61124 				HYBRID_BREAK();
61125 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
61126 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
61127 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61128 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
61129 				HYBRID_BREAK();
61130 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
61131 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
61132 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61133 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
61134 				HYBRID_BREAK();
61135 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
61136 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
61137 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61138 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
61139 				HYBRID_BREAK();
61140 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR):
61141 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
61142 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61143 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
61144 				HYBRID_BREAK();
61145 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV):
61146 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
61147 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61148 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
61149 				HYBRID_BREAK();
61150 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
61151 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
61152 				ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61153 				VM_TRACE_OP_END(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
61154 				HYBRID_BREAK();
61155 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST):
61156 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
61157 				ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61158 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
61159 				HYBRID_BREAK();
61160 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
61161 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
61162 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61163 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
61164 				HYBRID_BREAK();
61165 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
61166 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
61167 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61168 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
61169 				HYBRID_BREAK();
61170 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST):
61171 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST)
61172 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61173 				VM_TRACE_OP_END(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST)
61174 				HYBRID_BREAK();
61175 			HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
61176 				VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
61177 				ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61178 				VM_TRACE_OP_END(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
61179 				HYBRID_BREAK();
61180 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST):
61181 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
61182 				ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61183 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
61184 				HYBRID_BREAK();
61185 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST):
61186 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
61187 				ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61188 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
61189 				HYBRID_BREAK();
61190 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
61191 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
61192 				ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61193 				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
61194 				HYBRID_BREAK();
61195 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
61196 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
61197 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61198 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
61199 				HYBRID_BREAK();
61200 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
61201 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST)
61202 				ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61203 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_UNUSED_CONST)
61204 				HYBRID_BREAK();
61205 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV):
61206 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV)
61207 				ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61208 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV)
61209 				HYBRID_BREAK();
61210 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR):
61211 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
61212 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61213 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
61214 				HYBRID_BREAK();
61215 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
61216 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
61217 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61218 				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
61219 				HYBRID_BREAK();
61220 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
61221 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
61222 				ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61223 				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
61224 				HYBRID_BREAK();
61225 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
61226 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
61227 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61228 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
61229 				HYBRID_BREAK();
61230 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
61231 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
61232 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61233 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
61234 				HYBRID_BREAK();
61235 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
61236 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
61237 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61238 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
61239 				HYBRID_BREAK();
61240 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
61241 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
61242 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61243 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
61244 				HYBRID_BREAK();
61245 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
61246 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
61247 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61248 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
61249 				HYBRID_BREAK();
61250 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
61251 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
61252 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61253 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
61254 				HYBRID_BREAK();
61255 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
61256 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
61257 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61258 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
61259 				HYBRID_BREAK();
61260 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
61261 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
61262 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61263 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
61264 				HYBRID_BREAK();
61265 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
61266 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
61267 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61268 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
61269 				HYBRID_BREAK();
61270 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
61271 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
61272 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61273 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
61274 				HYBRID_BREAK();
61275 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
61276 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
61277 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61278 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
61279 				HYBRID_BREAK();
61280 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
61281 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
61282 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61283 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
61284 				HYBRID_BREAK();
61285 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
61286 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
61287 				ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61288 				VM_TRACE_OP_END(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
61289 				HYBRID_BREAK();
61290 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR):
61291 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
61292 				ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61293 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
61294 				HYBRID_BREAK();
61295 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
61296 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
61297 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61298 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
61299 				HYBRID_BREAK();
61300 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR):
61301 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
61302 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61303 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
61304 				HYBRID_BREAK();
61305 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR):
61306 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
61307 				ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61308 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
61309 				HYBRID_BREAK();
61310 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
61311 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
61312 				ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61313 				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
61314 				HYBRID_BREAK();
61315 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
61316 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
61317 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61318 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
61319 				HYBRID_BREAK();
61320 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMPVAR):
61321 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMPVAR)
61322 				ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61323 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_UNUSED_TMPVAR)
61324 				HYBRID_BREAK();
61325 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED):
61326 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
61327 				ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61328 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
61329 				HYBRID_BREAK();
61330 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
61331 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
61332 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61333 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
61334 				HYBRID_BREAK();
61335 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
61336 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
61337 				ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61338 				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
61339 				HYBRID_BREAK();
61340 			HYBRID_CASE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED):
61341 				VM_TRACE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED)
61342 				ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61343 				VM_TRACE_OP_END(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED)
61344 				HYBRID_BREAK();
61345 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED):
61346 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED)
61347 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61348 				VM_TRACE_OP_END(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED)
61349 				HYBRID_BREAK();
61350 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK):
61351 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK)
61352 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61353 				VM_TRACE_OP_END(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK)
61354 				HYBRID_BREAK();
61355 			HYBRID_CASE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED):
61356 				VM_TRACE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED)
61357 				ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61358 				VM_TRACE_OP_END(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED)
61359 				HYBRID_BREAK();
61360 			HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED):
61361 				VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
61362 				ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61363 				VM_TRACE_OP_END(ZEND_NEW_SPEC_UNUSED_UNUSED)
61364 				HYBRID_BREAK();
61365 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED):
61366 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
61367 				ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61368 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
61369 				HYBRID_BREAK();
61370 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
61371 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
61372 				ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61373 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_UNUSED_UNUSED)
61374 				HYBRID_BREAK();
61375 			HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
61376 				VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
61377 				ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61378 				VM_TRACE_OP_END(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
61379 				HYBRID_BREAK();
61380 			HYBRID_CASE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED):
61381 				VM_TRACE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED)
61382 				ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61383 				VM_TRACE_OP_END(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED)
61384 				HYBRID_BREAK();
61385 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
61386 				VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
61387 				ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61388 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
61389 				HYBRID_BREAK();
61390 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
61391 				VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
61392 				ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61393 				VM_TRACE_OP_END(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
61394 				HYBRID_BREAK();
61395 			HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
61396 				VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
61397 				ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61398 				VM_TRACE_OP_END(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
61399 				HYBRID_BREAK();
61400 			HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
61401 				VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
61402 				ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61403 				VM_TRACE_OP_END(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
61404 				HYBRID_BREAK();
61405 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
61406 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
61407 				ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61408 				VM_TRACE_OP_END(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
61409 				HYBRID_BREAK();
61410 			HYBRID_CASE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED):
61411 				VM_TRACE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED)
61412 				ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61413 				VM_TRACE_OP_END(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED)
61414 				HYBRID_BREAK();
61415 			HYBRID_CASE(ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED):
61416 				VM_TRACE(ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED)
61417 				ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61418 				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED)
61419 				HYBRID_BREAK();
61420 			HYBRID_CASE(ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER):
61421 				VM_TRACE(ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER)
61422 				ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61423 				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER)
61424 				HYBRID_BREAK();
61425 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV):
61426 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
61427 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61428 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
61429 				HYBRID_BREAK();
61430 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
61431 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
61432 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61433 				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
61434 				HYBRID_BREAK();
61435 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
61436 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
61437 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61438 				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
61439 				HYBRID_BREAK();
61440 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
61441 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
61442 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61443 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
61444 				HYBRID_BREAK();
61445 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
61446 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
61447 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61448 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
61449 				HYBRID_BREAK();
61450 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
61451 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
61452 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61453 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
61454 				HYBRID_BREAK();
61455 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
61456 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
61457 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61458 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
61459 				HYBRID_BREAK();
61460 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
61461 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
61462 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61463 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
61464 				HYBRID_BREAK();
61465 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
61466 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
61467 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61468 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
61469 				HYBRID_BREAK();
61470 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
61471 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
61472 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61473 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
61474 				HYBRID_BREAK();
61475 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
61476 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
61477 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61478 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
61479 				HYBRID_BREAK();
61480 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
61481 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
61482 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61483 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
61484 				HYBRID_BREAK();
61485 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
61486 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
61487 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61488 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
61489 				HYBRID_BREAK();
61490 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR):
61491 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
61492 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61493 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
61494 				HYBRID_BREAK();
61495 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV):
61496 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
61497 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61498 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
61499 				HYBRID_BREAK();
61500 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
61501 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
61502 				ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61503 				VM_TRACE_OP_END(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
61504 				HYBRID_BREAK();
61505 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV):
61506 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
61507 				ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61508 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
61509 				HYBRID_BREAK();
61510 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
61511 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
61512 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61513 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
61514 				HYBRID_BREAK();
61515 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV):
61516 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
61517 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61518 				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
61519 				HYBRID_BREAK();
61520 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV):
61521 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
61522 				ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61523 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
61524 				HYBRID_BREAK();
61525 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
61526 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
61527 				ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61528 				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
61529 				HYBRID_BREAK();
61530 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
61531 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
61532 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61533 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
61534 				HYBRID_BREAK();
61535 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
61536 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV)
61537 				ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61538 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_UNUSED_CV)
61539 				HYBRID_BREAK();
61540 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
61541 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CV)
61542 				ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61543 				VM_TRACE_OP_END(ZEND_BOOL_NOT_SPEC_CV)
61544 				HYBRID_BREAK();
61545 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
61546 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
61547 				ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61548 				VM_TRACE_OP_END(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
61549 				HYBRID_BREAK();
61550 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
61551 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
61552 				ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61553 				VM_TRACE_OP_END(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
61554 				HYBRID_BREAK();
61555 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
61556 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
61557 				ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61558 				VM_TRACE_OP_END(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
61559 				HYBRID_BREAK();
61560 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
61561 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
61562 				ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61563 				VM_TRACE_OP_END(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
61564 				HYBRID_BREAK();
61565 			HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
61566 				VM_TRACE(ZEND_POST_INC_SPEC_CV)
61567 				ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61568 				VM_TRACE_OP_END(ZEND_POST_INC_SPEC_CV)
61569 				HYBRID_BREAK();
61570 			HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
61571 				VM_TRACE(ZEND_POST_DEC_SPEC_CV)
61572 				ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61573 				VM_TRACE_OP_END(ZEND_POST_DEC_SPEC_CV)
61574 				HYBRID_BREAK();
61575 			HYBRID_CASE(ZEND_ECHO_SPEC_CV):
61576 				VM_TRACE(ZEND_ECHO_SPEC_CV)
61577 				ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61578 				VM_TRACE_OP_END(ZEND_ECHO_SPEC_CV)
61579 				HYBRID_BREAK();
61580 			HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
61581 				VM_TRACE(ZEND_JMPZ_SPEC_CV)
61582 				ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61583 				VM_TRACE_OP_END(ZEND_JMPZ_SPEC_CV)
61584 				HYBRID_BREAK();
61585 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
61586 				VM_TRACE(ZEND_JMPNZ_SPEC_CV)
61587 				ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61588 				VM_TRACE_OP_END(ZEND_JMPNZ_SPEC_CV)
61589 				HYBRID_BREAK();
61590 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
61591 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
61592 				ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61593 				VM_TRACE_OP_END(ZEND_JMPZ_EX_SPEC_CV)
61594 				HYBRID_BREAK();
61595 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
61596 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV)
61597 				ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61598 				VM_TRACE_OP_END(ZEND_JMPNZ_EX_SPEC_CV)
61599 				HYBRID_BREAK();
61600 			HYBRID_CASE(ZEND_RETURN_SPEC_CV):
61601 				VM_TRACE(ZEND_RETURN_SPEC_CV)
61602 {
61603 	USE_OPLINE
61604 	zval *retval_ptr;
61605 	zval *return_value;
61606 
61607 	retval_ptr = EX_VAR(opline->op1.var);
61608 	return_value = EX(return_value);
61609 
61610 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
61611 		SAVE_OPLINE();
61612 		retval_ptr = ZVAL_UNDEFINED_OP1();
61613 		if (return_value) {
61614 			ZVAL_NULL(return_value);
61615 		}
61616 	} else if (!return_value) {
61617 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
61618 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
61619 				SAVE_OPLINE();
61620 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
61621 			}
61622 		}
61623 	} else {
61624 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
61625 			ZVAL_COPY_VALUE(return_value, retval_ptr);
61626 			if (IS_CV == IS_CONST) {
61627 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
61628 					Z_ADDREF_P(return_value);
61629 				}
61630 			}
61631 		} else if (IS_CV == IS_CV) {
61632 			do {
61633 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
61634 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
61635 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
61636 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
61637 							ZVAL_COPY_VALUE(return_value, retval_ptr);
61638 							if (GC_MAY_LEAK(ref)) {
61639 								SAVE_OPLINE();
61640 								gc_possible_root(ref);
61641 							}
61642 							ZVAL_NULL(retval_ptr);
61643 							break;
61644 						} else {
61645 							Z_ADDREF_P(retval_ptr);
61646 						}
61647 					} else {
61648 						retval_ptr = Z_REFVAL_P(retval_ptr);
61649 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
61650 							Z_ADDREF_P(retval_ptr);
61651 						}
61652 					}
61653 				}
61654 				ZVAL_COPY_VALUE(return_value, retval_ptr);
61655 			} while (0);
61656 		} else /* if (IS_CV == IS_VAR) */ {
61657 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
61658 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
61659 
61660 				retval_ptr = Z_REFVAL_P(retval_ptr);
61661 				ZVAL_COPY_VALUE(return_value, retval_ptr);
61662 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
61663 					efree_size(ref, sizeof(zend_reference));
61664 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
61665 					Z_ADDREF_P(retval_ptr);
61666 				}
61667 			} else {
61668 				ZVAL_COPY_VALUE(return_value, retval_ptr);
61669 			}
61670 		}
61671 	}
61672 
61673 
61674 
61675 	goto zend_leave_helper_SPEC_LABEL;
61676 }
61677 
61678 				VM_TRACE_OP_END(ZEND_RETURN_SPEC_CV)
61679 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
61680 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
61681 				ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61682 				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_CV)
61683 				HYBRID_BREAK();
61684 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
61685 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
61686 				ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61687 				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_CV)
61688 				HYBRID_BREAK();
61689 			HYBRID_CASE(ZEND_THROW_SPEC_CV):
61690 				VM_TRACE(ZEND_THROW_SPEC_CV)
61691 				ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61692 				VM_TRACE_OP_END(ZEND_THROW_SPEC_CV)
61693 				HYBRID_BREAK();
61694 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
61695 				VM_TRACE(ZEND_SEND_USER_SPEC_CV)
61696 				ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61697 				VM_TRACE_OP_END(ZEND_SEND_USER_SPEC_CV)
61698 				HYBRID_BREAK();
61699 			HYBRID_CASE(ZEND_BOOL_SPEC_CV):
61700 				VM_TRACE(ZEND_BOOL_SPEC_CV)
61701 				ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61702 				VM_TRACE_OP_END(ZEND_BOOL_SPEC_CV)
61703 				HYBRID_BREAK();
61704 			HYBRID_CASE(ZEND_CLONE_SPEC_CV):
61705 				VM_TRACE(ZEND_CLONE_SPEC_CV)
61706 				ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61707 				VM_TRACE_OP_END(ZEND_CLONE_SPEC_CV)
61708 				HYBRID_BREAK();
61709 			HYBRID_CASE(ZEND_CAST_SPEC_CV):
61710 				VM_TRACE(ZEND_CAST_SPEC_CV)
61711 				ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61712 				VM_TRACE_OP_END(ZEND_CAST_SPEC_CV)
61713 				HYBRID_BREAK();
61714 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
61715 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
61716 				ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61717 				VM_TRACE_OP_END(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
61718 				HYBRID_BREAK();
61719 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
61720 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
61721 				ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61722 				VM_TRACE_OP_END(ZEND_FE_RESET_R_SPEC_CV)
61723 				HYBRID_BREAK();
61724 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
61725 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV)
61726 				ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61727 				VM_TRACE_OP_END(ZEND_FE_RESET_RW_SPEC_CV)
61728 				HYBRID_BREAK();
61729 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
61730 				VM_TRACE(ZEND_JMP_SET_SPEC_CV)
61731 				ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61732 				VM_TRACE_OP_END(ZEND_JMP_SET_SPEC_CV)
61733 				HYBRID_BREAK();
61734 			HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
61735 				VM_TRACE(ZEND_COALESCE_SPEC_CV)
61736 				ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61737 				VM_TRACE_OP_END(ZEND_COALESCE_SPEC_CV)
61738 				HYBRID_BREAK();
61739 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CV):
61740 				VM_TRACE(ZEND_JMP_NULL_SPEC_CV)
61741 				ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61742 				VM_TRACE_OP_END(ZEND_JMP_NULL_SPEC_CV)
61743 				HYBRID_BREAK();
61744 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
61745 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
61746 				ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61747 				VM_TRACE_OP_END(ZEND_QM_ASSIGN_SPEC_CV)
61748 				HYBRID_BREAK();
61749 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
61750 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CV)
61751 				ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61752 				VM_TRACE_OP_END(ZEND_YIELD_FROM_SPEC_CV)
61753 				HYBRID_BREAK();
61754 			HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
61755 				VM_TRACE(ZEND_STRLEN_SPEC_CV)
61756 				ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61757 				VM_TRACE_OP_END(ZEND_STRLEN_SPEC_CV)
61758 				HYBRID_BREAK();
61759 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
61760 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV)
61761 				ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61762 				VM_TRACE_OP_END(ZEND_TYPE_CHECK_SPEC_CV)
61763 				HYBRID_BREAK();
61764 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_CV):
61765 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_CV)
61766 				ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61767 				VM_TRACE_OP_END(ZEND_FETCH_CLASS_NAME_SPEC_CV)
61768 				HYBRID_BREAK();
61769 			HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV):
61770 				VM_TRACE(ZEND_BIND_STATIC_SPEC_CV)
61771 				ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61772 				VM_TRACE_OP_END(ZEND_BIND_STATIC_SPEC_CV)
61773 				HYBRID_BREAK();
61774 			HYBRID_CASE(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV):
61775 				VM_TRACE(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV)
61776 				ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61777 				VM_TRACE_OP_END(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV)
61778 				HYBRID_BREAK();
61779 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
61780 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
61781 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61782 				VM_TRACE_OP_END(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
61783 				HYBRID_BREAK();
61784 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
61785 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
61786 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61787 				VM_TRACE_OP_END(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
61788 				HYBRID_BREAK();
61789 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED):
61790 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
61791 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61792 				VM_TRACE_OP_END(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
61793 				HYBRID_BREAK();
61794 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED):
61795 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
61796 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61797 				VM_TRACE_OP_END(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
61798 				HYBRID_BREAK();
61799 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
61800 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
61801 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61802 				VM_TRACE_OP_END(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
61803 				HYBRID_BREAK();
61804 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
61805 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
61806 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61807 				VM_TRACE_OP_END(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
61808 				HYBRID_BREAK();
61809 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED):
61810 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
61811 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61812 				VM_TRACE_OP_END(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
61813 				HYBRID_BREAK();
61814 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED):
61815 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
61816 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61817 				VM_TRACE_OP_END(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
61818 				HYBRID_BREAK();
61819 			HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV):
61820 				VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
61821 				ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61822 				VM_TRACE_OP_END(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
61823 				HYBRID_BREAK();
61824 			HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV):
61825 				VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV)
61826 				ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61827 				VM_TRACE_OP_END(ZEND_POST_INC_LONG_SPEC_CV)
61828 				HYBRID_BREAK();
61829 			HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV):
61830 				VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
61831 				ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61832 				VM_TRACE_OP_END(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
61833 				HYBRID_BREAK();
61834 			HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV):
61835 				VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV)
61836 				ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61837 				VM_TRACE_OP_END(ZEND_POST_DEC_LONG_SPEC_CV)
61838 				HYBRID_BREAK();
61839 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
61840 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
61841 				ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61842 				VM_TRACE_OP_END(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
61843 				HYBRID_BREAK();
61844 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
61845 				VM_TRACE(ZEND_DIV_SPEC_CV_CONST)
61846 				ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61847 				VM_TRACE_OP_END(ZEND_DIV_SPEC_CV_CONST)
61848 				HYBRID_BREAK();
61849 			HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
61850 				VM_TRACE(ZEND_POW_SPEC_CV_CONST)
61851 				ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61852 				VM_TRACE_OP_END(ZEND_POW_SPEC_CV_CONST)
61853 				HYBRID_BREAK();
61854 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
61855 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST)
61856 				ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61857 				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CV_CONST)
61858 				HYBRID_BREAK();
61859 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
61860 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
61861 				ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61862 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
61863 				HYBRID_BREAK();
61864 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
61865 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
61866 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61867 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
61868 				HYBRID_BREAK();
61869 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
61870 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST)
61871 				ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61872 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CONST)
61873 				HYBRID_BREAK();
61874 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ):
61875 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
61876 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61877 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
61878 				HYBRID_BREAK();
61879 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ):
61880 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
61881 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61882 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
61883 				HYBRID_BREAK();
61884 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
61885 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
61886 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61887 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
61888 				HYBRID_BREAK();
61889 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ):
61890 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
61891 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61892 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
61893 				HYBRID_BREAK();
61894 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ):
61895 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
61896 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61897 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
61898 				HYBRID_BREAK();
61899 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
61900 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST)
61901 				ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61902 				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CV_CONST)
61903 				HYBRID_BREAK();
61904 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
61905 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST)
61906 				ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61907 				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_CV_CONST)
61908 				HYBRID_BREAK();
61909 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST):
61910 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
61911 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61912 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
61913 				HYBRID_BREAK();
61914 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST):
61915 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
61916 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61917 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
61918 				HYBRID_BREAK();
61919 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CONST):
61920 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CONST)
61921 				ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61922 				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_CV_CONST)
61923 				HYBRID_BREAK();
61924 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
61925 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
61926 				ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61927 				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
61928 				HYBRID_BREAK();
61929 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
61930 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
61931 				ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61932 				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
61933 				HYBRID_BREAK();
61934 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
61935 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
61936 				ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61937 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
61938 				HYBRID_BREAK();
61939 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
61940 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
61941 				ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61942 				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
61943 				HYBRID_BREAK();
61944 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
61945 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
61946 				ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61947 				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
61948 				HYBRID_BREAK();
61949 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
61950 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
61951 				ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61952 				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
61953 				HYBRID_BREAK();
61954 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
61955 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
61956 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61957 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
61958 				HYBRID_BREAK();
61959 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
61960 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
61961 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61962 				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
61963 				HYBRID_BREAK();
61964 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
61965 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
61966 				ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61967 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
61968 				HYBRID_BREAK();
61969 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
61970 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
61971 				ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61972 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
61973 				HYBRID_BREAK();
61974 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
61975 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
61976 				ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61977 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
61978 				HYBRID_BREAK();
61979 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
61980 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
61981 				ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61982 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
61983 				HYBRID_BREAK();
61984 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
61985 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
61986 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61987 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
61988 				HYBRID_BREAK();
61989 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
61990 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
61991 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61992 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
61993 				HYBRID_BREAK();
61994 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
61995 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
61996 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61997 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
61998 				HYBRID_BREAK();
61999 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
62000 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
62001 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62002 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
62003 				HYBRID_BREAK();
62004 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
62005 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
62006 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62007 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
62008 				HYBRID_BREAK();
62009 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
62010 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
62011 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62012 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
62013 				HYBRID_BREAK();
62014 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
62015 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
62016 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62017 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
62018 				HYBRID_BREAK();
62019 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
62020 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
62021 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62022 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
62023 				HYBRID_BREAK();
62024 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
62025 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
62026 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62027 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
62028 				HYBRID_BREAK();
62029 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
62030 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
62031 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62032 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
62033 				HYBRID_BREAK();
62034 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
62035 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
62036 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62037 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
62038 				HYBRID_BREAK();
62039 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
62040 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
62041 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62042 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
62043 				HYBRID_BREAK();
62044 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR):
62045 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
62046 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62047 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
62048 				HYBRID_BREAK();
62049 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV):
62050 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
62051 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62052 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
62053 				HYBRID_BREAK();
62054 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
62055 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST)
62056 				ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62057 				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CV_CONST)
62058 				HYBRID_BREAK();
62059 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
62060 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
62061 				ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62062 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
62063 				HYBRID_BREAK();
62064 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_CONST):
62065 				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_CONST)
62066 				ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62067 				VM_TRACE_OP_END(ZEND_SEND_VAR_SPEC_CV_CONST)
62068 				HYBRID_BREAK();
62069 			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_CONST):
62070 				VM_TRACE(ZEND_SEND_REF_SPEC_CV_CONST)
62071 				ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62072 				VM_TRACE_OP_END(ZEND_SEND_REF_SPEC_CV_CONST)
62073 				HYBRID_BREAK();
62074 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_CONST):
62075 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_CONST)
62076 				ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62077 				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_CV_CONST)
62078 				HYBRID_BREAK();
62079 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
62080 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
62081 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62082 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
62083 				HYBRID_BREAK();
62084 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
62085 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST)
62086 				ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62087 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CV_CONST)
62088 				HYBRID_BREAK();
62089 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
62090 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST)
62091 				ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62092 				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_CV_CONST)
62093 				HYBRID_BREAK();
62094 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
62095 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST)
62096 				ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62097 				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_CV_CONST)
62098 				HYBRID_BREAK();
62099 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
62100 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
62101 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62102 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
62103 				HYBRID_BREAK();
62104 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
62105 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
62106 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62107 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
62108 				HYBRID_BREAK();
62109 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST):
62110 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
62111 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62112 				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
62113 				HYBRID_BREAK();
62114 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
62115 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST)
62116 				ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62117 				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_CV_CONST)
62118 				HYBRID_BREAK();
62119 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
62120 				VM_TRACE(ZEND_YIELD_SPEC_CV_CONST)
62121 				ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62122 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CV_CONST)
62123 				HYBRID_BREAK();
62124 			HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
62125 				VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
62126 				ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62127 				VM_TRACE_OP_END(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
62128 				HYBRID_BREAK();
62129 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
62130 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST)
62131 				ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62132 				VM_TRACE_OP_END(ZEND_IN_ARRAY_SPEC_CV_CONST)
62133 				HYBRID_BREAK();
62134 			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST):
62135 				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST)
62136 				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62137 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST)
62138 				HYBRID_BREAK();
62139 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST):
62140 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST)
62141 				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62142 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST)
62143 				HYBRID_BREAK();
62144 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
62145 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
62146 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62147 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
62148 				HYBRID_BREAK();
62149 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV):
62150 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
62151 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62152 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
62153 				HYBRID_BREAK();
62154 			HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
62155 				VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR)
62156 				ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62157 				VM_TRACE_OP_END(ZEND_DIV_SPEC_CV_TMPVAR)
62158 				HYBRID_BREAK();
62159 			HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
62160 				VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR)
62161 				ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62162 				VM_TRACE_OP_END(ZEND_POW_SPEC_CV_TMPVAR)
62163 				HYBRID_BREAK();
62164 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
62165 				VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR)
62166 				ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62167 				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CV_TMPVAR)
62168 				HYBRID_BREAK();
62169 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
62170 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
62171 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62172 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
62173 				HYBRID_BREAK();
62174 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ):
62175 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
62176 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62177 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
62178 				HYBRID_BREAK();
62179 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
62180 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
62181 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62182 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
62183 				HYBRID_BREAK();
62184 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
62185 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
62186 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62187 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
62188 				HYBRID_BREAK();
62189 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ):
62190 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
62191 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62192 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
62193 				HYBRID_BREAK();
62194 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
62195 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
62196 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62197 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
62198 				HYBRID_BREAK();
62199 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
62200 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
62201 				ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62202 				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
62203 				HYBRID_BREAK();
62204 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
62205 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
62206 				ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62207 				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
62208 				HYBRID_BREAK();
62209 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR):
62210 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
62211 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62212 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
62213 				HYBRID_BREAK();
62214 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR):
62215 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
62216 				ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62217 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
62218 				HYBRID_BREAK();
62219 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR):
62220 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
62221 				ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62222 				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
62223 				HYBRID_BREAK();
62224 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
62225 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
62226 				ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62227 				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
62228 				HYBRID_BREAK();
62229 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
62230 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
62231 				ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62232 				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
62233 				HYBRID_BREAK();
62234 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
62235 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
62236 				ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62237 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
62238 				HYBRID_BREAK();
62239 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
62240 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
62241 				ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62242 				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
62243 				HYBRID_BREAK();
62244 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
62245 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
62246 				ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62247 				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
62248 				HYBRID_BREAK();
62249 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
62250 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
62251 				ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62252 				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
62253 				HYBRID_BREAK();
62254 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
62255 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
62256 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62257 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
62258 				HYBRID_BREAK();
62259 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
62260 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
62261 				ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62262 				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
62263 				HYBRID_BREAK();
62264 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
62265 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
62266 				ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62267 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
62268 				HYBRID_BREAK();
62269 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
62270 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
62271 				ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62272 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
62273 				HYBRID_BREAK();
62274 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
62275 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
62276 				ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62277 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
62278 				HYBRID_BREAK();
62279 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
62280 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
62281 				ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62282 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
62283 				HYBRID_BREAK();
62284 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
62285 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
62286 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62287 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
62288 				HYBRID_BREAK();
62289 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
62290 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
62291 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62292 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
62293 				HYBRID_BREAK();
62294 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
62295 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
62296 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62297 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
62298 				HYBRID_BREAK();
62299 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
62300 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
62301 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62302 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
62303 				HYBRID_BREAK();
62304 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
62305 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
62306 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62307 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
62308 				HYBRID_BREAK();
62309 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
62310 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
62311 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62312 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
62313 				HYBRID_BREAK();
62314 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
62315 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
62316 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62317 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
62318 				HYBRID_BREAK();
62319 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
62320 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
62321 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62322 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
62323 				HYBRID_BREAK();
62324 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
62325 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
62326 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62327 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
62328 				HYBRID_BREAK();
62329 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
62330 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
62331 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62332 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
62333 				HYBRID_BREAK();
62334 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR):
62335 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
62336 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62337 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
62338 				HYBRID_BREAK();
62339 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV):
62340 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
62341 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62342 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
62343 				HYBRID_BREAK();
62344 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
62345 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
62346 				ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62347 				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
62348 				HYBRID_BREAK();
62349 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
62350 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
62351 				ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62352 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
62353 				HYBRID_BREAK();
62354 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
62355 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
62356 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62357 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
62358 				HYBRID_BREAK();
62359 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
62360 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
62361 				ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62362 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
62363 				HYBRID_BREAK();
62364 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
62365 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
62366 				ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62367 				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
62368 				HYBRID_BREAK();
62369 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
62370 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
62371 				ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62372 				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
62373 				HYBRID_BREAK();
62374 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
62375 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
62376 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62377 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
62378 				HYBRID_BREAK();
62379 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
62380 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
62381 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62382 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
62383 				HYBRID_BREAK();
62384 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR):
62385 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
62386 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62387 				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
62388 				HYBRID_BREAK();
62389 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMPVAR):
62390 				VM_TRACE(ZEND_YIELD_SPEC_CV_TMPVAR)
62391 				ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62392 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CV_TMPVAR)
62393 				HYBRID_BREAK();
62394 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
62395 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
62396 				ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62397 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
62398 				HYBRID_BREAK();
62399 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
62400 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
62401 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62402 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
62403 				HYBRID_BREAK();
62404 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
62405 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
62406 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62407 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
62408 				HYBRID_BREAK();
62409 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
62410 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
62411 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62412 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
62413 				HYBRID_BREAK();
62414 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
62415 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
62416 				ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62417 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
62418 				HYBRID_BREAK();
62419 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
62420 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
62421 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62422 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
62423 				HYBRID_BREAK();
62424 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
62425 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
62426 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62427 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
62428 				HYBRID_BREAK();
62429 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
62430 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
62431 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62432 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
62433 				HYBRID_BREAK();
62434 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
62435 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR)
62436 				ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62437 				VM_TRACE_OP_END(ZEND_ASSIGN_REF_SPEC_CV_VAR)
62438 				HYBRID_BREAK();
62439 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
62440 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR)
62441 				ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62442 				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_CV_VAR)
62443 				HYBRID_BREAK();
62444 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED):
62445 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
62446 				ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62447 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
62448 				HYBRID_BREAK();
62449 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
62450 				VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED)
62451 				ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62452 				VM_TRACE_OP_END(ZEND_FETCH_R_SPEC_CV_UNUSED)
62453 				HYBRID_BREAK();
62454 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
62455 				VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED)
62456 				ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62457 				VM_TRACE_OP_END(ZEND_FETCH_W_SPEC_CV_UNUSED)
62458 				HYBRID_BREAK();
62459 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
62460 				VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED)
62461 				ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62462 				VM_TRACE_OP_END(ZEND_FETCH_RW_SPEC_CV_UNUSED)
62463 				HYBRID_BREAK();
62464 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
62465 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
62466 				ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62467 				VM_TRACE_OP_END(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
62468 				HYBRID_BREAK();
62469 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
62470 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
62471 				ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62472 				VM_TRACE_OP_END(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
62473 				HYBRID_BREAK();
62474 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
62475 				VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED)
62476 				ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62477 				VM_TRACE_OP_END(ZEND_FETCH_IS_SPEC_CV_UNUSED)
62478 				HYBRID_BREAK();
62479 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
62480 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
62481 				ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62482 				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
62483 				HYBRID_BREAK();
62484 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
62485 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
62486 				ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62487 				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
62488 				HYBRID_BREAK();
62489 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
62490 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
62491 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62492 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
62493 				HYBRID_BREAK();
62494 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
62495 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
62496 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62497 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
62498 				HYBRID_BREAK();
62499 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
62500 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
62501 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62502 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
62503 				HYBRID_BREAK();
62504 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
62505 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
62506 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62507 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
62508 				HYBRID_BREAK();
62509 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
62510 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
62511 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62512 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
62513 				HYBRID_BREAK();
62514 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
62515 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
62516 				ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62517 				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
62518 				HYBRID_BREAK();
62519 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_UNUSED):
62520 				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_UNUSED)
62521 				ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62522 				VM_TRACE_OP_END(ZEND_SEND_VAR_SPEC_CV_UNUSED)
62523 				HYBRID_BREAK();
62524 			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_UNUSED):
62525 				VM_TRACE(ZEND_SEND_REF_SPEC_CV_UNUSED)
62526 				ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62527 				VM_TRACE_OP_END(ZEND_SEND_REF_SPEC_CV_UNUSED)
62528 				HYBRID_BREAK();
62529 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED):
62530 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED)
62531 				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62532 				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED)
62533 				HYBRID_BREAK();
62534 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK):
62535 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK)
62536 				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62537 				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK)
62538 				HYBRID_BREAK();
62539 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
62540 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
62541 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62542 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
62543 				HYBRID_BREAK();
62544 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
62545 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
62546 				ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62547 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
62548 				HYBRID_BREAK();
62549 			HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
62550 				VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED)
62551 				ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62552 				VM_TRACE_OP_END(ZEND_UNSET_CV_SPEC_CV_UNUSED)
62553 				HYBRID_BREAK();
62554 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
62555 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
62556 				ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62557 				VM_TRACE_OP_END(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
62558 				HYBRID_BREAK();
62559 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET):
62560 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
62561 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62562 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
62563 				HYBRID_BREAK();
62564 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY):
62565 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
62566 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62567 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
62568 				HYBRID_BREAK();
62569 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
62570 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
62571 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62572 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
62573 				HYBRID_BREAK();
62574 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
62575 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
62576 				ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62577 				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
62578 				HYBRID_BREAK();
62579 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
62580 				VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
62581 				ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62582 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CV_UNUSED)
62583 				HYBRID_BREAK();
62584 			HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
62585 				VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
62586 				ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62587 				VM_TRACE_OP_END(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
62588 				HYBRID_BREAK();
62589 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
62590 				VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED)
62591 				ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62592 				VM_TRACE_OP_END(ZEND_MAKE_REF_SPEC_CV_UNUSED)
62593 				HYBRID_BREAK();
62594 			HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
62595 				VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED)
62596 				ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62597 				VM_TRACE_OP_END(ZEND_COUNT_SPEC_CV_UNUSED)
62598 				HYBRID_BREAK();
62599 			HYBRID_CASE(ZEND_COUNT_ARRAY_SPEC_CV_UNUSED):
62600 				VM_TRACE(ZEND_COUNT_ARRAY_SPEC_CV_UNUSED)
62601 				ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62602 				VM_TRACE_OP_END(ZEND_COUNT_ARRAY_SPEC_CV_UNUSED)
62603 				HYBRID_BREAK();
62604 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
62605 				VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED)
62606 				ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62607 				VM_TRACE_OP_END(ZEND_GET_CLASS_SPEC_CV_UNUSED)
62608 				HYBRID_BREAK();
62609 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
62610 				VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED)
62611 				ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62612 				VM_TRACE_OP_END(ZEND_GET_TYPE_SPEC_CV_UNUSED)
62613 				HYBRID_BREAK();
62614 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED):
62615 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED)
62616 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62617 				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED)
62618 				HYBRID_BREAK();
62619 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
62620 				VM_TRACE(ZEND_DIV_SPEC_CV_CV)
62621 				ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62622 				VM_TRACE_OP_END(ZEND_DIV_SPEC_CV_CV)
62623 				HYBRID_BREAK();
62624 			HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
62625 				VM_TRACE(ZEND_POW_SPEC_CV_CV)
62626 				ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62627 				VM_TRACE_OP_END(ZEND_POW_SPEC_CV_CV)
62628 				HYBRID_BREAK();
62629 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
62630 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CV)
62631 				ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62632 				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CV_CV)
62633 				HYBRID_BREAK();
62634 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
62635 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV)
62636 				ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62637 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CV_CV)
62638 				HYBRID_BREAK();
62639 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
62640 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
62641 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62642 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
62643 				HYBRID_BREAK();
62644 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
62645 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV)
62646 				ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62647 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CV)
62648 				HYBRID_BREAK();
62649 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ):
62650 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
62651 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62652 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
62653 				HYBRID_BREAK();
62654 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ):
62655 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
62656 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62657 				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
62658 				HYBRID_BREAK();
62659 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
62660 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
62661 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62662 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
62663 				HYBRID_BREAK();
62664 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ):
62665 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
62666 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62667 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
62668 				HYBRID_BREAK();
62669 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ):
62670 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
62671 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62672 				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
62673 				HYBRID_BREAK();
62674 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
62675 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV)
62676 				ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62677 				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CV_CV)
62678 				HYBRID_BREAK();
62679 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
62680 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV)
62681 				ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62682 				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_CV_CV)
62683 				HYBRID_BREAK();
62684 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV):
62685 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
62686 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62687 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
62688 				HYBRID_BREAK();
62689 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV):
62690 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
62691 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62692 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
62693 				HYBRID_BREAK();
62694 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CV):
62695 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CV)
62696 				ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62697 				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_CV_CV)
62698 				HYBRID_BREAK();
62699 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
62700 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
62701 				ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62702 				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
62703 				HYBRID_BREAK();
62704 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
62705 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV)
62706 				ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62707 				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_CV_CV)
62708 				HYBRID_BREAK();
62709 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
62710 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV)
62711 				ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62712 				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CV_CV)
62713 				HYBRID_BREAK();
62714 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
62715 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV)
62716 				ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62717 				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_CV_CV)
62718 				HYBRID_BREAK();
62719 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
62720 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
62721 				ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62722 				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
62723 				HYBRID_BREAK();
62724 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
62725 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
62726 				ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62727 				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
62728 				HYBRID_BREAK();
62729 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
62730 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
62731 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62732 				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
62733 				HYBRID_BREAK();
62734 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
62735 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
62736 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62737 				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
62738 				HYBRID_BREAK();
62739 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
62740 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
62741 				ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62742 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
62743 				HYBRID_BREAK();
62744 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
62745 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
62746 				ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62747 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
62748 				HYBRID_BREAK();
62749 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
62750 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
62751 				ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62752 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
62753 				HYBRID_BREAK();
62754 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
62755 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
62756 				ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62757 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
62758 				HYBRID_BREAK();
62759 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
62760 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
62761 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62762 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
62763 				HYBRID_BREAK();
62764 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
62765 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
62766 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62767 				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
62768 				HYBRID_BREAK();
62769 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
62770 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
62771 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62772 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
62773 				HYBRID_BREAK();
62774 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
62775 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
62776 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62777 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
62778 				HYBRID_BREAK();
62779 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
62780 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
62781 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62782 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
62783 				HYBRID_BREAK();
62784 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
62785 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
62786 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62787 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
62788 				HYBRID_BREAK();
62789 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
62790 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
62791 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62792 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
62793 				HYBRID_BREAK();
62794 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
62795 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
62796 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62797 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
62798 				HYBRID_BREAK();
62799 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
62800 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
62801 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62802 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
62803 				HYBRID_BREAK();
62804 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
62805 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
62806 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62807 				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
62808 				HYBRID_BREAK();
62809 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
62810 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
62811 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62812 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
62813 				HYBRID_BREAK();
62814 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
62815 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
62816 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62817 				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
62818 				HYBRID_BREAK();
62819 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
62820 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV)
62821 				ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62822 				VM_TRACE_OP_END(ZEND_ASSIGN_REF_SPEC_CV_CV)
62823 				HYBRID_BREAK();
62824 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR):
62825 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
62826 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62827 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
62828 				HYBRID_BREAK();
62829 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV):
62830 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
62831 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62832 				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
62833 				HYBRID_BREAK();
62834 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
62835 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV)
62836 				ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62837 				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CV_CV)
62838 				HYBRID_BREAK();
62839 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
62840 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
62841 				ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62842 				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
62843 				HYBRID_BREAK();
62844 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
62845 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
62846 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62847 				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
62848 				HYBRID_BREAK();
62849 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
62850 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV)
62851 				ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62852 				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CV_CV)
62853 				HYBRID_BREAK();
62854 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
62855 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV)
62856 				ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62857 				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_CV_CV)
62858 				HYBRID_BREAK();
62859 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
62860 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV)
62861 				ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62862 				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_CV_CV)
62863 				HYBRID_BREAK();
62864 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
62865 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
62866 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62867 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
62868 				HYBRID_BREAK();
62869 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
62870 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
62871 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62872 				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
62873 				HYBRID_BREAK();
62874 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV):
62875 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
62876 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62877 				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
62878 				HYBRID_BREAK();
62879 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
62880 				VM_TRACE(ZEND_YIELD_SPEC_CV_CV)
62881 				ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62882 				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CV_CV)
62883 				HYBRID_BREAK();
62884 			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV):
62885 				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV)
62886 				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62887 				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV)
62888 				HYBRID_BREAK();
62889 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV):
62890 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV)
62891 				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62892 				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV)
62893 				HYBRID_BREAK();
62894 			HYBRID_CASE(HYBRID_HALT):
62895 #ifdef ZEND_VM_FP_GLOBAL_REG
62896 				execute_data = vm_stack_data.orig_execute_data;
62897 #endif
62898 #ifdef ZEND_VM_IP_GLOBAL_REG
62899 				opline = vm_stack_data.orig_opline;
62900 #endif
62901 				return;
62902 			HYBRID_DEFAULT:
62903 				VM_TRACE(ZEND_NULL)
62904 				ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62905 				VM_TRACE_OP_END(ZEND_NULL)
62906 				HYBRID_BREAK(); /* Never reached */
62907 #else
62908 #ifdef ZEND_VM_FP_GLOBAL_REG
62909 			execute_data = vm_stack_data.orig_execute_data;
62910 # ifdef ZEND_VM_IP_GLOBAL_REG
62911 			opline = vm_stack_data.orig_opline;
62912 # endif
62913 			return;
62914 #else
62915 			if (EXPECTED(ret > 0)) {
62916 				execute_data = EG(current_execute_data);
62917 				ZEND_VM_LOOP_INTERRUPT_CHECK();
62918 			} else {
62919 # ifdef ZEND_VM_IP_GLOBAL_REG
62920 				opline = vm_stack_data.orig_opline;
62921 # endif
62922 				return;
62923 			}
62924 #endif
62925 #endif
62926 		}
62927 
62928 	}
62929 	zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
62930 }
62931 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
62932 # pragma GCC pop_options
62933 #endif
62934 
62935 ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
62936 {
62937 	zend_execute_data *execute_data;
62938 	void *object_or_called_scope;
62939 	uint32_t call_info;
62940 
62941 	if (EG(exception) != NULL) {
62942 		return;
62943 	}
62944 
62945 	object_or_called_scope = zend_get_this_object(EG(current_execute_data));
62946 	if (EXPECTED(!object_or_called_scope)) {
62947 		object_or_called_scope = zend_get_called_scope(EG(current_execute_data));
62948 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE;
62949 	} else {
62950 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE | ZEND_CALL_HAS_THIS;
62951 	}
62952 	execute_data = zend_vm_stack_push_call_frame(call_info,
62953 		(zend_function*)op_array, 0, object_or_called_scope);
62954 	if (EG(current_execute_data)) {
62955 		execute_data->symbol_table = zend_rebuild_symbol_table();
62956 	} else {
62957 		execute_data->symbol_table = &EG(symbol_table);
62958 	}
62959 	EX(prev_execute_data) = EG(current_execute_data);
62960 	i_init_code_execute_data(execute_data, op_array, return_value);
62961 	ZEND_OBSERVER_FCALL_BEGIN(execute_data);
62962 	zend_execute_ex(execute_data);
62963 	/* Observer end handlers are called from ZEND_RETURN */
62964 	zend_vm_stack_free_call_frame(execute_data);
62965 }
62966 
62967 
62968 void zend_vm_init(void)
62969 {
62970 	static const void * const labels[] = {
62971 		ZEND_NOP_SPEC_HANDLER,
62972 		ZEND_ADD_SPEC_CONST_CONST_HANDLER,
62973 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
62974 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
62975 		ZEND_NULL_HANDLER,
62976 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
62977 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
62978 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62979 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62980 		ZEND_NULL_HANDLER,
62981 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62982 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
62983 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62984 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62985 		ZEND_NULL_HANDLER,
62986 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62987 		ZEND_NULL_HANDLER,
62988 		ZEND_NULL_HANDLER,
62989 		ZEND_NULL_HANDLER,
62990 		ZEND_NULL_HANDLER,
62991 		ZEND_NULL_HANDLER,
62992 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
62993 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62994 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62995 		ZEND_NULL_HANDLER,
62996 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62997 		ZEND_SUB_SPEC_CONST_CONST_HANDLER,
62998 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
62999 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
63000 		ZEND_NULL_HANDLER,
63001 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
63002 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
63003 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63004 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63005 		ZEND_NULL_HANDLER,
63006 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63007 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
63008 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63009 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63010 		ZEND_NULL_HANDLER,
63011 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63012 		ZEND_NULL_HANDLER,
63013 		ZEND_NULL_HANDLER,
63014 		ZEND_NULL_HANDLER,
63015 		ZEND_NULL_HANDLER,
63016 		ZEND_NULL_HANDLER,
63017 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
63018 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63019 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63020 		ZEND_NULL_HANDLER,
63021 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63022 		ZEND_MUL_SPEC_CONST_CONST_HANDLER,
63023 		ZEND_NULL_HANDLER,
63024 		ZEND_NULL_HANDLER,
63025 		ZEND_NULL_HANDLER,
63026 		ZEND_NULL_HANDLER,
63027 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
63028 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63029 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63030 		ZEND_NULL_HANDLER,
63031 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63032 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
63033 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63034 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63035 		ZEND_NULL_HANDLER,
63036 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63037 		ZEND_NULL_HANDLER,
63038 		ZEND_NULL_HANDLER,
63039 		ZEND_NULL_HANDLER,
63040 		ZEND_NULL_HANDLER,
63041 		ZEND_NULL_HANDLER,
63042 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
63043 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63044 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63045 		ZEND_NULL_HANDLER,
63046 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63047 		ZEND_DIV_SPEC_CONST_CONST_HANDLER,
63048 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
63049 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
63050 		ZEND_NULL_HANDLER,
63051 		ZEND_DIV_SPEC_CONST_CV_HANDLER,
63052 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
63053 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
63054 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
63055 		ZEND_NULL_HANDLER,
63056 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
63057 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
63058 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
63059 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
63060 		ZEND_NULL_HANDLER,
63061 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
63062 		ZEND_NULL_HANDLER,
63063 		ZEND_NULL_HANDLER,
63064 		ZEND_NULL_HANDLER,
63065 		ZEND_NULL_HANDLER,
63066 		ZEND_NULL_HANDLER,
63067 		ZEND_DIV_SPEC_CV_CONST_HANDLER,
63068 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
63069 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
63070 		ZEND_NULL_HANDLER,
63071 		ZEND_DIV_SPEC_CV_CV_HANDLER,
63072 		ZEND_MOD_SPEC_CONST_CONST_HANDLER,
63073 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
63074 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
63075 		ZEND_NULL_HANDLER,
63076 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
63077 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
63078 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63079 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63080 		ZEND_NULL_HANDLER,
63081 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63082 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
63083 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63084 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63085 		ZEND_NULL_HANDLER,
63086 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63087 		ZEND_NULL_HANDLER,
63088 		ZEND_NULL_HANDLER,
63089 		ZEND_NULL_HANDLER,
63090 		ZEND_NULL_HANDLER,
63091 		ZEND_NULL_HANDLER,
63092 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
63093 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63094 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63095 		ZEND_NULL_HANDLER,
63096 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63097 		ZEND_SL_SPEC_CONST_CONST_HANDLER,
63098 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
63099 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
63100 		ZEND_NULL_HANDLER,
63101 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
63102 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
63103 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63104 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63105 		ZEND_NULL_HANDLER,
63106 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63107 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
63108 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63109 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63110 		ZEND_NULL_HANDLER,
63111 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63112 		ZEND_NULL_HANDLER,
63113 		ZEND_NULL_HANDLER,
63114 		ZEND_NULL_HANDLER,
63115 		ZEND_NULL_HANDLER,
63116 		ZEND_NULL_HANDLER,
63117 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
63118 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63119 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63120 		ZEND_NULL_HANDLER,
63121 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63122 		ZEND_SR_SPEC_CONST_CONST_HANDLER,
63123 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
63124 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
63125 		ZEND_NULL_HANDLER,
63126 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
63127 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
63128 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63129 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63130 		ZEND_NULL_HANDLER,
63131 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63132 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
63133 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63134 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63135 		ZEND_NULL_HANDLER,
63136 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63137 		ZEND_NULL_HANDLER,
63138 		ZEND_NULL_HANDLER,
63139 		ZEND_NULL_HANDLER,
63140 		ZEND_NULL_HANDLER,
63141 		ZEND_NULL_HANDLER,
63142 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
63143 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63144 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63145 		ZEND_NULL_HANDLER,
63146 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63147 		ZEND_NULL_HANDLER,
63148 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
63149 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
63150 		ZEND_NULL_HANDLER,
63151 		ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
63152 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
63153 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
63154 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
63155 		ZEND_NULL_HANDLER,
63156 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
63157 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
63158 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
63159 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
63160 		ZEND_NULL_HANDLER,
63161 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
63162 		ZEND_NULL_HANDLER,
63163 		ZEND_NULL_HANDLER,
63164 		ZEND_NULL_HANDLER,
63165 		ZEND_NULL_HANDLER,
63166 		ZEND_NULL_HANDLER,
63167 		ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
63168 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
63169 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
63170 		ZEND_NULL_HANDLER,
63171 		ZEND_CONCAT_SPEC_CV_CV_HANDLER,
63172 		ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
63173 		ZEND_NULL_HANDLER,
63174 		ZEND_NULL_HANDLER,
63175 		ZEND_NULL_HANDLER,
63176 		ZEND_NULL_HANDLER,
63177 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
63178 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63179 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63180 		ZEND_NULL_HANDLER,
63181 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63182 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
63183 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63184 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63185 		ZEND_NULL_HANDLER,
63186 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63187 		ZEND_NULL_HANDLER,
63188 		ZEND_NULL_HANDLER,
63189 		ZEND_NULL_HANDLER,
63190 		ZEND_NULL_HANDLER,
63191 		ZEND_NULL_HANDLER,
63192 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
63193 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63194 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63195 		ZEND_NULL_HANDLER,
63196 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63197 		ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
63198 		ZEND_NULL_HANDLER,
63199 		ZEND_NULL_HANDLER,
63200 		ZEND_NULL_HANDLER,
63201 		ZEND_NULL_HANDLER,
63202 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
63203 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63204 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63205 		ZEND_NULL_HANDLER,
63206 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63207 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
63208 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63209 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63210 		ZEND_NULL_HANDLER,
63211 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63212 		ZEND_NULL_HANDLER,
63213 		ZEND_NULL_HANDLER,
63214 		ZEND_NULL_HANDLER,
63215 		ZEND_NULL_HANDLER,
63216 		ZEND_NULL_HANDLER,
63217 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
63218 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63219 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63220 		ZEND_NULL_HANDLER,
63221 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63222 		ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
63223 		ZEND_NULL_HANDLER,
63224 		ZEND_NULL_HANDLER,
63225 		ZEND_NULL_HANDLER,
63226 		ZEND_NULL_HANDLER,
63227 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
63228 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63229 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63230 		ZEND_NULL_HANDLER,
63231 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63232 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
63233 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63234 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63235 		ZEND_NULL_HANDLER,
63236 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63237 		ZEND_NULL_HANDLER,
63238 		ZEND_NULL_HANDLER,
63239 		ZEND_NULL_HANDLER,
63240 		ZEND_NULL_HANDLER,
63241 		ZEND_NULL_HANDLER,
63242 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
63243 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63244 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63245 		ZEND_NULL_HANDLER,
63246 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63247 		ZEND_POW_SPEC_CONST_CONST_HANDLER,
63248 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
63249 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
63250 		ZEND_NULL_HANDLER,
63251 		ZEND_POW_SPEC_CONST_CV_HANDLER,
63252 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
63253 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
63254 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
63255 		ZEND_NULL_HANDLER,
63256 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
63257 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
63258 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
63259 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
63260 		ZEND_NULL_HANDLER,
63261 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
63262 		ZEND_NULL_HANDLER,
63263 		ZEND_NULL_HANDLER,
63264 		ZEND_NULL_HANDLER,
63265 		ZEND_NULL_HANDLER,
63266 		ZEND_NULL_HANDLER,
63267 		ZEND_POW_SPEC_CV_CONST_HANDLER,
63268 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
63269 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
63270 		ZEND_NULL_HANDLER,
63271 		ZEND_POW_SPEC_CV_CV_HANDLER,
63272 		ZEND_BW_NOT_SPEC_CONST_HANDLER,
63273 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
63274 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
63275 		ZEND_NULL_HANDLER,
63276 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
63277 		ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
63278 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
63279 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
63280 		ZEND_NULL_HANDLER,
63281 		ZEND_BOOL_NOT_SPEC_CV_HANDLER,
63282 		ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
63283 		ZEND_NULL_HANDLER,
63284 		ZEND_NULL_HANDLER,
63285 		ZEND_NULL_HANDLER,
63286 		ZEND_NULL_HANDLER,
63287 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
63288 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
63289 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
63290 		ZEND_NULL_HANDLER,
63291 		ZEND_NULL_HANDLER,
63292 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
63293 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
63294 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
63295 		ZEND_NULL_HANDLER,
63296 		ZEND_NULL_HANDLER,
63297 		ZEND_NULL_HANDLER,
63298 		ZEND_NULL_HANDLER,
63299 		ZEND_NULL_HANDLER,
63300 		ZEND_NULL_HANDLER,
63301 		ZEND_NULL_HANDLER,
63302 		ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
63303 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
63304 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
63305 		ZEND_NULL_HANDLER,
63306 		ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
63307 		ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
63308 		ZEND_NULL_HANDLER,
63309 		ZEND_NULL_HANDLER,
63310 		ZEND_NULL_HANDLER,
63311 		ZEND_NULL_HANDLER,
63312 		ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
63313 		ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
63314 		ZEND_NULL_HANDLER,
63315 		ZEND_NULL_HANDLER,
63316 		ZEND_NULL_HANDLER,
63317 		ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
63318 		ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
63319 		ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
63320 		ZEND_NULL_HANDLER,
63321 		ZEND_NULL_HANDLER,
63322 		ZEND_NULL_HANDLER,
63323 		ZEND_NULL_HANDLER,
63324 		ZEND_NULL_HANDLER,
63325 		ZEND_NULL_HANDLER,
63326 		ZEND_NULL_HANDLER,
63327 		ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
63328 		ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
63329 		ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
63330 		ZEND_NULL_HANDLER,
63331 		ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
63332 		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
63333 		ZEND_NULL_HANDLER,
63334 		ZEND_NULL_HANDLER,
63335 		ZEND_NULL_HANDLER,
63336 		ZEND_NULL_HANDLER,
63337 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
63338 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
63339 		ZEND_NULL_HANDLER,
63340 		ZEND_NULL_HANDLER,
63341 		ZEND_NULL_HANDLER,
63342 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
63343 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
63344 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
63345 		ZEND_NULL_HANDLER,
63346 		ZEND_NULL_HANDLER,
63347 		ZEND_NULL_HANDLER,
63348 		ZEND_NULL_HANDLER,
63349 		ZEND_NULL_HANDLER,
63350 		ZEND_NULL_HANDLER,
63351 		ZEND_NULL_HANDLER,
63352 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
63353 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
63354 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
63355 		ZEND_NULL_HANDLER,
63356 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
63357 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
63358 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
63359 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
63360 		ZEND_NULL_HANDLER,
63361 		ZEND_NULL_HANDLER,
63362 		ZEND_NULL_HANDLER,
63363 		ZEND_NULL_HANDLER,
63364 		ZEND_NULL_HANDLER,
63365 		ZEND_NULL_HANDLER,
63366 		ZEND_NULL_HANDLER,
63367 		ZEND_NULL_HANDLER,
63368 		ZEND_NULL_HANDLER,
63369 		ZEND_NULL_HANDLER,
63370 		ZEND_NULL_HANDLER,
63371 		ZEND_NULL_HANDLER,
63372 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
63373 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
63374 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
63375 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
63376 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
63377 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
63378 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
63379 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
63380 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
63381 		ZEND_NULL_HANDLER,
63382 		ZEND_NULL_HANDLER,
63383 		ZEND_NULL_HANDLER,
63384 		ZEND_NULL_HANDLER,
63385 		ZEND_NULL_HANDLER,
63386 		ZEND_NULL_HANDLER,
63387 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
63388 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
63389 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
63390 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
63391 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
63392 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
63393 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
63394 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
63395 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
63396 		ZEND_NULL_HANDLER,
63397 		ZEND_NULL_HANDLER,
63398 		ZEND_NULL_HANDLER,
63399 		ZEND_NULL_HANDLER,
63400 		ZEND_NULL_HANDLER,
63401 		ZEND_NULL_HANDLER,
63402 		ZEND_NULL_HANDLER,
63403 		ZEND_NULL_HANDLER,
63404 		ZEND_NULL_HANDLER,
63405 		ZEND_NULL_HANDLER,
63406 		ZEND_NULL_HANDLER,
63407 		ZEND_NULL_HANDLER,
63408 		ZEND_NULL_HANDLER,
63409 		ZEND_NULL_HANDLER,
63410 		ZEND_NULL_HANDLER,
63411 		ZEND_NULL_HANDLER,
63412 		ZEND_NULL_HANDLER,
63413 		ZEND_NULL_HANDLER,
63414 		ZEND_NULL_HANDLER,
63415 		ZEND_NULL_HANDLER,
63416 		ZEND_NULL_HANDLER,
63417 		ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
63418 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
63419 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
63420 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
63421 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
63422 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
63423 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
63424 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
63425 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
63426 		ZEND_NULL_HANDLER,
63427 		ZEND_NULL_HANDLER,
63428 		ZEND_NULL_HANDLER,
63429 		ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
63430 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
63431 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
63432 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
63433 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
63434 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
63435 		ZEND_NULL_HANDLER,
63436 		ZEND_NULL_HANDLER,
63437 		ZEND_NULL_HANDLER,
63438 		ZEND_NULL_HANDLER,
63439 		ZEND_NULL_HANDLER,
63440 		ZEND_NULL_HANDLER,
63441 		ZEND_NULL_HANDLER,
63442 		ZEND_NULL_HANDLER,
63443 		ZEND_NULL_HANDLER,
63444 		ZEND_NULL_HANDLER,
63445 		ZEND_NULL_HANDLER,
63446 		ZEND_NULL_HANDLER,
63447 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
63448 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
63449 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
63450 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
63451 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
63452 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
63453 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
63454 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
63455 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
63456 		ZEND_NULL_HANDLER,
63457 		ZEND_NULL_HANDLER,
63458 		ZEND_NULL_HANDLER,
63459 		ZEND_NULL_HANDLER,
63460 		ZEND_NULL_HANDLER,
63461 		ZEND_NULL_HANDLER,
63462 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
63463 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
63464 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
63465 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
63466 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
63467 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
63468 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
63469 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
63470 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
63471 		ZEND_NULL_HANDLER,
63472 		ZEND_NULL_HANDLER,
63473 		ZEND_NULL_HANDLER,
63474 		ZEND_NULL_HANDLER,
63475 		ZEND_NULL_HANDLER,
63476 		ZEND_NULL_HANDLER,
63477 		ZEND_NULL_HANDLER,
63478 		ZEND_NULL_HANDLER,
63479 		ZEND_NULL_HANDLER,
63480 		ZEND_NULL_HANDLER,
63481 		ZEND_NULL_HANDLER,
63482 		ZEND_NULL_HANDLER,
63483 		ZEND_NULL_HANDLER,
63484 		ZEND_NULL_HANDLER,
63485 		ZEND_NULL_HANDLER,
63486 		ZEND_NULL_HANDLER,
63487 		ZEND_NULL_HANDLER,
63488 		ZEND_NULL_HANDLER,
63489 		ZEND_NULL_HANDLER,
63490 		ZEND_NULL_HANDLER,
63491 		ZEND_NULL_HANDLER,
63492 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
63493 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
63494 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
63495 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
63496 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
63497 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
63498 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
63499 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
63500 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
63501 		ZEND_NULL_HANDLER,
63502 		ZEND_NULL_HANDLER,
63503 		ZEND_NULL_HANDLER,
63504 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
63505 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
63506 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
63507 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
63508 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
63509 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
63510 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
63511 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63512 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63513 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
63514 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63515 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63516 		ZEND_NULL_HANDLER,
63517 		ZEND_NULL_HANDLER,
63518 		ZEND_NULL_HANDLER,
63519 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
63520 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63521 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63522 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
63523 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63524 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63525 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63526 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63527 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63528 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63529 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63530 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63531 		ZEND_NULL_HANDLER,
63532 		ZEND_NULL_HANDLER,
63533 		ZEND_NULL_HANDLER,
63534 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63535 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63536 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63537 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
63538 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63539 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63540 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63541 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63542 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63543 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63544 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63545 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63546 		ZEND_NULL_HANDLER,
63547 		ZEND_NULL_HANDLER,
63548 		ZEND_NULL_HANDLER,
63549 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63550 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63551 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63552 		ZEND_NULL_HANDLER,
63553 		ZEND_NULL_HANDLER,
63554 		ZEND_NULL_HANDLER,
63555 		ZEND_NULL_HANDLER,
63556 		ZEND_NULL_HANDLER,
63557 		ZEND_NULL_HANDLER,
63558 		ZEND_NULL_HANDLER,
63559 		ZEND_NULL_HANDLER,
63560 		ZEND_NULL_HANDLER,
63561 		ZEND_NULL_HANDLER,
63562 		ZEND_NULL_HANDLER,
63563 		ZEND_NULL_HANDLER,
63564 		ZEND_NULL_HANDLER,
63565 		ZEND_NULL_HANDLER,
63566 		ZEND_NULL_HANDLER,
63567 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
63568 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63569 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63570 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63571 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63572 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63573 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63574 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63575 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63576 		ZEND_NULL_HANDLER,
63577 		ZEND_NULL_HANDLER,
63578 		ZEND_NULL_HANDLER,
63579 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63580 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63581 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63582 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
63583 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
63584 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
63585 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
63586 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63587 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63588 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
63589 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63590 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63591 		ZEND_NULL_HANDLER,
63592 		ZEND_NULL_HANDLER,
63593 		ZEND_NULL_HANDLER,
63594 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
63595 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63596 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63597 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
63598 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63599 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63600 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63601 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63602 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63603 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63604 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63605 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63606 		ZEND_NULL_HANDLER,
63607 		ZEND_NULL_HANDLER,
63608 		ZEND_NULL_HANDLER,
63609 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63610 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63611 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63612 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
63613 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63614 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63615 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63616 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63617 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63618 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63619 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63620 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63621 		ZEND_NULL_HANDLER,
63622 		ZEND_NULL_HANDLER,
63623 		ZEND_NULL_HANDLER,
63624 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63625 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63626 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63627 		ZEND_NULL_HANDLER,
63628 		ZEND_NULL_HANDLER,
63629 		ZEND_NULL_HANDLER,
63630 		ZEND_NULL_HANDLER,
63631 		ZEND_NULL_HANDLER,
63632 		ZEND_NULL_HANDLER,
63633 		ZEND_NULL_HANDLER,
63634 		ZEND_NULL_HANDLER,
63635 		ZEND_NULL_HANDLER,
63636 		ZEND_NULL_HANDLER,
63637 		ZEND_NULL_HANDLER,
63638 		ZEND_NULL_HANDLER,
63639 		ZEND_NULL_HANDLER,
63640 		ZEND_NULL_HANDLER,
63641 		ZEND_NULL_HANDLER,
63642 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
63643 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63644 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63645 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63646 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63647 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63648 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63649 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63650 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63651 		ZEND_NULL_HANDLER,
63652 		ZEND_NULL_HANDLER,
63653 		ZEND_NULL_HANDLER,
63654 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63655 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63656 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63657 		ZEND_NULL_HANDLER,
63658 		ZEND_NULL_HANDLER,
63659 		ZEND_NULL_HANDLER,
63660 		ZEND_NULL_HANDLER,
63661 		ZEND_NULL_HANDLER,
63662 		ZEND_NULL_HANDLER,
63663 		ZEND_NULL_HANDLER,
63664 		ZEND_NULL_HANDLER,
63665 		ZEND_NULL_HANDLER,
63666 		ZEND_NULL_HANDLER,
63667 		ZEND_NULL_HANDLER,
63668 		ZEND_NULL_HANDLER,
63669 		ZEND_NULL_HANDLER,
63670 		ZEND_NULL_HANDLER,
63671 		ZEND_NULL_HANDLER,
63672 		ZEND_NULL_HANDLER,
63673 		ZEND_NULL_HANDLER,
63674 		ZEND_NULL_HANDLER,
63675 		ZEND_NULL_HANDLER,
63676 		ZEND_NULL_HANDLER,
63677 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
63678 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
63679 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
63680 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
63681 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
63682 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
63683 		ZEND_NULL_HANDLER,
63684 		ZEND_NULL_HANDLER,
63685 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
63686 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER,
63687 		ZEND_NULL_HANDLER,
63688 		ZEND_NULL_HANDLER,
63689 		ZEND_NULL_HANDLER,
63690 		ZEND_NULL_HANDLER,
63691 		ZEND_NULL_HANDLER,
63692 		ZEND_NULL_HANDLER,
63693 		ZEND_NULL_HANDLER,
63694 		ZEND_NULL_HANDLER,
63695 		ZEND_NULL_HANDLER,
63696 		ZEND_NULL_HANDLER,
63697 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
63698 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
63699 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
63700 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
63701 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
63702 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
63703 		ZEND_NULL_HANDLER,
63704 		ZEND_NULL_HANDLER,
63705 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
63706 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER,
63707 		ZEND_NULL_HANDLER,
63708 		ZEND_NULL_HANDLER,
63709 		ZEND_NULL_HANDLER,
63710 		ZEND_NULL_HANDLER,
63711 		ZEND_NULL_HANDLER,
63712 		ZEND_NULL_HANDLER,
63713 		ZEND_NULL_HANDLER,
63714 		ZEND_NULL_HANDLER,
63715 		ZEND_NULL_HANDLER,
63716 		ZEND_NULL_HANDLER,
63717 		ZEND_NULL_HANDLER,
63718 		ZEND_NULL_HANDLER,
63719 		ZEND_NULL_HANDLER,
63720 		ZEND_NULL_HANDLER,
63721 		ZEND_NULL_HANDLER,
63722 		ZEND_NULL_HANDLER,
63723 		ZEND_NULL_HANDLER,
63724 		ZEND_NULL_HANDLER,
63725 		ZEND_NULL_HANDLER,
63726 		ZEND_NULL_HANDLER,
63727 		ZEND_NULL_HANDLER,
63728 		ZEND_NULL_HANDLER,
63729 		ZEND_NULL_HANDLER,
63730 		ZEND_NULL_HANDLER,
63731 		ZEND_NULL_HANDLER,
63732 		ZEND_NULL_HANDLER,
63733 		ZEND_NULL_HANDLER,
63734 		ZEND_NULL_HANDLER,
63735 		ZEND_NULL_HANDLER,
63736 		ZEND_NULL_HANDLER,
63737 		ZEND_NULL_HANDLER,
63738 		ZEND_NULL_HANDLER,
63739 		ZEND_NULL_HANDLER,
63740 		ZEND_NULL_HANDLER,
63741 		ZEND_NULL_HANDLER,
63742 		ZEND_NULL_HANDLER,
63743 		ZEND_NULL_HANDLER,
63744 		ZEND_NULL_HANDLER,
63745 		ZEND_NULL_HANDLER,
63746 		ZEND_NULL_HANDLER,
63747 		ZEND_NULL_HANDLER,
63748 		ZEND_NULL_HANDLER,
63749 		ZEND_NULL_HANDLER,
63750 		ZEND_NULL_HANDLER,
63751 		ZEND_NULL_HANDLER,
63752 		ZEND_NULL_HANDLER,
63753 		ZEND_NULL_HANDLER,
63754 		ZEND_NULL_HANDLER,
63755 		ZEND_NULL_HANDLER,
63756 		ZEND_NULL_HANDLER,
63757 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
63758 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
63759 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
63760 		ZEND_NULL_HANDLER,
63761 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
63762 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
63763 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
63764 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
63765 		ZEND_NULL_HANDLER,
63766 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
63767 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
63768 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
63769 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
63770 		ZEND_NULL_HANDLER,
63771 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
63772 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
63773 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
63774 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
63775 		ZEND_NULL_HANDLER,
63776 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
63777 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
63778 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
63779 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
63780 		ZEND_NULL_HANDLER,
63781 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
63782 		ZEND_NULL_HANDLER,
63783 		ZEND_NULL_HANDLER,
63784 		ZEND_NULL_HANDLER,
63785 		ZEND_NULL_HANDLER,
63786 		ZEND_NULL_HANDLER,
63787 		ZEND_NULL_HANDLER,
63788 		ZEND_NULL_HANDLER,
63789 		ZEND_NULL_HANDLER,
63790 		ZEND_NULL_HANDLER,
63791 		ZEND_NULL_HANDLER,
63792 		ZEND_NULL_HANDLER,
63793 		ZEND_NULL_HANDLER,
63794 		ZEND_NULL_HANDLER,
63795 		ZEND_NULL_HANDLER,
63796 		ZEND_NULL_HANDLER,
63797 		ZEND_NULL_HANDLER,
63798 		ZEND_NULL_HANDLER,
63799 		ZEND_NULL_HANDLER,
63800 		ZEND_NULL_HANDLER,
63801 		ZEND_NULL_HANDLER,
63802 		ZEND_NULL_HANDLER,
63803 		ZEND_NULL_HANDLER,
63804 		ZEND_NULL_HANDLER,
63805 		ZEND_NULL_HANDLER,
63806 		ZEND_NULL_HANDLER,
63807 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
63808 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
63809 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
63810 		ZEND_NULL_HANDLER,
63811 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
63812 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
63813 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
63814 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
63815 		ZEND_NULL_HANDLER,
63816 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
63817 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
63818 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
63819 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
63820 		ZEND_NULL_HANDLER,
63821 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
63822 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
63823 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
63824 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
63825 		ZEND_NULL_HANDLER,
63826 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
63827 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
63828 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
63829 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
63830 		ZEND_NULL_HANDLER,
63831 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
63832 		ZEND_NULL_HANDLER,
63833 		ZEND_NULL_HANDLER,
63834 		ZEND_NULL_HANDLER,
63835 		ZEND_NULL_HANDLER,
63836 		ZEND_NULL_HANDLER,
63837 		ZEND_NULL_HANDLER,
63838 		ZEND_NULL_HANDLER,
63839 		ZEND_NULL_HANDLER,
63840 		ZEND_NULL_HANDLER,
63841 		ZEND_NULL_HANDLER,
63842 		ZEND_NULL_HANDLER,
63843 		ZEND_NULL_HANDLER,
63844 		ZEND_NULL_HANDLER,
63845 		ZEND_NULL_HANDLER,
63846 		ZEND_NULL_HANDLER,
63847 		ZEND_NULL_HANDLER,
63848 		ZEND_NULL_HANDLER,
63849 		ZEND_NULL_HANDLER,
63850 		ZEND_NULL_HANDLER,
63851 		ZEND_NULL_HANDLER,
63852 		ZEND_NULL_HANDLER,
63853 		ZEND_NULL_HANDLER,
63854 		ZEND_NULL_HANDLER,
63855 		ZEND_NULL_HANDLER,
63856 		ZEND_NULL_HANDLER,
63857 		ZEND_NULL_HANDLER,
63858 		ZEND_NULL_HANDLER,
63859 		ZEND_NULL_HANDLER,
63860 		ZEND_NULL_HANDLER,
63861 		ZEND_NULL_HANDLER,
63862 		ZEND_NULL_HANDLER,
63863 		ZEND_NULL_HANDLER,
63864 		ZEND_NULL_HANDLER,
63865 		ZEND_NULL_HANDLER,
63866 		ZEND_NULL_HANDLER,
63867 		ZEND_NULL_HANDLER,
63868 		ZEND_NULL_HANDLER,
63869 		ZEND_NULL_HANDLER,
63870 		ZEND_NULL_HANDLER,
63871 		ZEND_NULL_HANDLER,
63872 		ZEND_NULL_HANDLER,
63873 		ZEND_NULL_HANDLER,
63874 		ZEND_NULL_HANDLER,
63875 		ZEND_NULL_HANDLER,
63876 		ZEND_NULL_HANDLER,
63877 		ZEND_NULL_HANDLER,
63878 		ZEND_NULL_HANDLER,
63879 		ZEND_NULL_HANDLER,
63880 		ZEND_NULL_HANDLER,
63881 		ZEND_NULL_HANDLER,
63882 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
63883 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
63884 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
63885 		ZEND_NULL_HANDLER,
63886 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
63887 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
63888 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
63889 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
63890 		ZEND_NULL_HANDLER,
63891 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
63892 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
63893 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
63894 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
63895 		ZEND_NULL_HANDLER,
63896 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
63897 		ZEND_NULL_HANDLER,
63898 		ZEND_NULL_HANDLER,
63899 		ZEND_NULL_HANDLER,
63900 		ZEND_NULL_HANDLER,
63901 		ZEND_NULL_HANDLER,
63902 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
63903 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
63904 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
63905 		ZEND_NULL_HANDLER,
63906 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
63907 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
63908 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
63909 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
63910 		ZEND_NULL_HANDLER,
63911 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
63912 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
63913 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
63914 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
63915 		ZEND_NULL_HANDLER,
63916 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
63917 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
63918 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
63919 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
63920 		ZEND_NULL_HANDLER,
63921 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
63922 		ZEND_NULL_HANDLER,
63923 		ZEND_NULL_HANDLER,
63924 		ZEND_NULL_HANDLER,
63925 		ZEND_NULL_HANDLER,
63926 		ZEND_NULL_HANDLER,
63927 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
63928 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
63929 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
63930 		ZEND_NULL_HANDLER,
63931 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
63932 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
63933 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
63934 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
63935 		ZEND_NULL_HANDLER,
63936 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
63937 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
63938 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
63939 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
63940 		ZEND_NULL_HANDLER,
63941 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
63942 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
63943 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
63944 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
63945 		ZEND_NULL_HANDLER,
63946 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
63947 		ZEND_NULL_HANDLER,
63948 		ZEND_NULL_HANDLER,
63949 		ZEND_NULL_HANDLER,
63950 		ZEND_NULL_HANDLER,
63951 		ZEND_NULL_HANDLER,
63952 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
63953 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
63954 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
63955 		ZEND_NULL_HANDLER,
63956 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER,
63957 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER,
63958 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER,
63959 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER,
63960 		ZEND_NULL_HANDLER,
63961 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER,
63962 		ZEND_NULL_HANDLER,
63963 		ZEND_NULL_HANDLER,
63964 		ZEND_NULL_HANDLER,
63965 		ZEND_NULL_HANDLER,
63966 		ZEND_NULL_HANDLER,
63967 		ZEND_NULL_HANDLER,
63968 		ZEND_NULL_HANDLER,
63969 		ZEND_NULL_HANDLER,
63970 		ZEND_NULL_HANDLER,
63971 		ZEND_NULL_HANDLER,
63972 		ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER,
63973 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
63974 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
63975 		ZEND_NULL_HANDLER,
63976 		ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER,
63977 		ZEND_NULL_HANDLER,
63978 		ZEND_NULL_HANDLER,
63979 		ZEND_NULL_HANDLER,
63980 		ZEND_NULL_HANDLER,
63981 		ZEND_NULL_HANDLER,
63982 		ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER,
63983 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
63984 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
63985 		ZEND_NULL_HANDLER,
63986 		ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER,
63987 		ZEND_NULL_HANDLER,
63988 		ZEND_NULL_HANDLER,
63989 		ZEND_NULL_HANDLER,
63990 		ZEND_NULL_HANDLER,
63991 		ZEND_NULL_HANDLER,
63992 		ZEND_NULL_HANDLER,
63993 		ZEND_NULL_HANDLER,
63994 		ZEND_NULL_HANDLER,
63995 		ZEND_NULL_HANDLER,
63996 		ZEND_NULL_HANDLER,
63997 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER,
63998 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
63999 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
64000 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER,
64001 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER,
64002 		ZEND_NULL_HANDLER,
64003 		ZEND_NULL_HANDLER,
64004 		ZEND_NULL_HANDLER,
64005 		ZEND_NULL_HANDLER,
64006 		ZEND_NULL_HANDLER,
64007 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER,
64008 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
64009 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
64010 		ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER,
64011 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER,
64012 		ZEND_NULL_HANDLER,
64013 		ZEND_NULL_HANDLER,
64014 		ZEND_NULL_HANDLER,
64015 		ZEND_NULL_HANDLER,
64016 		ZEND_NULL_HANDLER,
64017 		ZEND_NULL_HANDLER,
64018 		ZEND_NULL_HANDLER,
64019 		ZEND_NULL_HANDLER,
64020 		ZEND_NULL_HANDLER,
64021 		ZEND_NULL_HANDLER,
64022 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER,
64023 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
64024 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
64025 		ZEND_NULL_HANDLER,
64026 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER,
64027 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER,
64028 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
64029 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
64030 		ZEND_NULL_HANDLER,
64031 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER,
64032 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER,
64033 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
64034 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
64035 		ZEND_NULL_HANDLER,
64036 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER,
64037 		ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER,
64038 		ZEND_NULL_HANDLER,
64039 		ZEND_NULL_HANDLER,
64040 		ZEND_NULL_HANDLER,
64041 		ZEND_NULL_HANDLER,
64042 		ZEND_NULL_HANDLER,
64043 		ZEND_NULL_HANDLER,
64044 		ZEND_NULL_HANDLER,
64045 		ZEND_NULL_HANDLER,
64046 		ZEND_NULL_HANDLER,
64047 		ZEND_NULL_HANDLER,
64048 		ZEND_NULL_HANDLER,
64049 		ZEND_NULL_HANDLER,
64050 		ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
64051 		ZEND_NULL_HANDLER,
64052 		ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
64053 		ZEND_NULL_HANDLER,
64054 		ZEND_NULL_HANDLER,
64055 		ZEND_NULL_HANDLER,
64056 		ZEND_NULL_HANDLER,
64057 		ZEND_NULL_HANDLER,
64058 		ZEND_NULL_HANDLER,
64059 		ZEND_NULL_HANDLER,
64060 		ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
64061 		ZEND_NULL_HANDLER,
64062 		ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
64063 		ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
64064 		ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
64065 		ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
64066 		ZEND_NULL_HANDLER,
64067 		ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
64068 		ZEND_NULL_HANDLER,
64069 		ZEND_NULL_HANDLER,
64070 		ZEND_NULL_HANDLER,
64071 		ZEND_NULL_HANDLER,
64072 		ZEND_NULL_HANDLER,
64073 		ZEND_NULL_HANDLER,
64074 		ZEND_NULL_HANDLER,
64075 		ZEND_NULL_HANDLER,
64076 		ZEND_NULL_HANDLER,
64077 		ZEND_NULL_HANDLER,
64078 		ZEND_NULL_HANDLER,
64079 		ZEND_NULL_HANDLER,
64080 		ZEND_NULL_HANDLER,
64081 		ZEND_NULL_HANDLER,
64082 		ZEND_NULL_HANDLER,
64083 		ZEND_NULL_HANDLER,
64084 		ZEND_NULL_HANDLER,
64085 		ZEND_NULL_HANDLER,
64086 		ZEND_NULL_HANDLER,
64087 		ZEND_NULL_HANDLER,
64088 		ZEND_NULL_HANDLER,
64089 		ZEND_NULL_HANDLER,
64090 		ZEND_NULL_HANDLER,
64091 		ZEND_NULL_HANDLER,
64092 		ZEND_NULL_HANDLER,
64093 		ZEND_NULL_HANDLER,
64094 		ZEND_NULL_HANDLER,
64095 		ZEND_NULL_HANDLER,
64096 		ZEND_NULL_HANDLER,
64097 		ZEND_NULL_HANDLER,
64098 		ZEND_NULL_HANDLER,
64099 		ZEND_NULL_HANDLER,
64100 		ZEND_NULL_HANDLER,
64101 		ZEND_NULL_HANDLER,
64102 		ZEND_NULL_HANDLER,
64103 		ZEND_NULL_HANDLER,
64104 		ZEND_NULL_HANDLER,
64105 		ZEND_NULL_HANDLER,
64106 		ZEND_NULL_HANDLER,
64107 		ZEND_NULL_HANDLER,
64108 		ZEND_NULL_HANDLER,
64109 		ZEND_NULL_HANDLER,
64110 		ZEND_NULL_HANDLER,
64111 		ZEND_NULL_HANDLER,
64112 		ZEND_NULL_HANDLER,
64113 		ZEND_NULL_HANDLER,
64114 		ZEND_NULL_HANDLER,
64115 		ZEND_NULL_HANDLER,
64116 		ZEND_NULL_HANDLER,
64117 		ZEND_NULL_HANDLER,
64118 		ZEND_NULL_HANDLER,
64119 		ZEND_NULL_HANDLER,
64120 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
64121 		ZEND_NULL_HANDLER,
64122 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
64123 		ZEND_NULL_HANDLER,
64124 		ZEND_NULL_HANDLER,
64125 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
64126 		ZEND_NULL_HANDLER,
64127 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
64128 		ZEND_NULL_HANDLER,
64129 		ZEND_NULL_HANDLER,
64130 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
64131 		ZEND_NULL_HANDLER,
64132 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
64133 		ZEND_NULL_HANDLER,
64134 		ZEND_NULL_HANDLER,
64135 		ZEND_NULL_HANDLER,
64136 		ZEND_NULL_HANDLER,
64137 		ZEND_NULL_HANDLER,
64138 		ZEND_NULL_HANDLER,
64139 		ZEND_NULL_HANDLER,
64140 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
64141 		ZEND_NULL_HANDLER,
64142 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
64143 		ZEND_NULL_HANDLER,
64144 		ZEND_NULL_HANDLER,
64145 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
64146 		ZEND_NULL_HANDLER,
64147 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
64148 		ZEND_NULL_HANDLER,
64149 		ZEND_NULL_HANDLER,
64150 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
64151 		ZEND_NULL_HANDLER,
64152 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
64153 		ZEND_NULL_HANDLER,
64154 		ZEND_NULL_HANDLER,
64155 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
64156 		ZEND_NULL_HANDLER,
64157 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
64158 		ZEND_NULL_HANDLER,
64159 		ZEND_NULL_HANDLER,
64160 		ZEND_NULL_HANDLER,
64161 		ZEND_NULL_HANDLER,
64162 		ZEND_NULL_HANDLER,
64163 		ZEND_NULL_HANDLER,
64164 		ZEND_NULL_HANDLER,
64165 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
64166 		ZEND_NULL_HANDLER,
64167 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
64168 		ZEND_NULL_HANDLER,
64169 		ZEND_NULL_HANDLER,
64170 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
64171 		ZEND_NULL_HANDLER,
64172 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
64173 		ZEND_NULL_HANDLER,
64174 		ZEND_NULL_HANDLER,
64175 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
64176 		ZEND_NULL_HANDLER,
64177 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
64178 		ZEND_NULL_HANDLER,
64179 		ZEND_NULL_HANDLER,
64180 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
64181 		ZEND_NULL_HANDLER,
64182 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
64183 		ZEND_NULL_HANDLER,
64184 		ZEND_NULL_HANDLER,
64185 		ZEND_NULL_HANDLER,
64186 		ZEND_NULL_HANDLER,
64187 		ZEND_NULL_HANDLER,
64188 		ZEND_NULL_HANDLER,
64189 		ZEND_NULL_HANDLER,
64190 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
64191 		ZEND_NULL_HANDLER,
64192 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER,
64193 		ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER,
64194 		ZEND_NULL_HANDLER,
64195 		ZEND_NULL_HANDLER,
64196 		ZEND_NULL_HANDLER,
64197 		ZEND_NULL_HANDLER,
64198 		ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
64199 		ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
64200 		ZEND_NULL_HANDLER,
64201 		ZEND_NULL_HANDLER,
64202 		ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
64203 		ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
64204 		ZEND_NULL_HANDLER,
64205 		ZEND_NULL_HANDLER,
64206 		ZEND_NULL_HANDLER,
64207 		ZEND_NULL_HANDLER,
64208 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
64209 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
64210 		ZEND_NULL_HANDLER,
64211 		ZEND_NULL_HANDLER,
64212 		ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
64213 		ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
64214 		ZEND_NULL_HANDLER,
64215 		ZEND_NULL_HANDLER,
64216 		ZEND_POST_INC_SPEC_VAR_HANDLER,
64217 		ZEND_NULL_HANDLER,
64218 		ZEND_POST_INC_SPEC_CV_HANDLER,
64219 		ZEND_NULL_HANDLER,
64220 		ZEND_NULL_HANDLER,
64221 		ZEND_POST_DEC_SPEC_VAR_HANDLER,
64222 		ZEND_NULL_HANDLER,
64223 		ZEND_POST_DEC_SPEC_CV_HANDLER,
64224 		ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER,
64225 		ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER,
64226 		ZEND_JMP_SPEC_HANDLER,
64227 		ZEND_JMPZ_SPEC_CONST_HANDLER,
64228 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
64229 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
64230 		ZEND_NULL_HANDLER,
64231 		ZEND_JMPZ_SPEC_CV_HANDLER,
64232 		ZEND_JMPNZ_SPEC_CONST_HANDLER,
64233 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
64234 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
64235 		ZEND_NULL_HANDLER,
64236 		ZEND_JMPNZ_SPEC_CV_HANDLER,
64237 		ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
64238 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
64239 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
64240 		ZEND_NULL_HANDLER,
64241 		ZEND_JMPZ_EX_SPEC_CV_HANDLER,
64242 		ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
64243 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
64244 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
64245 		ZEND_NULL_HANDLER,
64246 		ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
64247 		ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
64248 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
64249 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
64250 		ZEND_NULL_HANDLER,
64251 		ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
64252 		ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
64253 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
64254 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
64255 		ZEND_NULL_HANDLER,
64256 		ZEND_NULL_HANDLER,
64257 		ZEND_NULL_HANDLER,
64258 		ZEND_NULL_HANDLER,
64259 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER,
64260 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
64261 		ZEND_NULL_HANDLER,
64262 		ZEND_NULL_HANDLER,
64263 		ZEND_CAST_SPEC_CONST_HANDLER,
64264 		ZEND_CAST_SPEC_TMP_HANDLER,
64265 		ZEND_CAST_SPEC_VAR_HANDLER,
64266 		ZEND_NULL_HANDLER,
64267 		ZEND_CAST_SPEC_CV_HANDLER,
64268 		ZEND_BOOL_SPEC_CONST_HANDLER,
64269 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
64270 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
64271 		ZEND_NULL_HANDLER,
64272 		ZEND_BOOL_SPEC_CV_HANDLER,
64273 		ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
64274 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
64275 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
64276 		ZEND_NULL_HANDLER,
64277 		ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
64278 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
64279 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
64280 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
64281 		ZEND_NULL_HANDLER,
64282 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
64283 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
64284 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
64285 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
64286 		ZEND_NULL_HANDLER,
64287 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
64288 		ZEND_NULL_HANDLER,
64289 		ZEND_NULL_HANDLER,
64290 		ZEND_NULL_HANDLER,
64291 		ZEND_NULL_HANDLER,
64292 		ZEND_NULL_HANDLER,
64293 		ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
64294 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
64295 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
64296 		ZEND_NULL_HANDLER,
64297 		ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
64298 		ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
64299 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
64300 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
64301 		ZEND_NULL_HANDLER,
64302 		ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
64303 		ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
64304 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
64305 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
64306 		ZEND_NULL_HANDLER,
64307 		ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
64308 		ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
64309 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
64310 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
64311 		ZEND_NULL_HANDLER,
64312 		ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
64313 		ZEND_BEGIN_SILENCE_SPEC_HANDLER,
64314 		ZEND_END_SILENCE_SPEC_TMP_HANDLER,
64315 		ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
64316 		ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
64317 		ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
64318 		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
64319 		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
64320 		ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
64321 		ZEND_RETURN_SPEC_CONST_HANDLER,
64322 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
64323 		ZEND_RETURN_SPEC_TMP_HANDLER,
64324 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
64325 		ZEND_RETURN_SPEC_VAR_HANDLER,
64326 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
64327 		ZEND_NULL_HANDLER,
64328 		ZEND_NULL_HANDLER,
64329 		ZEND_RETURN_SPEC_CV_HANDLER,
64330 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
64331 		ZEND_RECV_SPEC_UNUSED_HANDLER,
64332 		ZEND_RECV_INIT_SPEC_CONST_HANDLER,
64333 		ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER,
64334 		ZEND_NULL_HANDLER,
64335 		ZEND_NULL_HANDLER,
64336 		ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER,
64337 		ZEND_NULL_HANDLER,
64338 		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
64339 		ZEND_NULL_HANDLER,
64340 		ZEND_NULL_HANDLER,
64341 		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
64342 		ZEND_NULL_HANDLER,
64343 		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
64344 		ZEND_NULL_HANDLER,
64345 		ZEND_NULL_HANDLER,
64346 		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
64347 		ZEND_NULL_HANDLER,
64348 		ZEND_NULL_HANDLER,
64349 		ZEND_NULL_HANDLER,
64350 		ZEND_NULL_HANDLER,
64351 		ZEND_NULL_HANDLER,
64352 		ZEND_NULL_HANDLER,
64353 		ZEND_NULL_HANDLER,
64354 		ZEND_NULL_HANDLER,
64355 		ZEND_NULL_HANDLER,
64356 		ZEND_NULL_HANDLER,
64357 		ZEND_NULL_HANDLER,
64358 		ZEND_NULL_HANDLER,
64359 		ZEND_NULL_HANDLER,
64360 		ZEND_NULL_HANDLER,
64361 		ZEND_NULL_HANDLER,
64362 		ZEND_NULL_HANDLER,
64363 		ZEND_NULL_HANDLER,
64364 		ZEND_NULL_HANDLER,
64365 		ZEND_NULL_HANDLER,
64366 		ZEND_NULL_HANDLER,
64367 		ZEND_NULL_HANDLER,
64368 		ZEND_NULL_HANDLER,
64369 		ZEND_NULL_HANDLER,
64370 		ZEND_NULL_HANDLER,
64371 		ZEND_NULL_HANDLER,
64372 		ZEND_NULL_HANDLER,
64373 		ZEND_NULL_HANDLER,
64374 		ZEND_NULL_HANDLER,
64375 		ZEND_NULL_HANDLER,
64376 		ZEND_NULL_HANDLER,
64377 		ZEND_NULL_HANDLER,
64378 		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
64379 		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
64380 		ZEND_NULL_HANDLER,
64381 		ZEND_NULL_HANDLER,
64382 		ZEND_NULL_HANDLER,
64383 		ZEND_NULL_HANDLER,
64384 		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER,
64385 		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
64386 		ZEND_NULL_HANDLER,
64387 		ZEND_NULL_HANDLER,
64388 		ZEND_NULL_HANDLER,
64389 		ZEND_NULL_HANDLER,
64390 		ZEND_NULL_HANDLER,
64391 		ZEND_NULL_HANDLER,
64392 		ZEND_NULL_HANDLER,
64393 		ZEND_NULL_HANDLER,
64394 		ZEND_NULL_HANDLER,
64395 		ZEND_NULL_HANDLER,
64396 		ZEND_NULL_HANDLER,
64397 		ZEND_NULL_HANDLER,
64398 		ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
64399 		ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
64400 		ZEND_NULL_HANDLER,
64401 		ZEND_NULL_HANDLER,
64402 		ZEND_NULL_HANDLER,
64403 		ZEND_NULL_HANDLER,
64404 		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER,
64405 		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER,
64406 		ZEND_NULL_HANDLER,
64407 		ZEND_NULL_HANDLER,
64408 		ZEND_NULL_HANDLER,
64409 		ZEND_NULL_HANDLER,
64410 		ZEND_NULL_HANDLER,
64411 		ZEND_NULL_HANDLER,
64412 		ZEND_NULL_HANDLER,
64413 		ZEND_NULL_HANDLER,
64414 		ZEND_NULL_HANDLER,
64415 		ZEND_NULL_HANDLER,
64416 		ZEND_NULL_HANDLER,
64417 		ZEND_NULL_HANDLER,
64418 		ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER,
64419 		ZEND_NULL_HANDLER,
64420 		ZEND_NULL_HANDLER,
64421 		ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER,
64422 		ZEND_NULL_HANDLER,
64423 		ZEND_NULL_HANDLER,
64424 		ZEND_NULL_HANDLER,
64425 		ZEND_NULL_HANDLER,
64426 		ZEND_NULL_HANDLER,
64427 		ZEND_NULL_HANDLER,
64428 		ZEND_SEND_REF_SPEC_CV_CONST_HANDLER,
64429 		ZEND_NULL_HANDLER,
64430 		ZEND_NULL_HANDLER,
64431 		ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER,
64432 		ZEND_NULL_HANDLER,
64433 		ZEND_NEW_SPEC_CONST_UNUSED_HANDLER,
64434 		ZEND_NULL_HANDLER,
64435 		ZEND_NEW_SPEC_VAR_UNUSED_HANDLER,
64436 		ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER,
64437 		ZEND_NULL_HANDLER,
64438 		ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
64439 		ZEND_FREE_SPEC_TMPVAR_HANDLER,
64440 		ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
64441 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
64442 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
64443 		ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
64444 		ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
64445 		ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
64446 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
64447 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
64448 		ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
64449 		ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
64450 		ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
64451 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
64452 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
64453 		ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
64454 		ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
64455 		ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
64456 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
64457 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
64458 		ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
64459 		ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
64460 		ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
64461 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
64462 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
64463 		ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
64464 		ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
64465 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
64466 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
64467 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
64468 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
64469 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
64470 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
64471 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
64472 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
64473 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
64474 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
64475 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
64476 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
64477 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
64478 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
64479 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
64480 		ZEND_NULL_HANDLER,
64481 		ZEND_NULL_HANDLER,
64482 		ZEND_NULL_HANDLER,
64483 		ZEND_NULL_HANDLER,
64484 		ZEND_NULL_HANDLER,
64485 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
64486 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
64487 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
64488 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
64489 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
64490 		ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
64491 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
64492 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
64493 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
64494 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
64495 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
64496 		ZEND_NULL_HANDLER,
64497 		ZEND_NULL_HANDLER,
64498 		ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
64499 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
64500 		ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
64501 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
64502 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
64503 		ZEND_NULL_HANDLER,
64504 		ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
64505 		ZEND_NULL_HANDLER,
64506 		ZEND_NULL_HANDLER,
64507 		ZEND_NULL_HANDLER,
64508 		ZEND_NULL_HANDLER,
64509 		ZEND_NULL_HANDLER,
64510 		ZEND_NULL_HANDLER,
64511 		ZEND_NULL_HANDLER,
64512 		ZEND_NULL_HANDLER,
64513 		ZEND_NULL_HANDLER,
64514 		ZEND_NULL_HANDLER,
64515 		ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
64516 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
64517 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
64518 		ZEND_NULL_HANDLER,
64519 		ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
64520 		ZEND_NULL_HANDLER,
64521 		ZEND_NULL_HANDLER,
64522 		ZEND_NULL_HANDLER,
64523 		ZEND_NULL_HANDLER,
64524 		ZEND_NULL_HANDLER,
64525 		ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
64526 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
64527 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
64528 		ZEND_NULL_HANDLER,
64529 		ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
64530 		ZEND_NULL_HANDLER,
64531 		ZEND_NULL_HANDLER,
64532 		ZEND_NULL_HANDLER,
64533 		ZEND_NULL_HANDLER,
64534 		ZEND_NULL_HANDLER,
64535 		ZEND_NULL_HANDLER,
64536 		ZEND_NULL_HANDLER,
64537 		ZEND_NULL_HANDLER,
64538 		ZEND_NULL_HANDLER,
64539 		ZEND_NULL_HANDLER,
64540 		ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
64541 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
64542 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
64543 		ZEND_NULL_HANDLER,
64544 		ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
64545 		ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
64546 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
64547 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
64548 		ZEND_NULL_HANDLER,
64549 		ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
64550 		ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
64551 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
64552 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
64553 		ZEND_NULL_HANDLER,
64554 		ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
64555 		ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
64556 		ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
64557 		ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
64558 		ZEND_NULL_HANDLER,
64559 		ZEND_FE_RESET_R_SPEC_CV_HANDLER,
64560 		ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
64561 		ZEND_EXIT_SPEC_HANDLER,
64562 		ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
64563 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
64564 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
64565 		ZEND_NULL_HANDLER,
64566 		ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
64567 		ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
64568 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
64569 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
64570 		ZEND_NULL_HANDLER,
64571 		ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
64572 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
64573 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
64574 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
64575 		ZEND_NULL_HANDLER,
64576 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
64577 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
64578 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
64579 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
64580 		ZEND_NULL_HANDLER,
64581 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
64582 		ZEND_NULL_HANDLER,
64583 		ZEND_NULL_HANDLER,
64584 		ZEND_NULL_HANDLER,
64585 		ZEND_NULL_HANDLER,
64586 		ZEND_NULL_HANDLER,
64587 		ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
64588 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
64589 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
64590 		ZEND_NULL_HANDLER,
64591 		ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
64592 		ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
64593 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
64594 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
64595 		ZEND_NULL_HANDLER,
64596 		ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
64597 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
64598 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
64599 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
64600 		ZEND_NULL_HANDLER,
64601 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
64602 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
64603 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
64604 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
64605 		ZEND_NULL_HANDLER,
64606 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
64607 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
64608 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
64609 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
64610 		ZEND_NULL_HANDLER,
64611 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
64612 		ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
64613 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
64614 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
64615 		ZEND_NULL_HANDLER,
64616 		ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
64617 		ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
64618 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
64619 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
64620 		ZEND_NULL_HANDLER,
64621 		ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
64622 		ZEND_NULL_HANDLER,
64623 		ZEND_NULL_HANDLER,
64624 		ZEND_NULL_HANDLER,
64625 		ZEND_NULL_HANDLER,
64626 		ZEND_NULL_HANDLER,
64627 		ZEND_NULL_HANDLER,
64628 		ZEND_NULL_HANDLER,
64629 		ZEND_NULL_HANDLER,
64630 		ZEND_NULL_HANDLER,
64631 		ZEND_NULL_HANDLER,
64632 		ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
64633 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
64634 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
64635 		ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
64636 		ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
64637 		ZEND_NULL_HANDLER,
64638 		ZEND_NULL_HANDLER,
64639 		ZEND_NULL_HANDLER,
64640 		ZEND_NULL_HANDLER,
64641 		ZEND_NULL_HANDLER,
64642 		ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
64643 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
64644 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
64645 		ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
64646 		ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
64647 		ZEND_NULL_HANDLER,
64648 		ZEND_NULL_HANDLER,
64649 		ZEND_NULL_HANDLER,
64650 		ZEND_NULL_HANDLER,
64651 		ZEND_NULL_HANDLER,
64652 		ZEND_NULL_HANDLER,
64653 		ZEND_NULL_HANDLER,
64654 		ZEND_NULL_HANDLER,
64655 		ZEND_NULL_HANDLER,
64656 		ZEND_NULL_HANDLER,
64657 		ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
64658 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
64659 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
64660 		ZEND_NULL_HANDLER,
64661 		ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
64662 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
64663 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
64664 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
64665 		ZEND_NULL_HANDLER,
64666 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
64667 		ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
64668 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
64669 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
64670 		ZEND_NULL_HANDLER,
64671 		ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
64672 		ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
64673 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
64674 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
64675 		ZEND_NULL_HANDLER,
64676 		ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
64677 		ZEND_NULL_HANDLER,
64678 		ZEND_NULL_HANDLER,
64679 		ZEND_NULL_HANDLER,
64680 		ZEND_NULL_HANDLER,
64681 		ZEND_NULL_HANDLER,
64682 		ZEND_NULL_HANDLER,
64683 		ZEND_NULL_HANDLER,
64684 		ZEND_NULL_HANDLER,
64685 		ZEND_NULL_HANDLER,
64686 		ZEND_NULL_HANDLER,
64687 		ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
64688 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
64689 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
64690 		ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
64691 		ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
64692 		ZEND_NULL_HANDLER,
64693 		ZEND_NULL_HANDLER,
64694 		ZEND_NULL_HANDLER,
64695 		ZEND_NULL_HANDLER,
64696 		ZEND_NULL_HANDLER,
64697 		ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
64698 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
64699 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
64700 		ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
64701 		ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
64702 		ZEND_NULL_HANDLER,
64703 		ZEND_NULL_HANDLER,
64704 		ZEND_NULL_HANDLER,
64705 		ZEND_NULL_HANDLER,
64706 		ZEND_NULL_HANDLER,
64707 		ZEND_NULL_HANDLER,
64708 		ZEND_NULL_HANDLER,
64709 		ZEND_NULL_HANDLER,
64710 		ZEND_NULL_HANDLER,
64711 		ZEND_NULL_HANDLER,
64712 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
64713 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
64714 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
64715 		ZEND_NULL_HANDLER,
64716 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
64717 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
64718 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
64719 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
64720 		ZEND_NULL_HANDLER,
64721 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
64722 		ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
64723 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
64724 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
64725 		ZEND_NULL_HANDLER,
64726 		ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
64727 		ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
64728 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
64729 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
64730 		ZEND_NULL_HANDLER,
64731 		ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
64732 		ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
64733 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
64734 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
64735 		ZEND_NULL_HANDLER,
64736 		ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
64737 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
64738 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
64739 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
64740 		ZEND_NULL_HANDLER,
64741 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
64742 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
64743 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
64744 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
64745 		ZEND_NULL_HANDLER,
64746 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
64747 		ZEND_NULL_HANDLER,
64748 		ZEND_NULL_HANDLER,
64749 		ZEND_NULL_HANDLER,
64750 		ZEND_NULL_HANDLER,
64751 		ZEND_NULL_HANDLER,
64752 		ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
64753 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
64754 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
64755 		ZEND_NULL_HANDLER,
64756 		ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
64757 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
64758 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
64759 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
64760 		ZEND_NULL_HANDLER,
64761 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
64762 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
64763 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
64764 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
64765 		ZEND_NULL_HANDLER,
64766 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
64767 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
64768 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
64769 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
64770 		ZEND_NULL_HANDLER,
64771 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
64772 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
64773 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
64774 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
64775 		ZEND_NULL_HANDLER,
64776 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
64777 		ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
64778 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
64779 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
64780 		ZEND_NULL_HANDLER,
64781 		ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
64782 		ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
64783 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
64784 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
64785 		ZEND_NULL_HANDLER,
64786 		ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
64787 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
64788 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
64789 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
64790 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
64791 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
64792 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
64793 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
64794 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
64795 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
64796 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
64797 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
64798 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
64799 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
64800 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
64801 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
64802 		ZEND_NULL_HANDLER,
64803 		ZEND_NULL_HANDLER,
64804 		ZEND_NULL_HANDLER,
64805 		ZEND_NULL_HANDLER,
64806 		ZEND_NULL_HANDLER,
64807 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
64808 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
64809 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
64810 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
64811 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
64812 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
64813 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
64814 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
64815 		ZEND_NULL_HANDLER,
64816 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
64817 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
64818 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
64819 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
64820 		ZEND_NULL_HANDLER,
64821 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
64822 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
64823 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
64824 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
64825 		ZEND_NULL_HANDLER,
64826 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
64827 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
64828 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
64829 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
64830 		ZEND_NULL_HANDLER,
64831 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
64832 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
64833 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
64834 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
64835 		ZEND_NULL_HANDLER,
64836 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
64837 		ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
64838 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
64839 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
64840 		ZEND_NULL_HANDLER,
64841 		ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
64842 		ZEND_NULL_HANDLER,
64843 		ZEND_NULL_HANDLER,
64844 		ZEND_NULL_HANDLER,
64845 		ZEND_NULL_HANDLER,
64846 		ZEND_NULL_HANDLER,
64847 		ZEND_NULL_HANDLER,
64848 		ZEND_NULL_HANDLER,
64849 		ZEND_NULL_HANDLER,
64850 		ZEND_NULL_HANDLER,
64851 		ZEND_NULL_HANDLER,
64852 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
64853 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
64854 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
64855 		ZEND_NULL_HANDLER,
64856 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
64857 		ZEND_NULL_HANDLER,
64858 		ZEND_NULL_HANDLER,
64859 		ZEND_NULL_HANDLER,
64860 		ZEND_NULL_HANDLER,
64861 		ZEND_NULL_HANDLER,
64862 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
64863 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
64864 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
64865 		ZEND_NULL_HANDLER,
64866 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
64867 		ZEND_NULL_HANDLER,
64868 		ZEND_NULL_HANDLER,
64869 		ZEND_NULL_HANDLER,
64870 		ZEND_NULL_HANDLER,
64871 		ZEND_NULL_HANDLER,
64872 		ZEND_NULL_HANDLER,
64873 		ZEND_NULL_HANDLER,
64874 		ZEND_NULL_HANDLER,
64875 		ZEND_NULL_HANDLER,
64876 		ZEND_NULL_HANDLER,
64877 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
64878 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
64879 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
64880 		ZEND_NULL_HANDLER,
64881 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
64882 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
64883 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
64884 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
64885 		ZEND_NULL_HANDLER,
64886 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
64887 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
64888 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
64889 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
64890 		ZEND_NULL_HANDLER,
64891 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
64892 		ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER,
64893 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
64894 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
64895 		ZEND_NULL_HANDLER,
64896 		ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER,
64897 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
64898 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
64899 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
64900 		ZEND_NULL_HANDLER,
64901 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
64902 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
64903 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
64904 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
64905 		ZEND_NULL_HANDLER,
64906 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
64907 		ZEND_NULL_HANDLER,
64908 		ZEND_NULL_HANDLER,
64909 		ZEND_NULL_HANDLER,
64910 		ZEND_NULL_HANDLER,
64911 		ZEND_NULL_HANDLER,
64912 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
64913 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
64914 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
64915 		ZEND_NULL_HANDLER,
64916 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
64917 		ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
64918 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
64919 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
64920 		ZEND_NULL_HANDLER,
64921 		ZEND_NULL_HANDLER,
64922 		ZEND_NULL_HANDLER,
64923 		ZEND_NULL_HANDLER,
64924 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER,
64925 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER,
64926 		ZEND_NULL_HANDLER,
64927 		ZEND_NULL_HANDLER,
64928 		ZEND_EXT_STMT_SPEC_HANDLER,
64929 		ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
64930 		ZEND_EXT_FCALL_END_SPEC_HANDLER,
64931 		ZEND_EXT_NOP_SPEC_HANDLER,
64932 		ZEND_TICKS_SPEC_HANDLER,
64933 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER,
64934 		ZEND_NULL_HANDLER,
64935 		ZEND_NULL_HANDLER,
64936 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER,
64937 		ZEND_NULL_HANDLER,
64938 		ZEND_CATCH_SPEC_CONST_HANDLER,
64939 		ZEND_THROW_SPEC_CONST_HANDLER,
64940 		ZEND_THROW_SPEC_TMPVAR_HANDLER,
64941 		ZEND_THROW_SPEC_TMPVAR_HANDLER,
64942 		ZEND_NULL_HANDLER,
64943 		ZEND_THROW_SPEC_CV_HANDLER,
64944 		ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER,
64945 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
64946 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
64947 		ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
64948 		ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER,
64949 		ZEND_CLONE_SPEC_CONST_HANDLER,
64950 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
64951 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
64952 		ZEND_CLONE_SPEC_UNUSED_HANDLER,
64953 		ZEND_CLONE_SPEC_CV_HANDLER,
64954 		ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
64955 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
64956 		ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
64957 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
64958 		ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
64959 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
64960 		ZEND_NULL_HANDLER,
64961 		ZEND_NULL_HANDLER,
64962 		ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
64963 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
64964 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
64965 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
64966 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
64967 		ZEND_NULL_HANDLER,
64968 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
64969 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
64970 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
64971 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
64972 		ZEND_NULL_HANDLER,
64973 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
64974 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
64975 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
64976 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
64977 		ZEND_NULL_HANDLER,
64978 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
64979 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
64980 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
64981 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
64982 		ZEND_NULL_HANDLER,
64983 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
64984 		ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
64985 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
64986 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
64987 		ZEND_NULL_HANDLER,
64988 		ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
64989 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
64990 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
64991 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
64992 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
64993 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
64994 		ZEND_NULL_HANDLER,
64995 		ZEND_NULL_HANDLER,
64996 		ZEND_NULL_HANDLER,
64997 		ZEND_NULL_HANDLER,
64998 		ZEND_NULL_HANDLER,
64999 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
65000 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
65001 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
65002 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
65003 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
65004 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
65005 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
65006 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
65007 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
65008 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
65009 		ZEND_NULL_HANDLER,
65010 		ZEND_NULL_HANDLER,
65011 		ZEND_NULL_HANDLER,
65012 		ZEND_NULL_HANDLER,
65013 		ZEND_NULL_HANDLER,
65014 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
65015 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
65016 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
65017 		ZEND_NULL_HANDLER,
65018 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
65019 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
65020 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
65021 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
65022 		ZEND_NULL_HANDLER,
65023 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
65024 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
65025 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
65026 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
65027 		ZEND_NULL_HANDLER,
65028 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
65029 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
65030 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
65031 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
65032 		ZEND_NULL_HANDLER,
65033 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
65034 		ZEND_NULL_HANDLER,
65035 		ZEND_NULL_HANDLER,
65036 		ZEND_NULL_HANDLER,
65037 		ZEND_NULL_HANDLER,
65038 		ZEND_NULL_HANDLER,
65039 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
65040 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
65041 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
65042 		ZEND_NULL_HANDLER,
65043 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
65044 		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
65045 		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
65046 		ZEND_NULL_HANDLER,
65047 		ZEND_NULL_HANDLER,
65048 		ZEND_NULL_HANDLER,
65049 		ZEND_NULL_HANDLER,
65050 		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER,
65051 		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER,
65052 		ZEND_NULL_HANDLER,
65053 		ZEND_NULL_HANDLER,
65054 		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
65055 		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
65056 		ZEND_NULL_HANDLER,
65057 		ZEND_NULL_HANDLER,
65058 		ZEND_NULL_HANDLER,
65059 		ZEND_NULL_HANDLER,
65060 		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER,
65061 		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER,
65062 		ZEND_NULL_HANDLER,
65063 		ZEND_NULL_HANDLER,
65064 		ZEND_NULL_HANDLER,
65065 		ZEND_NULL_HANDLER,
65066 		ZEND_NULL_HANDLER,
65067 		ZEND_NULL_HANDLER,
65068 		ZEND_NULL_HANDLER,
65069 		ZEND_NULL_HANDLER,
65070 		ZEND_NULL_HANDLER,
65071 		ZEND_NULL_HANDLER,
65072 		ZEND_NULL_HANDLER,
65073 		ZEND_NULL_HANDLER,
65074 		ZEND_NULL_HANDLER,
65075 		ZEND_NULL_HANDLER,
65076 		ZEND_NULL_HANDLER,
65077 		ZEND_NULL_HANDLER,
65078 		ZEND_NULL_HANDLER,
65079 		ZEND_NULL_HANDLER,
65080 		ZEND_NULL_HANDLER,
65081 		ZEND_NULL_HANDLER,
65082 		ZEND_NULL_HANDLER,
65083 		ZEND_NULL_HANDLER,
65084 		ZEND_NULL_HANDLER,
65085 		ZEND_NULL_HANDLER,
65086 		ZEND_NULL_HANDLER,
65087 		ZEND_NULL_HANDLER,
65088 		ZEND_NULL_HANDLER,
65089 		ZEND_NULL_HANDLER,
65090 		ZEND_NULL_HANDLER,
65091 		ZEND_NULL_HANDLER,
65092 		ZEND_NULL_HANDLER,
65093 		ZEND_NULL_HANDLER,
65094 		ZEND_NULL_HANDLER,
65095 		ZEND_NULL_HANDLER,
65096 		ZEND_NULL_HANDLER,
65097 		ZEND_NULL_HANDLER,
65098 		ZEND_NULL_HANDLER,
65099 		ZEND_NULL_HANDLER,
65100 		ZEND_NULL_HANDLER,
65101 		ZEND_NULL_HANDLER,
65102 		ZEND_NULL_HANDLER,
65103 		ZEND_NULL_HANDLER,
65104 		ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER,
65105 		ZEND_NULL_HANDLER,
65106 		ZEND_NULL_HANDLER,
65107 		ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER,
65108 		ZEND_NULL_HANDLER,
65109 		ZEND_NULL_HANDLER,
65110 		ZEND_NULL_HANDLER,
65111 		ZEND_NULL_HANDLER,
65112 		ZEND_NULL_HANDLER,
65113 		ZEND_NULL_HANDLER,
65114 		ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER,
65115 		ZEND_NULL_HANDLER,
65116 		ZEND_NULL_HANDLER,
65117 		ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER,
65118 		ZEND_NULL_HANDLER,
65119 		ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
65120 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
65121 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
65122 		ZEND_NULL_HANDLER,
65123 		ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
65124 		ZEND_SEND_ARRAY_SPEC_HANDLER,
65125 		ZEND_SEND_USER_SPEC_CONST_HANDLER,
65126 		ZEND_SEND_USER_SPEC_TMP_HANDLER,
65127 		ZEND_SEND_USER_SPEC_VAR_HANDLER,
65128 		ZEND_NULL_HANDLER,
65129 		ZEND_SEND_USER_SPEC_CV_HANDLER,
65130 		ZEND_STRLEN_SPEC_CONST_HANDLER,
65131 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
65132 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
65133 		ZEND_NULL_HANDLER,
65134 		ZEND_STRLEN_SPEC_CV_HANDLER,
65135 		ZEND_DEFINED_SPEC_CONST_HANDLER,
65136 		ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
65137 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
65138 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
65139 		ZEND_NULL_HANDLER,
65140 		ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
65141 		ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
65142 		ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
65143 		ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
65144 		ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
65145 		ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
65146 		ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
65147 		ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
65148 		ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
65149 		ZEND_NULL_HANDLER,
65150 		ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
65151 		ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
65152 		ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
65153 		ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
65154 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
65155 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
65156 		ZEND_NULL_HANDLER,
65157 		ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
65158 		ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
65159 		ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
65160 		ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER,
65161 		ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER,
65162 		ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
65163 		ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
65164 		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
65165 		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
65166 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
65167 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
65168 		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
65169 		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
65170 		ZEND_NULL_HANDLER,
65171 		ZEND_NULL_HANDLER,
65172 		ZEND_NULL_HANDLER,
65173 		ZEND_NULL_HANDLER,
65174 		ZEND_NULL_HANDLER,
65175 		ZEND_NULL_HANDLER,
65176 		ZEND_NULL_HANDLER,
65177 		ZEND_NULL_HANDLER,
65178 		ZEND_NULL_HANDLER,
65179 		ZEND_NULL_HANDLER,
65180 		ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
65181 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
65182 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
65183 		ZEND_NULL_HANDLER,
65184 		ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
65185 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
65186 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
65187 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
65188 		ZEND_NULL_HANDLER,
65189 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
65190 		ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
65191 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
65192 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
65193 		ZEND_NULL_HANDLER,
65194 		ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
65195 		ZEND_NULL_HANDLER,
65196 		ZEND_NULL_HANDLER,
65197 		ZEND_NULL_HANDLER,
65198 		ZEND_NULL_HANDLER,
65199 		ZEND_NULL_HANDLER,
65200 		ZEND_NULL_HANDLER,
65201 		ZEND_NULL_HANDLER,
65202 		ZEND_NULL_HANDLER,
65203 		ZEND_NULL_HANDLER,
65204 		ZEND_NULL_HANDLER,
65205 		ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
65206 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
65207 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
65208 		ZEND_NULL_HANDLER,
65209 		ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
65210 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
65211 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
65212 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
65213 		ZEND_NULL_HANDLER,
65214 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
65215 		ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
65216 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
65217 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
65218 		ZEND_NULL_HANDLER,
65219 		ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
65220 		ZEND_ECHO_SPEC_CONST_HANDLER,
65221 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
65222 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
65223 		ZEND_NULL_HANDLER,
65224 		ZEND_ECHO_SPEC_CV_HANDLER,
65225 		ZEND_NULL_HANDLER,
65226 		ZEND_NULL_HANDLER,
65227 		ZEND_NULL_HANDLER,
65228 		ZEND_NULL_HANDLER,
65229 		ZEND_NULL_HANDLER,
65230 		ZEND_NULL_HANDLER,
65231 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
65232 		ZEND_NULL_HANDLER,
65233 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
65234 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
65235 		ZEND_NULL_HANDLER,
65236 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
65237 		ZEND_NULL_HANDLER,
65238 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
65239 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
65240 		ZEND_NULL_HANDLER,
65241 		ZEND_NULL_HANDLER,
65242 		ZEND_NULL_HANDLER,
65243 		ZEND_NULL_HANDLER,
65244 		ZEND_NULL_HANDLER,
65245 		ZEND_NULL_HANDLER,
65246 		ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
65247 		ZEND_NULL_HANDLER,
65248 		ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
65249 		ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
65250 		ZEND_NULL_HANDLER,
65251 		ZEND_GENERATOR_CREATE_SPEC_HANDLER,
65252 		ZEND_NULL_HANDLER,
65253 		ZEND_NULL_HANDLER,
65254 		ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
65255 		ZEND_NULL_HANDLER,
65256 		ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
65257 		ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
65258 		ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER,
65259 		ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
65260 		ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER,
65261 		ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER,
65262 		ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
65263 		ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER,
65264 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
65265 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
65266 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
65267 		ZEND_NULL_HANDLER,
65268 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
65269 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
65270 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
65271 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
65272 		ZEND_NULL_HANDLER,
65273 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
65274 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
65275 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
65276 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
65277 		ZEND_NULL_HANDLER,
65278 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
65279 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
65280 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
65281 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
65282 		ZEND_NULL_HANDLER,
65283 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
65284 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
65285 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
65286 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
65287 		ZEND_NULL_HANDLER,
65288 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
65289 		ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
65290 		ZEND_USER_OPCODE_SPEC_HANDLER,
65291 		ZEND_ASSERT_CHECK_SPEC_HANDLER,
65292 		ZEND_JMP_SET_SPEC_CONST_HANDLER,
65293 		ZEND_JMP_SET_SPEC_TMP_HANDLER,
65294 		ZEND_JMP_SET_SPEC_VAR_HANDLER,
65295 		ZEND_NULL_HANDLER,
65296 		ZEND_JMP_SET_SPEC_CV_HANDLER,
65297 		ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
65298 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER,
65299 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER,
65300 		ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER,
65301 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
65302 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
65303 		ZEND_NULL_HANDLER,
65304 		ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER,
65305 		ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
65306 		ZEND_NULL_HANDLER,
65307 		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
65308 		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
65309 		ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
65310 		ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER,
65311 		ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
65312 		ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER,
65313 		ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
65314 		ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
65315 		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
65316 		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
65317 		ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
65318 		ZEND_YIELD_SPEC_CONST_CV_HANDLER,
65319 		ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
65320 		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
65321 		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
65322 		ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
65323 		ZEND_YIELD_SPEC_TMP_CV_HANDLER,
65324 		ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
65325 		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
65326 		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
65327 		ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
65328 		ZEND_YIELD_SPEC_VAR_CV_HANDLER,
65329 		ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
65330 		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
65331 		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
65332 		ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
65333 		ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
65334 		ZEND_YIELD_SPEC_CV_CONST_HANDLER,
65335 		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
65336 		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
65337 		ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
65338 		ZEND_YIELD_SPEC_CV_CV_HANDLER,
65339 		ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
65340 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
65341 		ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
65342 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
65343 		ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
65344 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
65345 		ZEND_NULL_HANDLER,
65346 		ZEND_NULL_HANDLER,
65347 		ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
65348 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
65349 		ZEND_FAST_CALL_SPEC_HANDLER,
65350 		ZEND_FAST_RET_SPEC_HANDLER,
65351 		ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
65352 		ZEND_SEND_UNPACK_SPEC_HANDLER,
65353 		ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
65354 		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
65355 		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
65356 		ZEND_NULL_HANDLER,
65357 		ZEND_YIELD_FROM_SPEC_CV_HANDLER,
65358 		ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER,
65359 		ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
65360 		ZEND_COALESCE_SPEC_CONST_HANDLER,
65361 		ZEND_COALESCE_SPEC_TMP_HANDLER,
65362 		ZEND_COALESCE_SPEC_VAR_HANDLER,
65363 		ZEND_NULL_HANDLER,
65364 		ZEND_COALESCE_SPEC_CV_HANDLER,
65365 		ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
65366 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
65367 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
65368 		ZEND_NULL_HANDLER,
65369 		ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
65370 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
65371 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
65372 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
65373 		ZEND_NULL_HANDLER,
65374 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
65375 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
65376 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
65377 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
65378 		ZEND_NULL_HANDLER,
65379 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
65380 		ZEND_NULL_HANDLER,
65381 		ZEND_NULL_HANDLER,
65382 		ZEND_NULL_HANDLER,
65383 		ZEND_NULL_HANDLER,
65384 		ZEND_NULL_HANDLER,
65385 		ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
65386 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
65387 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
65388 		ZEND_NULL_HANDLER,
65389 		ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
65390 		ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
65391 		ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
65392 		ZEND_NULL_HANDLER,
65393 		ZEND_NULL_HANDLER,
65394 		ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
65395 		ZEND_NULL_HANDLER,
65396 		ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER,
65397 		ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER,
65398 		ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER,
65399 		ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER,
65400 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER,
65401 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER,
65402 		ZEND_UNSET_STATIC_PROP_SPEC_HANDLER,
65403 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER,
65404 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
65405 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER,
65406 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER,
65407 		ZEND_NULL_HANDLER,
65408 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER,
65409 		ZEND_NULL_HANDLER,
65410 		ZEND_NULL_HANDLER,
65411 		ZEND_NULL_HANDLER,
65412 		ZEND_NULL_HANDLER,
65413 		ZEND_NULL_HANDLER,
65414 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
65415 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER,
65416 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER,
65417 		ZEND_NULL_HANDLER,
65418 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER,
65419 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
65420 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER,
65421 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER,
65422 		ZEND_NULL_HANDLER,
65423 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER,
65424 		ZEND_NULL_HANDLER,
65425 		ZEND_NULL_HANDLER,
65426 		ZEND_NULL_HANDLER,
65427 		ZEND_NULL_HANDLER,
65428 		ZEND_NULL_HANDLER,
65429 		ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
65430 		ZEND_BIND_STATIC_SPEC_CV_HANDLER,
65431 		ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
65432 		ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
65433 		ZEND_NULL_HANDLER,
65434 		ZEND_NULL_HANDLER,
65435 		ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
65436 		ZEND_NULL_HANDLER,
65437 		ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
65438 		ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
65439 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65440 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65441 		ZEND_NULL_HANDLER,
65442 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65443 		ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
65444 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
65445 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
65446 		ZEND_NULL_HANDLER,
65447 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
65448 		ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
65449 		ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
65450 		ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
65451 		ZEND_NULL_HANDLER,
65452 		ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
65453 		ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
65454 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
65455 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
65456 		ZEND_NULL_HANDLER,
65457 		ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
65458 		ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
65459 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
65460 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
65461 		ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
65462 		ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
65463 		ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
65464 		ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
65465 		ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
65466 		ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
65467 		ZEND_NULL_HANDLER,
65468 		ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
65469 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER,
65470 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
65471 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
65472 		ZEND_NULL_HANDLER,
65473 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER,
65474 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
65475 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
65476 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
65477 		ZEND_NULL_HANDLER,
65478 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
65479 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
65480 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
65481 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
65482 		ZEND_NULL_HANDLER,
65483 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
65484 		ZEND_NULL_HANDLER,
65485 		ZEND_NULL_HANDLER,
65486 		ZEND_NULL_HANDLER,
65487 		ZEND_NULL_HANDLER,
65488 		ZEND_NULL_HANDLER,
65489 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER,
65490 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
65491 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
65492 		ZEND_NULL_HANDLER,
65493 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER,
65494 		ZEND_MATCH_SPEC_CONST_CONST_HANDLER,
65495 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
65496 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
65497 		ZEND_NULL_HANDLER,
65498 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
65499 		ZEND_NULL_HANDLER,
65500 		ZEND_NULL_HANDLER,
65501 		ZEND_NULL_HANDLER,
65502 		ZEND_NULL_HANDLER,
65503 		ZEND_NULL_HANDLER,
65504 		ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER,
65505 		ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER,
65506 		ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER,
65507 		ZEND_NULL_HANDLER,
65508 		ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER,
65509 		ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER,
65510 		ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER,
65511 		ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER,
65512 		ZEND_NULL_HANDLER,
65513 		ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER,
65514 		ZEND_NULL_HANDLER,
65515 		ZEND_NULL_HANDLER,
65516 		ZEND_NULL_HANDLER,
65517 		ZEND_NULL_HANDLER,
65518 		ZEND_NULL_HANDLER,
65519 		ZEND_NULL_HANDLER,
65520 		ZEND_NULL_HANDLER,
65521 		ZEND_NULL_HANDLER,
65522 		ZEND_NULL_HANDLER,
65523 		ZEND_NULL_HANDLER,
65524 		ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER,
65525 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
65526 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
65527 		ZEND_NULL_HANDLER,
65528 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
65529 		ZEND_JMP_NULL_SPEC_CONST_HANDLER,
65530 		ZEND_JMP_NULL_SPEC_TMP_HANDLER,
65531 		ZEND_JMP_NULL_SPEC_VAR_HANDLER,
65532 		ZEND_NULL_HANDLER,
65533 		ZEND_JMP_NULL_SPEC_CV_HANDLER,
65534 		ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
65535 		ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER,
65536 		ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
65537 		ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER,
65538 		ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER,
65539 		ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_HANDLER,
65540 		ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_HANDLER,
65541 		ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_HANDLER,
65542 		ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_HANDLER,
65543 		ZEND_FRAMELESS_ICALL_2_SPEC_HANDLER,
65544 		ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_HANDLER,
65545 		ZEND_FRAMELESS_ICALL_3_SPEC_HANDLER,
65546 		ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_HANDLER,
65547 		ZEND_JMP_FRAMELESS_SPEC_CONST_HANDLER,
65548 		ZEND_INIT_FCALL_OFFSET_SPEC_CONST_HANDLER,
65549 		ZEND_RECV_NOTYPE_SPEC_HANDLER,
65550 		ZEND_NULL_HANDLER,
65551 		ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER,
65552 		ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER,
65553 		ZEND_NULL_HANDLER,
65554 		ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER,
65555 		ZEND_JMP_FORWARD_SPEC_HANDLER,
65556 		ZEND_NULL_HANDLER,
65557 		ZEND_NULL_HANDLER,
65558 		ZEND_NULL_HANDLER,
65559 		ZEND_NULL_HANDLER,
65560 		ZEND_NULL_HANDLER,
65561 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
65562 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65563 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65564 		ZEND_NULL_HANDLER,
65565 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65566 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
65567 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65568 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65569 		ZEND_NULL_HANDLER,
65570 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65571 		ZEND_NULL_HANDLER,
65572 		ZEND_NULL_HANDLER,
65573 		ZEND_NULL_HANDLER,
65574 		ZEND_NULL_HANDLER,
65575 		ZEND_NULL_HANDLER,
65576 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
65577 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65578 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65579 		ZEND_NULL_HANDLER,
65580 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65581 		ZEND_NULL_HANDLER,
65582 		ZEND_NULL_HANDLER,
65583 		ZEND_NULL_HANDLER,
65584 		ZEND_NULL_HANDLER,
65585 		ZEND_NULL_HANDLER,
65586 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65587 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65588 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65589 		ZEND_NULL_HANDLER,
65590 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65591 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65592 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65593 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65594 		ZEND_NULL_HANDLER,
65595 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65596 		ZEND_NULL_HANDLER,
65597 		ZEND_NULL_HANDLER,
65598 		ZEND_NULL_HANDLER,
65599 		ZEND_NULL_HANDLER,
65600 		ZEND_NULL_HANDLER,
65601 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65602 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65603 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65604 		ZEND_NULL_HANDLER,
65605 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65606 		ZEND_NULL_HANDLER,
65607 		ZEND_NULL_HANDLER,
65608 		ZEND_NULL_HANDLER,
65609 		ZEND_NULL_HANDLER,
65610 		ZEND_NULL_HANDLER,
65611 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65612 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65613 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65614 		ZEND_NULL_HANDLER,
65615 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65616 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65617 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65618 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65619 		ZEND_NULL_HANDLER,
65620 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65621 		ZEND_NULL_HANDLER,
65622 		ZEND_NULL_HANDLER,
65623 		ZEND_NULL_HANDLER,
65624 		ZEND_NULL_HANDLER,
65625 		ZEND_NULL_HANDLER,
65626 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65627 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65628 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65629 		ZEND_NULL_HANDLER,
65630 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65631 		ZEND_NULL_HANDLER,
65632 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
65633 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
65634 		ZEND_NULL_HANDLER,
65635 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
65636 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
65637 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65638 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65639 		ZEND_NULL_HANDLER,
65640 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65641 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
65642 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65643 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65644 		ZEND_NULL_HANDLER,
65645 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65646 		ZEND_NULL_HANDLER,
65647 		ZEND_NULL_HANDLER,
65648 		ZEND_NULL_HANDLER,
65649 		ZEND_NULL_HANDLER,
65650 		ZEND_NULL_HANDLER,
65651 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
65652 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65653 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65654 		ZEND_NULL_HANDLER,
65655 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65656 		ZEND_NULL_HANDLER,
65657 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
65658 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
65659 		ZEND_NULL_HANDLER,
65660 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
65661 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65662 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65663 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65664 		ZEND_NULL_HANDLER,
65665 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65666 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65667 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65668 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65669 		ZEND_NULL_HANDLER,
65670 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65671 		ZEND_NULL_HANDLER,
65672 		ZEND_NULL_HANDLER,
65673 		ZEND_NULL_HANDLER,
65674 		ZEND_NULL_HANDLER,
65675 		ZEND_NULL_HANDLER,
65676 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65677 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65678 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65679 		ZEND_NULL_HANDLER,
65680 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65681 		ZEND_NULL_HANDLER,
65682 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
65683 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
65684 		ZEND_NULL_HANDLER,
65685 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
65686 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65687 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65688 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65689 		ZEND_NULL_HANDLER,
65690 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65691 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65692 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65693 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65694 		ZEND_NULL_HANDLER,
65695 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65696 		ZEND_NULL_HANDLER,
65697 		ZEND_NULL_HANDLER,
65698 		ZEND_NULL_HANDLER,
65699 		ZEND_NULL_HANDLER,
65700 		ZEND_NULL_HANDLER,
65701 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65702 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65703 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65704 		ZEND_NULL_HANDLER,
65705 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65706 		ZEND_NULL_HANDLER,
65707 		ZEND_NULL_HANDLER,
65708 		ZEND_NULL_HANDLER,
65709 		ZEND_NULL_HANDLER,
65710 		ZEND_NULL_HANDLER,
65711 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
65712 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65713 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65714 		ZEND_NULL_HANDLER,
65715 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65716 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
65717 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65718 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65719 		ZEND_NULL_HANDLER,
65720 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65721 		ZEND_NULL_HANDLER,
65722 		ZEND_NULL_HANDLER,
65723 		ZEND_NULL_HANDLER,
65724 		ZEND_NULL_HANDLER,
65725 		ZEND_NULL_HANDLER,
65726 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
65727 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65728 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65729 		ZEND_NULL_HANDLER,
65730 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65731 		ZEND_NULL_HANDLER,
65732 		ZEND_NULL_HANDLER,
65733 		ZEND_NULL_HANDLER,
65734 		ZEND_NULL_HANDLER,
65735 		ZEND_NULL_HANDLER,
65736 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65737 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65738 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65739 		ZEND_NULL_HANDLER,
65740 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65741 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65742 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65743 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65744 		ZEND_NULL_HANDLER,
65745 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65746 		ZEND_NULL_HANDLER,
65747 		ZEND_NULL_HANDLER,
65748 		ZEND_NULL_HANDLER,
65749 		ZEND_NULL_HANDLER,
65750 		ZEND_NULL_HANDLER,
65751 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65752 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65753 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65754 		ZEND_NULL_HANDLER,
65755 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65756 		ZEND_NULL_HANDLER,
65757 		ZEND_NULL_HANDLER,
65758 		ZEND_NULL_HANDLER,
65759 		ZEND_NULL_HANDLER,
65760 		ZEND_NULL_HANDLER,
65761 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65762 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65763 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65764 		ZEND_NULL_HANDLER,
65765 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65766 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65767 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65768 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65769 		ZEND_NULL_HANDLER,
65770 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65771 		ZEND_NULL_HANDLER,
65772 		ZEND_NULL_HANDLER,
65773 		ZEND_NULL_HANDLER,
65774 		ZEND_NULL_HANDLER,
65775 		ZEND_NULL_HANDLER,
65776 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65777 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65778 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65779 		ZEND_NULL_HANDLER,
65780 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65781 		ZEND_NULL_HANDLER,
65782 		ZEND_NULL_HANDLER,
65783 		ZEND_NULL_HANDLER,
65784 		ZEND_NULL_HANDLER,
65785 		ZEND_NULL_HANDLER,
65786 		ZEND_NULL_HANDLER,
65787 		ZEND_NULL_HANDLER,
65788 		ZEND_NULL_HANDLER,
65789 		ZEND_NULL_HANDLER,
65790 		ZEND_NULL_HANDLER,
65791 		ZEND_NULL_HANDLER,
65792 		ZEND_NULL_HANDLER,
65793 		ZEND_NULL_HANDLER,
65794 		ZEND_NULL_HANDLER,
65795 		ZEND_NULL_HANDLER,
65796 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65797 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65798 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65799 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65800 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65801 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65802 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65803 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65804 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65805 		ZEND_NULL_HANDLER,
65806 		ZEND_NULL_HANDLER,
65807 		ZEND_NULL_HANDLER,
65808 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65809 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65810 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65811 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65812 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65813 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65814 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65815 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65816 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65817 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65818 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65819 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65820 		ZEND_NULL_HANDLER,
65821 		ZEND_NULL_HANDLER,
65822 		ZEND_NULL_HANDLER,
65823 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65824 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65825 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65826 		ZEND_NULL_HANDLER,
65827 		ZEND_NULL_HANDLER,
65828 		ZEND_NULL_HANDLER,
65829 		ZEND_NULL_HANDLER,
65830 		ZEND_NULL_HANDLER,
65831 		ZEND_NULL_HANDLER,
65832 		ZEND_NULL_HANDLER,
65833 		ZEND_NULL_HANDLER,
65834 		ZEND_NULL_HANDLER,
65835 		ZEND_NULL_HANDLER,
65836 		ZEND_NULL_HANDLER,
65837 		ZEND_NULL_HANDLER,
65838 		ZEND_NULL_HANDLER,
65839 		ZEND_NULL_HANDLER,
65840 		ZEND_NULL_HANDLER,
65841 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65842 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65843 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65844 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65845 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65846 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65847 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65848 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65849 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65850 		ZEND_NULL_HANDLER,
65851 		ZEND_NULL_HANDLER,
65852 		ZEND_NULL_HANDLER,
65853 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65854 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65855 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65856 		ZEND_NULL_HANDLER,
65857 		ZEND_NULL_HANDLER,
65858 		ZEND_NULL_HANDLER,
65859 		ZEND_NULL_HANDLER,
65860 		ZEND_NULL_HANDLER,
65861 		ZEND_NULL_HANDLER,
65862 		ZEND_NULL_HANDLER,
65863 		ZEND_NULL_HANDLER,
65864 		ZEND_NULL_HANDLER,
65865 		ZEND_NULL_HANDLER,
65866 		ZEND_NULL_HANDLER,
65867 		ZEND_NULL_HANDLER,
65868 		ZEND_NULL_HANDLER,
65869 		ZEND_NULL_HANDLER,
65870 		ZEND_NULL_HANDLER,
65871 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65872 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65873 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65874 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65875 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65876 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65877 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65878 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65879 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65880 		ZEND_NULL_HANDLER,
65881 		ZEND_NULL_HANDLER,
65882 		ZEND_NULL_HANDLER,
65883 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65884 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65885 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65886 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65887 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65888 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65889 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65890 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65891 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65892 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65893 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65894 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65895 		ZEND_NULL_HANDLER,
65896 		ZEND_NULL_HANDLER,
65897 		ZEND_NULL_HANDLER,
65898 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65899 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65900 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65901 		ZEND_NULL_HANDLER,
65902 		ZEND_NULL_HANDLER,
65903 		ZEND_NULL_HANDLER,
65904 		ZEND_NULL_HANDLER,
65905 		ZEND_NULL_HANDLER,
65906 		ZEND_NULL_HANDLER,
65907 		ZEND_NULL_HANDLER,
65908 		ZEND_NULL_HANDLER,
65909 		ZEND_NULL_HANDLER,
65910 		ZEND_NULL_HANDLER,
65911 		ZEND_NULL_HANDLER,
65912 		ZEND_NULL_HANDLER,
65913 		ZEND_NULL_HANDLER,
65914 		ZEND_NULL_HANDLER,
65915 		ZEND_NULL_HANDLER,
65916 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65917 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65918 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65919 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65920 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65921 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65922 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65923 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65924 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65925 		ZEND_NULL_HANDLER,
65926 		ZEND_NULL_HANDLER,
65927 		ZEND_NULL_HANDLER,
65928 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65929 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65930 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65931 		ZEND_NULL_HANDLER,
65932 		ZEND_NULL_HANDLER,
65933 		ZEND_NULL_HANDLER,
65934 		ZEND_NULL_HANDLER,
65935 		ZEND_NULL_HANDLER,
65936 		ZEND_NULL_HANDLER,
65937 		ZEND_NULL_HANDLER,
65938 		ZEND_NULL_HANDLER,
65939 		ZEND_NULL_HANDLER,
65940 		ZEND_NULL_HANDLER,
65941 		ZEND_NULL_HANDLER,
65942 		ZEND_NULL_HANDLER,
65943 		ZEND_NULL_HANDLER,
65944 		ZEND_NULL_HANDLER,
65945 		ZEND_NULL_HANDLER,
65946 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65947 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65948 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65949 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65950 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65951 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65952 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65953 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65954 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65955 		ZEND_NULL_HANDLER,
65956 		ZEND_NULL_HANDLER,
65957 		ZEND_NULL_HANDLER,
65958 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65959 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65960 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65961 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65962 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65963 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65964 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65965 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65966 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65967 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65968 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65969 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65970 		ZEND_NULL_HANDLER,
65971 		ZEND_NULL_HANDLER,
65972 		ZEND_NULL_HANDLER,
65973 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65974 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65975 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65976 		ZEND_NULL_HANDLER,
65977 		ZEND_NULL_HANDLER,
65978 		ZEND_NULL_HANDLER,
65979 		ZEND_NULL_HANDLER,
65980 		ZEND_NULL_HANDLER,
65981 		ZEND_NULL_HANDLER,
65982 		ZEND_NULL_HANDLER,
65983 		ZEND_NULL_HANDLER,
65984 		ZEND_NULL_HANDLER,
65985 		ZEND_NULL_HANDLER,
65986 		ZEND_NULL_HANDLER,
65987 		ZEND_NULL_HANDLER,
65988 		ZEND_NULL_HANDLER,
65989 		ZEND_NULL_HANDLER,
65990 		ZEND_NULL_HANDLER,
65991 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
65992 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65993 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65994 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65995 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65996 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65997 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65998 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65999 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66000 		ZEND_NULL_HANDLER,
66001 		ZEND_NULL_HANDLER,
66002 		ZEND_NULL_HANDLER,
66003 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66004 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66005 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66006 		ZEND_NULL_HANDLER,
66007 		ZEND_NULL_HANDLER,
66008 		ZEND_NULL_HANDLER,
66009 		ZEND_NULL_HANDLER,
66010 		ZEND_NULL_HANDLER,
66011 		ZEND_NULL_HANDLER,
66012 		ZEND_NULL_HANDLER,
66013 		ZEND_NULL_HANDLER,
66014 		ZEND_NULL_HANDLER,
66015 		ZEND_NULL_HANDLER,
66016 		ZEND_NULL_HANDLER,
66017 		ZEND_NULL_HANDLER,
66018 		ZEND_NULL_HANDLER,
66019 		ZEND_NULL_HANDLER,
66020 		ZEND_NULL_HANDLER,
66021 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
66022 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66023 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66024 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66025 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66026 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66027 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66028 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66029 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66030 		ZEND_NULL_HANDLER,
66031 		ZEND_NULL_HANDLER,
66032 		ZEND_NULL_HANDLER,
66033 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66034 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66035 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66036 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
66037 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66038 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66039 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66040 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66041 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66042 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66043 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66044 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66045 		ZEND_NULL_HANDLER,
66046 		ZEND_NULL_HANDLER,
66047 		ZEND_NULL_HANDLER,
66048 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66049 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66050 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66051 		ZEND_NULL_HANDLER,
66052 		ZEND_NULL_HANDLER,
66053 		ZEND_NULL_HANDLER,
66054 		ZEND_NULL_HANDLER,
66055 		ZEND_NULL_HANDLER,
66056 		ZEND_NULL_HANDLER,
66057 		ZEND_NULL_HANDLER,
66058 		ZEND_NULL_HANDLER,
66059 		ZEND_NULL_HANDLER,
66060 		ZEND_NULL_HANDLER,
66061 		ZEND_NULL_HANDLER,
66062 		ZEND_NULL_HANDLER,
66063 		ZEND_NULL_HANDLER,
66064 		ZEND_NULL_HANDLER,
66065 		ZEND_NULL_HANDLER,
66066 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
66067 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66068 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66069 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66070 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66071 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66072 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66073 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66074 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66075 		ZEND_NULL_HANDLER,
66076 		ZEND_NULL_HANDLER,
66077 		ZEND_NULL_HANDLER,
66078 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66079 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66080 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66081 		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
66082 		ZEND_NULL_HANDLER,
66083 		ZEND_NULL_HANDLER,
66084 		ZEND_NULL_HANDLER,
66085 		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
66086 		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
66087 		ZEND_NULL_HANDLER,
66088 		ZEND_NULL_HANDLER,
66089 		ZEND_NULL_HANDLER,
66090 		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
66091 		ZEND_NULL_HANDLER,
66092 		ZEND_NULL_HANDLER,
66093 		ZEND_NULL_HANDLER,
66094 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
66095 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66096 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66097 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
66098 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66099 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66100 		ZEND_NULL_HANDLER,
66101 		ZEND_NULL_HANDLER,
66102 		ZEND_NULL_HANDLER,
66103 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
66104 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66105 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66106 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
66107 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66108 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66109 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66110 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66111 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66112 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66113 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66114 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66115 		ZEND_NULL_HANDLER,
66116 		ZEND_NULL_HANDLER,
66117 		ZEND_NULL_HANDLER,
66118 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66119 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66120 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66121 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
66122 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66123 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66124 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66125 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66126 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66127 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66128 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66129 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66130 		ZEND_NULL_HANDLER,
66131 		ZEND_NULL_HANDLER,
66132 		ZEND_NULL_HANDLER,
66133 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66134 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66135 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66136 		ZEND_NULL_HANDLER,
66137 		ZEND_NULL_HANDLER,
66138 		ZEND_NULL_HANDLER,
66139 		ZEND_NULL_HANDLER,
66140 		ZEND_NULL_HANDLER,
66141 		ZEND_NULL_HANDLER,
66142 		ZEND_NULL_HANDLER,
66143 		ZEND_NULL_HANDLER,
66144 		ZEND_NULL_HANDLER,
66145 		ZEND_NULL_HANDLER,
66146 		ZEND_NULL_HANDLER,
66147 		ZEND_NULL_HANDLER,
66148 		ZEND_NULL_HANDLER,
66149 		ZEND_NULL_HANDLER,
66150 		ZEND_NULL_HANDLER,
66151 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
66152 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66153 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66154 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66155 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66156 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66157 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66158 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66159 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66160 		ZEND_NULL_HANDLER,
66161 		ZEND_NULL_HANDLER,
66162 		ZEND_NULL_HANDLER,
66163 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66164 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66165 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66166 		ZEND_NULL_HANDLER,
66167 		ZEND_NULL_HANDLER,
66168 		ZEND_NULL_HANDLER,
66169 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
66170 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66171 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66172 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
66173 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66174 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66175 		ZEND_NULL_HANDLER,
66176 		ZEND_NULL_HANDLER,
66177 		ZEND_NULL_HANDLER,
66178 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
66179 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66180 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66181 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
66182 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66183 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66184 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66185 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66186 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66187 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66188 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66189 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66190 		ZEND_NULL_HANDLER,
66191 		ZEND_NULL_HANDLER,
66192 		ZEND_NULL_HANDLER,
66193 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66194 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66195 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66196 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
66197 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66198 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66199 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66200 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66201 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66202 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66203 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66204 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66205 		ZEND_NULL_HANDLER,
66206 		ZEND_NULL_HANDLER,
66207 		ZEND_NULL_HANDLER,
66208 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66209 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66210 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66211 		ZEND_NULL_HANDLER,
66212 		ZEND_NULL_HANDLER,
66213 		ZEND_NULL_HANDLER,
66214 		ZEND_NULL_HANDLER,
66215 		ZEND_NULL_HANDLER,
66216 		ZEND_NULL_HANDLER,
66217 		ZEND_NULL_HANDLER,
66218 		ZEND_NULL_HANDLER,
66219 		ZEND_NULL_HANDLER,
66220 		ZEND_NULL_HANDLER,
66221 		ZEND_NULL_HANDLER,
66222 		ZEND_NULL_HANDLER,
66223 		ZEND_NULL_HANDLER,
66224 		ZEND_NULL_HANDLER,
66225 		ZEND_NULL_HANDLER,
66226 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
66227 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66228 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66229 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66230 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66231 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66232 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66233 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66234 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66235 		ZEND_NULL_HANDLER,
66236 		ZEND_NULL_HANDLER,
66237 		ZEND_NULL_HANDLER,
66238 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66239 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66240 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66241 		ZEND_NULL_HANDLER,
66242 		ZEND_NULL_HANDLER,
66243 		ZEND_NULL_HANDLER,
66244 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
66245 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66246 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66247 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
66248 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66249 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66250 		ZEND_NULL_HANDLER,
66251 		ZEND_NULL_HANDLER,
66252 		ZEND_NULL_HANDLER,
66253 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
66254 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66255 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66256 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
66257 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66258 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66259 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66260 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66261 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66262 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66263 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66264 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66265 		ZEND_NULL_HANDLER,
66266 		ZEND_NULL_HANDLER,
66267 		ZEND_NULL_HANDLER,
66268 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66269 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66270 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66271 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
66272 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66273 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66274 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66275 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66276 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66277 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66278 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66279 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66280 		ZEND_NULL_HANDLER,
66281 		ZEND_NULL_HANDLER,
66282 		ZEND_NULL_HANDLER,
66283 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66284 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66285 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66286 		ZEND_NULL_HANDLER,
66287 		ZEND_NULL_HANDLER,
66288 		ZEND_NULL_HANDLER,
66289 		ZEND_NULL_HANDLER,
66290 		ZEND_NULL_HANDLER,
66291 		ZEND_NULL_HANDLER,
66292 		ZEND_NULL_HANDLER,
66293 		ZEND_NULL_HANDLER,
66294 		ZEND_NULL_HANDLER,
66295 		ZEND_NULL_HANDLER,
66296 		ZEND_NULL_HANDLER,
66297 		ZEND_NULL_HANDLER,
66298 		ZEND_NULL_HANDLER,
66299 		ZEND_NULL_HANDLER,
66300 		ZEND_NULL_HANDLER,
66301 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
66302 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66303 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66304 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66305 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66306 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66307 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66308 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66309 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66310 		ZEND_NULL_HANDLER,
66311 		ZEND_NULL_HANDLER,
66312 		ZEND_NULL_HANDLER,
66313 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66314 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66315 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66316 		ZEND_NULL_HANDLER,
66317 		ZEND_NULL_HANDLER,
66318 		ZEND_NULL_HANDLER,
66319 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
66320 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66321 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66322 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
66323 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66324 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66325 		ZEND_NULL_HANDLER,
66326 		ZEND_NULL_HANDLER,
66327 		ZEND_NULL_HANDLER,
66328 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
66329 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
66330 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
66331 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
66332 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66333 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66334 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66335 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66336 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66337 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66338 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66339 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66340 		ZEND_NULL_HANDLER,
66341 		ZEND_NULL_HANDLER,
66342 		ZEND_NULL_HANDLER,
66343 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66344 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66345 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66346 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
66347 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66348 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66349 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66350 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66351 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66352 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66353 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66354 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66355 		ZEND_NULL_HANDLER,
66356 		ZEND_NULL_HANDLER,
66357 		ZEND_NULL_HANDLER,
66358 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66359 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66360 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66361 		ZEND_NULL_HANDLER,
66362 		ZEND_NULL_HANDLER,
66363 		ZEND_NULL_HANDLER,
66364 		ZEND_NULL_HANDLER,
66365 		ZEND_NULL_HANDLER,
66366 		ZEND_NULL_HANDLER,
66367 		ZEND_NULL_HANDLER,
66368 		ZEND_NULL_HANDLER,
66369 		ZEND_NULL_HANDLER,
66370 		ZEND_NULL_HANDLER,
66371 		ZEND_NULL_HANDLER,
66372 		ZEND_NULL_HANDLER,
66373 		ZEND_NULL_HANDLER,
66374 		ZEND_NULL_HANDLER,
66375 		ZEND_NULL_HANDLER,
66376 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
66377 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
66378 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
66379 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66380 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66381 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66382 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66383 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66384 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66385 		ZEND_NULL_HANDLER,
66386 		ZEND_NULL_HANDLER,
66387 		ZEND_NULL_HANDLER,
66388 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
66389 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
66390 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
66391 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
66392 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
66393 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
66394 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
66395 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
66396 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
66397 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
66398 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
66399 		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
66400 		ZEND_POST_INC_LONG_SPEC_CV_HANDLER,
66401 		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
66402 		ZEND_POST_DEC_LONG_SPEC_CV_HANDLER,
66403 		ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER,
66404 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
66405 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
66406 		ZEND_NULL_HANDLER,
66407 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
66408 		ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
66409 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
66410 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
66411 		ZEND_NULL_HANDLER,
66412 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
66413 		ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
66414 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
66415 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
66416 		ZEND_NULL_HANDLER,
66417 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
66418 		ZEND_NULL_HANDLER,
66419 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
66420 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
66421 		ZEND_NULL_HANDLER,
66422 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
66423 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
66424 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
66425 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
66426 		ZEND_NULL_HANDLER,
66427 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
66428 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
66429 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
66430 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
66431 		ZEND_NULL_HANDLER,
66432 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
66433 		ZEND_NULL_HANDLER,
66434 		ZEND_NULL_HANDLER,
66435 		ZEND_NULL_HANDLER,
66436 		ZEND_NULL_HANDLER,
66437 		ZEND_NULL_HANDLER,
66438 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
66439 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
66440 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
66441 		ZEND_NULL_HANDLER,
66442 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
66443 		ZEND_NULL_HANDLER,
66444 		ZEND_NULL_HANDLER,
66445 		ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
66446 		ZEND_NULL_HANDLER,
66447 		ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
66448 		ZEND_NULL_HANDLER,
66449 		ZEND_NULL_HANDLER,
66450 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER,
66451 		ZEND_NULL_HANDLER,
66452 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER,
66453 		ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER,
66454 		ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER,
66455 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
66456 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
66457 		ZEND_NULL_HANDLER
66458 	};
66459 	static const uint32_t specs[] = {
66460 		0,
66461 		1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66462 		26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66463 		51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
66464 		76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66465 		101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66466 		126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66467 		151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66468 		176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66469 		201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
66470 		226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
66471 		251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
66472 		276 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66473 		301 | SPEC_RULE_OP1,
66474 		306 | SPEC_RULE_OP1,
66475 		311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
66476 		336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
66477 		361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
66478 		386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
66479 		461 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
66480 		536 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
66481 		611 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
66482 		686 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
66483 		736 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
66484 		861 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
66485 		986 | SPEC_RULE_OP_DATA,
66486 		991 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66487 		1016 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66488 		1041 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66489 		1066,
66490 		1067 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66491 		1092 | SPEC_RULE_OP1,
66492 		1097 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
66493 		1222,
66494 		1223 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
66495 		1233 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
66496 		1243 | SPEC_RULE_OP1,
66497 		1248 | SPEC_RULE_OP1,
66498 		1253,
66499 		1253,
66500 		1254,
66501 		1254,
66502 		1255,
66503 		1256 | SPEC_RULE_OP1,
66504 		1261 | SPEC_RULE_OP1,
66505 		3486,
66506 		1266 | SPEC_RULE_OP1,
66507 		1271 | SPEC_RULE_OP1,
66508 		1276 | SPEC_RULE_OP2,
66509 		1281,
66510 		1282 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
66511 		1292 | SPEC_RULE_OP1,
66512 		1297 | SPEC_RULE_OP1,
66513 		1302 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66514 		1327 | SPEC_RULE_OP2,
66515 		1332 | SPEC_RULE_OP2,
66516 		1337 | SPEC_RULE_OP2,
66517 		1342,
66518 		1343,
66519 		1344,
66520 		1345 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
66521 		1349,
66522 		1350 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
66523 		1360,
66524 		1361,
66525 		1362 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66526 		1387 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
66527 		1437 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66528 		1462 | SPEC_RULE_OP1,
66529 		1467,
66530 		1468,
66531 		1469 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66532 		1494 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66533 		1519 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
66534 		1529 | SPEC_RULE_OP1,
66535 		1534 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66536 		1559 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66537 		1584 | SPEC_RULE_OP1,
66538 		1589,
66539 		1590,
66540 		1591 | SPEC_RULE_OP1,
66541 		1596 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66542 		1621 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66543 		1646 | SPEC_RULE_OP1,
66544 		1651 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66545 		1676 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66546 		1701 | SPEC_RULE_OP1,
66547 		1706 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66548 		1731 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66549 		1756 | SPEC_RULE_OP1,
66550 		1761 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66551 		1786 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66552 		1811 | SPEC_RULE_OP1,
66553 		1816 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66554 		1841 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66555 		1866 | SPEC_RULE_OP1,
66556 		1871 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66557 		1896 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66558 		1921 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66559 		1946,
66560 		1947 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
66561 		1957,
66562 		1958,
66563 		1959,
66564 		1960,
66565 		1961,
66566 		1962 | SPEC_RULE_OP2,
66567 		1967,
66568 		1968 | SPEC_RULE_OP1,
66569 		1973 | SPEC_RULE_OP2,
66570 		1978 | SPEC_RULE_OP1,
66571 		1983 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
66572 		1993 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66573 		2018 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66574 		2043 | SPEC_RULE_OP1,
66575 		2048 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66576 		2073 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
66577 		2123 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66578 		2148 | SPEC_RULE_OP2,
66579 		2153,
66580 		2154 | SPEC_RULE_OP1,
66581 		2159 | SPEC_RULE_OP1,
66582 		2164,
66583 		2165 | SPEC_RULE_OP1,
66584 		2170 | SPEC_RULE_OP1,
66585 		2175 | SPEC_RULE_OP1,
66586 		2180,
66587 		2181,
66588 		2182 | SPEC_RULE_OP2,
66589 		2187 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
66590 		2191 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
66591 		2195 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
66592 		2199 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66593 		2199 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66594 		2224 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66595 		2224 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66596 		2249 | SPEC_RULE_OP1,
66597 		2254,
66598 		2255 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66599 		2280,
66600 		2281 | SPEC_RULE_OP1,
66601 		2286,
66602 		2287,
66603 		2288,
66604 		2289,
66605 		2290,
66606 		2291,
66607 		2292,
66608 		2293 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66609 		2318,
66610 		2319,
66611 		2320,
66612 		2321 | SPEC_RULE_OP1,
66613 		2326,
66614 		2327 | SPEC_RULE_ISSET,
66615 		2329 | SPEC_RULE_OP2,
66616 		2334,
66617 		2335 | SPEC_RULE_OP1,
66618 		2340 | SPEC_RULE_OBSERVER,
66619 		2342,
66620 		2343 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66621 		2368 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
66622 		2378,
66623 		2379,
66624 		2380,
66625 		2381,
66626 		2382 | SPEC_RULE_OP1,
66627 		2387,
66628 		2388,
66629 		2389 | SPEC_RULE_OP1,
66630 		2394 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66631 		2419,
66632 		2420 | SPEC_RULE_OP1,
66633 		2425,
66634 		2426,
66635 		2427,
66636 		2428,
66637 		2429,
66638 		2430,
66639 		2431,
66640 		2432,
66641 		2433 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66642 		2458,
66643 		2459,
66644 		2460,
66645 		2461 | SPEC_RULE_OP2,
66646 		2466,
66647 		2467 | SPEC_RULE_OP1,
66648 		2472 | SPEC_RULE_OP1,
66649 		2477 | SPEC_RULE_OP1,
66650 		2482 | SPEC_RULE_OP1,
66651 		2487 | SPEC_RULE_OP1,
66652 		2492,
66653 		2493 | SPEC_RULE_OP1,
66654 		2498 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66655 		2523 | SPEC_RULE_OP1,
66656 		2528 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
66657 		2553 | SPEC_RULE_OP1,
66658 		2558 | SPEC_RULE_OP1,
66659 		2563,
66660 		2564,
66661 		2565,
66662 		2566,
66663 		2567,
66664 		2568 | SPEC_RULE_OBSERVER,
66665 		2570 | SPEC_RULE_OBSERVER,
66666 		2572 | SPEC_RULE_OBSERVER,
66667 		2574 | SPEC_RULE_OBSERVER,
66668 		2576,
66669 		3486,
66670 		3486,
66671 		3486,
66672 		3486,
66673 		3486,
66674 		3486,
66675 		3486,
66676 		3486,
66677 		3486,
66678 		3486,
66679 		3486,
66680 		3486,
66681 		3486,
66682 		3486,
66683 		3486,
66684 		3486,
66685 		3486,
66686 		3486,
66687 		3486,
66688 		3486,
66689 		3486,
66690 		3486,
66691 		3486,
66692 		3486,
66693 		3486,
66694 		3486,
66695 		3486,
66696 		3486,
66697 		3486,
66698 		3486,
66699 		3486,
66700 		3486,
66701 		3486,
66702 		3486,
66703 		3486,
66704 		3486,
66705 		3486,
66706 		3486,
66707 		3486,
66708 		3486,
66709 		3486,
66710 		3486,
66711 		3486,
66712 		3486,
66713 		3486,
66714 		3486,
66715 		3486,
66716 	};
66717 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
66718 	zend_opcode_handler_funcs = labels;
66719 	zend_spec_handlers = specs;
66720 	execute_ex(NULL);
66721 #else
66722 	zend_opcode_handlers = labels;
66723 	zend_handlers_count = sizeof(labels) / sizeof(void*);
66724 	zend_spec_handlers = specs;
66725 #endif
66726 	VM_TRACE_START();
66727 }
66728 
66729 static HashTable *zend_handlers_table = NULL;
66730 
66731 void zend_vm_dtor(void)
66732 {
66733 	VM_TRACE_END();
66734 	if (zend_handlers_table) {
66735 		zend_hash_destroy(zend_handlers_table);
66736 		free(zend_handlers_table);
66737 		zend_handlers_table = NULL;
66738 	}
66739 }
66740 
66741 static void init_opcode_serialiser(void)
66742 {
66743 	int i;
66744 	zval tmp;
66745 
66746 	zend_handlers_table = malloc(sizeof(HashTable));
66747 	zend_hash_init(zend_handlers_table, zend_handlers_count, NULL, NULL, 1);
66748 	zend_hash_real_init(zend_handlers_table, 0);
66749 	Z_TYPE_INFO(tmp) = IS_LONG;
66750 	for (i = 0; i < zend_handlers_count; i++) {
66751 		Z_LVAL(tmp) = i;
66752 		zend_hash_index_add(zend_handlers_table, (zend_long)(uintptr_t)zend_opcode_handlers[i], &tmp);
66753 	}
66754 }
66755 
66756 ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op)
66757 {
66758 	zval *zv;
66759 
66760 	if (!zend_handlers_table) {
66761 		init_opcode_serialiser();
66762 	}
66763 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler);
66764 	ZEND_ASSERT(zv != NULL);
66765 	op->handler = (const void *)(uintptr_t)Z_LVAL_P(zv);
66766 }
66767 
66768 ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op)
66769 {
66770 	op->handler = zend_opcode_handlers[(uintptr_t)op->handler];
66771 }
66772 
66773 ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op)
66774 {
66775 #if ZEND_VM_KIND == ZEND_VM_KIND_CALL
66776 	return op->handler;
66777 #elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
66778 	zval *zv;
66779 
66780 	if (!zend_handlers_table) {
66781 		init_opcode_serialiser();
66782 	}
66783 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler);
66784 	ZEND_ASSERT(zv != NULL);
66785 	return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
66786 #else
66787 	return NULL;
66788 #endif
66789 }
66790 
66791 ZEND_API const zend_op *zend_get_halt_op(void)
66792 {
66793 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
66794 	return &hybrid_halt_op;
66795 #else
66796 	return NULL;
66797 #endif
66798 }
66799 
66800 ZEND_API int zend_vm_kind(void)
66801 {
66802 	return ZEND_VM_KIND;
66803 }
66804 
66805 static uint32_t ZEND_FASTCALL zend_vm_get_opcode_handler_idx(uint32_t spec, const zend_op* op)
66806 {
66807 	static const int zend_vm_decode[] = {
66808 		_UNUSED_CODE, /* 0 = IS_UNUSED  */
66809 		_CONST_CODE,  /* 1 = IS_CONST   */
66810 		_TMP_CODE,    /* 2 = IS_TMP_VAR */
66811 		_UNUSED_CODE, /* 3              */
66812 		_VAR_CODE,    /* 4 = IS_VAR     */
66813 		_UNUSED_CODE, /* 5              */
66814 		_UNUSED_CODE, /* 6              */
66815 		_UNUSED_CODE, /* 7              */
66816 		_CV_CODE      /* 8 = IS_CV      */
66817 	};
66818 	uint32_t offset = 0;
66819 	if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
66820 	if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
66821 	if (spec & SPEC_EXTRA_MASK) {
66822 		if (spec & SPEC_RULE_RETVAL) {
66823 			offset = offset * 2 + (op->result_type != IS_UNUSED);
66824 			if ((spec & SPEC_RULE_OBSERVER) && ZEND_OBSERVER_ENABLED) {
66825 				offset += 2;
66826 			}
66827 		} else if (spec & SPEC_RULE_QUICK_ARG) {
66828 			offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
66829 		} else if (spec & SPEC_RULE_OP_DATA) {
66830 			offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
66831 		} else if (spec & SPEC_RULE_ISSET) {
66832 			offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
66833 		} else if (spec & SPEC_RULE_SMART_BRANCH) {
66834 			offset = offset * 3;
66835 			if (op->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR)) {
66836 				offset += 1;
66837 			} else if (op->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR)) {
66838 				offset += 2;
66839 			}
66840 		} else if (spec & SPEC_RULE_OBSERVER) {
66841 			offset = offset * 2;
66842 			if (ZEND_OBSERVER_ENABLED) {
66843 				offset += 1;
66844 			}
66845 		}
66846 	}
66847 	return (spec & SPEC_START_MASK) + offset;
66848 }
66849 
66850 #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
66851 static const void *zend_vm_get_opcode_handler(uint8_t opcode, const zend_op* op)
66852 {
66853 	return zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
66854 }
66855 #endif
66856 
66857 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
66858 static const void *zend_vm_get_opcode_handler_func(uint8_t opcode, const zend_op* op)
66859 {
66860 	uint32_t spec = zend_spec_handlers[opcode];
66861 	return zend_opcode_handler_funcs[zend_vm_get_opcode_handler_idx(spec, op)];
66862 }
66863 
66864 #endif
66865 
66866 ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
66867 {
66868 	uint8_t opcode = zend_user_opcodes[op->opcode];
66869 
66870 	if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
66871 		if (op->op1_type < op->op2_type) {
66872 			zend_swap_operands(op);
66873 		}
66874 	}
66875 	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
66876 }
66877 
66878 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)
66879 {
66880 	uint8_t opcode = zend_user_opcodes[op->opcode];
66881 	uint32_t spec = zend_spec_handlers[opcode];
66882 	switch (opcode) {
66883 		case ZEND_ADD:
66884 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
66885 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66886 					break;
66887 				}
66888 				spec = 2585 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
66889 				if (op->op1_type < op->op2_type) {
66890 					zend_swap_operands(op);
66891 				}
66892 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
66893 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66894 					break;
66895 				}
66896 				spec = 2610 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
66897 				if (op->op1_type < op->op2_type) {
66898 					zend_swap_operands(op);
66899 				}
66900 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
66901 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66902 					break;
66903 				}
66904 				spec = 2635 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
66905 				if (op->op1_type < op->op2_type) {
66906 					zend_swap_operands(op);
66907 				}
66908 			}
66909 			break;
66910 		case ZEND_SUB:
66911 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
66912 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66913 					break;
66914 				}
66915 				spec = 2660 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
66916 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
66917 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66918 					break;
66919 				}
66920 				spec = 2685 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
66921 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
66922 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66923 					break;
66924 				}
66925 				spec = 2710 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
66926 			}
66927 			break;
66928 		case ZEND_MUL:
66929 			if (op->op1_type < op->op2_type) {
66930 				zend_swap_operands(op);
66931 			}
66932 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
66933 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66934 					break;
66935 				}
66936 				spec = 2735 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
66937 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
66938 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66939 					break;
66940 				}
66941 				spec = 2760 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
66942 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
66943 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66944 					break;
66945 				}
66946 				spec = 2785 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
66947 			}
66948 			break;
66949 		case ZEND_IS_IDENTICAL:
66950 			if (op->op1_type < op->op2_type) {
66951 				zend_swap_operands(op);
66952 			}
66953 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
66954 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66955 					break;
66956 				}
66957 				spec = 2810 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
66958 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
66959 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66960 					break;
66961 				}
66962 				spec = 2885 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
66963 			} else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
66964 				spec = 3110 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
66965 			}
66966 			break;
66967 		case ZEND_IS_NOT_IDENTICAL:
66968 			if (op->op1_type < op->op2_type) {
66969 				zend_swap_operands(op);
66970 			}
66971 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
66972 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66973 					break;
66974 				}
66975 				spec = 2960 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
66976 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
66977 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66978 					break;
66979 				}
66980 				spec = 3035 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
66981 			} else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
66982 				spec = 3115 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
66983 			}
66984 			break;
66985 		case ZEND_IS_EQUAL:
66986 			if (op->op1_type < op->op2_type) {
66987 				zend_swap_operands(op);
66988 			}
66989 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
66990 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66991 					break;
66992 				}
66993 				spec = 2810 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
66994 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
66995 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
66996 					break;
66997 				}
66998 				spec = 2885 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
66999 			}
67000 			break;
67001 		case ZEND_IS_NOT_EQUAL:
67002 			if (op->op1_type < op->op2_type) {
67003 				zend_swap_operands(op);
67004 			}
67005 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
67006 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
67007 					break;
67008 				}
67009 				spec = 2960 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
67010 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
67011 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
67012 					break;
67013 				}
67014 				spec = 3035 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
67015 			}
67016 			break;
67017 		case ZEND_IS_SMALLER:
67018 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
67019 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
67020 					break;
67021 				}
67022 				spec = 3120 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
67023 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
67024 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
67025 					break;
67026 				}
67027 				spec = 3195 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
67028 			}
67029 			break;
67030 		case ZEND_IS_SMALLER_OR_EQUAL:
67031 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
67032 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
67033 					break;
67034 				}
67035 				spec = 3270 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
67036 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
67037 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
67038 					break;
67039 				}
67040 				spec = 3345 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
67041 			}
67042 			break;
67043 		case ZEND_QM_ASSIGN:
67044 			if (op1_info == MAY_BE_LONG) {
67045 				spec = 3432 | SPEC_RULE_OP1;
67046 			} else if (op1_info == MAY_BE_DOUBLE) {
67047 				spec = 3437 | SPEC_RULE_OP1;
67048 			} 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))))) {
67049 				spec = 3442 | SPEC_RULE_OP1;
67050 			}
67051 			break;
67052 		case ZEND_PRE_INC:
67053 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
67054 				spec = 3420 | SPEC_RULE_RETVAL;
67055 			} else if (op1_info == MAY_BE_LONG) {
67056 				spec = 3422 | SPEC_RULE_RETVAL;
67057 			}
67058 			break;
67059 		case ZEND_PRE_DEC:
67060 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
67061 				spec = 3424 | SPEC_RULE_RETVAL;
67062 			} else if (op1_info == MAY_BE_LONG) {
67063 				spec = 3426 | SPEC_RULE_RETVAL;
67064 			}
67065 			break;
67066 		case ZEND_POST_INC:
67067 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
67068 				spec = 3428;
67069 			} else if (op1_info == MAY_BE_LONG) {
67070 				spec = 3429;
67071 			}
67072 			break;
67073 		case ZEND_POST_DEC:
67074 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
67075 				spec = 3430;
67076 			} else if (op1_info == MAY_BE_LONG) {
67077 				spec = 3431;
67078 			}
67079 			break;
67080 		case ZEND_JMP:
67081 			if (OP_JMP_ADDR(op, op->op1) > op) {
67082 				spec = 2584;
67083 			}
67084 			break;
67085 		case ZEND_INIT_FCALL:
67086 			if (Z_EXTRA_P(RT_CONSTANT(op, op->op2)) != 0) {
67087 				spec = 2577;
67088 			}
67089 			break;
67090 		case ZEND_RECV:
67091 			if (op->op2.num == MAY_BE_ANY) {
67092 				spec = 2578;
67093 			}
67094 			break;
67095 		case ZEND_SEND_VAL:
67096 			if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
67097 				spec = 3482;
67098 			}
67099 			break;
67100 		case ZEND_SEND_VAR_EX:
67101 			if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
67102 				spec = 3477 | SPEC_RULE_OP1;
67103 			}
67104 			break;
67105 		case ZEND_FE_FETCH_R:
67106 			if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
67107 				spec = 3484 | SPEC_RULE_RETVAL;
67108 			}
67109 			break;
67110 		case ZEND_FETCH_DIM_R:
67111 			if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
67112 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
67113 					break;
67114 				}
67115 				spec = 3447 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
67116 			}
67117 			break;
67118 		case ZEND_SEND_VAL_EX:
67119 			if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
67120 				spec = 3483;
67121 			}
67122 			break;
67123 		case ZEND_SEND_VAR:
67124 			if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
67125 				spec = 3472 | SPEC_RULE_OP1;
67126 			}
67127 			break;
67128 		case ZEND_COUNT:
67129 			if ((op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) == MAY_BE_ARRAY) {
67130 				spec = 2579 | SPEC_RULE_OP1;
67131 			}
67132 			break;
67133 		case ZEND_BW_OR:
67134 		case ZEND_BW_AND:
67135 		case ZEND_BW_XOR:
67136 		case ZEND_BOOL_XOR:
67137 			if (op->op1_type < op->op2_type) {
67138 				zend_swap_operands(op);
67139 			}
67140 			break;
67141 		case ZEND_USER_OPCODE:
67142 			if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
67143 				if (op->op1_type < op->op2_type) {
67144 					zend_swap_operands(op);
67145 				}
67146 			}
67147 			break;
67148 		default:
67149 			break;
67150 	}
67151 	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(spec, op)];
67152 }
67153 
67154 ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex)
67155 {
67156 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
67157 	opcode_handler_t handler;
67158 #endif
67159 	int ret;
67160 #ifdef ZEND_VM_IP_GLOBAL_REG
67161 	const zend_op *orig_opline = opline;
67162 #endif
67163 #ifdef ZEND_VM_FP_GLOBAL_REG
67164 	zend_execute_data *orig_execute_data = execute_data;
67165 	execute_data = ex;
67166 #else
67167 	zend_execute_data *execute_data = ex;
67168 #endif
67169 
67170 	LOAD_OPLINE();
67171 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
67172 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
67173 	handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
67174 	handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
67175 	if (EXPECTED(opline != &hybrid_halt_op)) {
67176 #else
67177 	((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
67178 	if (EXPECTED(opline)) {
67179 #endif
67180 		ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
67181 		SAVE_OPLINE();
67182 	} else {
67183 		ret = -1;
67184 	}
67185 #else
67186 	ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
67187 	SAVE_OPLINE();
67188 #endif
67189 #ifdef ZEND_VM_FP_GLOBAL_REG
67190 	execute_data = orig_execute_data;
67191 #endif
67192 #ifdef ZEND_VM_IP_GLOBAL_REG
67193 	opline = orig_opline;
67194 #endif
67195 	return ret;
67196 }
67197 
67198