xref: /PHP-8.1/Zend/zend_vm_execute.h (revision 8d2df86b)
1 /*
2    +----------------------------------------------------------------------+
3    | Zend Engine                                                          |
4    +----------------------------------------------------------------------+
5    | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
6    +----------------------------------------------------------------------+
7    | This source file is subject to version 2.00 of the Zend license,     |
8    | that is bundled with this package in the file LICENSE, and is        |
9    | available through the world-wide-web at the following url:           |
10    | http://www.zend.com/license/2_00.txt.                                |
11    | If you did not receive a copy of the Zend license and are unable to  |
12    | obtain it through the world-wide-web, please send a note to          |
13    | license@zend.com so we can mail you a copy immediately.              |
14    +----------------------------------------------------------------------+
15    | Authors: Andi Gutmans <andi@php.net>                                 |
16    |          Zeev Suraski <zeev@php.net>                                 |
17    |          Dmitry Stogov <dmitry@php.net>                              |
18    +----------------------------------------------------------------------+
19 */
20 
21 #ifdef ZEND_WIN32
22 # pragma warning(disable : 4101)
23 # pragma warning(once : 6235)
24 # pragma warning(once : 6237)
25 # pragma warning(once : 6239)
26 # pragma warning(once : 6240)
27 # pragma warning(once : 6285)
28 # pragma warning(once : 6286)
29 # pragma warning(once : 6326)
30 #endif
31 static user_opcode_handler_t zend_user_opcode_handlers[256] = {
32 	(user_opcode_handler_t)NULL,
33 	(user_opcode_handler_t)NULL,
34 	(user_opcode_handler_t)NULL,
35 	(user_opcode_handler_t)NULL,
36 	(user_opcode_handler_t)NULL,
37 	(user_opcode_handler_t)NULL,
38 	(user_opcode_handler_t)NULL,
39 	(user_opcode_handler_t)NULL,
40 	(user_opcode_handler_t)NULL,
41 	(user_opcode_handler_t)NULL,
42 	(user_opcode_handler_t)NULL,
43 	(user_opcode_handler_t)NULL,
44 	(user_opcode_handler_t)NULL,
45 	(user_opcode_handler_t)NULL,
46 	(user_opcode_handler_t)NULL,
47 	(user_opcode_handler_t)NULL,
48 	(user_opcode_handler_t)NULL,
49 	(user_opcode_handler_t)NULL,
50 	(user_opcode_handler_t)NULL,
51 	(user_opcode_handler_t)NULL,
52 	(user_opcode_handler_t)NULL,
53 	(user_opcode_handler_t)NULL,
54 	(user_opcode_handler_t)NULL,
55 	(user_opcode_handler_t)NULL,
56 	(user_opcode_handler_t)NULL,
57 	(user_opcode_handler_t)NULL,
58 	(user_opcode_handler_t)NULL,
59 	(user_opcode_handler_t)NULL,
60 	(user_opcode_handler_t)NULL,
61 	(user_opcode_handler_t)NULL,
62 	(user_opcode_handler_t)NULL,
63 	(user_opcode_handler_t)NULL,
64 	(user_opcode_handler_t)NULL,
65 	(user_opcode_handler_t)NULL,
66 	(user_opcode_handler_t)NULL,
67 	(user_opcode_handler_t)NULL,
68 	(user_opcode_handler_t)NULL,
69 	(user_opcode_handler_t)NULL,
70 	(user_opcode_handler_t)NULL,
71 	(user_opcode_handler_t)NULL,
72 	(user_opcode_handler_t)NULL,
73 	(user_opcode_handler_t)NULL,
74 	(user_opcode_handler_t)NULL,
75 	(user_opcode_handler_t)NULL,
76 	(user_opcode_handler_t)NULL,
77 	(user_opcode_handler_t)NULL,
78 	(user_opcode_handler_t)NULL,
79 	(user_opcode_handler_t)NULL,
80 	(user_opcode_handler_t)NULL,
81 	(user_opcode_handler_t)NULL,
82 	(user_opcode_handler_t)NULL,
83 	(user_opcode_handler_t)NULL,
84 	(user_opcode_handler_t)NULL,
85 	(user_opcode_handler_t)NULL,
86 	(user_opcode_handler_t)NULL,
87 	(user_opcode_handler_t)NULL,
88 	(user_opcode_handler_t)NULL,
89 	(user_opcode_handler_t)NULL,
90 	(user_opcode_handler_t)NULL,
91 	(user_opcode_handler_t)NULL,
92 	(user_opcode_handler_t)NULL,
93 	(user_opcode_handler_t)NULL,
94 	(user_opcode_handler_t)NULL,
95 	(user_opcode_handler_t)NULL,
96 	(user_opcode_handler_t)NULL,
97 	(user_opcode_handler_t)NULL,
98 	(user_opcode_handler_t)NULL,
99 	(user_opcode_handler_t)NULL,
100 	(user_opcode_handler_t)NULL,
101 	(user_opcode_handler_t)NULL,
102 	(user_opcode_handler_t)NULL,
103 	(user_opcode_handler_t)NULL,
104 	(user_opcode_handler_t)NULL,
105 	(user_opcode_handler_t)NULL,
106 	(user_opcode_handler_t)NULL,
107 	(user_opcode_handler_t)NULL,
108 	(user_opcode_handler_t)NULL,
109 	(user_opcode_handler_t)NULL,
110 	(user_opcode_handler_t)NULL,
111 	(user_opcode_handler_t)NULL,
112 	(user_opcode_handler_t)NULL,
113 	(user_opcode_handler_t)NULL,
114 	(user_opcode_handler_t)NULL,
115 	(user_opcode_handler_t)NULL,
116 	(user_opcode_handler_t)NULL,
117 	(user_opcode_handler_t)NULL,
118 	(user_opcode_handler_t)NULL,
119 	(user_opcode_handler_t)NULL,
120 	(user_opcode_handler_t)NULL,
121 	(user_opcode_handler_t)NULL,
122 	(user_opcode_handler_t)NULL,
123 	(user_opcode_handler_t)NULL,
124 	(user_opcode_handler_t)NULL,
125 	(user_opcode_handler_t)NULL,
126 	(user_opcode_handler_t)NULL,
127 	(user_opcode_handler_t)NULL,
128 	(user_opcode_handler_t)NULL,
129 	(user_opcode_handler_t)NULL,
130 	(user_opcode_handler_t)NULL,
131 	(user_opcode_handler_t)NULL,
132 	(user_opcode_handler_t)NULL,
133 	(user_opcode_handler_t)NULL,
134 	(user_opcode_handler_t)NULL,
135 	(user_opcode_handler_t)NULL,
136 	(user_opcode_handler_t)NULL,
137 	(user_opcode_handler_t)NULL,
138 	(user_opcode_handler_t)NULL,
139 	(user_opcode_handler_t)NULL,
140 	(user_opcode_handler_t)NULL,
141 	(user_opcode_handler_t)NULL,
142 	(user_opcode_handler_t)NULL,
143 	(user_opcode_handler_t)NULL,
144 	(user_opcode_handler_t)NULL,
145 	(user_opcode_handler_t)NULL,
146 	(user_opcode_handler_t)NULL,
147 	(user_opcode_handler_t)NULL,
148 	(user_opcode_handler_t)NULL,
149 	(user_opcode_handler_t)NULL,
150 	(user_opcode_handler_t)NULL,
151 	(user_opcode_handler_t)NULL,
152 	(user_opcode_handler_t)NULL,
153 	(user_opcode_handler_t)NULL,
154 	(user_opcode_handler_t)NULL,
155 	(user_opcode_handler_t)NULL,
156 	(user_opcode_handler_t)NULL,
157 	(user_opcode_handler_t)NULL,
158 	(user_opcode_handler_t)NULL,
159 	(user_opcode_handler_t)NULL,
160 	(user_opcode_handler_t)NULL,
161 	(user_opcode_handler_t)NULL,
162 	(user_opcode_handler_t)NULL,
163 	(user_opcode_handler_t)NULL,
164 	(user_opcode_handler_t)NULL,
165 	(user_opcode_handler_t)NULL,
166 	(user_opcode_handler_t)NULL,
167 	(user_opcode_handler_t)NULL,
168 	(user_opcode_handler_t)NULL,
169 	(user_opcode_handler_t)NULL,
170 	(user_opcode_handler_t)NULL,
171 	(user_opcode_handler_t)NULL,
172 	(user_opcode_handler_t)NULL,
173 	(user_opcode_handler_t)NULL,
174 	(user_opcode_handler_t)NULL,
175 	(user_opcode_handler_t)NULL,
176 	(user_opcode_handler_t)NULL,
177 	(user_opcode_handler_t)NULL,
178 	(user_opcode_handler_t)NULL,
179 	(user_opcode_handler_t)NULL,
180 	(user_opcode_handler_t)NULL,
181 	(user_opcode_handler_t)NULL,
182 	(user_opcode_handler_t)NULL,
183 	(user_opcode_handler_t)NULL,
184 	(user_opcode_handler_t)NULL,
185 	(user_opcode_handler_t)NULL,
186 	(user_opcode_handler_t)NULL,
187 	(user_opcode_handler_t)NULL,
188 	(user_opcode_handler_t)NULL,
189 	(user_opcode_handler_t)NULL,
190 	(user_opcode_handler_t)NULL,
191 	(user_opcode_handler_t)NULL,
192 	(user_opcode_handler_t)NULL,
193 	(user_opcode_handler_t)NULL,
194 	(user_opcode_handler_t)NULL,
195 	(user_opcode_handler_t)NULL,
196 	(user_opcode_handler_t)NULL,
197 	(user_opcode_handler_t)NULL,
198 	(user_opcode_handler_t)NULL,
199 	(user_opcode_handler_t)NULL,
200 	(user_opcode_handler_t)NULL,
201 	(user_opcode_handler_t)NULL,
202 	(user_opcode_handler_t)NULL,
203 	(user_opcode_handler_t)NULL,
204 	(user_opcode_handler_t)NULL,
205 	(user_opcode_handler_t)NULL,
206 	(user_opcode_handler_t)NULL,
207 	(user_opcode_handler_t)NULL,
208 	(user_opcode_handler_t)NULL,
209 	(user_opcode_handler_t)NULL,
210 	(user_opcode_handler_t)NULL,
211 	(user_opcode_handler_t)NULL,
212 	(user_opcode_handler_t)NULL,
213 	(user_opcode_handler_t)NULL,
214 	(user_opcode_handler_t)NULL,
215 	(user_opcode_handler_t)NULL,
216 	(user_opcode_handler_t)NULL,
217 	(user_opcode_handler_t)NULL,
218 	(user_opcode_handler_t)NULL,
219 	(user_opcode_handler_t)NULL,
220 	(user_opcode_handler_t)NULL,
221 	(user_opcode_handler_t)NULL,
222 	(user_opcode_handler_t)NULL,
223 	(user_opcode_handler_t)NULL,
224 	(user_opcode_handler_t)NULL,
225 	(user_opcode_handler_t)NULL,
226 	(user_opcode_handler_t)NULL,
227 	(user_opcode_handler_t)NULL,
228 	(user_opcode_handler_t)NULL,
229 	(user_opcode_handler_t)NULL,
230 	(user_opcode_handler_t)NULL,
231 	(user_opcode_handler_t)NULL,
232 	(user_opcode_handler_t)NULL,
233 	(user_opcode_handler_t)NULL,
234 	(user_opcode_handler_t)NULL,
235 	(user_opcode_handler_t)NULL,
236 	(user_opcode_handler_t)NULL,
237 	(user_opcode_handler_t)NULL,
238 	(user_opcode_handler_t)NULL,
239 	(user_opcode_handler_t)NULL,
240 	(user_opcode_handler_t)NULL,
241 	(user_opcode_handler_t)NULL,
242 	(user_opcode_handler_t)NULL,
243 	(user_opcode_handler_t)NULL,
244 	(user_opcode_handler_t)NULL,
245 	(user_opcode_handler_t)NULL,
246 	(user_opcode_handler_t)NULL,
247 	(user_opcode_handler_t)NULL,
248 	(user_opcode_handler_t)NULL,
249 	(user_opcode_handler_t)NULL,
250 	(user_opcode_handler_t)NULL,
251 	(user_opcode_handler_t)NULL,
252 	(user_opcode_handler_t)NULL,
253 	(user_opcode_handler_t)NULL,
254 	(user_opcode_handler_t)NULL,
255 	(user_opcode_handler_t)NULL,
256 	(user_opcode_handler_t)NULL,
257 	(user_opcode_handler_t)NULL,
258 	(user_opcode_handler_t)NULL,
259 	(user_opcode_handler_t)NULL,
260 	(user_opcode_handler_t)NULL,
261 	(user_opcode_handler_t)NULL,
262 	(user_opcode_handler_t)NULL,
263 	(user_opcode_handler_t)NULL,
264 	(user_opcode_handler_t)NULL,
265 	(user_opcode_handler_t)NULL,
266 	(user_opcode_handler_t)NULL,
267 	(user_opcode_handler_t)NULL,
268 	(user_opcode_handler_t)NULL,
269 	(user_opcode_handler_t)NULL,
270 	(user_opcode_handler_t)NULL,
271 	(user_opcode_handler_t)NULL,
272 	(user_opcode_handler_t)NULL,
273 	(user_opcode_handler_t)NULL,
274 	(user_opcode_handler_t)NULL,
275 	(user_opcode_handler_t)NULL,
276 	(user_opcode_handler_t)NULL,
277 	(user_opcode_handler_t)NULL,
278 	(user_opcode_handler_t)NULL,
279 	(user_opcode_handler_t)NULL,
280 	(user_opcode_handler_t)NULL,
281 	(user_opcode_handler_t)NULL,
282 	(user_opcode_handler_t)NULL,
283 	(user_opcode_handler_t)NULL,
284 	(user_opcode_handler_t)NULL,
285 	(user_opcode_handler_t)NULL,
286 	(user_opcode_handler_t)NULL,
287 	(user_opcode_handler_t)NULL
288 };
289 
290 static zend_uchar zend_user_opcodes[256] = {0,
291 	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
292 	17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
293 	33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
294 	49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
295 	65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
296 	81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
297 	97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
298 	113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,
299 	129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,
300 	145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,
301 	161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
302 	177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
303 	193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
304 	209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
305 	225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,
306 	241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
307 };
308 
309 #define SPEC_START_MASK        0x0000ffff
310 #define SPEC_EXTRA_MASK        0xfffc0000
311 #define SPEC_RULE_OP1          0x00010000
312 #define SPEC_RULE_OP2          0x00020000
313 #define SPEC_RULE_OP_DATA      0x00040000
314 #define SPEC_RULE_RETVAL       0x00080000
315 #define SPEC_RULE_QUICK_ARG    0x00100000
316 #define SPEC_RULE_SMART_BRANCH 0x00200000
317 #define SPEC_RULE_COMMUTATIVE  0x00800000
318 #define SPEC_RULE_ISSET        0x01000000
319 #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(zend_uchar 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(zend_uchar 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_START
342 # define VM_TRACE_START()
343 #endif
344 #ifndef VM_TRACE_END
345 # define VM_TRACE_END()
346 #endif
347 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
348 #define HYBRID_NEXT()     goto *(void**)(OPLINE->handler)
349 #define HYBRID_SWITCH()   HYBRID_NEXT();
350 #define HYBRID_CASE(op)   op ## _LABEL
351 #define HYBRID_BREAK()    HYBRID_NEXT()
352 #define HYBRID_DEFAULT    ZEND_NULL_LABEL
353 #endif
354 
355 #ifdef ZEND_VM_FP_GLOBAL_REG
356 # define ZEND_OPCODE_HANDLER_ARGS void
357 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
358 # define ZEND_OPCODE_HANDLER_ARGS_DC
359 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC
360 #else
361 # define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data
362 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data
363 # define ZEND_OPCODE_HANDLER_ARGS_DC , ZEND_OPCODE_HANDLER_ARGS
364 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC , ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
365 #endif
366 
367 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
368 # define ZEND_OPCODE_HANDLER_RET void
369 # define ZEND_VM_TAIL_CALL(call) call; return
370 # ifdef ZEND_VM_TAIL_CALL_DISPATCH
371 #  define ZEND_VM_CONTINUE()     ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); return
372 # else
373 #  define ZEND_VM_CONTINUE()     return
374 # endif
375 # if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
376 #  define ZEND_VM_RETURN()        opline = &hybrid_halt_op; return
377 #  define ZEND_VM_HOT             zend_always_inline ZEND_COLD ZEND_OPT_SIZE
378 #  define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
379 # else
380 #  define ZEND_VM_RETURN()        opline = NULL; return
381 #  define ZEND_VM_HOT
382 #  define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
383 # endif
384 #else
385 # define ZEND_OPCODE_HANDLER_RET int
386 # define ZEND_VM_TAIL_CALL(call) return call
387 # define ZEND_VM_CONTINUE()      return  0
388 # define ZEND_VM_RETURN()        return -1
389 # define ZEND_VM_HOT
390 # define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
391 #endif
392 
393 typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
394 
395 #define DCL_OPLINE
396 #ifdef ZEND_VM_IP_GLOBAL_REG
397 # define OPLINE opline
398 # define USE_OPLINE
399 # define LOAD_OPLINE() opline = EX(opline)
400 # define LOAD_OPLINE_EX()
401 # define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
402 # define SAVE_OPLINE() EX(opline) = opline
403 # define SAVE_OPLINE_EX() SAVE_OPLINE()
404 #else
405 # define OPLINE EX(opline)
406 # define USE_OPLINE const zend_op *opline = EX(opline);
407 # define LOAD_OPLINE()
408 # define LOAD_OPLINE_EX()
409 # define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()
410 # define SAVE_OPLINE()
411 # define SAVE_OPLINE_EX()
412 #endif
413 #define HANDLE_EXCEPTION() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_CONTINUE()
414 #define HANDLE_EXCEPTION_LEAVE() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_LEAVE()
415 #if defined(ZEND_VM_FP_GLOBAL_REG)
416 # define ZEND_VM_ENTER_EX()        ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()
417 # define ZEND_VM_ENTER()           execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX()
418 # define ZEND_VM_LEAVE()           ZEND_VM_CONTINUE()
419 #elif defined(ZEND_VM_IP_GLOBAL_REG)
420 # define ZEND_VM_ENTER_EX()        return  1
421 # define ZEND_VM_ENTER()           opline = EG(current_execute_data)->opline; ZEND_VM_ENTER_EX()
422 # define ZEND_VM_LEAVE()           return  2
423 #else
424 # define ZEND_VM_ENTER_EX()        return  1
425 # define ZEND_VM_ENTER()           return  1
426 # define ZEND_VM_LEAVE()           return  2
427 #endif
428 #define ZEND_VM_INTERRUPT()      ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
429 #define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
430 #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));
431 
432 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS);
433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS);
434 
zend_add_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)435 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)
436 {
437 	USE_OPLINE
438 
439 	SAVE_OPLINE();
440 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
441 		op_1 = ZVAL_UNDEFINED_OP1();
442 	}
443 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
444 		op_2 = ZVAL_UNDEFINED_OP2();
445 	}
446 	add_function(EX_VAR(opline->result.var), op_1, op_2);
447 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
448 		zval_ptr_dtor_nogc(op_1);
449 	}
450 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
451 		zval_ptr_dtor_nogc(op_2);
452 	}
453 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
454 }
455 
zend_sub_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)456 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)
457 {
458 	USE_OPLINE
459 
460 	SAVE_OPLINE();
461 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
462 		op_1 = ZVAL_UNDEFINED_OP1();
463 	}
464 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
465 		op_2 = ZVAL_UNDEFINED_OP2();
466 	}
467 	sub_function(EX_VAR(opline->result.var), op_1, op_2);
468 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
469 		zval_ptr_dtor_nogc(op_1);
470 	}
471 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
472 		zval_ptr_dtor_nogc(op_2);
473 	}
474 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
475 }
476 
zend_mul_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)477 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)
478 {
479 	USE_OPLINE
480 
481 	SAVE_OPLINE();
482 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
483 		op_1 = ZVAL_UNDEFINED_OP1();
484 	}
485 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
486 		op_2 = ZVAL_UNDEFINED_OP2();
487 	}
488 	mul_function(EX_VAR(opline->result.var), op_1, op_2);
489 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
490 		zval_ptr_dtor_nogc(op_1);
491 	}
492 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
493 		zval_ptr_dtor_nogc(op_2);
494 	}
495 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
496 }
497 
zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)498 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
499 {
500 	USE_OPLINE
501 
502 	SAVE_OPLINE();
503 	zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
504 	ZVAL_UNDEF(EX_VAR(opline->result.var));
505 	HANDLE_EXCEPTION();
506 }
507 
zend_mod_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)508 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)
509 {
510 	USE_OPLINE
511 
512 	SAVE_OPLINE();
513 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
514 		op_1 = ZVAL_UNDEFINED_OP1();
515 	}
516 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
517 		op_2 = ZVAL_UNDEFINED_OP2();
518 	}
519 	mod_function(EX_VAR(opline->result.var), op_1, op_2);
520 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
521 		zval_ptr_dtor_nogc(op_1);
522 	}
523 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
524 		zval_ptr_dtor_nogc(op_2);
525 	}
526 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
527 }
528 
zend_shift_left_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)529 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)
530 {
531 	USE_OPLINE
532 
533 	SAVE_OPLINE();
534 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
535 		op_1 = ZVAL_UNDEFINED_OP1();
536 	}
537 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
538 		op_2 = ZVAL_UNDEFINED_OP2();
539 	}
540 	shift_left_function(EX_VAR(opline->result.var), op_1, op_2);
541 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
542 		zval_ptr_dtor_nogc(op_1);
543 	}
544 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
545 		zval_ptr_dtor_nogc(op_2);
546 	}
547 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
548 }
549 
zend_shift_right_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)550 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)
551 {
552 	USE_OPLINE
553 
554 	SAVE_OPLINE();
555 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
556 		op_1 = ZVAL_UNDEFINED_OP1();
557 	}
558 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
559 		op_2 = ZVAL_UNDEFINED_OP2();
560 	}
561 	shift_right_function(EX_VAR(opline->result.var), op_1, op_2);
562 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
563 		zval_ptr_dtor_nogc(op_1);
564 	}
565 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
566 		zval_ptr_dtor_nogc(op_2);
567 	}
568 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
569 }
570 
zend_is_equal_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)571 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)
572 {
573 	int ret;
574 	USE_OPLINE
575 
576 	SAVE_OPLINE();
577 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
578 		op_1 = ZVAL_UNDEFINED_OP1();
579 	}
580 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
581 		op_2 = ZVAL_UNDEFINED_OP2();
582 	}
583 	ret = zend_compare(op_1, op_2);
584 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
585 		zval_ptr_dtor_nogc(op_1);
586 	}
587 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
588 		zval_ptr_dtor_nogc(op_2);
589 	}
590 	ZEND_VM_SMART_BRANCH(ret == 0, 1);
591 }
592 
zend_is_not_equal_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)593 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)
594 {
595 	int ret;
596 	USE_OPLINE
597 
598 	SAVE_OPLINE();
599 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
600 		op_1 = ZVAL_UNDEFINED_OP1();
601 	}
602 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
603 		op_2 = ZVAL_UNDEFINED_OP2();
604 	}
605 	ret = zend_compare(op_1, op_2);
606 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
607 		zval_ptr_dtor_nogc(op_1);
608 	}
609 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
610 		zval_ptr_dtor_nogc(op_2);
611 	}
612 	ZEND_VM_SMART_BRANCH(ret != 0, 1);
613 }
614 
zend_is_smaller_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)615 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)
616 {
617 	int ret;
618 	USE_OPLINE
619 
620 	SAVE_OPLINE();
621 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
622 		op_1 = ZVAL_UNDEFINED_OP1();
623 	}
624 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
625 		op_2 = ZVAL_UNDEFINED_OP2();
626 	}
627 	ret = zend_compare(op_1, op_2);
628 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
629 		zval_ptr_dtor_nogc(op_1);
630 	}
631 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
632 		zval_ptr_dtor_nogc(op_2);
633 	}
634 	ZEND_VM_SMART_BRANCH(ret < 0, 1);
635 }
636 
zend_is_smaller_or_equal_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)637 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)
638 {
639 	int ret;
640 	USE_OPLINE
641 
642 	SAVE_OPLINE();
643 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
644 		op_1 = ZVAL_UNDEFINED_OP1();
645 	}
646 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
647 		op_2 = ZVAL_UNDEFINED_OP2();
648 	}
649 	ret = zend_compare(op_1, op_2);
650 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
651 		zval_ptr_dtor_nogc(op_1);
652 	}
653 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
654 		zval_ptr_dtor_nogc(op_2);
655 	}
656 	ZEND_VM_SMART_BRANCH(ret <= 0, 1);
657 }
658 
zend_bw_or_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)659 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)
660 {
661 	USE_OPLINE
662 
663 	SAVE_OPLINE();
664 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
665 		op_1 = ZVAL_UNDEFINED_OP1();
666 	}
667 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
668 		op_2 = ZVAL_UNDEFINED_OP2();
669 	}
670 	bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2);
671 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
672 		zval_ptr_dtor_nogc(op_1);
673 	}
674 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
675 		zval_ptr_dtor_nogc(op_2);
676 	}
677 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
678 }
679 
zend_bw_and_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)680 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)
681 {
682 	USE_OPLINE
683 
684 	SAVE_OPLINE();
685 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
686 		op_1 = ZVAL_UNDEFINED_OP1();
687 	}
688 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
689 		op_2 = ZVAL_UNDEFINED_OP2();
690 	}
691 	bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2);
692 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
693 		zval_ptr_dtor_nogc(op_1);
694 	}
695 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
696 		zval_ptr_dtor_nogc(op_2);
697 	}
698 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
699 }
700 
zend_bw_xor_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)701 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)
702 {
703 	USE_OPLINE
704 
705 	SAVE_OPLINE();
706 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
707 		op_1 = ZVAL_UNDEFINED_OP1();
708 	}
709 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
710 		op_2 = ZVAL_UNDEFINED_OP2();
711 	}
712 	bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2);
713 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
714 		zval_ptr_dtor_nogc(op_1);
715 	}
716 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
717 		zval_ptr_dtor_nogc(op_2);
718 	}
719 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
720 }
721 
zend_bw_not_helper_SPEC(zval * op_1 ZEND_OPCODE_HANDLER_ARGS_DC)722 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_not_helper_SPEC(zval *op_1 ZEND_OPCODE_HANDLER_ARGS_DC)
723 {
724 	USE_OPLINE
725 
726 	SAVE_OPLINE();
727 	if (UNEXPECTED(Z_TYPE_P(op_1) == IS_UNDEF)) {
728 		op_1 = ZVAL_UNDEFINED_OP1();
729 	}
730 	bitwise_not_function(EX_VAR(opline->result.var), op_1);
731 	FREE_OP(opline->op1_type, opline->op1.var);
732 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
733 }
734 
zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)735 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
736 {
737 	USE_OPLINE
738 
739 	SAVE_OPLINE();
740 	zend_throw_error(NULL, "Using $this when not in object context");
741 	UNDEF_RESULT();
742 	HANDLE_EXCEPTION();
743 }
744 
zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)745 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
746 {
747 	USE_OPLINE
748 	zval *function_name;
749 
750 	SAVE_OPLINE();
751 	function_name = RT_CONSTANT(opline, opline->op2);
752 	zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
753 	HANDLE_EXCEPTION();
754 }
755 
ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)756 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
757 {
758 	/* 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 */
759 
760 	USE_OPLINE
761 	zval *prop, *value;
762 	zend_property_info *prop_info;
763 	zend_reference *ref;
764 
765 	SAVE_OPLINE();
766 
767 	if (UNEXPECTED(zend_fetch_static_property_address(&prop, &prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
768 		UNDEF_RESULT();
769 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
770 		HANDLE_EXCEPTION();
771 	}
772 
773 	value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
774 
775 	do {
776 		if (UNEXPECTED(Z_ISREF_P(prop))) {
777 			ref = Z_REF_P(prop);
778 			prop = Z_REFVAL_P(prop);
779 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
780 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
781 				break;
782 			}
783 		}
784 
785 		if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
786 			/* special case for typed properties */
787 			zend_binary_assign_op_typed_prop(prop_info, prop, value OPLINE_CC EXECUTE_DATA_CC);
788 		} else {
789 			zend_binary_op(prop, prop, value OPLINE_CC);
790 		}
791 	} while (0);
792 
793 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
794 		ZVAL_COPY(EX_VAR(opline->result.var), prop);
795 	}
796 
797 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
798 	/* assign_static_prop has two opcodes! */
799 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
800 }
801 
ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
803 {
804 	USE_OPLINE
805 	zval *prop;
806 	zend_property_info *prop_info;
807 
808 	SAVE_OPLINE();
809 
810 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
811 		UNDEF_RESULT();
812 		HANDLE_EXCEPTION();
813 	}
814 
815 	zend_pre_incdec_property_zval(prop,
816 		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
817 
818 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
819 }
820 
821 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)822 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
823 {
824 	USE_OPLINE
825 	zval *prop;
826 	zend_property_info *prop_info;
827 
828 	SAVE_OPLINE();
829 
830 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
831 		UNDEF_RESULT();
832 		HANDLE_EXCEPTION();
833 	}
834 
835 	zend_post_incdec_property_zval(prop,
836 		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
837 
838 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
839 }
840 
841 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
zend_fetch_static_prop_helper_SPEC(int type ZEND_OPCODE_HANDLER_ARGS_DC)842 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC(int type ZEND_OPCODE_HANDLER_ARGS_DC)
843 {
844 	USE_OPLINE
845 	zval *prop;
846 
847 	SAVE_OPLINE();
848 
849 	if (UNEXPECTED(zend_fetch_static_property_address(&prop, NULL, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
850 		ZEND_ASSERT(EG(exception) || (type == BP_VAR_IS));
851 		prop = &EG(uninitialized_zval);
852 	}
853 
854 	if (type == BP_VAR_R || type == BP_VAR_IS) {
855 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), prop);
856 	} else {
857 		ZVAL_INDIRECT(EX_VAR(opline->result.var), prop);
858 	}
859 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
860 }
861 
862 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)863 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
864 {
865 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
866 }
867 
868 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)869 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
870 {
871 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
872 }
873 
874 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)875 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
876 {
877 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_RW 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_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)881 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
882 {
883 	int fetch_type =
884 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
885 			BP_VAR_W : BP_VAR_R;
886 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
887 }
888 
889 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)890 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
891 {
892 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
893 }
894 
895 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)896 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
897 {
898 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
899 }
900 
zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)901 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
902 {
903 	USE_OPLINE
904 
905 	SAVE_OPLINE();
906 	zend_throw_error(NULL, "Cannot use temporary expression in write context");
907 	FREE_OP(opline->op2_type, opline->op2.var);
908 	FREE_OP(opline->op1_type, opline->op1.var);
909 	ZVAL_UNDEF(EX_VAR(opline->result.var));
910 	HANDLE_EXCEPTION();
911 }
912 
zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)913 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
914 {
915 	USE_OPLINE
916 
917 	SAVE_OPLINE();
918 	zend_throw_error(NULL, "Cannot use [] for reading");
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_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)925 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
926 {
927 	USE_OPLINE
928 	zval *prop, *value;
929 	zend_property_info *prop_info;
930 
931 	SAVE_OPLINE();
932 
933 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
934 
935 		UNDEF_RESULT();
936 		HANDLE_EXCEPTION();
937 	}
938 
939 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
940 
941 	if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
942 		value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
943 
944 	} else {
945 		value = zend_assign_to_variable(prop, value, IS_CONST, EX_USES_STRICT_TYPES());
946 	}
947 
948 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
949 		ZVAL_COPY(EX_VAR(opline->result.var), value);
950 	}
951 
952 	/* assign_static_prop has two opcodes! */
953 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
954 }
955 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)956 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
957 {
958 	USE_OPLINE
959 	zval *prop, *value;
960 	zend_property_info *prop_info;
961 
962 	SAVE_OPLINE();
963 
964 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
965 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
966 		UNDEF_RESULT();
967 		HANDLE_EXCEPTION();
968 	}
969 
970 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
971 
972 	if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
973 		value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
974 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
975 	} else {
976 		value = zend_assign_to_variable(prop, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
977 	}
978 
979 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
980 		ZVAL_COPY(EX_VAR(opline->result.var), value);
981 	}
982 
983 	/* assign_static_prop has two opcodes! */
984 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
985 }
986 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)987 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
988 {
989 	USE_OPLINE
990 	zval *prop, *value;
991 	zend_property_info *prop_info;
992 
993 	SAVE_OPLINE();
994 
995 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
996 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
997 		UNDEF_RESULT();
998 		HANDLE_EXCEPTION();
999 	}
1000 
1001 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
1002 
1003 	if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
1004 		value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
1005 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
1006 	} else {
1007 		value = zend_assign_to_variable(prop, value, IS_VAR, EX_USES_STRICT_TYPES());
1008 	}
1009 
1010 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1011 		ZVAL_COPY(EX_VAR(opline->result.var), value);
1012 	}
1013 
1014 	/* assign_static_prop has two opcodes! */
1015 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1016 }
1017 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1018 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1019 {
1020 	USE_OPLINE
1021 	zval *prop, *value;
1022 	zend_property_info *prop_info;
1023 
1024 	SAVE_OPLINE();
1025 
1026 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1027 
1028 		UNDEF_RESULT();
1029 		HANDLE_EXCEPTION();
1030 	}
1031 
1032 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
1033 
1034 	if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
1035 		value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
1036 
1037 	} else {
1038 		value = zend_assign_to_variable(prop, value, IS_CV, EX_USES_STRICT_TYPES());
1039 	}
1040 
1041 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1042 		ZVAL_COPY(EX_VAR(opline->result.var), value);
1043 	}
1044 
1045 	/* assign_static_prop has two opcodes! */
1046 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1047 }
1048 
ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1049 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1050 {
1051 	USE_OPLINE
1052 	zval *prop, *value_ptr;
1053 	zend_property_info *prop_info;
1054 
1055 	SAVE_OPLINE();
1056 
1057 	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) {
1058 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
1059 		UNDEF_RESULT();
1060 		HANDLE_EXCEPTION();
1061 	}
1062 
1063 	value_ptr = get_zval_ptr_ptr((opline+1)->op1_type, (opline+1)->op1, BP_VAR_W);
1064 
1065 	if ((opline+1)->op1_type == IS_VAR && (opline->extended_value & ZEND_RETURNS_FUNCTION) && UNEXPECTED(!Z_ISREF_P(value_ptr))) {
1066 		if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(prop, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
1067 			prop = &EG(uninitialized_zval);
1068 		}
1069 	} else if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
1070 		prop = zend_assign_to_typed_property_reference(prop_info, prop, value_ptr EXECUTE_DATA_CC);
1071 	} else {
1072 		zend_assign_to_variable_reference(prop, value_ptr);
1073 	}
1074 
1075 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1076 		ZVAL_COPY(EX_VAR(opline->result.var), prop);
1077 	}
1078 
1079 	if ((opline+1)->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));};
1080 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1081 }
1082 
zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)1083 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
1084 {
1085 	zend_execute_data *old_execute_data;
1086 	uint32_t call_info = EX_CALL_INFO();
1087 	SAVE_OPLINE();
1088 
1089 	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)) {
1090 		EG(current_execute_data) = EX(prev_execute_data);
1091 		i_free_compiled_variables(execute_data);
1092 
1093 #ifdef ZEND_PREFER_RELOAD
1094 		call_info = EX_CALL_INFO();
1095 #endif
1096 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
1097 			OBJ_RELEASE(Z_OBJ(execute_data->This));
1098 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1099 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1100 		}
1101 		EG(vm_stack_top) = (zval*)execute_data;
1102 		execute_data = EX(prev_execute_data);
1103 
1104 		if (UNEXPECTED(EG(exception) != NULL)) {
1105 			zend_rethrow_exception(execute_data);
1106 			HANDLE_EXCEPTION_LEAVE();
1107 		}
1108 
1109 		LOAD_NEXT_OPLINE();
1110 		ZEND_VM_LEAVE();
1111 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
1112 		EG(current_execute_data) = EX(prev_execute_data);
1113 		i_free_compiled_variables(execute_data);
1114 
1115 #ifdef ZEND_PREFER_RELOAD
1116 		call_info = EX_CALL_INFO();
1117 #endif
1118 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1119 			zend_clean_and_cache_symbol_table(EX(symbol_table));
1120 		}
1121 
1122 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1123 			zend_free_extra_named_params(EX(extra_named_params));
1124 		}
1125 
1126 		/* Free extra args before releasing the closure,
1127 		 * as that may free the op_array. */
1128 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
1129 
1130 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
1131 			OBJ_RELEASE(Z_OBJ(execute_data->This));
1132 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1133 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1134 		}
1135 
1136 		old_execute_data = execute_data;
1137 		execute_data = EX(prev_execute_data);
1138 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1139 
1140 		if (UNEXPECTED(EG(exception) != NULL)) {
1141 			zend_rethrow_exception(execute_data);
1142 			HANDLE_EXCEPTION_LEAVE();
1143 		}
1144 
1145 		LOAD_NEXT_OPLINE();
1146 		ZEND_VM_LEAVE();
1147 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
1148 		zend_detach_symbol_table(execute_data);
1149 		zend_destroy_static_vars(&EX(func)->op_array);
1150 		destroy_op_array(&EX(func)->op_array);
1151 		efree_size(EX(func), sizeof(zend_op_array));
1152 #ifdef ZEND_PREFER_RELOAD
1153 		call_info = EX_CALL_INFO();
1154 #endif
1155 		old_execute_data = execute_data;
1156 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
1157 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1158 
1159 		zend_attach_symbol_table(execute_data);
1160 		if (UNEXPECTED(EG(exception) != NULL)) {
1161 			zend_rethrow_exception(execute_data);
1162 			HANDLE_EXCEPTION_LEAVE();
1163 		}
1164 
1165 		LOAD_NEXT_OPLINE();
1166 		ZEND_VM_LEAVE();
1167 	} else {
1168 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
1169 			EG(current_execute_data) = EX(prev_execute_data);
1170 			i_free_compiled_variables(execute_data);
1171 #ifdef ZEND_PREFER_RELOAD
1172 			call_info = EX_CALL_INFO();
1173 #endif
1174 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
1175 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1176 					zend_clean_and_cache_symbol_table(EX(symbol_table));
1177 				}
1178 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
1179 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1180 					zend_free_extra_named_params(EX(extra_named_params));
1181 				}
1182 			}
1183 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1184 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1185 			}
1186 			ZEND_VM_RETURN();
1187 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
1188 			zend_array *symbol_table = EX(symbol_table);
1189 
1190 			zend_detach_symbol_table(execute_data);
1191 			old_execute_data = EX(prev_execute_data);
1192 			while (old_execute_data) {
1193 				if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1194 					if (old_execute_data->symbol_table == symbol_table) {
1195 						zend_attach_symbol_table(old_execute_data);
1196 					}
1197 					break;
1198 				}
1199 				old_execute_data = old_execute_data->prev_execute_data;
1200 			}
1201 			EG(current_execute_data) = EX(prev_execute_data);
1202 			ZEND_VM_RETURN();
1203 		}
1204 	}
1205 }
1206 
ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1207 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1208 {
1209 	USE_OPLINE
1210 
1211 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
1212 }
1213 
ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1214 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1215 {
1216 	USE_OPLINE
1217 	zend_execute_data *call = EX(call);
1218 	zend_function *fbc = call->func;
1219 	zval *ret;
1220 	zval retval;
1221 
1222 	SAVE_OPLINE();
1223 	EX(call) = call->prev_execute_data;
1224 
1225 	call->prev_execute_data = execute_data;
1226 	EG(current_execute_data) = call;
1227 
1228 #if ZEND_DEBUG
1229 	bool should_throw = zend_internal_call_should_throw(fbc, call);
1230 #endif
1231 
1232 	ret = 0 ? EX_VAR(opline->result.var) : &retval;
1233 	ZVAL_NULL(ret);
1234 
1235 	fbc->internal_function.handler(call, ret);
1236 
1237 #if ZEND_DEBUG
1238 	if (!EG(exception) && call->func) {
1239 		if (should_throw) {
1240 			zend_internal_call_arginfo_violation(call->func);
1241 		}
1242 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1243 			zend_verify_internal_return_type(call->func, ret));
1244 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1245 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1246 		zend_verify_internal_func_info(call->func, ret);
1247 	}
1248 #endif
1249 
1250 	EG(current_execute_data) = execute_data;
1251 	zend_vm_stack_free_args(call);
1252 
1253 	uint32_t call_info = ZEND_CALL_INFO(call);
1254 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1255 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1256 			zend_free_extra_named_params(call->extra_named_params);
1257 		}
1258 		zend_vm_stack_free_call_frame_ex(call_info, call);
1259 	} else {
1260 		EG(vm_stack_top) = (zval*)call;
1261 	}
1262 
1263 	if (!0) {
1264 		i_zval_ptr_dtor(ret);
1265 	}
1266 
1267 	if (UNEXPECTED(EG(exception) != NULL)) {
1268 		zend_rethrow_exception(execute_data);
1269 		HANDLE_EXCEPTION();
1270 	}
1271 
1272 	ZEND_VM_SET_OPCODE(opline + 1);
1273 	ZEND_VM_CONTINUE();
1274 }
1275 
ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1276 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1277 {
1278 	USE_OPLINE
1279 	zend_execute_data *call = EX(call);
1280 	zend_function *fbc = call->func;
1281 	zval *ret;
1282 	zval retval;
1283 
1284 	SAVE_OPLINE();
1285 	EX(call) = call->prev_execute_data;
1286 
1287 	call->prev_execute_data = execute_data;
1288 	EG(current_execute_data) = call;
1289 
1290 #if ZEND_DEBUG
1291 	bool should_throw = zend_internal_call_should_throw(fbc, call);
1292 #endif
1293 
1294 	ret = 1 ? EX_VAR(opline->result.var) : &retval;
1295 	ZVAL_NULL(ret);
1296 
1297 	fbc->internal_function.handler(call, ret);
1298 
1299 #if ZEND_DEBUG
1300 	if (!EG(exception) && call->func) {
1301 		if (should_throw) {
1302 			zend_internal_call_arginfo_violation(call->func);
1303 		}
1304 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1305 			zend_verify_internal_return_type(call->func, ret));
1306 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1307 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1308 		zend_verify_internal_func_info(call->func, ret);
1309 	}
1310 #endif
1311 
1312 	EG(current_execute_data) = execute_data;
1313 	zend_vm_stack_free_args(call);
1314 
1315 	uint32_t call_info = ZEND_CALL_INFO(call);
1316 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1317 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1318 			zend_free_extra_named_params(call->extra_named_params);
1319 		}
1320 		zend_vm_stack_free_call_frame_ex(call_info, call);
1321 	} else {
1322 		EG(vm_stack_top) = (zval*)call;
1323 	}
1324 
1325 	if (!1) {
1326 		i_zval_ptr_dtor(ret);
1327 	}
1328 
1329 	if (UNEXPECTED(EG(exception) != NULL)) {
1330 		zend_rethrow_exception(execute_data);
1331 		HANDLE_EXCEPTION();
1332 	}
1333 
1334 	ZEND_VM_SET_OPCODE(opline + 1);
1335 	ZEND_VM_CONTINUE();
1336 }
1337 
ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1338 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1339 {
1340 	USE_OPLINE
1341 	zend_execute_data *call = EX(call);
1342 	zend_function *fbc = call->func;
1343 	zval *ret;
1344 
1345 	SAVE_OPLINE();
1346 	EX(call) = call->prev_execute_data;
1347 
1348 	ret = NULL;
1349 	if (0) {
1350 		ret = EX_VAR(opline->result.var);
1351 	}
1352 
1353 	call->prev_execute_data = execute_data;
1354 	execute_data = call;
1355 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1356 	LOAD_OPLINE_EX();
1357 
1358 
1359 	ZEND_VM_ENTER_EX();
1360 }
1361 
ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1362 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1363 {
1364 	USE_OPLINE
1365 	zend_execute_data *call = EX(call);
1366 	zend_function *fbc = call->func;
1367 	zval *ret;
1368 
1369 	SAVE_OPLINE();
1370 	EX(call) = call->prev_execute_data;
1371 
1372 	ret = NULL;
1373 	if (1) {
1374 		ret = EX_VAR(opline->result.var);
1375 	}
1376 
1377 	call->prev_execute_data = execute_data;
1378 	execute_data = call;
1379 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1380 	LOAD_OPLINE_EX();
1381 
1382 
1383 	ZEND_VM_ENTER_EX();
1384 }
1385 
ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1386 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1387 {
1388 	USE_OPLINE
1389 	zend_execute_data *call = EX(call);
1390 	zend_function *fbc = call->func;
1391 	zval *ret;
1392 
1393 	SAVE_OPLINE();
1394 	EX(call) = call->prev_execute_data;
1395 
1396 	ret = NULL;
1397 	if (RETURN_VALUE_USED(opline)) {
1398 		ret = EX_VAR(opline->result.var);
1399 	}
1400 
1401 	call->prev_execute_data = execute_data;
1402 	execute_data = call;
1403 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1404 	LOAD_OPLINE_EX();
1405 	SAVE_OPLINE();
1406 	zend_observer_fcall_begin(execute_data);
1407 
1408 	ZEND_VM_ENTER_EX();
1409 }
1410 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1411 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1412 {
1413 	USE_OPLINE
1414 	zend_execute_data *call = EX(call);
1415 	zend_function *fbc = call->func;
1416 	zval *ret;
1417 
1418 	SAVE_OPLINE();
1419 	EX(call) = call->prev_execute_data;
1420 
1421 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1422 		ret = NULL;
1423 		if (0) {
1424 			ret = EX_VAR(opline->result.var);
1425 		}
1426 
1427 		call->prev_execute_data = execute_data;
1428 		execute_data = call;
1429 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1430 		LOAD_OPLINE_EX();
1431 
1432 
1433 		ZEND_VM_ENTER_EX();
1434 	} else {
1435 		zval retval;
1436 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1437 		if (0) {
1438 			ret = NULL;
1439 		}
1440 
1441 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1442 			zend_deprecated_function(fbc);
1443 			if (UNEXPECTED(EG(exception) != NULL)) {
1444 				UNDEF_RESULT();
1445 				if (!0) {
1446 					ret = &retval;
1447 					ZVAL_UNDEF(ret);
1448 				}
1449 				goto fcall_by_name_end;
1450 			}
1451 		}
1452 
1453 		call->prev_execute_data = execute_data;
1454 		EG(current_execute_data) = call;
1455 
1456 #if ZEND_DEBUG
1457 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1458 #endif
1459 
1460 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1461 		ZVAL_NULL(ret);
1462 
1463 		fbc->internal_function.handler(call, ret);
1464 
1465 #if ZEND_DEBUG
1466 		if (!EG(exception) && call->func) {
1467 			if (should_throw) {
1468 				zend_internal_call_arginfo_violation(call->func);
1469 			}
1470 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1471 				zend_verify_internal_return_type(call->func, ret));
1472 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1473 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1474 			zend_verify_internal_func_info(call->func, ret);
1475 		}
1476 #endif
1477 
1478 		EG(current_execute_data) = execute_data;
1479 
1480 fcall_by_name_end:
1481 		zend_vm_stack_free_args(call);
1482 
1483 		uint32_t call_info = ZEND_CALL_INFO(call);
1484 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1485 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1486 				zend_free_extra_named_params(call->extra_named_params);
1487 			}
1488 			zend_vm_stack_free_call_frame_ex(call_info, call);
1489 		} else {
1490 			EG(vm_stack_top) = (zval*)call;
1491 		}
1492 
1493 		if (!0) {
1494 			i_zval_ptr_dtor(ret);
1495 		}
1496 	}
1497 
1498 	if (UNEXPECTED(EG(exception) != NULL)) {
1499 		zend_rethrow_exception(execute_data);
1500 		HANDLE_EXCEPTION();
1501 	}
1502 	ZEND_VM_SET_OPCODE(opline + 1);
1503 	ZEND_VM_CONTINUE();
1504 }
1505 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1506 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1507 {
1508 	USE_OPLINE
1509 	zend_execute_data *call = EX(call);
1510 	zend_function *fbc = call->func;
1511 	zval *ret;
1512 
1513 	SAVE_OPLINE();
1514 	EX(call) = call->prev_execute_data;
1515 
1516 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1517 		ret = NULL;
1518 		if (1) {
1519 			ret = EX_VAR(opline->result.var);
1520 		}
1521 
1522 		call->prev_execute_data = execute_data;
1523 		execute_data = call;
1524 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1525 		LOAD_OPLINE_EX();
1526 
1527 
1528 		ZEND_VM_ENTER_EX();
1529 	} else {
1530 		zval retval;
1531 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1532 		if (0) {
1533 			ret = NULL;
1534 		}
1535 
1536 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1537 			zend_deprecated_function(fbc);
1538 			if (UNEXPECTED(EG(exception) != NULL)) {
1539 				UNDEF_RESULT();
1540 				if (!1) {
1541 					ret = &retval;
1542 					ZVAL_UNDEF(ret);
1543 				}
1544 				goto fcall_by_name_end;
1545 			}
1546 		}
1547 
1548 		call->prev_execute_data = execute_data;
1549 		EG(current_execute_data) = call;
1550 
1551 #if ZEND_DEBUG
1552 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1553 #endif
1554 
1555 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1556 		ZVAL_NULL(ret);
1557 
1558 		fbc->internal_function.handler(call, ret);
1559 
1560 #if ZEND_DEBUG
1561 		if (!EG(exception) && call->func) {
1562 			if (should_throw) {
1563 				zend_internal_call_arginfo_violation(call->func);
1564 			}
1565 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1566 				zend_verify_internal_return_type(call->func, ret));
1567 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1568 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1569 			zend_verify_internal_func_info(call->func, ret);
1570 		}
1571 #endif
1572 
1573 		EG(current_execute_data) = execute_data;
1574 
1575 fcall_by_name_end:
1576 		zend_vm_stack_free_args(call);
1577 
1578 		uint32_t call_info = ZEND_CALL_INFO(call);
1579 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1580 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1581 				zend_free_extra_named_params(call->extra_named_params);
1582 			}
1583 			zend_vm_stack_free_call_frame_ex(call_info, call);
1584 		} else {
1585 			EG(vm_stack_top) = (zval*)call;
1586 		}
1587 
1588 		if (!1) {
1589 			i_zval_ptr_dtor(ret);
1590 		}
1591 	}
1592 
1593 	if (UNEXPECTED(EG(exception) != NULL)) {
1594 		zend_rethrow_exception(execute_data);
1595 		HANDLE_EXCEPTION();
1596 	}
1597 	ZEND_VM_SET_OPCODE(opline + 1);
1598 	ZEND_VM_CONTINUE();
1599 }
1600 
ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1601 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1602 {
1603 	USE_OPLINE
1604 	zend_execute_data *call = EX(call);
1605 	zend_function *fbc = call->func;
1606 	zval *ret;
1607 
1608 	SAVE_OPLINE();
1609 	EX(call) = call->prev_execute_data;
1610 
1611 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1612 		ret = NULL;
1613 		if (RETURN_VALUE_USED(opline)) {
1614 			ret = EX_VAR(opline->result.var);
1615 		}
1616 
1617 		call->prev_execute_data = execute_data;
1618 		execute_data = call;
1619 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1620 		LOAD_OPLINE_EX();
1621 		SAVE_OPLINE();
1622 		zend_observer_fcall_begin(execute_data);
1623 
1624 		ZEND_VM_ENTER_EX();
1625 	} else {
1626 		zval retval;
1627 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1628 		if (1) {
1629 			ret = NULL;
1630 		}
1631 
1632 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1633 			zend_deprecated_function(fbc);
1634 			if (UNEXPECTED(EG(exception) != NULL)) {
1635 				UNDEF_RESULT();
1636 				if (!RETURN_VALUE_USED(opline)) {
1637 					ret = &retval;
1638 					ZVAL_UNDEF(ret);
1639 				}
1640 				goto fcall_by_name_end;
1641 			}
1642 		}
1643 
1644 		call->prev_execute_data = execute_data;
1645 		EG(current_execute_data) = call;
1646 
1647 #if ZEND_DEBUG
1648 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1649 #endif
1650 
1651 		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
1652 		ZVAL_NULL(ret);
1653 
1654 		fbc->internal_function.handler(call, ret);
1655 
1656 #if ZEND_DEBUG
1657 		if (!EG(exception) && call->func) {
1658 			if (should_throw) {
1659 				zend_internal_call_arginfo_violation(call->func);
1660 			}
1661 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1662 				zend_verify_internal_return_type(call->func, ret));
1663 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1664 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1665 			zend_verify_internal_func_info(call->func, ret);
1666 		}
1667 #endif
1668 
1669 		EG(current_execute_data) = execute_data;
1670 
1671 fcall_by_name_end:
1672 		zend_vm_stack_free_args(call);
1673 
1674 		uint32_t call_info = ZEND_CALL_INFO(call);
1675 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1676 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1677 				zend_free_extra_named_params(call->extra_named_params);
1678 			}
1679 			zend_vm_stack_free_call_frame_ex(call_info, call);
1680 		} else {
1681 			EG(vm_stack_top) = (zval*)call;
1682 		}
1683 
1684 		if (!RETURN_VALUE_USED(opline)) {
1685 			i_zval_ptr_dtor(ret);
1686 		}
1687 	}
1688 
1689 	if (UNEXPECTED(EG(exception) != NULL)) {
1690 		zend_rethrow_exception(execute_data);
1691 		HANDLE_EXCEPTION();
1692 	}
1693 	ZEND_VM_SET_OPCODE(opline + 1);
1694 	ZEND_VM_CONTINUE();
1695 }
1696 
ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1697 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1698 {
1699 	USE_OPLINE
1700 	zend_execute_data *call = EX(call);
1701 	zend_function *fbc = call->func;
1702 	zval *ret;
1703 
1704 	SAVE_OPLINE();
1705 	EX(call) = call->prev_execute_data;
1706 
1707 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1708 		ret = NULL;
1709 		if (0) {
1710 			ret = EX_VAR(opline->result.var);
1711 		}
1712 
1713 		call->prev_execute_data = execute_data;
1714 		execute_data = call;
1715 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1716 
1717 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1718 			LOAD_OPLINE_EX();
1719 
1720 
1721 			ZEND_VM_ENTER_EX();
1722 		} else {
1723 			SAVE_OPLINE_EX();
1724 
1725 			execute_data = EX(prev_execute_data);
1726 			LOAD_OPLINE();
1727 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1728 			zend_execute_ex(call);
1729 		}
1730 	} else {
1731 		zval retval;
1732 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1733 		if (0) {
1734 			ret = NULL;
1735 		}
1736 
1737 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1738 			zend_deprecated_function(fbc);
1739 			if (UNEXPECTED(EG(exception) != NULL)) {
1740 				UNDEF_RESULT();
1741 				if (!0) {
1742 					ret = &retval;
1743 					ZVAL_UNDEF(ret);
1744 				}
1745 				goto fcall_end;
1746 			}
1747 		}
1748 
1749 		call->prev_execute_data = execute_data;
1750 		EG(current_execute_data) = call;
1751 
1752 #if ZEND_DEBUG
1753 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1754 #endif
1755 
1756 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1757 		ZVAL_NULL(ret);
1758 
1759 		if (!zend_execute_internal) {
1760 			/* saves one function call if zend_execute_internal is not used */
1761 			fbc->internal_function.handler(call, ret);
1762 		} else {
1763 			zend_execute_internal(call, ret);
1764 		}
1765 
1766 #if ZEND_DEBUG
1767 		if (!EG(exception) && call->func) {
1768 			if (should_throw) {
1769 				zend_internal_call_arginfo_violation(call->func);
1770 			}
1771 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1772 				zend_verify_internal_return_type(call->func, ret));
1773 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1774 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1775 			zend_verify_internal_func_info(call->func, ret);
1776 		}
1777 #endif
1778 
1779 		EG(current_execute_data) = execute_data;
1780 
1781 fcall_end:
1782 		zend_vm_stack_free_args(call);
1783 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1784 			zend_free_extra_named_params(call->extra_named_params);
1785 		}
1786 
1787 		if (!0) {
1788 			i_zval_ptr_dtor(ret);
1789 		}
1790 	}
1791 
1792 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1793 		OBJ_RELEASE(Z_OBJ(call->This));
1794 	}
1795 
1796 	zend_vm_stack_free_call_frame(call);
1797 	if (UNEXPECTED(EG(exception) != NULL)) {
1798 		zend_rethrow_exception(execute_data);
1799 		HANDLE_EXCEPTION();
1800 	}
1801 
1802 	ZEND_VM_SET_OPCODE(opline + 1);
1803 	ZEND_VM_CONTINUE();
1804 }
1805 
ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1806 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1807 {
1808 	USE_OPLINE
1809 	zend_execute_data *call = EX(call);
1810 	zend_function *fbc = call->func;
1811 	zval *ret;
1812 
1813 	SAVE_OPLINE();
1814 	EX(call) = call->prev_execute_data;
1815 
1816 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1817 		ret = NULL;
1818 		if (1) {
1819 			ret = EX_VAR(opline->result.var);
1820 		}
1821 
1822 		call->prev_execute_data = execute_data;
1823 		execute_data = call;
1824 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1825 
1826 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1827 			LOAD_OPLINE_EX();
1828 
1829 
1830 			ZEND_VM_ENTER_EX();
1831 		} else {
1832 			SAVE_OPLINE_EX();
1833 
1834 			execute_data = EX(prev_execute_data);
1835 			LOAD_OPLINE();
1836 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1837 			zend_execute_ex(call);
1838 		}
1839 	} else {
1840 		zval retval;
1841 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1842 		if (0) {
1843 			ret = NULL;
1844 		}
1845 
1846 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1847 			zend_deprecated_function(fbc);
1848 			if (UNEXPECTED(EG(exception) != NULL)) {
1849 				UNDEF_RESULT();
1850 				if (!1) {
1851 					ret = &retval;
1852 					ZVAL_UNDEF(ret);
1853 				}
1854 				goto fcall_end;
1855 			}
1856 		}
1857 
1858 		call->prev_execute_data = execute_data;
1859 		EG(current_execute_data) = call;
1860 
1861 #if ZEND_DEBUG
1862 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1863 #endif
1864 
1865 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1866 		ZVAL_NULL(ret);
1867 
1868 		if (!zend_execute_internal) {
1869 			/* saves one function call if zend_execute_internal is not used */
1870 			fbc->internal_function.handler(call, ret);
1871 		} else {
1872 			zend_execute_internal(call, ret);
1873 		}
1874 
1875 #if ZEND_DEBUG
1876 		if (!EG(exception) && call->func) {
1877 			if (should_throw) {
1878 				zend_internal_call_arginfo_violation(call->func);
1879 			}
1880 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1881 				zend_verify_internal_return_type(call->func, ret));
1882 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1883 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1884 			zend_verify_internal_func_info(call->func, ret);
1885 		}
1886 #endif
1887 
1888 		EG(current_execute_data) = execute_data;
1889 
1890 fcall_end:
1891 		zend_vm_stack_free_args(call);
1892 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1893 			zend_free_extra_named_params(call->extra_named_params);
1894 		}
1895 
1896 		if (!1) {
1897 			i_zval_ptr_dtor(ret);
1898 		}
1899 	}
1900 
1901 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1902 		OBJ_RELEASE(Z_OBJ(call->This));
1903 	}
1904 
1905 	zend_vm_stack_free_call_frame(call);
1906 	if (UNEXPECTED(EG(exception) != NULL)) {
1907 		zend_rethrow_exception(execute_data);
1908 		HANDLE_EXCEPTION();
1909 	}
1910 
1911 	ZEND_VM_SET_OPCODE(opline + 1);
1912 	ZEND_VM_CONTINUE();
1913 }
1914 
ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1915 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1916 {
1917 	USE_OPLINE
1918 	zend_execute_data *call = EX(call);
1919 	zend_function *fbc = call->func;
1920 	zval *ret;
1921 
1922 	SAVE_OPLINE();
1923 	EX(call) = call->prev_execute_data;
1924 
1925 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1926 		ret = NULL;
1927 		if (RETURN_VALUE_USED(opline)) {
1928 			ret = EX_VAR(opline->result.var);
1929 		}
1930 
1931 		call->prev_execute_data = execute_data;
1932 		execute_data = call;
1933 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1934 
1935 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1936 			LOAD_OPLINE_EX();
1937 			SAVE_OPLINE();
1938 			zend_observer_fcall_begin(execute_data);
1939 			ZEND_VM_ENTER_EX();
1940 		} else {
1941 			SAVE_OPLINE_EX();
1942 			zend_observer_fcall_begin(execute_data);
1943 			execute_data = EX(prev_execute_data);
1944 			LOAD_OPLINE();
1945 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1946 			zend_execute_ex(call);
1947 		}
1948 	} else {
1949 		zval retval;
1950 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1951 		if (1) {
1952 			ret = NULL;
1953 		}
1954 
1955 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1956 			zend_deprecated_function(fbc);
1957 			if (UNEXPECTED(EG(exception) != NULL)) {
1958 				UNDEF_RESULT();
1959 				if (!RETURN_VALUE_USED(opline)) {
1960 					ret = &retval;
1961 					ZVAL_UNDEF(ret);
1962 				}
1963 				goto fcall_end;
1964 			}
1965 		}
1966 
1967 		call->prev_execute_data = execute_data;
1968 		EG(current_execute_data) = call;
1969 
1970 #if ZEND_DEBUG
1971 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1972 #endif
1973 
1974 		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
1975 		ZVAL_NULL(ret);
1976 
1977 		if (!zend_execute_internal) {
1978 			/* saves one function call if zend_execute_internal is not used */
1979 			fbc->internal_function.handler(call, ret);
1980 		} else {
1981 			zend_execute_internal(call, ret);
1982 		}
1983 
1984 #if ZEND_DEBUG
1985 		if (!EG(exception) && call->func) {
1986 			if (should_throw) {
1987 				zend_internal_call_arginfo_violation(call->func);
1988 			}
1989 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1990 				zend_verify_internal_return_type(call->func, ret));
1991 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1992 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1993 			zend_verify_internal_func_info(call->func, ret);
1994 		}
1995 #endif
1996 
1997 		EG(current_execute_data) = execute_data;
1998 
1999 fcall_end:
2000 		zend_vm_stack_free_args(call);
2001 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
2002 			zend_free_extra_named_params(call->extra_named_params);
2003 		}
2004 
2005 		if (!RETURN_VALUE_USED(opline)) {
2006 			i_zval_ptr_dtor(ret);
2007 		}
2008 	}
2009 
2010 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
2011 		OBJ_RELEASE(Z_OBJ(call->This));
2012 	}
2013 
2014 	zend_vm_stack_free_call_frame(call);
2015 	if (UNEXPECTED(EG(exception) != NULL)) {
2016 		zend_rethrow_exception(execute_data);
2017 		HANDLE_EXCEPTION();
2018 	}
2019 
2020 	ZEND_VM_SET_OPCODE(opline + 1);
2021 	ZEND_VM_CONTINUE();
2022 }
2023 
ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2024 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2025 {
2026 	zval *return_value = EX(return_value);
2027 
2028 	if (EXPECTED(return_value)) {
2029 		USE_OPLINE
2030 		zend_generator *generator;
2031 		zend_execute_data *gen_execute_data;
2032 		uint32_t num_args, used_stack, call_info;
2033 
2034 		SAVE_OPLINE();
2035 		object_init_ex(return_value, zend_ce_generator);
2036 
2037 		/*
2038 		 * Normally the execute_data is allocated on the VM stack (because it does
2039 		 * not actually do any allocation and thus is faster). For generators
2040 		 * though this behavior would be suboptimal, because the (rather large)
2041 		 * structure would have to be copied back and forth every time execution is
2042 		 * suspended or resumed. That's why for generators the execution context
2043 		 * is allocated on heap.
2044 		 */
2045 		num_args = EX_NUM_ARGS();
2046 		if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
2047 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
2048 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
2049 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
2050 		} else {
2051 			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);
2052 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
2053 		}
2054 		memcpy(gen_execute_data, execute_data, used_stack);
2055 
2056 		/* Save execution context in generator object. */
2057 		generator = (zend_generator *) Z_OBJ_P(EX(return_value));
2058 		generator->execute_data = gen_execute_data;
2059 		generator->frozen_call_stack = NULL;
2060 		generator->execute_fake.opline = NULL;
2061 		generator->execute_fake.func = NULL;
2062 		generator->execute_fake.prev_execute_data = NULL;
2063 		ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);
2064 
2065 		gen_execute_data->opline = opline + 1;
2066 		/* EX(return_value) keeps pointer to zend_object (not a real zval) */
2067 		gen_execute_data->return_value = (zval*)generator;
2068 		call_info = Z_TYPE_INFO(EX(This));
2069 		if ((call_info & Z_TYPE_MASK) == IS_OBJECT
2070 		 && (!(call_info & (ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS))
2071 			 /* Bug #72523 */
2072 			|| UNEXPECTED(zend_execute_ex != execute_ex))) {
2073 			ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
2074 			Z_ADDREF(gen_execute_data->This);
2075 		}
2076 		ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
2077 		Z_TYPE_INFO(gen_execute_data->This) = call_info;
2078 		gen_execute_data->prev_execute_data = NULL;
2079 
2080 		call_info = EX_CALL_INFO();
2081 		EG(current_execute_data) = EX(prev_execute_data);
2082 		if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
2083 			EG(vm_stack_top) = (zval*)execute_data;
2084 			execute_data = EX(prev_execute_data);
2085 			LOAD_NEXT_OPLINE();
2086 			ZEND_VM_LEAVE();
2087 		} else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
2088 			zend_execute_data *old_execute_data = execute_data;
2089 			execute_data = EX(prev_execute_data);
2090 			zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
2091 			LOAD_NEXT_OPLINE();
2092 			ZEND_VM_LEAVE();
2093 		} else {
2094 			ZEND_VM_RETURN();
2095 		}
2096 	} else {
2097 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2098 	}
2099 }
2100 
zend_cannot_pass_by_ref_helper_SPEC(uint32_t _arg_num,zval * _arg ZEND_OPCODE_HANDLER_ARGS_DC)2101 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)
2102 {
2103 	USE_OPLINE
2104 
2105 	SAVE_OPLINE();
2106 
2107 	zend_cannot_pass_by_reference(_arg_num);
2108 	FREE_OP(opline->op1_type, opline->op1.var);
2109 	ZVAL_UNDEF(_arg);
2110 	HANDLE_EXCEPTION();
2111 }
2112 
ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2114 {
2115 	USE_OPLINE
2116 	zval *args;
2117 	uint32_t arg_num;
2118 
2119 	SAVE_OPLINE();
2120 	args = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
2121 	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
2122 
2123 send_again:
2124 	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
2125 		HashTable *ht = Z_ARRVAL_P(args);
2126 		zval *arg, *top;
2127 		zend_string *name;
2128 		bool have_named_params = 0;
2129 
2130 		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));
2131 
2132 		// TODO: Speed this up using a flag that specifies whether there are any ref parameters.
2133 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
2134 			uint32_t tmp_arg_num = arg_num;
2135 			bool separate = 0;
2136 
2137 			/* check if any of arguments are going to be passed by reference */
2138 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2139 				if (UNEXPECTED(name)) {
2140 					void *cache_slot[2] = {NULL, NULL};
2141 					tmp_arg_num = zend_get_arg_offset_by_name(
2142 						EX(call)->func, name, cache_slot) + 1;
2143 				}
2144 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, tmp_arg_num)) {
2145 					separate = 1;
2146 					break;
2147 				}
2148 				tmp_arg_num++;
2149 			} ZEND_HASH_FOREACH_END();
2150 			if (separate) {
2151 				SEPARATE_ARRAY(args);
2152 				ht = Z_ARRVAL_P(args);
2153 			}
2154 		}
2155 
2156 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2157 			if (UNEXPECTED(name)) {
2158 				void *cache_slot[2] = {NULL, NULL};
2159 				have_named_params = 1;
2160 				top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2161 				if (UNEXPECTED(!top)) {
2162 					FREE_OP(opline->op1_type, opline->op1.var);
2163 					HANDLE_EXCEPTION();
2164 				}
2165 			} else {
2166 				if (have_named_params) {
2167 					zend_throw_error(NULL,
2168 						"Cannot use positional argument after named argument during unpacking");
2169 					FREE_OP(opline->op1_type, opline->op1.var);
2170 					HANDLE_EXCEPTION();
2171 				}
2172 
2173 				top = ZEND_CALL_ARG(EX(call), arg_num);
2174 				ZEND_CALL_NUM_ARGS(EX(call))++;
2175 			}
2176 
2177 			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2178 				if (Z_ISREF_P(arg)) {
2179 					Z_ADDREF_P(arg);
2180 					ZVAL_REF(top, Z_REF_P(arg));
2181 				} else if (opline->op1_type & (IS_VAR|IS_CV)) {
2182 					/* array is already separated above */
2183 					ZVAL_MAKE_REF_EX(arg, 2);
2184 					ZVAL_REF(top, Z_REF_P(arg));
2185 				} else {
2186 					Z_TRY_ADDREF_P(arg);
2187 					ZVAL_NEW_REF(top, arg);
2188 				}
2189 			} else {
2190 				ZVAL_COPY_DEREF(top, arg);
2191 			}
2192 
2193 			arg_num++;
2194 		} ZEND_HASH_FOREACH_END();
2195 
2196 	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
2197 		zend_class_entry *ce = Z_OBJCE_P(args);
2198 		zend_object_iterator *iter;
2199 		bool have_named_params = 0;
2200 
2201 		if (!ce || !ce->get_iterator) {
2202 			zend_type_error("Only arrays and Traversables can be unpacked");
2203 		} else {
2204 
2205 			iter = ce->get_iterator(ce, args, 0);
2206 			if (UNEXPECTED(!iter)) {
2207 				FREE_OP(opline->op1_type, opline->op1.var);
2208 				if (!EG(exception)) {
2209 					zend_throw_exception_ex(
2210 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
2211 					);
2212 				}
2213 				HANDLE_EXCEPTION();
2214 			}
2215 
2216 			const zend_object_iterator_funcs *funcs = iter->funcs;
2217 			if (funcs->rewind) {
2218 				funcs->rewind(iter);
2219 			}
2220 
2221 			for (; funcs->valid(iter) == SUCCESS; ++arg_num) {
2222 				zval *arg, *top;
2223 
2224 				if (UNEXPECTED(EG(exception) != NULL)) {
2225 					break;
2226 				}
2227 
2228 				arg = funcs->get_current_data(iter);
2229 				if (UNEXPECTED(EG(exception) != NULL)) {
2230 					break;
2231 				}
2232 
2233 				zend_string *name = NULL;
2234 				if (funcs->get_current_key) {
2235 					zval key;
2236 					funcs->get_current_key(iter, &key);
2237 					if (UNEXPECTED(EG(exception) != NULL)) {
2238 						break;
2239 					}
2240 
2241 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
2242 						if (UNEXPECTED(Z_TYPE(key) != IS_STRING)) {
2243 							zend_throw_error(NULL,
2244 								"Keys must be of type int|string during argument unpacking");
2245 							zval_ptr_dtor(&key);
2246 							break;
2247 						}
2248 
2249 						name = Z_STR_P(&key);
2250 					}
2251 				}
2252 
2253 				if (UNEXPECTED(name)) {
2254 					void *cache_slot[2] = {NULL, NULL};
2255 					have_named_params = 1;
2256 					top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2257 					if (UNEXPECTED(!top)) {
2258 						zend_string_release(name);
2259 						break;
2260 					}
2261 
2262 					ZVAL_DEREF(arg);
2263 					Z_TRY_ADDREF_P(arg);
2264 
2265 					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2266 						zend_error(
2267 							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
2268 							" by unpacking a Traversable, passing by-value instead", arg_num,
2269 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
2270 							EX(call)->func->common.scope ? "::" : "",
2271 							ZSTR_VAL(EX(call)->func->common.function_name)
2272 						);
2273 						ZVAL_NEW_REF(top, arg);
2274 					} else {
2275 						ZVAL_COPY_VALUE(top, arg);
2276 					}
2277 
2278 					zend_string_release(name);
2279 				} else {
2280 					if (have_named_params) {
2281 						zend_throw_error(NULL,
2282 							"Cannot use positional argument after named argument during unpacking");
2283 						break;
2284 					}
2285 
2286 					zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
2287 					top = ZEND_CALL_ARG(EX(call), arg_num);
2288 					ZVAL_DEREF(arg);
2289 					Z_TRY_ADDREF_P(arg);
2290 
2291 					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2292 						zend_error(
2293 							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
2294 							" by unpacking a Traversable, passing by-value instead", arg_num,
2295 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
2296 							EX(call)->func->common.scope ? "::" : "",
2297 							ZSTR_VAL(EX(call)->func->common.function_name)
2298 						);
2299 						ZVAL_NEW_REF(top, arg);
2300 					} else {
2301 						ZVAL_COPY_VALUE(top, arg);
2302 					}
2303 
2304 					ZEND_CALL_NUM_ARGS(EX(call))++;
2305 				}
2306 
2307 				funcs->move_forward(iter);
2308 			}
2309 
2310 			zend_iterator_dtor(iter);
2311 		}
2312 	} else if (EXPECTED(Z_ISREF_P(args))) {
2313 		args = Z_REFVAL_P(args);
2314 		goto send_again;
2315 	} else {
2316 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
2317 			ZVAL_UNDEFINED_OP1();
2318 		}
2319 		zend_type_error("Only arrays and Traversables can be unpacked");
2320 	}
2321 
2322 	FREE_OP(opline->op1_type, opline->op1.var);
2323 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2324 }
2325 
ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2326 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2327 {
2328 	USE_OPLINE
2329 	zval *args;
2330 
2331 	SAVE_OPLINE();
2332 	args = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2333 
2334 	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
2335 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
2336 			args = Z_REFVAL_P(args);
2337 			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
2338 				goto send_array;
2339 			}
2340 		}
2341 		zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_type_name(args));
2342 		FREE_OP(opline->op2_type, opline->op2.var);
2343 		FREE_OP(opline->op1_type, opline->op1.var);
2344 		HANDLE_EXCEPTION();
2345 	} else {
2346 		uint32_t arg_num;
2347 		HashTable *ht;
2348 		zval *arg, *param;
2349 
2350 send_array:
2351 		ht = Z_ARRVAL_P(args);
2352 		if (opline->op2_type != IS_UNUSED) {
2353 			/* We don't need to handle named params in this case,
2354 			 * because array_slice() is called with $preserve_keys == false. */
2355 			zval *op2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
2356 			uint32_t skip = opline->extended_value;
2357 			uint32_t count = zend_hash_num_elements(ht);
2358 			zend_long len;
2359 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
2360 				len = Z_LVAL_P(op2);
2361 			} else if (Z_TYPE_P(op2) == IS_NULL) {
2362 				len = count - skip;
2363 			} else if (EX_USES_STRICT_TYPES()
2364 					|| !zend_parse_arg_long_weak(op2, &len, /* arg_num */ 3)) {
2365 				zend_type_error(
2366 					"array_slice(): Argument #3 ($length) must be of type ?int, %s given",
2367 					zend_zval_type_name(op2));
2368 				FREE_OP(opline->op2_type, opline->op2.var);
2369 				FREE_OP(opline->op1_type, opline->op1.var);
2370 				HANDLE_EXCEPTION();
2371 			}
2372 
2373 			if (len < 0) {
2374 				len += (zend_long)(count - skip);
2375 			}
2376 			if (skip < count && len > 0) {
2377 				if (len > (zend_long)(count - skip)) {
2378 					len = (zend_long)(count - skip);
2379 				}
2380 				zend_vm_stack_extend_call_frame(&EX(call), 0, len);
2381 				arg_num = 1;
2382 				param = ZEND_CALL_ARG(EX(call), 1);
2383 				ZEND_HASH_FOREACH_VAL(ht, arg) {
2384 					bool must_wrap = 0;
2385 					if (skip > 0) {
2386 						skip--;
2387 						continue;
2388 					} else if ((zend_long)(arg_num - 1) >= len) {
2389 						break;
2390 					} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2391 						if (UNEXPECTED(!Z_ISREF_P(arg))) {
2392 							if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2393 								/* By-value send is not allowed -- emit a warning,
2394 								 * but still perform the call. */
2395 								zend_param_must_be_ref(EX(call)->func, arg_num);
2396 								must_wrap = 1;
2397 							}
2398 						}
2399 					} else {
2400 						if (Z_ISREF_P(arg) &&
2401 						    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2402 							/* don't separate references for __call */
2403 							arg = Z_REFVAL_P(arg);
2404 						}
2405 					}
2406 					if (EXPECTED(!must_wrap)) {
2407 						ZVAL_COPY(param, arg);
2408 					} else {
2409 						Z_TRY_ADDREF_P(arg);
2410 						ZVAL_NEW_REF(param, arg);
2411 					}
2412 					ZEND_CALL_NUM_ARGS(EX(call))++;
2413 					arg_num++;
2414 					param++;
2415 				} ZEND_HASH_FOREACH_END();
2416 			}
2417 			FREE_OP(opline->op2_type, opline->op2.var);
2418 		} else {
2419 			zend_string *name;
2420 			bool have_named_params;
2421 			zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
2422 			arg_num = 1;
2423 			param = ZEND_CALL_ARG(EX(call), 1);
2424 			have_named_params = 0;
2425 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2426 				if (name) {
2427 					void *cache_slot[2] = {NULL, NULL};
2428 					have_named_params = 1;
2429 					param = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2430 					if (!param) {
2431 						FREE_OP(opline->op1_type, opline->op1.var);
2432 						HANDLE_EXCEPTION();
2433 					}
2434 				} else if (have_named_params) {
2435 					zend_throw_error(NULL,
2436 						"Cannot use positional argument after named argument");
2437 					FREE_OP(opline->op1_type, opline->op1.var);
2438 					HANDLE_EXCEPTION();
2439 				}
2440 
2441 				bool must_wrap = 0;
2442 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2443 					if (UNEXPECTED(!Z_ISREF_P(arg))) {
2444 						if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2445 							/* By-value send is not allowed -- emit a warning,
2446 							 * but still perform the call. */
2447 							zend_param_must_be_ref(EX(call)->func, arg_num);
2448 							must_wrap = 1;
2449 						}
2450 					}
2451 				} else {
2452 					if (Z_ISREF_P(arg) &&
2453 					    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2454 						/* don't separate references for __call */
2455 						arg = Z_REFVAL_P(arg);
2456 					}
2457 				}
2458 
2459 				if (EXPECTED(!must_wrap)) {
2460 					ZVAL_COPY(param, arg);
2461 				} else {
2462 					Z_TRY_ADDREF_P(arg);
2463 					ZVAL_NEW_REF(param, arg);
2464 				}
2465 				if (!name) {
2466 					ZEND_CALL_NUM_ARGS(EX(call))++;
2467 					arg_num++;
2468 					param++;
2469 				}
2470 			} ZEND_HASH_FOREACH_END();
2471 		}
2472 	}
2473 	FREE_OP(opline->op1_type, opline->op1.var);
2474 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2475 }
2476 
zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)2477 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2478 {
2479 #ifdef ZEND_VM_IP_GLOBAL_REG
2480 	USE_OPLINE
2481 
2482 	SAVE_OPLINE();
2483 #endif
2484 	zend_missing_arg_error(execute_data);
2485 	HANDLE_EXCEPTION();
2486 }
2487 
zend_verify_recv_arg_type_helper_SPEC(zval * op_1 ZEND_OPCODE_HANDLER_ARGS_DC)2488 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)
2489 {
2490 	USE_OPLINE
2491 
2492 	SAVE_OPLINE();
2493 	if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), opline->op1.num, op_1, CACHE_ADDR(opline->extended_value)))) {
2494 		HANDLE_EXCEPTION();
2495 	}
2496 
2497 	ZEND_VM_NEXT_OPCODE();
2498 }
2499 
ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2500 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2501 {
2502 	USE_OPLINE
2503 	uint32_t arg_num = opline->op1.num;
2504 
2505 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
2506 		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2507 	}
2508 
2509 	ZEND_VM_NEXT_OPCODE();
2510 }
2511 
zend_case_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)2512 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)
2513 {
2514 	int ret;
2515 	USE_OPLINE
2516 
2517 	SAVE_OPLINE();
2518 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
2519 		op_1 = ZVAL_UNDEFINED_OP1();
2520 	}
2521 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
2522 		op_2 = ZVAL_UNDEFINED_OP2();
2523 	}
2524 	ret = zend_compare(op_1, op_2);
2525 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
2526 		zval_ptr_dtor_nogc(op_2);
2527 	}
2528 	ZEND_VM_SMART_BRANCH(ret == 0, 1);
2529 }
2530 
ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2531 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2532 {
2533 	USE_OPLINE
2534 	zval *op1;
2535 	HashTable *result_ht;
2536 
2537 	SAVE_OPLINE();
2538 	op1 = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2539 	result_ht = Z_ARRVAL_P(EX_VAR(opline->result.var));
2540 
2541 add_unpack_again:
2542 	if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
2543 		HashTable *ht = Z_ARRVAL_P(op1);
2544 		zval *val;
2545 		zend_string *key;
2546 
2547 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
2548 			if (Z_ISREF_P(val) && Z_REFCOUNT_P(val) == 1) {
2549 				val = Z_REFVAL_P(val);
2550 			}
2551 			Z_TRY_ADDREF_P(val);
2552 			if (key) {
2553 				zend_hash_update(result_ht, key, val);
2554 			} else {
2555 				if (!zend_hash_next_index_insert(result_ht, val)) {
2556 					zend_cannot_add_element();
2557 					zval_ptr_dtor_nogc(val);
2558 					break;
2559 				}
2560 			}
2561 		} ZEND_HASH_FOREACH_END();
2562 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
2563 		zend_class_entry *ce = Z_OBJCE_P(op1);
2564 		zend_object_iterator *iter;
2565 
2566 		if (!ce || !ce->get_iterator) {
2567 			zend_type_error("Only arrays and Traversables can be unpacked");
2568 		} else {
2569 			iter = ce->get_iterator(ce, op1, 0);
2570 			if (UNEXPECTED(!iter)) {
2571 				FREE_OP(opline->op1_type, opline->op1.var);
2572 				if (!EG(exception)) {
2573 					zend_throw_exception_ex(
2574 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
2575 					);
2576 				}
2577 				HANDLE_EXCEPTION();
2578 			}
2579 
2580 			const zend_object_iterator_funcs *funcs = iter->funcs;
2581 			if (funcs->rewind) {
2582 				funcs->rewind(iter);
2583 			}
2584 
2585 			for (; funcs->valid(iter) == SUCCESS; ) {
2586 				zval *val;
2587 
2588 				if (UNEXPECTED(EG(exception) != NULL)) {
2589 					break;
2590 				}
2591 
2592 				val = funcs->get_current_data(iter);
2593 				if (UNEXPECTED(EG(exception) != NULL)) {
2594 					break;
2595 				}
2596 
2597 				zval key;
2598 				if (funcs->get_current_key) {
2599 					funcs->get_current_key(iter, &key);
2600 					if (UNEXPECTED(EG(exception) != NULL)) {
2601 						break;
2602 					}
2603 
2604 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG && Z_TYPE(key) != IS_STRING)) {
2605 						zend_throw_error(NULL,
2606 							"Keys must be of type int|string during array unpacking");
2607 						zval_ptr_dtor(&key);
2608 						break;
2609 					}
2610 				} else {
2611 					ZVAL_UNDEF(&key);
2612 				}
2613 
2614 				ZVAL_DEREF(val);
2615 				Z_TRY_ADDREF_P(val);
2616 
2617 				zend_ulong num_key;
2618 				if (Z_TYPE(key) == IS_STRING && !ZEND_HANDLE_NUMERIC(Z_STR(key), num_key)) {
2619 					zend_hash_update(result_ht, Z_STR(key), val);
2620 					zval_ptr_dtor_str(&key);
2621 				} else {
2622 					zval_ptr_dtor(&key);
2623 					if (!zend_hash_next_index_insert(result_ht, val)) {
2624 						zend_cannot_add_element();
2625 						zval_ptr_dtor_nogc(val);
2626 						break;
2627 					}
2628 				}
2629 
2630 				funcs->move_forward(iter);
2631 				if (UNEXPECTED(EG(exception))) {
2632 					break;
2633 				}
2634 			}
2635 
2636 			zend_iterator_dtor(iter);
2637 		}
2638 	} else if (EXPECTED(Z_ISREF_P(op1))) {
2639 		op1 = Z_REFVAL_P(op1);
2640 		goto add_unpack_again;
2641 	} else {
2642 		zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
2643 	}
2644 
2645 	FREE_OP(opline->op1_type, opline->op1.var);
2646 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2647 }
2648 
ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2649 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2650 {
2651 	USE_OPLINE
2652 	zval *varname;
2653 	zend_string *name, *tmp_name = NULL;
2654 	zend_class_entry *ce;
2655 
2656 	SAVE_OPLINE();
2657 
2658 	if (opline->op2_type == IS_CONST) {
2659 		ce = CACHED_PTR(opline->extended_value);
2660 		if (UNEXPECTED(ce == NULL)) {
2661 			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);
2662 			if (UNEXPECTED(ce == NULL)) {
2663 				FREE_OP(opline->op1_type, opline->op1.var);
2664 				HANDLE_EXCEPTION();
2665 			}
2666 			/*CACHE_PTR(opline->extended_value, ce);*/
2667 		}
2668 	} else if (opline->op2_type == IS_UNUSED) {
2669 		ce = zend_fetch_class(NULL, opline->op2.num);
2670 		if (UNEXPECTED(ce == NULL)) {
2671 			FREE_OP(opline->op1_type, opline->op1.var);
2672 			HANDLE_EXCEPTION();
2673 		}
2674 	} else {
2675 		ce = Z_CE_P(EX_VAR(opline->op2.var));
2676 	}
2677 
2678 	varname = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
2679 	if (opline->op1_type == IS_CONST) {
2680 		name = Z_STR_P(varname);
2681 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
2682 		name = Z_STR_P(varname);
2683 	} else {
2684 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
2685 			varname = ZVAL_UNDEFINED_OP1();
2686 		}
2687 		name = zval_try_get_tmp_string(varname, &tmp_name);
2688 		if (UNEXPECTED(!name)) {
2689 			FREE_OP(opline->op1_type, opline->op1.var);
2690 			HANDLE_EXCEPTION();
2691 		}
2692 	}
2693 
2694 	zend_std_unset_static_property(ce, name);
2695 
2696 	zend_tmp_string_release(tmp_name);
2697 	FREE_OP(opline->op1_type, opline->op1.var);
2698 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2699 }
2700 
zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)2701 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2702 {
2703 	USE_OPLINE
2704 	zval *array;
2705 	zval *value;
2706 	uint32_t value_type;
2707 	HashTable *fe_ht;
2708 	HashPosition pos;
2709 	Bucket *p;
2710 	zend_object_iterator *iter;
2711 
2712 	array = EX_VAR(opline->op1.var);
2713 	SAVE_OPLINE();
2714 
2715 	ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
2716 	if ((iter = zend_iterator_unwrap(array)) == NULL) {
2717 		/* plain object */
2718 
2719 		fe_ht = Z_OBJPROP_P(array);
2720 		pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
2721 		p = fe_ht->arData + pos;
2722 		while (1) {
2723 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
2724 				/* reached end of iteration */
2725 				goto fe_fetch_r_exit;
2726 			}
2727 			pos++;
2728 			value = &p->val;
2729 			value_type = Z_TYPE_INFO_P(value);
2730 			if (EXPECTED(value_type != IS_UNDEF)) {
2731 				if (UNEXPECTED(value_type == IS_INDIRECT)) {
2732 					value = Z_INDIRECT_P(value);
2733 					value_type = Z_TYPE_INFO_P(value);
2734 					if (EXPECTED(value_type != IS_UNDEF)
2735 					 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
2736 						break;
2737 					}
2738 				} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
2739 						|| !p->key
2740 						|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
2741 					break;
2742 				}
2743 			}
2744 			p++;
2745 		}
2746 		EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
2747 		if (RETURN_VALUE_USED(opline)) {
2748 			if (UNEXPECTED(!p->key)) {
2749 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
2750 			} else if (ZSTR_VAL(p->key)[0]) {
2751 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
2752 			} else {
2753 				const char *class_name, *prop_name;
2754 				size_t prop_name_len;
2755 				zend_unmangle_property_name_ex(
2756 					p->key, &class_name, &prop_name, &prop_name_len);
2757 				ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
2758 			}
2759 		}
2760 	} else {
2761 		const zend_object_iterator_funcs *funcs = iter->funcs;
2762 		if (EXPECTED(++iter->index > 0)) {
2763 			/* This could cause an endless loop if index becomes zero again.
2764 			 * In case that ever happens we need an additional flag. */
2765 			funcs->move_forward(iter);
2766 			if (UNEXPECTED(EG(exception) != NULL)) {
2767 				UNDEF_RESULT();
2768 				HANDLE_EXCEPTION();
2769 			}
2770 			if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
2771 				/* reached end of iteration */
2772 				if (UNEXPECTED(EG(exception) != NULL)) {
2773 					UNDEF_RESULT();
2774 					HANDLE_EXCEPTION();
2775 				}
2776 fe_fetch_r_exit:
2777 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
2778 				ZEND_VM_CONTINUE();
2779 			}
2780 		}
2781 		value = funcs->get_current_data(iter);
2782 		if (UNEXPECTED(EG(exception) != NULL)) {
2783 			UNDEF_RESULT();
2784 			HANDLE_EXCEPTION();
2785 		}
2786 		if (!value) {
2787 			/* failure in get_current_data */
2788 			goto fe_fetch_r_exit;
2789 		}
2790 		if (RETURN_VALUE_USED(opline)) {
2791 			if (funcs->get_current_key) {
2792 				funcs->get_current_key(iter, EX_VAR(opline->result.var));
2793 				if (UNEXPECTED(EG(exception) != NULL)) {
2794 					UNDEF_RESULT();
2795 					HANDLE_EXCEPTION();
2796 				}
2797 			} else {
2798 				ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
2799 			}
2800 		}
2801 		value_type = Z_TYPE_INFO_P(value);
2802 	}
2803 
2804 	if (EXPECTED(opline->op2_type == IS_CV)) {
2805 		zval *variable_ptr = EX_VAR(opline->op2.var);
2806 		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
2807 	} else {
2808 		zval *res = EX_VAR(opline->op2.var);
2809 		zend_refcounted *gc = Z_COUNTED_P(value);
2810 
2811 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
2812 		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
2813 			GC_ADDREF(gc);
2814 		}
2815 	}
2816 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2817 }
2818 
ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2819 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2820 {
2821 	USE_OPLINE
2822 	zval *value;
2823 	zend_result fetch_result;
2824 	bool result;
2825 
2826 	SAVE_OPLINE();
2827 
2828 	fetch_result = zend_fetch_static_property_address(&value, NULL, opline->extended_value & ~ZEND_ISEMPTY, BP_VAR_IS, 0 OPLINE_CC EXECUTE_DATA_CC);
2829 
2830 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
2831 		result = fetch_result == SUCCESS && Z_TYPE_P(value) > IS_NULL &&
2832 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2833 	} else {
2834 		result = fetch_result != SUCCESS || !i_zend_is_true(value);
2835 	}
2836 
2837 	ZEND_VM_SMART_BRANCH(result, 1);
2838 }
2839 
ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2840 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2841 {
2842 	USE_OPLINE
2843 
2844 	SAVE_OPLINE();
2845 	if (opline->op1_type != IS_UNUSED) {
2846 		zval *ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2847 
2848 		do {
2849 			if (Z_TYPE_P(ptr) == IS_LONG) {
2850 				EG(exit_status) = Z_LVAL_P(ptr);
2851 			} else {
2852 				if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
2853 					ptr = Z_REFVAL_P(ptr);
2854 					if (Z_TYPE_P(ptr) == IS_LONG) {
2855 						EG(exit_status) = Z_LVAL_P(ptr);
2856 						break;
2857 					}
2858 				}
2859 				zend_print_zval(ptr, 0);
2860 			}
2861 		} while (0);
2862 		FREE_OP(opline->op1_type, opline->op1.var);
2863 	}
2864 
2865 	if (!EG(exception)) {
2866 		zend_throw_unwind_exit();
2867 	}
2868 	HANDLE_EXCEPTION();
2869 }
2870 
ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2871 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2872 {
2873 	USE_OPLINE
2874 
2875 	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));
2876 
2877 	if (!E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))) {
2878 		do {
2879 			/* Do not silence fatal errors */
2880 			EG(error_reporting) &= E_FATAL_ERRORS;
2881 			if (!EG(error_reporting_ini_entry)) {
2882 				zval *zv = zend_hash_find_known_hash(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
2883 				if (zv) {
2884 					EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
2885 				} else {
2886 					break;
2887 				}
2888 			}
2889 			if (!EG(error_reporting_ini_entry)->modified) {
2890 				if (!EG(modified_ini_directives)) {
2891 					ALLOC_HASHTABLE(EG(modified_ini_directives));
2892 					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
2893 				}
2894 				if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
2895 					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
2896 					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
2897 					EG(error_reporting_ini_entry)->modified = 1;
2898 				}
2899 			}
2900 		} while (0);
2901 	}
2902 	ZEND_VM_NEXT_OPCODE();
2903 }
2904 
ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2905 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2906 {
2907 	USE_OPLINE
2908 
2909 	if (!EG(no_extensions)) {
2910 		SAVE_OPLINE();
2911 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
2912 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2913 	}
2914 	ZEND_VM_NEXT_OPCODE();
2915 }
2916 
ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2917 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2918 {
2919 	USE_OPLINE
2920 
2921 	if (!EG(no_extensions)) {
2922 		SAVE_OPLINE();
2923 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
2924 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2925 	}
2926 	ZEND_VM_NEXT_OPCODE();
2927 }
2928 
ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2929 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2930 {
2931 	USE_OPLINE
2932 
2933 	if (!EG(no_extensions)) {
2934 		SAVE_OPLINE();
2935 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
2936 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2937 	}
2938 	ZEND_VM_NEXT_OPCODE();
2939 }
2940 
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2941 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2942 {
2943 	zval *zv;
2944 	zend_class_entry *ce;
2945 	USE_OPLINE
2946 
2947 	ce = CACHED_PTR(opline->extended_value);
2948 	if (UNEXPECTED(ce == NULL)) {
2949 		zend_string *rtd_key = Z_STR_P(RT_CONSTANT(opline, opline->op1));
2950 		zv = zend_hash_find_known_hash(EG(class_table), rtd_key);
2951 		ZEND_ASSERT(zv != NULL);
2952 		ce = Z_CE_P(zv);
2953 		if (!(ce->ce_flags & ZEND_ACC_LINKED)) {
2954 			SAVE_OPLINE();
2955 			ce = zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL, rtd_key);
2956 			if (!ce) {
2957 				HANDLE_EXCEPTION();
2958 			}
2959 		}
2960 		CACHE_PTR(opline->extended_value, ce);
2961 	}
2962 	Z_CE_P(EX_VAR(opline->result.var)) = ce;
2963 	ZEND_VM_NEXT_OPCODE();
2964 }
2965 
ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2966 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2967 {
2968 	zend_function *func;
2969 	USE_OPLINE
2970 
2971 	SAVE_OPLINE();
2972 	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
2973 	do_bind_function(func, RT_CONSTANT(opline, opline->op1));
2974 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2975 }
2976 
ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2977 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2978 {
2979 	USE_OPLINE
2980 
2981 	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
2982 		EG(ticks_count) = 0;
2983 		if (zend_ticks_function) {
2984 			SAVE_OPLINE();
2985 			zend_ticks_function(opline->extended_value);
2986 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2987 		}
2988 	}
2989 	ZEND_VM_NEXT_OPCODE();
2990 }
2991 
ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2992 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2993 {
2994 	USE_OPLINE
2995 
2996 	ZEND_VM_NEXT_OPCODE();
2997 }
2998 
ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2999 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3000 {
3001 	USE_OPLINE
3002 
3003 	ZEND_VM_NEXT_OPCODE();
3004 }
3005 
zend_dispatch_try_catch_finally_helper_SPEC(uint32_t try_catch_offset,uint32_t op_num ZEND_OPCODE_HANDLER_ARGS_DC)3006 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)
3007 {
3008 	/* May be NULL during generator closing (only finally blocks are executed) */
3009 	zend_object *ex = EG(exception);
3010 
3011 	/* Walk try/catch/finally structures upwards, performing the necessary actions */
3012 	for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
3013 		zend_try_catch_element *try_catch =
3014 			&EX(func)->op_array.try_catch_array[try_catch_offset];
3015 
3016 		if (op_num < try_catch->catch_op && ex) {
3017 			/* Go to catch block */
3018 			cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
3019 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);
3020 
3021 		} else if (op_num < try_catch->finally_op) {
3022 			if (ex && zend_is_unwind_exit(ex)) {
3023 				/* Don't execute finally blocks on exit (for now) */
3024 				continue;
3025 			}
3026 
3027 			/* Go to finally block */
3028 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
3029 			cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
3030 			Z_OBJ_P(fast_call) = EG(exception);
3031 			EG(exception) = NULL;
3032 			Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
3033 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);
3034 
3035 		} else if (op_num < try_catch->finally_end) {
3036 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
3037 
3038 			/* cleanup incomplete RETURN statement */
3039 			if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
3040 			 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
3041 				zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
3042 
3043 				zval_ptr_dtor(return_value);
3044 			}
3045 
3046 			/* Chain potential exception from wrapping finally block */
3047 			if (Z_OBJ_P(fast_call)) {
3048 				if (ex) {
3049 					zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
3050 				} else {
3051 					ex = EG(exception) = Z_OBJ_P(fast_call);
3052 				}
3053 			}
3054 		}
3055 	}
3056 
3057 	/* Uncaught exception */
3058 	if (zend_observer_fcall_op_array_extension != -1) {
3059 		zend_observer_fcall_end(execute_data, NULL);
3060 	}
3061 	cleanup_live_vars(execute_data, op_num, 0);
3062 	if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
3063 		zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3064 		EG(current_execute_data) = EX(prev_execute_data);
3065 		zend_generator_close(generator, 1);
3066 		ZEND_VM_RETURN();
3067 	} else {
3068 		/* We didn't execute RETURN, and have to initialize return_value */
3069 		if (EX(return_value)) {
3070 			ZVAL_UNDEF(EX(return_value));
3071 		}
3072 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3073 	}
3074 }
3075 
ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3077 {
3078 	const zend_op *throw_op = EG(opline_before_exception);
3079 	uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
3080 	int i, current_try_catch_offset = -1;
3081 
3082 	if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
3083 		&& throw_op->extended_value & ZEND_FREE_ON_RETURN) {
3084 		/* exceptions thrown because of loop var destruction on return/break/...
3085 		 * are logically thrown at the end of the foreach loop, so adjust the
3086 		 * throw_op_num.
3087 		 */
3088 		const zend_live_range *range = find_live_range(
3089 			&EX(func)->op_array, throw_op_num, throw_op->op1.var);
3090 		/* free op1 of the corresponding RETURN */
3091 		for (i = throw_op_num; i < range->end; i++) {
3092 			if (EX(func)->op_array.opcodes[i].opcode == ZEND_FREE
3093 			 || EX(func)->op_array.opcodes[i].opcode == ZEND_FE_FREE) {
3094 				/* pass */
3095 			} else {
3096 				if (EX(func)->op_array.opcodes[i].opcode == ZEND_RETURN
3097 				 && (EX(func)->op_array.opcodes[i].op1_type & (IS_VAR|IS_TMP_VAR))) {
3098 					zval_ptr_dtor(EX_VAR(EX(func)->op_array.opcodes[i].op1.var));
3099 				}
3100 				break;
3101 			}
3102 		}
3103 		throw_op_num = range->end;
3104 	}
3105 
3106 	/* Find the innermost try/catch/finally the exception was thrown in */
3107 	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
3108 		zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
3109 		if (try_catch->try_op > throw_op_num) {
3110 			/* further blocks will not be relevant... */
3111 			break;
3112 		}
3113 		if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
3114 			current_try_catch_offset = i;
3115 		}
3116 	}
3117 
3118 	cleanup_unfinished_calls(execute_data, throw_op_num);
3119 
3120 	if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
3121 		switch (throw_op->opcode) {
3122 			case ZEND_ADD_ARRAY_ELEMENT:
3123 			case ZEND_ADD_ARRAY_UNPACK:
3124 			case ZEND_ROPE_INIT:
3125 			case ZEND_ROPE_ADD:
3126 				break; /* exception while building structures, live range handling will free those */
3127 
3128 			case ZEND_FETCH_CLASS:
3129 			case ZEND_DECLARE_ANON_CLASS:
3130 				break; /* return value is zend_class_entry pointer */
3131 
3132 			default:
3133 				/* smart branch opcodes may not initialize result */
3134 				if (!zend_is_smart_branch(throw_op)) {
3135 					zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
3136 				}
3137 		}
3138 	}
3139 
3140 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3141 }
3142 
ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3143 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3144 {
3145 	USE_OPLINE
3146 	int ret;
3147 
3148 	SAVE_OPLINE();
3149 	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
3150 	opline = EX(opline);
3151 
3152 	switch (ret) {
3153 		case ZEND_USER_OPCODE_CONTINUE:
3154 			ZEND_VM_CONTINUE();
3155 		case ZEND_USER_OPCODE_RETURN:
3156 			if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
3157 				zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3158 				EG(current_execute_data) = EX(prev_execute_data);
3159 				zend_generator_close(generator, 1);
3160 				ZEND_VM_RETURN();
3161 			} else {
3162 				ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3163 			}
3164 		case ZEND_USER_OPCODE_ENTER:
3165 			ZEND_VM_ENTER();
3166 		case ZEND_USER_OPCODE_LEAVE:
3167 			ZEND_VM_LEAVE();
3168 		case ZEND_USER_OPCODE_DISPATCH:
3169 			ZEND_VM_DISPATCH(opline->opcode, opline);
3170 		default:
3171 			ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
3172 	}
3173 }
3174 
zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)3175 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
3176 {
3177 	USE_OPLINE
3178 
3179 	SAVE_OPLINE();
3180 	zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
3181 	FREE_OP(opline->op2_type, opline->op2.var);
3182 	FREE_OP(opline->op1_type, opline->op1.var);
3183 	UNDEF_RESULT();
3184 	HANDLE_EXCEPTION();
3185 }
3186 
ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3187 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3188 {
3189 	USE_OPLINE
3190 	zval *fast_call = EX_VAR(opline->op1.var);
3191 	SAVE_OPLINE();
3192 
3193 	/* cleanup incomplete RETURN statement */
3194 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
3195 	 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
3196 		zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
3197 
3198 		zval_ptr_dtor(return_value);
3199 	}
3200 
3201 	/* cleanup delayed exception */
3202 	if (Z_OBJ_P(fast_call) != NULL) {
3203 		/* discard the previously thrown exception */
3204 		OBJ_RELEASE(Z_OBJ_P(fast_call));
3205 		Z_OBJ_P(fast_call) = NULL;
3206 	}
3207 
3208 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3209 }
3210 
ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3211 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3212 {
3213 	USE_OPLINE
3214 	zval *fast_call = EX_VAR(opline->result.var);
3215 
3216 	Z_OBJ_P(fast_call) = NULL;
3217 	/* set return address */
3218 	Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
3219 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
3220 }
3221 
ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3223 {
3224 	USE_OPLINE
3225 	zval *fast_call = EX_VAR(opline->op1.var);
3226 	uint32_t current_try_catch_offset, current_op_num;
3227 
3228 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
3229 		const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);
3230 
3231 		ZEND_VM_JMP_EX(fast_ret + 1, 0);
3232 	}
3233 
3234 	/* special case for unhandled exceptions */
3235 	EG(exception) = Z_OBJ_P(fast_call);
3236 	Z_OBJ_P(fast_call) = NULL;
3237 	current_try_catch_offset = opline->op2.num;
3238 	current_op_num = opline - EX(func)->op_array.opcodes;
3239 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3240 }
3241 
ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3242 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3243 {
3244 	USE_OPLINE
3245 
3246 	if (EG(assertions) <= 0) {
3247 		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
3248 		if (RETURN_VALUE_USED(opline)) {
3249 			ZVAL_TRUE(EX_VAR(opline->result.var));
3250 		}
3251 		ZEND_VM_JMP_EX(target, 0);
3252 	} else {
3253 		ZEND_VM_NEXT_OPCODE();
3254 	}
3255 }
3256 
ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3257 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3258 {
3259 	zend_array *args = NULL;
3260 	zend_function *fbc = EX(func);
3261 	zval *ret = EX(return_value);
3262 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
3263 	uint32_t num_args = EX_NUM_ARGS();
3264 	zend_execute_data *call;
3265 
3266 	SAVE_OPLINE();
3267 
3268 	if (num_args) {
3269 		zval *p = ZEND_CALL_ARG(execute_data, 1);
3270 		zval *end = p + num_args;
3271 
3272 		args = zend_new_array(num_args);
3273 		zend_hash_real_init_packed(args);
3274 		ZEND_HASH_FILL_PACKED(args) {
3275 			do {
3276 				ZEND_HASH_FILL_ADD(p);
3277 				p++;
3278 			} while (p != end);
3279 		} ZEND_HASH_FILL_END();
3280 	}
3281 
3282 	call = execute_data;
3283 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
3284 
3285 	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
3286 	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
3287 	ZEND_CALL_NUM_ARGS(call) = 2;
3288 
3289 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
3290 
3291 	zval *call_args = ZEND_CALL_ARG(call, 2);
3292 	if (args) {
3293 		ZVAL_ARR(call_args, args);
3294 	} else {
3295 		ZVAL_EMPTY_ARRAY(call_args);
3296 	}
3297 	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3298 		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
3299 			GC_ADDREF(call->extra_named_params);
3300 			ZVAL_ARR(call_args, call->extra_named_params);
3301 		} else {
3302 			SEPARATE_ARRAY(call_args);
3303 			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
3304 		}
3305 	}
3306 	zend_free_trampoline(fbc);
3307 	fbc = call->func;
3308 
3309 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
3310 		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3311 			init_func_run_time_cache(&fbc->op_array);
3312 		}
3313 		execute_data = call;
3314 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3315 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3316 			LOAD_OPLINE_EX();
3317 
3318 
3319 			ZEND_VM_ENTER_EX();
3320 		} else {
3321 			SAVE_OPLINE_EX();
3322 
3323 			execute_data = EX(prev_execute_data);
3324 			if (execute_data) {
3325 				LOAD_OPLINE();
3326 			}
3327 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3328 			zend_execute_ex(call);
3329 		}
3330 	} else {
3331 		zval retval;
3332 
3333 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
3334 
3335 		EG(current_execute_data) = call;
3336 
3337 #if ZEND_DEBUG
3338 		bool should_throw = zend_internal_call_should_throw(fbc, call);
3339 #endif
3340 
3341 		if (ret == NULL) {
3342 			ret = &retval;
3343 		}
3344 
3345 		ZVAL_NULL(ret);
3346 		if (!zend_execute_internal) {
3347 			/* saves one function call if zend_execute_internal is not used */
3348 			fbc->internal_function.handler(call, ret);
3349 		} else {
3350 			zend_execute_internal(call, ret);
3351 		}
3352 
3353 #if ZEND_DEBUG
3354 		if (!EG(exception) && call->func) {
3355 			if (should_throw) {
3356 				zend_internal_call_arginfo_violation(call->func);
3357 			}
3358 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
3359 				zend_verify_internal_return_type(call->func, ret));
3360 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
3361 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
3362 			zend_verify_internal_func_info(call->func, ret);
3363 		}
3364 #endif
3365 
3366 		EG(current_execute_data) = call->prev_execute_data;
3367 
3368 		zend_vm_stack_free_args(call);
3369 		if (ret == &retval) {
3370 			zval_ptr_dtor(ret);
3371 		}
3372 	}
3373 
3374 	execute_data = EG(current_execute_data);
3375 
3376 	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
3377 		ZEND_VM_RETURN();
3378 	}
3379 
3380 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
3381 		zend_object *object = Z_OBJ(call->This);
3382 		OBJ_RELEASE(object);
3383 	}
3384 	zend_vm_stack_free_call_frame(call);
3385 
3386 	if (UNEXPECTED(EG(exception) != NULL)) {
3387 		zend_rethrow_exception(execute_data);
3388 		HANDLE_EXCEPTION_LEAVE();
3389 	}
3390 
3391 	LOAD_OPLINE();
3392 	ZEND_VM_INC_OPCODE();
3393 	ZEND_VM_LEAVE();
3394 }
3395 
ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3396 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3397 {
3398 	zend_array *args = NULL;
3399 	zend_function *fbc = EX(func);
3400 	zval *ret = EX(return_value);
3401 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
3402 	uint32_t num_args = EX_NUM_ARGS();
3403 	zend_execute_data *call;
3404 
3405 	SAVE_OPLINE();
3406 
3407 	if (num_args) {
3408 		zval *p = ZEND_CALL_ARG(execute_data, 1);
3409 		zval *end = p + num_args;
3410 
3411 		args = zend_new_array(num_args);
3412 		zend_hash_real_init_packed(args);
3413 		ZEND_HASH_FILL_PACKED(args) {
3414 			do {
3415 				ZEND_HASH_FILL_ADD(p);
3416 				p++;
3417 			} while (p != end);
3418 		} ZEND_HASH_FILL_END();
3419 	}
3420 
3421 	call = execute_data;
3422 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
3423 
3424 	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
3425 	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
3426 	ZEND_CALL_NUM_ARGS(call) = 2;
3427 
3428 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
3429 
3430 	zval *call_args = ZEND_CALL_ARG(call, 2);
3431 	if (args) {
3432 		ZVAL_ARR(call_args, args);
3433 	} else {
3434 		ZVAL_EMPTY_ARRAY(call_args);
3435 	}
3436 	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3437 		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
3438 			GC_ADDREF(call->extra_named_params);
3439 			ZVAL_ARR(call_args, call->extra_named_params);
3440 		} else {
3441 			SEPARATE_ARRAY(call_args);
3442 			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
3443 		}
3444 	}
3445 	zend_free_trampoline(fbc);
3446 	fbc = call->func;
3447 
3448 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
3449 		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3450 			init_func_run_time_cache(&fbc->op_array);
3451 		}
3452 		execute_data = call;
3453 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3454 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3455 			LOAD_OPLINE_EX();
3456 			SAVE_OPLINE();
3457 			zend_observer_fcall_begin(execute_data);
3458 			ZEND_VM_ENTER_EX();
3459 		} else {
3460 			SAVE_OPLINE_EX();
3461 			zend_observer_fcall_begin(execute_data);
3462 			execute_data = EX(prev_execute_data);
3463 			if (execute_data) {
3464 				LOAD_OPLINE();
3465 			}
3466 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3467 			zend_execute_ex(call);
3468 		}
3469 	} else {
3470 		zval retval;
3471 
3472 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
3473 
3474 		EG(current_execute_data) = call;
3475 
3476 #if ZEND_DEBUG
3477 		bool should_throw = zend_internal_call_should_throw(fbc, call);
3478 #endif
3479 
3480 		if (ret == NULL) {
3481 			ret = &retval;
3482 		}
3483 
3484 		ZVAL_NULL(ret);
3485 		if (!zend_execute_internal) {
3486 			/* saves one function call if zend_execute_internal is not used */
3487 			fbc->internal_function.handler(call, ret);
3488 		} else {
3489 			zend_execute_internal(call, ret);
3490 		}
3491 
3492 #if ZEND_DEBUG
3493 		if (!EG(exception) && call->func) {
3494 			if (should_throw) {
3495 				zend_internal_call_arginfo_violation(call->func);
3496 			}
3497 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
3498 				zend_verify_internal_return_type(call->func, ret));
3499 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
3500 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
3501 			zend_verify_internal_func_info(call->func, ret);
3502 		}
3503 #endif
3504 
3505 		EG(current_execute_data) = call->prev_execute_data;
3506 
3507 		zend_vm_stack_free_args(call);
3508 		if (ret == &retval) {
3509 			zval_ptr_dtor(ret);
3510 		}
3511 	}
3512 
3513 	execute_data = EG(current_execute_data);
3514 
3515 	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
3516 		ZEND_VM_RETURN();
3517 	}
3518 
3519 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
3520 		zend_object *object = Z_OBJ(call->This);
3521 		OBJ_RELEASE(object);
3522 	}
3523 	zend_vm_stack_free_call_frame(call);
3524 
3525 	if (UNEXPECTED(EG(exception) != NULL)) {
3526 		zend_rethrow_exception(execute_data);
3527 		HANDLE_EXCEPTION_LEAVE();
3528 	}
3529 
3530 	LOAD_OPLINE();
3531 	ZEND_VM_INC_OPCODE();
3532 	ZEND_VM_LEAVE();
3533 }
3534 
ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3535 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3536 {
3537 	USE_OPLINE
3538 
3539 	OPLINE = OP_JMP_ADDR(opline, opline->op1);
3540 	ZEND_VM_CONTINUE();
3541 }
3542 
zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)3543 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
3544 {
3545 	EG(vm_interrupt) = 0;
3546 	SAVE_OPLINE();
3547 	if (EG(timed_out)) {
3548 		zend_timeout();
3549 	} else if (zend_interrupt_function) {
3550 		zend_interrupt_function(execute_data);
3551 		if (EG(exception)) {
3552 			/* We have to UNDEF result, because ZEND_HANDLE_EXCEPTION is going to free it */
3553 			const zend_op *throw_op = EG(opline_before_exception);
3554 
3555 			if (throw_op
3556 			 && throw_op->result_type & (IS_TMP_VAR|IS_VAR)
3557 			 && throw_op->opcode != ZEND_ADD_ARRAY_ELEMENT
3558 			 && throw_op->opcode != ZEND_ADD_ARRAY_UNPACK
3559 			 && throw_op->opcode != ZEND_ROPE_INIT
3560 			 && throw_op->opcode != ZEND_ROPE_ADD) {
3561 				ZVAL_UNDEF(ZEND_CALL_VAR(EG(current_execute_data), throw_op->result.var));
3562 
3563 			}
3564 		}
3565 		ZEND_VM_ENTER();
3566 	}
3567 	ZEND_VM_CONTINUE();
3568 }
ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3569 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3570 {
3571 	USE_OPLINE
3572 	zend_function *fbc;
3573 	zval *function_name, *func;
3574 	zend_execute_data *call;
3575 
3576 	fbc = CACHED_PTR(opline->result.num);
3577 	if (UNEXPECTED(fbc == NULL)) {
3578 		function_name = (zval*)RT_CONSTANT(opline, opline->op2);
3579 		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(function_name+1));
3580 		if (UNEXPECTED(func == NULL)) {
3581 			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3582 		}
3583 		fbc = Z_FUNC_P(func);
3584 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3585 			init_func_run_time_cache(&fbc->op_array);
3586 		}
3587 		CACHE_PTR(opline->result.num, fbc);
3588 	}
3589 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
3590 		fbc, opline->extended_value, NULL);
3591 	call->prev_execute_data = EX(call);
3592 	EX(call) = call;
3593 
3594 	ZEND_VM_NEXT_OPCODE();
3595 }
3596 
ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3597 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3598 {
3599 	USE_OPLINE
3600 	zval *function_name;
3601 	zend_execute_data *call;
3602 
3603 	SAVE_OPLINE();
3604 	function_name = RT_CONSTANT(opline, opline->op2);
3605 
3606 try_function_name:
3607 	if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3608 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3609 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3610 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
3611 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3612 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3613 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3614 		function_name = Z_REFVAL_P(function_name);
3615 		goto try_function_name;
3616 	} else {
3617 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3618 			function_name = ZVAL_UNDEFINED_OP2();
3619 			if (UNEXPECTED(EG(exception) != NULL)) {
3620 				HANDLE_EXCEPTION();
3621 			}
3622 		}
3623 		zend_throw_error(NULL, "Value of type %s is not callable",
3624 			zend_zval_type_name(function_name));
3625 		call = NULL;
3626 	}
3627 
3628 	if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
3629 
3630 		if (UNEXPECTED(EG(exception))) {
3631 			if (call) {
3632 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3633 					zend_string_release_ex(call->func->common.function_name, 0);
3634 					zend_free_trampoline(call->func);
3635 				}
3636 				zend_vm_stack_free_call_frame(call);
3637 			}
3638 			HANDLE_EXCEPTION();
3639 		}
3640 	} else if (!call) {
3641 		HANDLE_EXCEPTION();
3642 	}
3643 
3644 	call->prev_execute_data = EX(call);
3645 	EX(call) = call;
3646 
3647 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3648 }
3649 
ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3650 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3651 {
3652 	USE_OPLINE
3653 	zval *func_name;
3654 	zval *func;
3655 	zend_function *fbc;
3656 	zend_execute_data *call;
3657 
3658 	fbc = CACHED_PTR(opline->result.num);
3659 	if (UNEXPECTED(fbc == NULL)) {
3660 		func_name = (zval *)RT_CONSTANT(opline, opline->op2);
3661 		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 1));
3662 		if (func == NULL) {
3663 			func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 2));
3664 			if (UNEXPECTED(func == NULL)) {
3665 				ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3666 			}
3667 		}
3668 		fbc = Z_FUNC_P(func);
3669 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3670 			init_func_run_time_cache(&fbc->op_array);
3671 		}
3672 		CACHE_PTR(opline->result.num, fbc);
3673 	}
3674 
3675 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
3676 		fbc, opline->extended_value, NULL);
3677 	call->prev_execute_data = EX(call);
3678 	EX(call) = call;
3679 
3680 	ZEND_VM_NEXT_OPCODE();
3681 }
3682 
ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3683 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3684 {
3685 	USE_OPLINE
3686 	zval *fname;
3687 	zval *func;
3688 	zend_function *fbc;
3689 	zend_execute_data *call;
3690 
3691 	fbc = CACHED_PTR(opline->result.num);
3692 	if (UNEXPECTED(fbc == NULL)) {
3693 		fname = (zval*)RT_CONSTANT(opline, opline->op2);
3694 		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
3695 		if (UNEXPECTED(func == NULL)) {
3696 			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3697 		}
3698 		fbc = Z_FUNC_P(func);
3699 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3700 			init_func_run_time_cache(&fbc->op_array);
3701 		}
3702 		CACHE_PTR(opline->result.num, fbc);
3703 	}
3704 
3705 	call = _zend_vm_stack_push_call_frame_ex(
3706 		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
3707 		fbc, opline->extended_value, NULL);
3708 	call->prev_execute_data = EX(call);
3709 	EX(call) = call;
3710 
3711 	ZEND_VM_NEXT_OPCODE();
3712 }
3713 
ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3714 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3715 {
3716 	USE_OPLINE
3717 	uint32_t arg_num;
3718 	zval *param;
3719 
3720 	ZEND_VM_REPEATABLE_OPCODE
3721 
3722 	arg_num = opline->op1.num;
3723 	param = EX_VAR(opline->result.var);
3724 	if (arg_num > EX_NUM_ARGS()) {
3725 		zval *default_value = RT_CONSTANT(opline, opline->op2);
3726 
3727 		if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
3728 			zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));
3729 
3730 			/* we keep in cache only not refcounted values */
3731 			if (Z_TYPE_P(cache_val) != IS_UNDEF) {
3732 				ZVAL_COPY_VALUE(param, cache_val);
3733 			} else {
3734 				SAVE_OPLINE();
3735 				ZVAL_COPY(param, default_value);
3736 				if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) {
3737 					zval_ptr_dtor_nogc(param);
3738 					ZVAL_UNDEF(param);
3739 					HANDLE_EXCEPTION();
3740 				}
3741 				if (!Z_REFCOUNTED_P(param)) {
3742 					ZVAL_COPY_VALUE(cache_val, param);
3743 				}
3744 			}
3745 			goto recv_init_check_type;
3746 		} else {
3747 			ZVAL_COPY(param, default_value);
3748 		}
3749 	} else {
3750 recv_init_check_type:
3751 		if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
3752 			SAVE_OPLINE();
3753 			if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
3754 				HANDLE_EXCEPTION();
3755 			}
3756 		}
3757 	}
3758 
3759 	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
3760 	ZEND_VM_NEXT_OPCODE();
3761 }
3762 
ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3763 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3764 {
3765 	USE_OPLINE
3766 	zval *function_name;
3767 	zend_execute_data *call;
3768 
3769 	SAVE_OPLINE();
3770 	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
3771 
3772 try_function_name:
3773 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3774 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3775 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3776 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
3777 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3778 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3779 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3780 		function_name = Z_REFVAL_P(function_name);
3781 		goto try_function_name;
3782 	} else {
3783 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3784 			function_name = ZVAL_UNDEFINED_OP2();
3785 			if (UNEXPECTED(EG(exception) != NULL)) {
3786 				HANDLE_EXCEPTION();
3787 			}
3788 		}
3789 		zend_throw_error(NULL, "Value of type %s is not callable",
3790 			zend_zval_type_name(function_name));
3791 		call = NULL;
3792 	}
3793 
3794 	if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
3795 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
3796 		if (UNEXPECTED(EG(exception))) {
3797 			if (call) {
3798 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3799 					zend_string_release_ex(call->func->common.function_name, 0);
3800 					zend_free_trampoline(call->func);
3801 				}
3802 				zend_vm_stack_free_call_frame(call);
3803 			}
3804 			HANDLE_EXCEPTION();
3805 		}
3806 	} else if (!call) {
3807 		HANDLE_EXCEPTION();
3808 	}
3809 
3810 	call->prev_execute_data = EX(call);
3811 	EX(call) = call;
3812 
3813 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3814 }
3815 
ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3816 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3817 {
3818 	USE_OPLINE
3819 	uint32_t arg_num = opline->op1.num;
3820 	zval *param;
3821 
3822 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
3823 		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3824 	}
3825 
3826 	param = EX_VAR(opline->result.var);
3827 
3828 	if (UNEXPECTED(!(opline->op2.num & (1u << Z_TYPE_P(param))))) {
3829 		ZEND_VM_TAIL_CALL(zend_verify_recv_arg_type_helper_SPEC(param ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3830 	}
3831 
3832 	ZEND_VM_NEXT_OPCODE();
3833 }
3834 
ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3835 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3836 {
3837 	USE_OPLINE
3838 	uint32_t arg_num = opline->op1.num;
3839 	uint32_t arg_count = EX_NUM_ARGS();
3840 	zval *params;
3841 
3842 	SAVE_OPLINE();
3843 
3844 	params = EX_VAR(opline->result.var);
3845 
3846 	if (arg_num <= arg_count) {
3847 		ZEND_ASSERT(EX(func)->common.fn_flags & ZEND_ACC_VARIADIC);
3848 		ZEND_ASSERT(EX(func)->common.num_args == arg_num - 1);
3849 		zend_arg_info *arg_info = &EX(func)->common.arg_info[arg_num - 1];
3850 
3851 		array_init_size(params, arg_count - arg_num + 1);
3852 		zend_hash_real_init_packed(Z_ARRVAL_P(params));
3853 		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
3854 			zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
3855 			if (UNEXPECTED(ZEND_TYPE_IS_SET(arg_info->type))) {
3856 				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
3857 				do {
3858 					if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
3859 						ZEND_HASH_FILL_FINISH();
3860 						HANDLE_EXCEPTION();
3861 					}
3862 
3863 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
3864 					ZEND_HASH_FILL_ADD(param);
3865 					param++;
3866 				} while (++arg_num <= arg_count);
3867 			} else {
3868 				do {
3869 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
3870 					ZEND_HASH_FILL_ADD(param);
3871 					param++;
3872 				} while (++arg_num <= arg_count);
3873 			}
3874 		} ZEND_HASH_FILL_END();
3875 	} else {
3876 		ZVAL_EMPTY_ARRAY(params);
3877 	}
3878 
3879 	if (EX_CALL_INFO() & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
3880 		zend_string *name;
3881 		zval *param;
3882 		zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
3883 		if (ZEND_TYPE_IS_SET(arg_info->type)) {
3884 			SEPARATE_ARRAY(params);
3885 			ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
3886 				if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
3887 					HANDLE_EXCEPTION();
3888 				}
3889 				Z_TRY_ADDREF_P(param);
3890 				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
3891 			} ZEND_HASH_FOREACH_END();
3892 		} else if (zend_hash_num_elements(Z_ARRVAL_P(params)) == 0) {
3893 			GC_ADDREF(EX(extra_named_params));
3894 			ZVAL_ARR(params, EX(extra_named_params));
3895 		} else {
3896 			SEPARATE_ARRAY(params);
3897 			ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
3898 				Z_TRY_ADDREF_P(param);
3899 				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
3900 			} ZEND_HASH_FOREACH_END();
3901 		}
3902 	}
3903 
3904 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3905 }
3906 
ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3907 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3908 {
3909 	USE_OPLINE
3910 	zval *function_name;
3911 	zend_execute_data *call;
3912 
3913 	SAVE_OPLINE();
3914 	function_name = EX_VAR(opline->op2.var);
3915 
3916 try_function_name:
3917 	if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3918 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3919 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3920 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
3921 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3922 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3923 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3924 		function_name = Z_REFVAL_P(function_name);
3925 		goto try_function_name;
3926 	} else {
3927 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3928 			function_name = ZVAL_UNDEFINED_OP2();
3929 			if (UNEXPECTED(EG(exception) != NULL)) {
3930 				HANDLE_EXCEPTION();
3931 			}
3932 		}
3933 		zend_throw_error(NULL, "Value of type %s is not callable",
3934 			zend_zval_type_name(function_name));
3935 		call = NULL;
3936 	}
3937 
3938 	if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
3939 
3940 		if (UNEXPECTED(EG(exception))) {
3941 			if (call) {
3942 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3943 					zend_string_release_ex(call->func->common.function_name, 0);
3944 					zend_free_trampoline(call->func);
3945 				}
3946 				zend_vm_stack_free_call_frame(call);
3947 			}
3948 			HANDLE_EXCEPTION();
3949 		}
3950 	} else if (!call) {
3951 		HANDLE_EXCEPTION();
3952 	}
3953 
3954 	call->prev_execute_data = EX(call);
3955 	EX(call) = call;
3956 
3957 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3958 }
3959 
ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3960 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3961 {
3962 	USE_OPLINE
3963 	zval *op1;
3964 
3965 	op1 = RT_CONSTANT(opline, opline->op1);
3966 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
3967 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
3968 		ZEND_VM_NEXT_OPCODE();
3969 	}
3970 
3971 	ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3972 }
3973 
ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3974 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3975 {
3976 	USE_OPLINE
3977 	zval *val;
3978 
3979 	val = RT_CONSTANT(opline, opline->op1);
3980 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3981 		ZVAL_FALSE(EX_VAR(opline->result.var));
3982 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3983 		/* The result and op1 can be the same cv zval */
3984 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
3985 		ZVAL_TRUE(EX_VAR(opline->result.var));
3986 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
3987 			SAVE_OPLINE();
3988 			ZVAL_UNDEFINED_OP1();
3989 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3990 		}
3991 	} else {
3992 		SAVE_OPLINE();
3993 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
3994 
3995 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3996 	}
3997 	ZEND_VM_NEXT_OPCODE();
3998 }
3999 
ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4000 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4001 {
4002 	USE_OPLINE
4003 	zval *z;
4004 
4005 	SAVE_OPLINE();
4006 	z = RT_CONSTANT(opline, opline->op1);
4007 
4008 	if (Z_TYPE_P(z) == IS_STRING) {
4009 		zend_string *str = Z_STR_P(z);
4010 
4011 		if (ZSTR_LEN(str) != 0) {
4012 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
4013 		}
4014 	} else {
4015 		zend_string *str = zval_get_string_func(z);
4016 
4017 		if (ZSTR_LEN(str) != 0) {
4018 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
4019 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
4020 			ZVAL_UNDEFINED_OP1();
4021 		}
4022 		zend_string_release_ex(str, 0);
4023 	}
4024 
4025 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4026 }
4027 
ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4028 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4029 {
4030 	USE_OPLINE
4031 	zval *val;
4032 	zend_uchar op1_type;
4033 
4034 	val = RT_CONSTANT(opline, opline->op1);
4035 
4036 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4037 		ZEND_VM_NEXT_OPCODE();
4038 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4039 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4040 			SAVE_OPLINE();
4041 			ZVAL_UNDEFINED_OP1();
4042 			if (UNEXPECTED(EG(exception))) {
4043 				HANDLE_EXCEPTION();
4044 			}
4045 		}
4046 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4047 	}
4048 
4049 	SAVE_OPLINE();
4050 	op1_type = IS_CONST;
4051 	if (i_zend_is_true(val)) {
4052 		opline++;
4053 	} else {
4054 		opline = OP_JMP_ADDR(opline, opline->op2);
4055 	}
4056 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
4057 		zval_ptr_dtor_nogc(val);
4058 	}
4059 	ZEND_VM_JMP(opline);
4060 }
4061 
ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4062 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4063 {
4064 	USE_OPLINE
4065 	zval *val;
4066 	zend_uchar op1_type;
4067 
4068 	val = RT_CONSTANT(opline, opline->op1);
4069 
4070 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4071 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4072 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4073 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4074 			SAVE_OPLINE();
4075 			ZVAL_UNDEFINED_OP1();
4076 			if (UNEXPECTED(EG(exception))) {
4077 				HANDLE_EXCEPTION();
4078 			}
4079 		}
4080 		ZEND_VM_NEXT_OPCODE();
4081 	}
4082 
4083 	SAVE_OPLINE();
4084 	op1_type = IS_CONST;
4085 	if (i_zend_is_true(val)) {
4086 		opline = OP_JMP_ADDR(opline, opline->op2);
4087 	} else {
4088 		opline++;
4089 	}
4090 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
4091 		zval_ptr_dtor_nogc(val);
4092 	}
4093 	ZEND_VM_JMP(opline);
4094 }
4095 
ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4096 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4097 {
4098 	USE_OPLINE
4099 	zval *val;
4100 	zend_uchar op1_type;
4101 
4102 	val = RT_CONSTANT(opline, opline->op1);
4103 
4104 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
4105 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
4106 		ZEND_VM_CONTINUE();
4107 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4108 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4109 			SAVE_OPLINE();
4110 			ZVAL_UNDEFINED_OP1();
4111 			if (UNEXPECTED(EG(exception))) {
4112 				HANDLE_EXCEPTION();
4113 			}
4114 		}
4115 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4116 	}
4117 
4118 	SAVE_OPLINE();
4119 	op1_type = IS_CONST;
4120 	if (i_zend_is_true(val)) {
4121 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
4122 	} else {
4123 		opline = OP_JMP_ADDR(opline, opline->op2);
4124 	}
4125 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
4126 		zval_ptr_dtor_nogc(val);
4127 	}
4128 	ZEND_VM_JMP(opline);
4129 }
4130 
ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4131 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4132 {
4133 	USE_OPLINE
4134 	zval *val;
4135 	bool ret;
4136 
4137 	val = RT_CONSTANT(opline, opline->op1);
4138 
4139 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4140 		ZVAL_TRUE(EX_VAR(opline->result.var));
4141 		ZEND_VM_NEXT_OPCODE();
4142 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4143 		ZVAL_FALSE(EX_VAR(opline->result.var));
4144 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4145 			SAVE_OPLINE();
4146 			ZVAL_UNDEFINED_OP1();
4147 			if (UNEXPECTED(EG(exception))) {
4148 				HANDLE_EXCEPTION();
4149 			}
4150 		}
4151 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4152 	}
4153 
4154 	SAVE_OPLINE();
4155 	ret = i_zend_is_true(val);
4156 
4157 	if (ret) {
4158 		ZVAL_TRUE(EX_VAR(opline->result.var));
4159 		opline++;
4160 	} else {
4161 		ZVAL_FALSE(EX_VAR(opline->result.var));
4162 		opline = OP_JMP_ADDR(opline, opline->op2);
4163 	}
4164 	ZEND_VM_JMP(opline);
4165 }
4166 
ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4167 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4168 {
4169 	USE_OPLINE
4170 	zval *val;
4171 	bool ret;
4172 
4173 	val = RT_CONSTANT(opline, opline->op1);
4174 
4175 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4176 		ZVAL_TRUE(EX_VAR(opline->result.var));
4177 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4178 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4179 		ZVAL_FALSE(EX_VAR(opline->result.var));
4180 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4181 			SAVE_OPLINE();
4182 			ZVAL_UNDEFINED_OP1();
4183 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4184 		} else {
4185 			ZEND_VM_NEXT_OPCODE();
4186 		}
4187 	}
4188 
4189 	SAVE_OPLINE();
4190 	ret = i_zend_is_true(val);
4191 
4192 	if (ret) {
4193 		ZVAL_TRUE(EX_VAR(opline->result.var));
4194 		opline = OP_JMP_ADDR(opline, opline->op2);
4195 	} else {
4196 		ZVAL_FALSE(EX_VAR(opline->result.var));
4197 		opline++;
4198 	}
4199 	ZEND_VM_JMP(opline);
4200 }
4201 
ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4202 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4203 {
4204 	USE_OPLINE
4205 	zval *retval_ptr;
4206 	zval *return_value;
4207 
4208 	retval_ptr = RT_CONSTANT(opline, opline->op1);
4209 	return_value = EX(return_value);
4210 
4211 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
4212 		SAVE_OPLINE();
4213 		retval_ptr = ZVAL_UNDEFINED_OP1();
4214 		if (return_value) {
4215 			ZVAL_NULL(return_value);
4216 		}
4217 	} else if (!return_value) {
4218 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
4219 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
4220 				SAVE_OPLINE();
4221 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
4222 			}
4223 		}
4224 	} else {
4225 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
4226 			ZVAL_COPY_VALUE(return_value, retval_ptr);
4227 			if (IS_CONST == IS_CONST) {
4228 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
4229 					Z_ADDREF_P(return_value);
4230 				}
4231 			}
4232 		} else if (IS_CONST == IS_CV) {
4233 			do {
4234 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4235 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
4236 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
4237 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4238 							ZVAL_COPY_VALUE(return_value, retval_ptr);
4239 							if (GC_MAY_LEAK(ref)) {
4240 								SAVE_OPLINE();
4241 								gc_possible_root(ref);
4242 							}
4243 							ZVAL_NULL(retval_ptr);
4244 							break;
4245 						} else {
4246 							Z_ADDREF_P(retval_ptr);
4247 						}
4248 					} else {
4249 						retval_ptr = Z_REFVAL_P(retval_ptr);
4250 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4251 							Z_ADDREF_P(retval_ptr);
4252 						}
4253 					}
4254 				}
4255 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4256 			} while (0);
4257 		} else /* if (IS_CONST == IS_VAR) */ {
4258 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4259 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4260 
4261 				retval_ptr = Z_REFVAL_P(retval_ptr);
4262 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4263 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4264 					efree_size(ref, sizeof(zend_reference));
4265 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4266 					Z_ADDREF_P(retval_ptr);
4267 				}
4268 			} else {
4269 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4270 			}
4271 		}
4272 	}
4273 
4274 
4275 
4276 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4277 }
4278 
ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4279 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4280 {
4281 	USE_OPLINE
4282 	zval *retval_ptr;
4283 	zval *return_value;
4284 	zval observer_retval;
4285 
4286 	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
4287 	return_value = EX(return_value);
4288 	if (!return_value) { return_value = &observer_retval; };
4289 	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
4290 		SAVE_OPLINE();
4291 		retval_ptr = ZVAL_UNDEFINED_OP1();
4292 		if (return_value) {
4293 			ZVAL_NULL(return_value);
4294 		}
4295 	} else if (!return_value) {
4296 		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
4297 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
4298 				SAVE_OPLINE();
4299 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
4300 			}
4301 		}
4302 	} else {
4303 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
4304 			ZVAL_COPY_VALUE(return_value, retval_ptr);
4305 			if (opline->op1_type == IS_CONST) {
4306 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
4307 					Z_ADDREF_P(return_value);
4308 				}
4309 			}
4310 		} else if (opline->op1_type == IS_CV) {
4311 			do {
4312 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4313 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
4314 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
4315 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4316 							ZVAL_COPY_VALUE(return_value, retval_ptr);
4317 							if (GC_MAY_LEAK(ref)) {
4318 								SAVE_OPLINE();
4319 								gc_possible_root(ref);
4320 							}
4321 							ZVAL_NULL(retval_ptr);
4322 							break;
4323 						} else {
4324 							Z_ADDREF_P(retval_ptr);
4325 						}
4326 					} else {
4327 						retval_ptr = Z_REFVAL_P(retval_ptr);
4328 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4329 							Z_ADDREF_P(retval_ptr);
4330 						}
4331 					}
4332 				}
4333 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4334 			} while (0);
4335 		} else /* if (opline->op1_type == IS_VAR) */ {
4336 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4337 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4338 
4339 				retval_ptr = Z_REFVAL_P(retval_ptr);
4340 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4341 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4342 					efree_size(ref, sizeof(zend_reference));
4343 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4344 					Z_ADDREF_P(retval_ptr);
4345 				}
4346 			} else {
4347 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4348 			}
4349 		}
4350 	}
4351 	SAVE_OPLINE();
4352 	zend_observer_fcall_end(execute_data, return_value);
4353 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
4354 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4355 }
4356 
ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4357 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4358 {
4359 	USE_OPLINE
4360 	zval *retval_ptr;
4361 	zval *return_value;
4362 
4363 	SAVE_OPLINE();
4364 
4365 	return_value = EX(return_value);
4366 
4367 	do {
4368 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
4369 		    (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
4370 			/* Not supposed to happen, but we'll allow it */
4371 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
4372 
4373 			retval_ptr = RT_CONSTANT(opline, opline->op1);
4374 			if (!return_value) {
4375 
4376 			} else {
4377 				if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4378 					ZVAL_COPY_VALUE(return_value, retval_ptr);
4379 					break;
4380 				}
4381 
4382 				ZVAL_NEW_REF(return_value, retval_ptr);
4383 				if (IS_CONST == IS_CONST) {
4384 					Z_TRY_ADDREF_P(retval_ptr);
4385 				}
4386 			}
4387 			break;
4388 		}
4389 
4390 		retval_ptr = NULL;
4391 
4392 		if (IS_CONST == IS_VAR) {
4393 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
4394 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
4395 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
4396 				if (return_value) {
4397 					ZVAL_NEW_REF(return_value, retval_ptr);
4398 				} else {
4399 
4400 				}
4401 				break;
4402 			}
4403 		}
4404 
4405 		if (return_value) {
4406 			if (Z_ISREF_P(retval_ptr)) {
4407 				Z_ADDREF_P(retval_ptr);
4408 			} else {
4409 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
4410 			}
4411 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
4412 		}
4413 
4414 	} while (0);
4415 
4416 
4417 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4418 }
4419 
ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4420 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4421 {
4422 	USE_OPLINE
4423 	zval *retval_ptr;
4424 	zval *return_value;
4425 	zval observer_retval;
4426 
4427 	SAVE_OPLINE();
4428 
4429 	return_value = EX(return_value);
4430 	if (!return_value) { return_value = &observer_retval; };
4431 	do {
4432 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR)) ||
4433 		    (opline->op1_type == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
4434 			/* Not supposed to happen, but we'll allow it */
4435 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
4436 
4437 			retval_ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4438 			if (!return_value) {
4439 				FREE_OP(opline->op1_type, opline->op1.var);
4440 			} else {
4441 				if (opline->op1_type == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4442 					ZVAL_COPY_VALUE(return_value, retval_ptr);
4443 					break;
4444 				}
4445 
4446 				ZVAL_NEW_REF(return_value, retval_ptr);
4447 				if (opline->op1_type == IS_CONST) {
4448 					Z_TRY_ADDREF_P(retval_ptr);
4449 				}
4450 			}
4451 			break;
4452 		}
4453 
4454 		retval_ptr = get_zval_ptr_ptr(opline->op1_type, opline->op1, BP_VAR_W);
4455 
4456 		if (opline->op1_type == IS_VAR) {
4457 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
4458 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
4459 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
4460 				if (return_value) {
4461 					ZVAL_NEW_REF(return_value, retval_ptr);
4462 				} else {
4463 					if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
4464 				}
4465 				break;
4466 			}
4467 		}
4468 
4469 		if (return_value) {
4470 			if (Z_ISREF_P(retval_ptr)) {
4471 				Z_ADDREF_P(retval_ptr);
4472 			} else {
4473 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
4474 			}
4475 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
4476 		}
4477 
4478 		if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
4479 	} while (0);
4480 
4481 	zend_observer_fcall_end(execute_data, return_value);
4482 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
4483 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4484 }
4485 
ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4486 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4487 {
4488 	USE_OPLINE
4489 	zval *retval;
4490 
4491 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
4492 
4493 	SAVE_OPLINE();
4494 	retval = RT_CONSTANT(opline, opline->op1);
4495 
4496 	/* Copy return value into generator->retval */
4497 	if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
4498 		ZVAL_COPY_VALUE(&generator->retval, retval);
4499 		if (IS_CONST == IS_CONST) {
4500 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
4501 				Z_ADDREF(generator->retval);
4502 			}
4503 		}
4504 	} else if (IS_CONST == IS_CV) {
4505 		ZVAL_COPY_DEREF(&generator->retval, retval);
4506 	} else /* if (IS_CONST == IS_VAR) */ {
4507 		if (UNEXPECTED(Z_ISREF_P(retval))) {
4508 			zend_refcounted *ref = Z_COUNTED_P(retval);
4509 
4510 			retval = Z_REFVAL_P(retval);
4511 			ZVAL_COPY_VALUE(&generator->retval, retval);
4512 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4513 				efree_size(ref, sizeof(zend_reference));
4514 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
4515 				Z_ADDREF_P(retval);
4516 			}
4517 		} else {
4518 			ZVAL_COPY_VALUE(&generator->retval, retval);
4519 		}
4520 	}
4521 
4522 	EG(current_execute_data) = EX(prev_execute_data);
4523 
4524 	/* Close the generator to free up resources */
4525 	zend_generator_close(generator, 1);
4526 
4527 	/* Pass execution back to handling code */
4528 	ZEND_VM_RETURN();
4529 }
4530 
ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4531 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4532 {
4533 	USE_OPLINE
4534 	zval *retval;
4535 
4536 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
4537 
4538 	SAVE_OPLINE();
4539 	retval = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4540 
4541 	/* Copy return value into generator->retval */
4542 	if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
4543 		ZVAL_COPY_VALUE(&generator->retval, retval);
4544 		if (opline->op1_type == IS_CONST) {
4545 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
4546 				Z_ADDREF(generator->retval);
4547 			}
4548 		}
4549 	} else if (opline->op1_type == IS_CV) {
4550 		ZVAL_COPY_DEREF(&generator->retval, retval);
4551 	} else /* if (opline->op1_type == IS_VAR) */ {
4552 		if (UNEXPECTED(Z_ISREF_P(retval))) {
4553 			zend_refcounted *ref = Z_COUNTED_P(retval);
4554 
4555 			retval = Z_REFVAL_P(retval);
4556 			ZVAL_COPY_VALUE(&generator->retval, retval);
4557 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4558 				efree_size(ref, sizeof(zend_reference));
4559 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
4560 				Z_ADDREF_P(retval);
4561 			}
4562 		} else {
4563 			ZVAL_COPY_VALUE(&generator->retval, retval);
4564 		}
4565 	}
4566 
4567 	zend_observer_fcall_end(generator->execute_data, &generator->retval);
4568 
4569 	EG(current_execute_data) = EX(prev_execute_data);
4570 
4571 	/* Close the generator to free up resources */
4572 	zend_generator_close(generator, 1);
4573 
4574 	/* Pass execution back to handling code */
4575 	ZEND_VM_RETURN();
4576 }
4577 
ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4578 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4579 {
4580 	USE_OPLINE
4581 	zval *value;
4582 
4583 	SAVE_OPLINE();
4584 	value = RT_CONSTANT(opline, opline->op1);
4585 
4586 	do {
4587 		if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
4588 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
4589 				value = Z_REFVAL_P(value);
4590 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
4591 					break;
4592 				}
4593 			}
4594 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4595 				ZVAL_UNDEFINED_OP1();
4596 				if (UNEXPECTED(EG(exception) != NULL)) {
4597 					HANDLE_EXCEPTION();
4598 				}
4599 			}
4600 			zend_throw_error(NULL, "Can only throw objects");
4601 
4602 			HANDLE_EXCEPTION();
4603 		}
4604 	} while (0);
4605 
4606 	zend_exception_save();
4607 	Z_TRY_ADDREF_P(value);
4608 	zend_throw_exception_object(value);
4609 	zend_exception_restore();
4610 
4611 	HANDLE_EXCEPTION();
4612 }
4613 
ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4614 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4615 {
4616 	USE_OPLINE
4617 	zend_class_entry *ce, *catch_ce;
4618 	zend_object *exception;
4619 
4620 	SAVE_OPLINE();
4621 	/* Check whether an exception has been thrown, if not, jump over code */
4622 	zend_exception_restore();
4623 	if (EG(exception) == NULL) {
4624 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4625 	}
4626 	catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
4627 	if (UNEXPECTED(catch_ce == NULL)) {
4628 		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);
4629 
4630 		CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
4631 	}
4632 	ce = EG(exception)->ce;
4633 
4634 #ifdef HAVE_DTRACE
4635 	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
4636 		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
4637 	}
4638 #endif /* HAVE_DTRACE */
4639 
4640 	if (ce != catch_ce) {
4641 		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
4642 			if (opline->extended_value & ZEND_LAST_CATCH) {
4643 				zend_rethrow_exception(execute_data);
4644 				HANDLE_EXCEPTION();
4645 			}
4646 			ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4647 		}
4648 	}
4649 
4650 	exception = EG(exception);
4651 	EG(exception) = NULL;
4652 	if (RETURN_VALUE_USED(opline)) {
4653 		/* Always perform a strict assignment. There is a reasonable expectation that if you
4654 		 * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
4655 		 * we should not permit coercion to string here. */
4656 		zval tmp;
4657 		ZVAL_OBJ(&tmp, exception);
4658 		zend_assign_to_variable(EX_VAR(opline->result.var), &tmp, IS_TMP_VAR, /* strict */ 1);
4659 	} else {
4660 		OBJ_RELEASE(exception);
4661 	}
4662 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4663 }
4664 
ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4665 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4666 {
4667 	USE_OPLINE
4668 	zval *arg, *param;
4669 
4670 	SAVE_OPLINE();
4671 
4672 	arg = RT_CONSTANT(opline, opline->op1);
4673 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
4674 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
4675 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
4676 		Z_TRY_ADDREF_P(arg);
4677 		ZVAL_NEW_REF(param, arg);
4678 	} else {
4679 		ZVAL_COPY(param, arg);
4680 	}
4681 
4682 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4683 }
4684 
ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4685 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4686 {
4687 	USE_OPLINE
4688 	zval *val;
4689 
4690 	val = RT_CONSTANT(opline, opline->op1);
4691 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4692 		ZVAL_TRUE(EX_VAR(opline->result.var));
4693 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4694 		/* The result and op1 can be the same cv zval */
4695 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
4696 		ZVAL_FALSE(EX_VAR(opline->result.var));
4697 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
4698 			SAVE_OPLINE();
4699 			ZVAL_UNDEFINED_OP1();
4700 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4701 		}
4702 	} else {
4703 		SAVE_OPLINE();
4704 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
4705 
4706 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4707 	}
4708 	ZEND_VM_NEXT_OPCODE();
4709 }
4710 
ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4711 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4712 {
4713 	USE_OPLINE
4714 	zval *obj;
4715 	zend_object *zobj;
4716 	zend_class_entry *ce, *scope;
4717 	zend_function *clone;
4718 	zend_object_clone_obj_t clone_call;
4719 
4720 	SAVE_OPLINE();
4721 	obj = RT_CONSTANT(opline, opline->op1);
4722 
4723 	do {
4724 		if (IS_CONST == IS_CONST ||
4725 		    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
4726 		    if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
4727 				obj = Z_REFVAL_P(obj);
4728 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
4729 					break;
4730 				}
4731 			}
4732 			ZVAL_UNDEF(EX_VAR(opline->result.var));
4733 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
4734 				ZVAL_UNDEFINED_OP1();
4735 				if (UNEXPECTED(EG(exception) != NULL)) {
4736 					HANDLE_EXCEPTION();
4737 				}
4738 			}
4739 			zend_throw_error(NULL, "__clone method called on non-object");
4740 
4741 			HANDLE_EXCEPTION();
4742 		}
4743 	} while (0);
4744 
4745 	zobj = Z_OBJ_P(obj);
4746 	ce = zobj->ce;
4747 	clone = ce->clone;
4748 	clone_call = zobj->handlers->clone_obj;
4749 	if (UNEXPECTED(clone_call == NULL)) {
4750 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
4751 
4752 		ZVAL_UNDEF(EX_VAR(opline->result.var));
4753 		HANDLE_EXCEPTION();
4754 	}
4755 
4756 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
4757 		scope = EX(func)->op_array.scope;
4758 		if (clone->common.scope != scope) {
4759 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
4760 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
4761 				zend_wrong_clone_call(clone, scope);
4762 
4763 				ZVAL_UNDEF(EX_VAR(opline->result.var));
4764 				HANDLE_EXCEPTION();
4765 			}
4766 		}
4767 	}
4768 
4769 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
4770 
4771 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4772 }
4773 
ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4774 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4775 {
4776 	USE_OPLINE
4777 	zval *expr;
4778 	zval *result = EX_VAR(opline->result.var);
4779 	HashTable *ht;
4780 
4781 	SAVE_OPLINE();
4782 	expr = RT_CONSTANT(opline, opline->op1);
4783 
4784 	switch (opline->extended_value) {
4785 		case IS_LONG:
4786 			ZVAL_LONG(result, zval_get_long(expr));
4787 			break;
4788 		case IS_DOUBLE:
4789 			ZVAL_DOUBLE(result, zval_get_double(expr));
4790 			break;
4791 		case IS_STRING:
4792 			ZVAL_STR(result, zval_get_string(expr));
4793 			break;
4794 		default:
4795 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
4796 			if (IS_CONST & (IS_VAR|IS_CV)) {
4797 				ZVAL_DEREF(expr);
4798 			}
4799 			/* If value is already of correct type, return it directly */
4800 			if (Z_TYPE_P(expr) == opline->extended_value) {
4801 				ZVAL_COPY_VALUE(result, expr);
4802 				if (IS_CONST == IS_CONST) {
4803 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
4804 				} else if (IS_CONST != IS_TMP_VAR) {
4805 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
4806 				}
4807 
4808 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4809 			}
4810 
4811 			if (opline->extended_value == IS_ARRAY) {
4812 				if (IS_CONST == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
4813 					if (Z_TYPE_P(expr) != IS_NULL) {
4814 						ZVAL_ARR(result, zend_new_array(1));
4815 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
4816 						if (IS_CONST == IS_CONST) {
4817 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
4818 						} else {
4819 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
4820 						}
4821 					} else {
4822 						ZVAL_EMPTY_ARRAY(result);
4823 					}
4824 				} else if (Z_OBJ_P(expr)->properties == NULL
4825 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
4826 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
4827 					/* Optimized version without rebuilding properties HashTable */
4828 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
4829 				} else {
4830 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
4831 					if (obj_ht) {
4832 						/* fast copy */
4833 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
4834 							(Z_OBJCE_P(expr)->default_properties_count ||
4835 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
4836 							 GC_IS_RECURSIVE(obj_ht))));
4837 						zend_release_properties(obj_ht);
4838 					} else {
4839 						ZVAL_EMPTY_ARRAY(result);
4840 					}
4841 				}
4842 			} else {
4843 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
4844 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
4845 				if (Z_TYPE_P(expr) == IS_ARRAY) {
4846 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
4847 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
4848 						/* TODO: try not to duplicate immutable arrays as well ??? */
4849 						ht = zend_array_dup(ht);
4850 					}
4851 					Z_OBJ_P(result)->properties = ht;
4852 				} else if (Z_TYPE_P(expr) != IS_NULL) {
4853 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
4854 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
4855 					if (IS_CONST == IS_CONST) {
4856 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
4857 					} else {
4858 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
4859 					}
4860 				}
4861 			}
4862 	}
4863 
4864 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4865 }
4866 
ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4867 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4868 {
4869 	USE_OPLINE
4870 	zend_op_array *new_op_array;
4871 	zval *inc_filename;
4872 
4873 	SAVE_OPLINE();
4874 	inc_filename = RT_CONSTANT(opline, opline->op1);
4875 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
4876 	if (UNEXPECTED(EG(exception) != NULL)) {
4877 
4878 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
4879 			destroy_op_array(new_op_array);
4880 			efree_size(new_op_array, sizeof(zend_op_array));
4881 		}
4882 		UNDEF_RESULT();
4883 		HANDLE_EXCEPTION();
4884 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
4885 		if (RETURN_VALUE_USED(opline)) {
4886 			ZVAL_TRUE(EX_VAR(opline->result.var));
4887 		}
4888 	} else if (EXPECTED(new_op_array != NULL)) {
4889 		zval *return_value = NULL;
4890 		zend_execute_data *call;
4891 
4892 		if (RETURN_VALUE_USED(opline)) {
4893 			return_value = EX_VAR(opline->result.var);
4894 		}
4895 
4896 		new_op_array->scope = EX(func)->op_array.scope;
4897 
4898 		call = zend_vm_stack_push_call_frame(
4899 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
4900 			(zend_function*)new_op_array, 0,
4901 			Z_PTR(EX(This)));
4902 
4903 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
4904 			call->symbol_table = EX(symbol_table);
4905 		} else {
4906 			call->symbol_table = zend_rebuild_symbol_table();
4907 		}
4908 
4909 		call->prev_execute_data = execute_data;
4910 		i_init_code_execute_data(call, new_op_array, return_value);
4911 
4912 		if (EXPECTED(zend_execute_ex == execute_ex)) {
4913 
4914 			ZEND_VM_ENTER();
4915 		} else {
4916 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
4917 			zend_execute_ex(call);
4918 			zend_vm_stack_free_call_frame(call);
4919 		}
4920 
4921 		zend_destroy_static_vars(new_op_array);
4922 		destroy_op_array(new_op_array);
4923 		efree_size(new_op_array, sizeof(zend_op_array));
4924 		if (UNEXPECTED(EG(exception) != NULL)) {
4925 			zend_rethrow_exception(execute_data);
4926 
4927 			UNDEF_RESULT();
4928 			HANDLE_EXCEPTION();
4929 		}
4930 	} else if (RETURN_VALUE_USED(opline)) {
4931 		ZVAL_FALSE(EX_VAR(opline->result.var));
4932 	}
4933 
4934 	ZEND_VM_NEXT_OPCODE();
4935 }
4936 
ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4937 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4938 {
4939 	USE_OPLINE
4940 	zend_op_array *new_op_array;
4941 	zval *inc_filename;
4942 
4943 	SAVE_OPLINE();
4944 	inc_filename = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4945 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
4946 	if (UNEXPECTED(EG(exception) != NULL)) {
4947 		FREE_OP(opline->op1_type, opline->op1.var);
4948 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
4949 			destroy_op_array(new_op_array);
4950 			efree_size(new_op_array, sizeof(zend_op_array));
4951 		}
4952 		UNDEF_RESULT();
4953 		HANDLE_EXCEPTION();
4954 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
4955 		if (RETURN_VALUE_USED(opline)) {
4956 			ZVAL_TRUE(EX_VAR(opline->result.var));
4957 		}
4958 	} else if (EXPECTED(new_op_array != NULL)) {
4959 		zval *return_value = NULL;
4960 		zend_execute_data *call;
4961 
4962 		if (RETURN_VALUE_USED(opline)) {
4963 			return_value = EX_VAR(opline->result.var);
4964 		}
4965 
4966 		new_op_array->scope = EX(func)->op_array.scope;
4967 
4968 		call = zend_vm_stack_push_call_frame(
4969 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
4970 			(zend_function*)new_op_array, 0,
4971 			Z_PTR(EX(This)));
4972 
4973 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
4974 			call->symbol_table = EX(symbol_table);
4975 		} else {
4976 			call->symbol_table = zend_rebuild_symbol_table();
4977 		}
4978 
4979 		call->prev_execute_data = execute_data;
4980 		i_init_code_execute_data(call, new_op_array, return_value);
4981 		zend_observer_fcall_begin(call);
4982 		if (EXPECTED(zend_execute_ex == execute_ex)) {
4983 			FREE_OP(opline->op1_type, opline->op1.var);
4984 			ZEND_VM_ENTER();
4985 		} else {
4986 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
4987 			zend_execute_ex(call);
4988 			zend_vm_stack_free_call_frame(call);
4989 		}
4990 
4991 		zend_destroy_static_vars(new_op_array);
4992 		destroy_op_array(new_op_array);
4993 		efree_size(new_op_array, sizeof(zend_op_array));
4994 		if (UNEXPECTED(EG(exception) != NULL)) {
4995 			zend_rethrow_exception(execute_data);
4996 			FREE_OP(opline->op1_type, opline->op1.var);
4997 			UNDEF_RESULT();
4998 			HANDLE_EXCEPTION();
4999 		}
5000 	} else if (RETURN_VALUE_USED(opline)) {
5001 		ZVAL_FALSE(EX_VAR(opline->result.var));
5002 	}
5003 	FREE_OP(opline->op1_type, opline->op1.var);
5004 	ZEND_VM_NEXT_OPCODE();
5005 }
5006 
ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5008 {
5009 	USE_OPLINE
5010 	zval *array_ptr, *result;
5011 
5012 	SAVE_OPLINE();
5013 
5014 	array_ptr = RT_CONSTANT(opline, opline->op1);
5015 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
5016 		result = EX_VAR(opline->result.var);
5017 		ZVAL_COPY_VALUE(result, array_ptr);
5018 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
5019 			Z_ADDREF_P(array_ptr);
5020 		}
5021 		Z_FE_POS_P(result) = 0;
5022 
5023 		ZEND_VM_NEXT_OPCODE();
5024 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
5025 		zend_object *zobj = Z_OBJ_P(array_ptr);
5026 		if (!zobj->ce->get_iterator) {
5027 			HashTable *properties = zobj->properties;
5028 			if (properties) {
5029 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
5030 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
5031 						GC_DELREF(properties);
5032 					}
5033 					properties = zobj->properties = zend_array_dup(properties);
5034 				}
5035 			} else {
5036 				properties = zobj->handlers->get_properties(zobj);
5037 			}
5038 
5039 			result = EX_VAR(opline->result.var);
5040 			ZVAL_COPY_VALUE(result, array_ptr);
5041 			if (IS_CONST != IS_TMP_VAR) {
5042 				Z_ADDREF_P(array_ptr);
5043 			}
5044 
5045 			if (zend_hash_num_elements(properties) == 0) {
5046 				Z_FE_ITER_P(result) = (uint32_t) -1;
5047 
5048 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5049 			}
5050 
5051 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
5052 
5053 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5054 		} else {
5055 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
5056 
5057 			if (UNEXPECTED(EG(exception))) {
5058 				HANDLE_EXCEPTION();
5059 			} else if (is_empty) {
5060 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5061 			} else {
5062 				ZEND_VM_NEXT_OPCODE();
5063 			}
5064 		}
5065 	} else {
5066 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
5067 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5068 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
5069 
5070 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5071 	}
5072 }
5073 
ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5074 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5075 {
5076 	USE_OPLINE
5077 	zval *array_ptr, *array_ref;
5078 
5079 	SAVE_OPLINE();
5080 
5081 	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
5082 		array_ref = array_ptr = NULL;
5083 		if (Z_ISREF_P(array_ref)) {
5084 			array_ptr = Z_REFVAL_P(array_ref);
5085 		}
5086 	} else {
5087 		array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
5088 	}
5089 
5090 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
5091 		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
5092 			if (array_ptr == array_ref) {
5093 				ZVAL_NEW_REF(array_ref, array_ref);
5094 				array_ptr = Z_REFVAL_P(array_ref);
5095 			}
5096 			Z_ADDREF_P(array_ref);
5097 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
5098 		} else {
5099 			array_ref = EX_VAR(opline->result.var);
5100 			ZVAL_NEW_REF(array_ref, array_ptr);
5101 			array_ptr = Z_REFVAL_P(array_ref);
5102 		}
5103 		if (IS_CONST == IS_CONST) {
5104 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
5105 		} else {
5106 			SEPARATE_ARRAY(array_ptr);
5107 		}
5108 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
5109 
5110 		if (IS_CONST == IS_VAR) {
5111 
5112 		}
5113 		ZEND_VM_NEXT_OPCODE();
5114 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
5115 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
5116 			HashTable *properties;
5117 			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
5118 				if (array_ptr == array_ref) {
5119 					ZVAL_NEW_REF(array_ref, array_ref);
5120 					array_ptr = Z_REFVAL_P(array_ref);
5121 				}
5122 				Z_ADDREF_P(array_ref);
5123 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
5124 			} else {
5125 				array_ptr = EX_VAR(opline->result.var);
5126 				ZVAL_COPY_VALUE(array_ptr, array_ref);
5127 			}
5128 			if (Z_OBJ_P(array_ptr)->properties
5129 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
5130 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
5131 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
5132 				}
5133 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
5134 			}
5135 
5136 			properties = Z_OBJPROP_P(array_ptr);
5137 			if (zend_hash_num_elements(properties) == 0) {
5138 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
5139 
5140 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5141 			}
5142 
5143 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
5144 
5145 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5146 		} else {
5147 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
5148 
5149 			if (IS_CONST == IS_VAR) {
5150 
5151 			} else {
5152 
5153 			}
5154 			if (UNEXPECTED(EG(exception))) {
5155 				HANDLE_EXCEPTION();
5156 			} else if (is_empty) {
5157 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5158 			} else {
5159 				ZEND_VM_NEXT_OPCODE();
5160 			}
5161 		}
5162 	} else {
5163 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
5164 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5165 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
5166 		if (IS_CONST == IS_VAR) {
5167 
5168 		} else {
5169 
5170 		}
5171 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5172 	}
5173 }
5174 
ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5175 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5176 {
5177 	USE_OPLINE
5178 	zval *value;
5179 	zend_reference *ref = NULL;
5180 	bool ret;
5181 
5182 	SAVE_OPLINE();
5183 	value = RT_CONSTANT(opline, opline->op1);
5184 
5185 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
5186 		if (IS_CONST == IS_VAR) {
5187 			ref = Z_REF_P(value);
5188 		}
5189 		value = Z_REFVAL_P(value);
5190 	}
5191 
5192 	ret = i_zend_is_true(value);
5193 
5194 	if (UNEXPECTED(EG(exception))) {
5195 
5196 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5197 		HANDLE_EXCEPTION();
5198 	}
5199 
5200 	if (ret) {
5201 		zval *result = EX_VAR(opline->result.var);
5202 
5203 		ZVAL_COPY_VALUE(result, value);
5204 		if (IS_CONST == IS_CONST) {
5205 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
5206 		} else if (IS_CONST == IS_CV) {
5207 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
5208 		} else if (IS_CONST == IS_VAR && ref) {
5209 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5210 				efree_size(ref, sizeof(zend_reference));
5211 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5212 				Z_ADDREF_P(result);
5213 			}
5214 		}
5215 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5216 	}
5217 
5218 	ZEND_VM_NEXT_OPCODE();
5219 }
5220 
ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5221 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5222 {
5223 	USE_OPLINE
5224 	zval *value;
5225 	zend_reference *ref = NULL;
5226 
5227 	SAVE_OPLINE();
5228 	value = RT_CONSTANT(opline, opline->op1);
5229 
5230 	if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
5231 		if (IS_CONST & IS_VAR) {
5232 			ref = Z_REF_P(value);
5233 		}
5234 		value = Z_REFVAL_P(value);
5235 	}
5236 
5237 	if (Z_TYPE_P(value) > IS_NULL) {
5238 		zval *result = EX_VAR(opline->result.var);
5239 		ZVAL_COPY_VALUE(result, value);
5240 		if (IS_CONST == IS_CONST) {
5241 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
5242 		} else if (IS_CONST == IS_CV) {
5243 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
5244 		} else if ((IS_CONST & IS_VAR) && ref) {
5245 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5246 				efree_size(ref, sizeof(zend_reference));
5247 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5248 				Z_ADDREF_P(result);
5249 			}
5250 		}
5251 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5252 	}
5253 
5254 	if ((IS_CONST & IS_VAR) && ref) {
5255 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5256 			efree_size(ref, sizeof(zend_reference));
5257 		}
5258 	}
5259 	ZEND_VM_NEXT_OPCODE();
5260 }
5261 
ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5262 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5263 {
5264 	USE_OPLINE
5265 	zval *val, *result;
5266 
5267 	val = RT_CONSTANT(opline, opline->op1);
5268 
5269 	if (Z_TYPE_P(val) > IS_NULL) {
5270 		do {
5271 			if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
5272 				val = Z_REFVAL_P(val);
5273 				if (Z_TYPE_P(val) <= IS_NULL) {
5274 
5275 					break;
5276 				}
5277 			}
5278 			ZEND_VM_NEXT_OPCODE();
5279 		} while (0);
5280 	}
5281 
5282 	result = EX_VAR(opline->result.var);
5283 	if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
5284 		ZVAL_NULL(result);
5285 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
5286 			SAVE_OPLINE();
5287 			ZVAL_UNDEFINED_OP1();
5288 			if (UNEXPECTED(EG(exception) != NULL)) {
5289 				HANDLE_EXCEPTION();
5290 			}
5291 		}
5292 	} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
5293 		ZVAL_FALSE(result);
5294 	} else {
5295 		ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
5296 		ZVAL_TRUE(result);
5297 	}
5298 
5299 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5300 }
5301 
ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5302 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5303 {
5304 	USE_OPLINE
5305 	zval *value;
5306 	zval *result = EX_VAR(opline->result.var);
5307 
5308 	value = RT_CONSTANT(opline, opline->op1);
5309 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5310 		SAVE_OPLINE();
5311 		ZVAL_UNDEFINED_OP1();
5312 		ZVAL_NULL(result);
5313 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5314 	}
5315 
5316 	if (IS_CONST == IS_CV) {
5317 		ZVAL_COPY_DEREF(result, value);
5318 	} else if (IS_CONST == IS_VAR) {
5319 		if (UNEXPECTED(Z_ISREF_P(value))) {
5320 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
5321 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
5322 				efree_size(Z_REF_P(value), sizeof(zend_reference));
5323 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5324 				Z_ADDREF_P(result);
5325 			}
5326 		} else {
5327 			ZVAL_COPY_VALUE(result, value);
5328 		}
5329 	} else {
5330 		ZVAL_COPY_VALUE(result, value);
5331 		if (IS_CONST == IS_CONST) {
5332 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
5333 				Z_ADDREF_P(result);
5334 			}
5335 		}
5336 	}
5337 	ZEND_VM_NEXT_OPCODE();
5338 }
5339 
ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5340 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5341 {
5342 	USE_OPLINE
5343 
5344 	SAVE_OPLINE();
5345 	do_bind_class(RT_CONSTANT(opline, opline->op1), (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
5346 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5347 }
5348 
ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5349 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5350 {
5351 	USE_OPLINE
5352 	zend_function *func;
5353 	zval *object;
5354 	zend_class_entry *called_scope;
5355 
5356 	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
5357 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
5358 		called_scope = Z_OBJCE(EX(This));
5359 		if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
5360 				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
5361 			object = NULL;
5362 		} else {
5363 			object = &EX(This);
5364 		}
5365 	} else {
5366 		called_scope = Z_CE(EX(This));
5367 		object = NULL;
5368 	}
5369 	SAVE_OPLINE();
5370 	zend_create_closure(EX_VAR(opline->result.var), func,
5371 		EX(func)->op_array.scope, called_scope, object);
5372 
5373 	ZEND_VM_NEXT_OPCODE();
5374 }
5375 
ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5376 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5377 {
5378 	USE_OPLINE
5379 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
5380 	zval *val;
5381 
5382 	SAVE_OPLINE();
5383 	val = RT_CONSTANT(opline, opline->op1);
5384 
5385 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
5386 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
5387 
5388 		UNDEF_RESULT();
5389 		HANDLE_EXCEPTION();
5390 	}
5391 
5392 yield_from_try_again:
5393 	if (Z_TYPE_P(val) == IS_ARRAY) {
5394 		ZVAL_COPY_VALUE(&generator->values, val);
5395 		if (Z_OPT_REFCOUNTED_P(val)) {
5396 			Z_ADDREF_P(val);
5397 		}
5398 		Z_FE_POS(generator->values) = 0;
5399 
5400 	} else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
5401 		zend_class_entry *ce = Z_OBJCE_P(val);
5402 		if (ce == zend_ce_generator) {
5403 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
5404 
5405 			Z_ADDREF_P(val);
5406 
5407 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
5408 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
5409 				zval_ptr_dtor(val);
5410 				UNDEF_RESULT();
5411 				HANDLE_EXCEPTION();
5412 			} else if (Z_ISUNDEF(new_gen->retval)) {
5413 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
5414 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
5415 					zval_ptr_dtor(val);
5416 					UNDEF_RESULT();
5417 					HANDLE_EXCEPTION();
5418 				} else {
5419 					zend_generator_yield_from(generator, new_gen);
5420 				}
5421 			} else {
5422 				if (RETURN_VALUE_USED(opline)) {
5423 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
5424 				}
5425 				ZEND_VM_NEXT_OPCODE();
5426 			}
5427 		} else {
5428 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
5429 
5430 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
5431 				if (!EG(exception)) {
5432 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
5433 				}
5434 				UNDEF_RESULT();
5435 				HANDLE_EXCEPTION();
5436 			}
5437 
5438 			iter->index = 0;
5439 			if (iter->funcs->rewind) {
5440 				iter->funcs->rewind(iter);
5441 				if (UNEXPECTED(EG(exception) != NULL)) {
5442 					OBJ_RELEASE(&iter->std);
5443 					UNDEF_RESULT();
5444 					HANDLE_EXCEPTION();
5445 				}
5446 			}
5447 
5448 			ZVAL_OBJ(&generator->values, &iter->std);
5449 		}
5450 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
5451 		val = Z_REFVAL_P(val);
5452 		goto yield_from_try_again;
5453 	} else {
5454 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
5455 
5456 		UNDEF_RESULT();
5457 		HANDLE_EXCEPTION();
5458 	}
5459 
5460 	/* This is the default return value
5461 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
5462 	if (RETURN_VALUE_USED(opline)) {
5463 		ZVAL_NULL(EX_VAR(opline->result.var));
5464 	}
5465 
5466 	/* This generator has no send target (though the generator we delegate to might have one) */
5467 	generator->send_target = NULL;
5468 
5469 	/* We increment to the next op, so we are at the correct position when the
5470 	 * generator is resumed. */
5471 	ZEND_VM_INC_OPCODE();
5472 
5473 	/* The GOTO VM uses a local opline variable. We need to set the opline
5474 	 * variable in execute_data so we don't resume at an old position. */
5475 	SAVE_OPLINE();
5476 
5477 	ZEND_VM_RETURN();
5478 }
5479 
ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5480 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5481 {
5482 	USE_OPLINE
5483 	zval *value;
5484 
5485 	value = RT_CONSTANT(opline, opline->op1);
5486 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
5487 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
5488 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5489 			zval_ptr_dtor_str(value);
5490 		}
5491 		ZEND_VM_NEXT_OPCODE();
5492 	} else {
5493 		bool strict;
5494 
5495 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
5496 			value = Z_REFVAL_P(value);
5497 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
5498 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
5499 
5500 				ZEND_VM_NEXT_OPCODE();
5501 			}
5502 		}
5503 
5504 		SAVE_OPLINE();
5505 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5506 			value = ZVAL_UNDEFINED_OP1();
5507 		}
5508 		strict = EX_USES_STRICT_TYPES();
5509 		do {
5510 			if (EXPECTED(!strict)) {
5511 				zend_string *str;
5512 				zval tmp;
5513 
5514 				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
5515 					zend_error(E_DEPRECATED,
5516 						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
5517 					ZVAL_LONG(EX_VAR(opline->result.var), 0);
5518 					if (UNEXPECTED(EG(exception))) {
5519 						HANDLE_EXCEPTION();
5520 					}
5521 					break;
5522 				}
5523 
5524 				ZVAL_COPY(&tmp, value);
5525 				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
5526 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
5527 					zval_ptr_dtor(&tmp);
5528 					break;
5529 				}
5530 				zval_ptr_dtor(&tmp);
5531 			}
5532 			if (!EG(exception)) {
5533 				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_type_name(value));
5534 			}
5535 			ZVAL_UNDEF(EX_VAR(opline->result.var));
5536 		} while (0);
5537 	}
5538 
5539 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5540 }
5541 
ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5542 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5543 {
5544 	USE_OPLINE
5545 	zval *value;
5546 	int result = 0;
5547 
5548 	value = RT_CONSTANT(opline, opline->op1);
5549 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
5550 type_check_resource:
5551 		if (opline->extended_value != MAY_BE_RESOURCE
5552 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
5553 			result = 1;
5554 		}
5555 	} else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
5556 		value = Z_REFVAL_P(value);
5557 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
5558 			goto type_check_resource;
5559 		}
5560 	} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5561 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
5562 		SAVE_OPLINE();
5563 		ZVAL_UNDEFINED_OP1();
5564 		if (UNEXPECTED(EG(exception))) {
5565 			ZVAL_UNDEF(EX_VAR(opline->result.var));
5566 			HANDLE_EXCEPTION();
5567 		}
5568 	}
5569 	if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5570 		SAVE_OPLINE();
5571 
5572 		ZEND_VM_SMART_BRANCH(result, 1);
5573 	} else {
5574 		ZEND_VM_SMART_BRANCH(result, 0);
5575 	}
5576 }
5577 
ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5578 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5579 {
5580 	USE_OPLINE
5581 	zend_constant *c;
5582 
5583 	c = CACHED_PTR(opline->extended_value);
5584 	if (EXPECTED(c != NULL)) {
5585 		if (!IS_SPECIAL_CACHE_VAL(c)) {
5586 defined_true:
5587 			ZEND_VM_SMART_BRANCH_TRUE();
5588 		} else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
5589 defined_false:
5590 			ZEND_VM_SMART_BRANCH_FALSE();
5591 		}
5592 	}
5593 	if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
5594 		CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
5595 		goto defined_false;
5596 	} else {
5597 		goto defined_true;
5598 	}
5599 }
5600 
ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5601 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5602 {
5603 	USE_OPLINE
5604 	zval *value;
5605 
5606 	value = RT_CONSTANT(opline, opline->op1);
5607 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
5608 	ZEND_VM_NEXT_OPCODE();
5609 }
5610 
ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5611 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5612 {
5613 	USE_OPLINE
5614 	zval *value;
5615 
5616 	value = RT_CONSTANT(opline, opline->op1);
5617 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
5618 	ZEND_VM_NEXT_OPCODE();
5619 }
5620 
ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5621 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5622 {
5623 	USE_OPLINE
5624 	zval *value;
5625 
5626 	value = RT_CONSTANT(opline, opline->op1);
5627 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
5628 	ZEND_VM_NEXT_OPCODE();
5629 }
5630 
ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5631 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5632 {
5633 	USE_OPLINE
5634 	zval *value, *arg;
5635 
5636 	value = RT_CONSTANT(opline, opline->op1);
5637 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
5638 	ZVAL_COPY_VALUE(arg, value);
5639 	ZEND_VM_NEXT_OPCODE();
5640 }
5641 
ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5642 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5643 {
5644 	USE_OPLINE
5645 	zval *value, *arg;
5646 	uint32_t arg_num = opline->op2.num;
5647 
5648 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
5649 	if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
5650 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5651 	}
5652 	value = RT_CONSTANT(opline, opline->op1);
5653 	ZVAL_COPY_VALUE(arg, value);
5654 	ZEND_VM_NEXT_OPCODE();
5655 }
5656 
ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5657 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5658 {
5659 	USE_OPLINE
5660 	zval *op1, *op2, *result;
5661 	double d1, d2;
5662 
5663 	op1 = RT_CONSTANT(opline, opline->op1);
5664 	op2 = RT_CONSTANT(opline, opline->op2);
5665 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5666 		/* pass */
5667 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5668 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5669 			result = EX_VAR(opline->result.var);
5670 			fast_long_add_function(result, op1, op2);
5671 			ZEND_VM_NEXT_OPCODE();
5672 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5673 			d1 = (double)Z_LVAL_P(op1);
5674 			d2 = Z_DVAL_P(op2);
5675 			goto add_double;
5676 		}
5677 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5678 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5679 			d1 = Z_DVAL_P(op1);
5680 			d2 = Z_DVAL_P(op2);
5681 add_double:
5682 			result = EX_VAR(opline->result.var);
5683 			ZVAL_DOUBLE(result, d1 + d2);
5684 			ZEND_VM_NEXT_OPCODE();
5685 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5686 			d1 = Z_DVAL_P(op1);
5687 			d2 = (double)Z_LVAL_P(op2);
5688 			goto add_double;
5689 		}
5690 	}
5691 
5692 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5693 }
5694 
ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5695 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5696 {
5697 	USE_OPLINE
5698 	zval *op1, *op2, *result;
5699 	double d1, d2;
5700 
5701 	op1 = RT_CONSTANT(opline, opline->op1);
5702 	op2 = RT_CONSTANT(opline, opline->op2);
5703 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5704 		/* pass */
5705 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5706 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5707 			result = EX_VAR(opline->result.var);
5708 			fast_long_sub_function(result, op1, op2);
5709 			ZEND_VM_NEXT_OPCODE();
5710 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5711 			d1 = (double)Z_LVAL_P(op1);
5712 			d2 = Z_DVAL_P(op2);
5713 			goto sub_double;
5714 		}
5715 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5716 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5717 			d1 = Z_DVAL_P(op1);
5718 			d2 = Z_DVAL_P(op2);
5719 sub_double:
5720 			result = EX_VAR(opline->result.var);
5721 			ZVAL_DOUBLE(result, d1 - d2);
5722 			ZEND_VM_NEXT_OPCODE();
5723 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5724 			d1 = Z_DVAL_P(op1);
5725 			d2 = (double)Z_LVAL_P(op2);
5726 			goto sub_double;
5727 		}
5728 	}
5729 
5730 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5731 }
5732 
ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5733 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5734 {
5735 	USE_OPLINE
5736 	zval *op1, *op2, *result;
5737 	double d1, d2;
5738 
5739 	op1 = RT_CONSTANT(opline, opline->op1);
5740 	op2 = RT_CONSTANT(opline, opline->op2);
5741 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5742 		/* pass */
5743 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5744 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5745 			zend_long overflow;
5746 
5747 			result = EX_VAR(opline->result.var);
5748 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
5749 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
5750 			ZEND_VM_NEXT_OPCODE();
5751 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5752 			d1 = (double)Z_LVAL_P(op1);
5753 			d2 = Z_DVAL_P(op2);
5754 			goto mul_double;
5755 		}
5756 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5757 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5758 			d1 = Z_DVAL_P(op1);
5759 			d2 = Z_DVAL_P(op2);
5760 mul_double:
5761 			result = EX_VAR(opline->result.var);
5762 			ZVAL_DOUBLE(result, d1 * d2);
5763 			ZEND_VM_NEXT_OPCODE();
5764 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5765 			d1 = Z_DVAL_P(op1);
5766 			d2 = (double)Z_LVAL_P(op2);
5767 			goto mul_double;
5768 		}
5769 	}
5770 
5771 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5772 }
5773 
ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5774 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5775 {
5776 	USE_OPLINE
5777 	zval *op1, *op2;
5778 
5779 	SAVE_OPLINE();
5780 	op1 = RT_CONSTANT(opline, opline->op1);
5781 	op2 = RT_CONSTANT(opline, opline->op2);
5782 	div_function(EX_VAR(opline->result.var), op1, op2);
5783 
5784 
5785 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5786 }
5787 
ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5788 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5789 {
5790 	USE_OPLINE
5791 	zval *op1, *op2, *result;
5792 
5793 	op1 = RT_CONSTANT(opline, opline->op1);
5794 	op2 = RT_CONSTANT(opline, opline->op2);
5795 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5796 		/* pass */
5797 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5798 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5799 			result = EX_VAR(opline->result.var);
5800 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
5801 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5802 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
5803 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
5804 				ZVAL_LONG(result, 0);
5805 			} else {
5806 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
5807 			}
5808 			ZEND_VM_NEXT_OPCODE();
5809 		}
5810 	}
5811 
5812 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5813 }
5814 
ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5815 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5816 {
5817 	USE_OPLINE
5818 	zval *op1, *op2;
5819 
5820 	op1 = RT_CONSTANT(opline, opline->op1);
5821 	op2 = RT_CONSTANT(opline, opline->op2);
5822 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5823 		/* pass */
5824 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5825 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
5826 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
5827 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
5828 		ZVAL_LONG(EX_VAR(opline->result.var),
5829 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
5830 		ZEND_VM_NEXT_OPCODE();
5831 	}
5832 
5833 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5834 }
5835 
ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5836 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5837 {
5838 	USE_OPLINE
5839 	zval *op1, *op2;
5840 
5841 	op1 = RT_CONSTANT(opline, opline->op1);
5842 	op2 = RT_CONSTANT(opline, opline->op2);
5843 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5844 		/* pass */
5845 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5846 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
5847 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
5848 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
5849 		ZEND_VM_NEXT_OPCODE();
5850 	}
5851 
5852 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5853 }
5854 
ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5855 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5856 {
5857 	USE_OPLINE
5858 	zval *op1, *op2;
5859 
5860 	SAVE_OPLINE();
5861 	op1 = RT_CONSTANT(opline, opline->op1);
5862 	op2 = RT_CONSTANT(opline, opline->op2);
5863 	pow_function(EX_VAR(opline->result.var), op1, op2);
5864 
5865 
5866 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5867 }
5868 
ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5869 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5870 {
5871 	USE_OPLINE
5872 	zval *op1, *op2;
5873 	bool result;
5874 
5875 	SAVE_OPLINE();
5876 	op1 = RT_CONSTANT(opline, opline->op1);
5877 	op2 = RT_CONSTANT(opline, opline->op2);
5878 	result = fast_is_identical_function(op1, op2);
5879 
5880 
5881 	ZEND_VM_SMART_BRANCH(result, 1);
5882 }
5883 
ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5884 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5885 {
5886 	USE_OPLINE
5887 	zval *op1, *op2;
5888 	bool result;
5889 
5890 	SAVE_OPLINE();
5891 	op1 = RT_CONSTANT(opline, opline->op1);
5892 	op2 = RT_CONSTANT(opline, opline->op2);
5893 	result = fast_is_not_identical_function(op1, op2);
5894 
5895 
5896 	ZEND_VM_SMART_BRANCH(result, 1);
5897 }
5898 
ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5899 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5900 {
5901 	USE_OPLINE
5902 	zval *op1, *op2;
5903 	double d1, d2;
5904 
5905 	op1 = RT_CONSTANT(opline, opline->op1);
5906 	op2 = RT_CONSTANT(opline, opline->op2);
5907 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5908 		/* pass */
5909 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
5910 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5911 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
5912 is_equal_true:
5913 				ZEND_VM_SMART_BRANCH_TRUE();
5914 			} else {
5915 is_equal_false:
5916 				ZEND_VM_SMART_BRANCH_FALSE();
5917 			}
5918 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5919 			d1 = (double)Z_LVAL_P(op1);
5920 			d2 = Z_DVAL_P(op2);
5921 			goto is_equal_double;
5922 		}
5923 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
5924 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5925 			d1 = Z_DVAL_P(op1);
5926 			d2 = Z_DVAL_P(op2);
5927 is_equal_double:
5928 			if (d1 == d2) {
5929 				goto is_equal_true;
5930 			} else {
5931 				goto is_equal_false;
5932 			}
5933 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5934 			d1 = Z_DVAL_P(op1);
5935 			d2 = (double)Z_LVAL_P(op2);
5936 			goto is_equal_double;
5937 		}
5938 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5939 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5940 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
5941 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5942 				zval_ptr_dtor_str(op1);
5943 			}
5944 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5945 				zval_ptr_dtor_str(op2);
5946 			}
5947 			if (result) {
5948 				goto is_equal_true;
5949 			} else {
5950 				goto is_equal_false;
5951 			}
5952 		}
5953 	}
5954 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5955 }
5956 
ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5957 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5958 {
5959 	USE_OPLINE
5960 	zval *op1, *op2;
5961 	double d1, d2;
5962 
5963 	op1 = RT_CONSTANT(opline, opline->op1);
5964 	op2 = RT_CONSTANT(opline, opline->op2);
5965 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5966 		/* pass */
5967 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
5968 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5969 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
5970 is_not_equal_true:
5971 				ZEND_VM_SMART_BRANCH_TRUE();
5972 			} else {
5973 is_not_equal_false:
5974 				ZEND_VM_SMART_BRANCH_FALSE();
5975 			}
5976 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5977 			d1 = (double)Z_LVAL_P(op1);
5978 			d2 = Z_DVAL_P(op2);
5979 			goto is_not_equal_double;
5980 		}
5981 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
5982 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5983 			d1 = Z_DVAL_P(op1);
5984 			d2 = Z_DVAL_P(op2);
5985 is_not_equal_double:
5986 			if (d1 != d2) {
5987 				goto is_not_equal_true;
5988 			} else {
5989 				goto is_not_equal_false;
5990 			}
5991 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5992 			d1 = Z_DVAL_P(op1);
5993 			d2 = (double)Z_LVAL_P(op2);
5994 			goto is_not_equal_double;
5995 		}
5996 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5997 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5998 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
5999 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6000 				zval_ptr_dtor_str(op1);
6001 			}
6002 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6003 				zval_ptr_dtor_str(op2);
6004 			}
6005 			if (!result) {
6006 				goto is_not_equal_true;
6007 			} else {
6008 				goto is_not_equal_false;
6009 			}
6010 		}
6011 	}
6012 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6013 }
6014 
ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6015 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6016 {
6017 	USE_OPLINE
6018 	zval *op1, *op2;
6019 	double d1, d2;
6020 
6021 	op1 = RT_CONSTANT(opline, opline->op1);
6022 	op2 = RT_CONSTANT(opline, opline->op2);
6023 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6024 		/* pass */
6025 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6026 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6027 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
6028 is_smaller_true:
6029 				ZEND_VM_SMART_BRANCH_TRUE();
6030 			} else {
6031 is_smaller_false:
6032 				ZEND_VM_SMART_BRANCH_FALSE();
6033 			}
6034 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6035 			d1 = (double)Z_LVAL_P(op1);
6036 			d2 = Z_DVAL_P(op2);
6037 			goto is_smaller_double;
6038 		}
6039 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6040 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6041 			d1 = Z_DVAL_P(op1);
6042 			d2 = Z_DVAL_P(op2);
6043 is_smaller_double:
6044 			if (d1 < d2) {
6045 				goto is_smaller_true;
6046 			} else {
6047 				goto is_smaller_false;
6048 			}
6049 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6050 			d1 = Z_DVAL_P(op1);
6051 			d2 = (double)Z_LVAL_P(op2);
6052 			goto is_smaller_double;
6053 		}
6054 	}
6055 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6056 }
6057 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6058 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6059 {
6060 	USE_OPLINE
6061 	zval *op1, *op2;
6062 	double d1, d2;
6063 
6064 	op1 = RT_CONSTANT(opline, opline->op1);
6065 	op2 = RT_CONSTANT(opline, opline->op2);
6066 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6067 		/* pass */
6068 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6069 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6070 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
6071 is_smaller_or_equal_true:
6072 				ZEND_VM_SMART_BRANCH_TRUE();
6073 				ZVAL_TRUE(EX_VAR(opline->result.var));
6074 				ZEND_VM_NEXT_OPCODE();
6075 			} else {
6076 is_smaller_or_equal_false:
6077 				ZEND_VM_SMART_BRANCH_FALSE();
6078 				ZVAL_FALSE(EX_VAR(opline->result.var));
6079 				ZEND_VM_NEXT_OPCODE();
6080 			}
6081 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6082 			d1 = (double)Z_LVAL_P(op1);
6083 			d2 = Z_DVAL_P(op2);
6084 			goto is_smaller_or_equal_double;
6085 		}
6086 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6087 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6088 			d1 = Z_DVAL_P(op1);
6089 			d2 = Z_DVAL_P(op2);
6090 is_smaller_or_equal_double:
6091 			if (d1 <= d2) {
6092 				goto is_smaller_or_equal_true;
6093 			} else {
6094 				goto is_smaller_or_equal_false;
6095 			}
6096 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6097 			d1 = Z_DVAL_P(op1);
6098 			d2 = (double)Z_LVAL_P(op2);
6099 			goto is_smaller_or_equal_double;
6100 		}
6101 	}
6102 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6103 }
6104 
ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6105 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6106 {
6107 	USE_OPLINE
6108 	zval *op1, *op2;
6109 
6110 	SAVE_OPLINE();
6111 	op1 = RT_CONSTANT(opline, opline->op1);
6112 	op2 = RT_CONSTANT(opline, opline->op2);
6113 	compare_function(EX_VAR(opline->result.var), op1, op2);
6114 
6115 
6116 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6117 }
6118 
ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6119 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6120 {
6121 	USE_OPLINE
6122 	zval *op1, *op2;
6123 
6124 	op1 = RT_CONSTANT(opline, opline->op1);
6125 	op2 = RT_CONSTANT(opline, opline->op2);
6126 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6127 		/* pass */
6128 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6129 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6130 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
6131 		ZEND_VM_NEXT_OPCODE();
6132 	}
6133 
6134 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6135 }
6136 
ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6137 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6138 {
6139 	USE_OPLINE
6140 	zval *op1, *op2;
6141 
6142 	op1 = RT_CONSTANT(opline, opline->op1);
6143 	op2 = RT_CONSTANT(opline, opline->op2);
6144 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6145 		/* pass */
6146 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6147 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6148 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
6149 		ZEND_VM_NEXT_OPCODE();
6150 	}
6151 
6152 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6153 }
6154 
ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6155 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6156 {
6157 	USE_OPLINE
6158 	zval *op1, *op2;
6159 
6160 	op1 = RT_CONSTANT(opline, opline->op1);
6161 	op2 = RT_CONSTANT(opline, opline->op2);
6162 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6163 		/* pass */
6164 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6165 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6166 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
6167 		ZEND_VM_NEXT_OPCODE();
6168 	}
6169 
6170 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6171 }
6172 
ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6173 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6174 {
6175 	USE_OPLINE
6176 	zval *op1, *op2;
6177 
6178 	SAVE_OPLINE();
6179 	op1 = RT_CONSTANT(opline, opline->op1);
6180 	op2 = RT_CONSTANT(opline, opline->op2);
6181 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
6182 
6183 
6184 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6185 }
6186 
ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6187 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6188 {
6189 	USE_OPLINE
6190 	zval *container, *dim, *value;
6191 
6192 	SAVE_OPLINE();
6193 	container = RT_CONSTANT(opline, opline->op1);
6194 	dim = RT_CONSTANT(opline, opline->op2);
6195 	if (IS_CONST != IS_CONST) {
6196 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6197 fetch_dim_r_array:
6198 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
6199 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
6200 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
6201 			container = Z_REFVAL_P(container);
6202 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6203 				goto fetch_dim_r_array;
6204 			} else {
6205 				goto fetch_dim_r_slow;
6206 			}
6207 		} else {
6208 fetch_dim_r_slow:
6209 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
6210 				dim++;
6211 			}
6212 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
6213 		}
6214 	} else {
6215 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6216 	}
6217 
6218 
6219 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6220 }
6221 
ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6222 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6223 {
6224 	USE_OPLINE
6225 	zval *container;
6226 
6227 	SAVE_OPLINE();
6228 	container = RT_CONSTANT(opline, opline->op1);
6229 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6230 
6231 
6232 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6233 }
6234 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6235 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6236 {
6237 #if 0
6238 	USE_OPLINE
6239 #endif
6240 
6241 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
6242         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
6243 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6244         }
6245 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6246 	} else {
6247 		if (IS_CONST == IS_UNUSED) {
6248 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6249 		}
6250 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6251 	}
6252 }
6253 
ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6254 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6255 {
6256 	USE_OPLINE
6257 	zval *container;
6258 	void **cache_slot = NULL;
6259 
6260 	SAVE_OPLINE();
6261 	container = RT_CONSTANT(opline, opline->op1);
6262 
6263 	if (IS_CONST == IS_CONST ||
6264 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6265 	    do {
6266 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6267 				container = Z_REFVAL_P(container);
6268 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
6269 					break;
6270 				}
6271 			}
6272 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
6273 				ZVAL_UNDEFINED_OP1();
6274 			}
6275 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
6276 			ZVAL_NULL(EX_VAR(opline->result.var));
6277 			goto fetch_obj_r_finish;
6278 		} while (0);
6279 	}
6280 
6281 	/* here we are sure we are dealing with an object */
6282 	do {
6283 		zend_object *zobj = Z_OBJ_P(container);
6284 		zend_string *name, *tmp_name;
6285 		zval *retval;
6286 
6287 		if (IS_CONST == IS_CONST) {
6288 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
6289 
6290 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
6291 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
6292 
6293 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
6294 					retval = OBJ_PROP(zobj, prop_offset);
6295 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
6296 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6297 							goto fetch_obj_r_copy;
6298 						} else {
6299 fetch_obj_r_fast_copy:
6300 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6301 							ZEND_VM_NEXT_OPCODE();
6302 						}
6303 					}
6304 				} else if (EXPECTED(zobj->properties != NULL)) {
6305 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6306 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
6307 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
6308 
6309 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
6310 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
6311 
6312 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
6313 						        (EXPECTED(p->key == name) ||
6314 						         (EXPECTED(p->h == ZSTR_H(name)) &&
6315 						          EXPECTED(p->key != NULL) &&
6316 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
6317 								retval = &p->val;
6318 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6319 									goto fetch_obj_r_copy;
6320 								} else {
6321 									goto fetch_obj_r_fast_copy;
6322 								}
6323 							}
6324 						}
6325 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
6326 					}
6327 					retval = zend_hash_find_known_hash(zobj->properties, name);
6328 					if (EXPECTED(retval)) {
6329 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
6330 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
6331 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6332 							goto fetch_obj_r_copy;
6333 						} else {
6334 							goto fetch_obj_r_fast_copy;
6335 						}
6336 					}
6337 				}
6338 			}
6339 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6340 		} else {
6341 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
6342 			if (UNEXPECTED(!name)) {
6343 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6344 				break;
6345 			}
6346 		}
6347 
6348 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
6349 #if ZEND_DEBUG
6350 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
6351 			zend_verify_internal_read_property_type(zobj, name, retval);
6352 		}
6353 #endif
6354 
6355 		if (IS_CONST != IS_CONST) {
6356 			zend_tmp_string_release(tmp_name);
6357 		}
6358 
6359 		if (retval != EX_VAR(opline->result.var)) {
6360 fetch_obj_r_copy:
6361 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6362 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
6363 			zend_unwrap_reference(retval);
6364 		}
6365 	} while (0);
6366 
6367 fetch_obj_r_finish:
6368 
6369 
6370 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6371 }
6372 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6373 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6374 {
6375 	USE_OPLINE
6376 	zval *container;
6377 	void **cache_slot = NULL;
6378 
6379 	SAVE_OPLINE();
6380 	container = RT_CONSTANT(opline, opline->op1);
6381 
6382 	if (IS_CONST == IS_CONST ||
6383 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6384 		do {
6385 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6386 				container = Z_REFVAL_P(container);
6387 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
6388 					break;
6389 				}
6390 			}
6391 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
6392 				ZVAL_UNDEFINED_OP2();
6393 			}
6394 			ZVAL_NULL(EX_VAR(opline->result.var));
6395 			goto fetch_obj_is_finish;
6396 		} while (0);
6397 	}
6398 
6399 	/* here we are sure we are dealing with an object */
6400 	do {
6401 		zend_object *zobj = Z_OBJ_P(container);
6402 		zend_string *name, *tmp_name;
6403 		zval *retval;
6404 
6405 		if (IS_CONST == IS_CONST) {
6406 			cache_slot = CACHE_ADDR(opline->extended_value);
6407 
6408 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
6409 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
6410 
6411 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
6412 					retval = OBJ_PROP(zobj, prop_offset);
6413 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
6414 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6415 							goto fetch_obj_is_copy;
6416 						} else {
6417 fetch_obj_is_fast_copy:
6418 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6419 							ZEND_VM_NEXT_OPCODE();
6420 						}
6421 					}
6422 				} else if (EXPECTED(zobj->properties != NULL)) {
6423 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6424 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
6425 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
6426 
6427 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
6428 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
6429 
6430 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
6431 						        (EXPECTED(p->key == name) ||
6432 						         (EXPECTED(p->h == ZSTR_H(name)) &&
6433 						          EXPECTED(p->key != NULL) &&
6434 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
6435 								retval = &p->val;
6436 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6437 									goto fetch_obj_is_copy;
6438 								} else {
6439 									goto fetch_obj_is_fast_copy;
6440 								}
6441 							}
6442 						}
6443 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
6444 					}
6445 					retval = zend_hash_find_known_hash(zobj->properties, name);
6446 					if (EXPECTED(retval)) {
6447 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
6448 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
6449 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6450 							goto fetch_obj_is_copy;
6451 						} else {
6452 							goto fetch_obj_is_fast_copy;
6453 						}
6454 					}
6455 				}
6456 			}
6457 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6458 		} else {
6459 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
6460 			if (UNEXPECTED(!name)) {
6461 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6462 				break;
6463 			}
6464 		}
6465 
6466 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
6467 
6468 		if (IS_CONST != IS_CONST) {
6469 			zend_tmp_string_release(tmp_name);
6470 		}
6471 
6472 		if (retval != EX_VAR(opline->result.var)) {
6473 fetch_obj_is_copy:
6474 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6475 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
6476 			zend_unwrap_reference(retval);
6477 		}
6478 	} while (0);
6479 
6480 fetch_obj_is_finish:
6481 
6482 
6483 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6484 }
6485 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6486 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6487 {
6488 #if 0
6489 	USE_OPLINE
6490 #endif
6491 
6492 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
6493 		/* Behave like FETCH_OBJ_W */
6494 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
6495 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6496 		}
6497 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6498 	} else {
6499 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6500 	}
6501 }
6502 
ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6503 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6504 {
6505 	USE_OPLINE
6506 	zval *container;
6507 
6508 	SAVE_OPLINE();
6509 	container = RT_CONSTANT(opline, opline->op1);
6510 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6511 
6512 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6513 }
6514 
ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6515 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6516 {
6517 	USE_OPLINE
6518 	zval *op1, *op2;
6519 	zend_string *op1_str, *op2_str, *str;
6520 
6521 
6522 	op1 = RT_CONSTANT(opline, opline->op1);
6523 	op2 = RT_CONSTANT(opline, opline->op2);
6524 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
6525 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
6526 		zend_string *op1_str = Z_STR_P(op1);
6527 		zend_string *op2_str = Z_STR_P(op2);
6528 		zend_string *str;
6529 
6530 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
6531 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
6532 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
6533 			} else {
6534 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
6535 			}
6536 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6537 				zend_string_release_ex(op1_str, 0);
6538 			}
6539 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
6540 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
6541 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
6542 			} else {
6543 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
6544 			}
6545 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6546 				zend_string_release_ex(op2_str, 0);
6547 			}
6548 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
6549 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
6550 		    size_t len = ZSTR_LEN(op1_str);
6551 
6552 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
6553 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6554 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6555 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6556 				zend_string_release_ex(op2_str, 0);
6557 			}
6558 		} else {
6559 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
6560 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
6561 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6562 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6563 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6564 				zend_string_release_ex(op1_str, 0);
6565 			}
6566 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6567 				zend_string_release_ex(op2_str, 0);
6568 			}
6569 		}
6570 		ZEND_VM_NEXT_OPCODE();
6571 	}
6572 
6573 	SAVE_OPLINE();
6574 	if (IS_CONST == IS_CONST) {
6575 		op1_str = Z_STR_P(op1);
6576 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
6577 		op1_str = zend_string_copy(Z_STR_P(op1));
6578 	} else {
6579 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
6580 			ZVAL_UNDEFINED_OP1();
6581 		}
6582 		op1_str = zval_get_string_func(op1);
6583 	}
6584 	if (IS_CONST == IS_CONST) {
6585 		op2_str = Z_STR_P(op2);
6586 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
6587 		op2_str = zend_string_copy(Z_STR_P(op2));
6588 	} else {
6589 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
6590 			ZVAL_UNDEFINED_OP2();
6591 		}
6592 		op2_str = zval_get_string_func(op2);
6593 	}
6594 	do {
6595 		if (IS_CONST != IS_CONST) {
6596 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
6597 				if (IS_CONST == IS_CONST) {
6598 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
6599 						GC_ADDREF(op2_str);
6600 					}
6601 				}
6602 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
6603 				zend_string_release_ex(op1_str, 0);
6604 				break;
6605 			}
6606 		}
6607 		if (IS_CONST != IS_CONST) {
6608 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
6609 				if (IS_CONST == IS_CONST) {
6610 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
6611 						GC_ADDREF(op1_str);
6612 					}
6613 				}
6614 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
6615 				zend_string_release_ex(op2_str, 0);
6616 				break;
6617 			}
6618 		}
6619 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
6620 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
6621 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6622 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6623 		if (IS_CONST != IS_CONST) {
6624 			zend_string_release_ex(op1_str, 0);
6625 		}
6626 		if (IS_CONST != IS_CONST) {
6627 			zend_string_release_ex(op2_str, 0);
6628 		}
6629 	} while (0);
6630 
6631 
6632 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6633 }
6634 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6635 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6636 {
6637 	USE_OPLINE
6638 	zval *function_name;
6639 	zval *object;
6640 	zend_function *fbc;
6641 	zend_class_entry *called_scope;
6642 	zend_object *obj;
6643 	zend_execute_data *call;
6644 	uint32_t call_info;
6645 
6646 	SAVE_OPLINE();
6647 
6648 	object = RT_CONSTANT(opline, opline->op1);
6649 
6650 	if (IS_CONST != IS_CONST) {
6651 		function_name = RT_CONSTANT(opline, opline->op2);
6652 	}
6653 
6654 	if (IS_CONST != IS_CONST &&
6655 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
6656 		do {
6657 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
6658 				function_name = Z_REFVAL_P(function_name);
6659 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
6660 					break;
6661 				}
6662 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
6663 				ZVAL_UNDEFINED_OP2();
6664 				if (UNEXPECTED(EG(exception) != NULL)) {
6665 
6666 					HANDLE_EXCEPTION();
6667 				}
6668 			}
6669 			zend_throw_error(NULL, "Method name must be a string");
6670 
6671 
6672 			HANDLE_EXCEPTION();
6673 		} while (0);
6674 	}
6675 
6676 	if (IS_CONST == IS_UNUSED) {
6677 		obj = Z_OBJ_P(object);
6678 	} else {
6679 		do {
6680 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
6681 				obj = Z_OBJ_P(object);
6682 			} else {
6683 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
6684 					zend_reference *ref = Z_REF_P(object);
6685 
6686 					object = &ref->val;
6687 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
6688 						obj = Z_OBJ_P(object);
6689 						if (IS_CONST & IS_VAR) {
6690 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
6691 								efree_size(ref, sizeof(zend_reference));
6692 							} else {
6693 								Z_ADDREF_P(object);
6694 							}
6695 						}
6696 						break;
6697 					}
6698 				}
6699 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
6700 					object = ZVAL_UNDEFINED_OP1();
6701 					if (UNEXPECTED(EG(exception) != NULL)) {
6702 						if (IS_CONST != IS_CONST) {
6703 
6704 						}
6705 						HANDLE_EXCEPTION();
6706 					}
6707 				}
6708 				if (IS_CONST == IS_CONST) {
6709 					function_name = RT_CONSTANT(opline, opline->op2);
6710 				}
6711 				zend_invalid_method_call(object, function_name);
6712 
6713 
6714 				HANDLE_EXCEPTION();
6715 			}
6716 		} while (0);
6717 	}
6718 
6719 	called_scope = obj->ce;
6720 
6721 	if (IS_CONST == IS_CONST &&
6722 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
6723 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
6724 	} else {
6725 	    zend_object *orig_obj = obj;
6726 
6727 		if (IS_CONST == IS_CONST) {
6728 			function_name = RT_CONSTANT(opline, opline->op2);
6729 		}
6730 
6731 		/* First, locate the function. */
6732 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
6733 		if (UNEXPECTED(fbc == NULL)) {
6734 			if (EXPECTED(!EG(exception))) {
6735 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
6736 			}
6737 
6738 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
6739 				zend_objects_store_del(orig_obj);
6740 			}
6741 			HANDLE_EXCEPTION();
6742 		}
6743 		if (IS_CONST == IS_CONST &&
6744 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
6745 		    EXPECTED(obj == orig_obj)) {
6746 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
6747 		}
6748 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
6749 			GC_ADDREF(obj); /* For $this pointer */
6750 			if (GC_DELREF(orig_obj) == 0) {
6751 				zend_objects_store_del(orig_obj);
6752 			}
6753 		}
6754 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
6755 			init_func_run_time_cache(&fbc->op_array);
6756 		}
6757 	}
6758 
6759 	if (IS_CONST != IS_CONST) {
6760 
6761 	}
6762 
6763 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
6764 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
6765 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
6766 			zend_objects_store_del(obj);
6767 			if (UNEXPECTED(EG(exception))) {
6768 				HANDLE_EXCEPTION();
6769 			}
6770 		}
6771 		/* call static method */
6772 		obj = (zend_object*)called_scope;
6773 		call_info = ZEND_CALL_NESTED_FUNCTION;
6774 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
6775 		if (IS_CONST == IS_CV) {
6776 			GC_ADDREF(obj); /* For $this pointer */
6777 		}
6778 		/* CV may be changed indirectly (e.g. when it's a reference) */
6779 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
6780 	}
6781 
6782 	call = zend_vm_stack_push_call_frame(call_info,
6783 		fbc, opline->extended_value, obj);
6784 	call->prev_execute_data = EX(call);
6785 	EX(call) = call;
6786 
6787 	ZEND_VM_NEXT_OPCODE();
6788 }
6789 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6790 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6791 {
6792 	USE_OPLINE
6793 	zval *function_name;
6794 	zend_class_entry *ce;
6795 	uint32_t call_info;
6796 	zend_function *fbc;
6797 	zend_execute_data *call;
6798 
6799 	SAVE_OPLINE();
6800 
6801 	if (IS_CONST == IS_CONST) {
6802 		/* no function found. try a static method in class */
6803 		ce = CACHED_PTR(opline->result.num);
6804 		if (UNEXPECTED(ce == NULL)) {
6805 			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);
6806 			if (UNEXPECTED(ce == NULL)) {
6807 
6808 				HANDLE_EXCEPTION();
6809 			}
6810 			if (IS_CONST != IS_CONST) {
6811 				CACHE_PTR(opline->result.num, ce);
6812 			}
6813 		}
6814 	} else if (IS_CONST == IS_UNUSED) {
6815 		ce = zend_fetch_class(NULL, opline->op1.num);
6816 		if (UNEXPECTED(ce == NULL)) {
6817 
6818 			HANDLE_EXCEPTION();
6819 		}
6820 	} else {
6821 		ce = Z_CE_P(EX_VAR(opline->op1.var));
6822 	}
6823 
6824 	if (IS_CONST == IS_CONST &&
6825 	    IS_CONST == IS_CONST &&
6826 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
6827 		/* nothing to do */
6828 	} else if (IS_CONST != IS_CONST &&
6829 	           IS_CONST == IS_CONST &&
6830 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
6831 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
6832 	} else if (IS_CONST != IS_UNUSED) {
6833 		function_name = RT_CONSTANT(opline, opline->op2);
6834 		if (IS_CONST != IS_CONST) {
6835 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
6836 				do {
6837 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
6838 						function_name = Z_REFVAL_P(function_name);
6839 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
6840 							break;
6841 						}
6842 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
6843 						ZVAL_UNDEFINED_OP2();
6844 						if (UNEXPECTED(EG(exception) != NULL)) {
6845 							HANDLE_EXCEPTION();
6846 						}
6847 					}
6848 					zend_throw_error(NULL, "Method name must be a string");
6849 
6850 					HANDLE_EXCEPTION();
6851 				} while (0);
6852 			}
6853 		}
6854 
6855 		if (ce->get_static_method) {
6856 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
6857 		} else {
6858 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
6859 		}
6860 		if (UNEXPECTED(fbc == NULL)) {
6861 			if (EXPECTED(!EG(exception))) {
6862 				zend_undefined_method(ce, Z_STR_P(function_name));
6863 			}
6864 
6865 			HANDLE_EXCEPTION();
6866 		}
6867 		if (IS_CONST == IS_CONST &&
6868 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
6869 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
6870 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
6871 		}
6872 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
6873 			init_func_run_time_cache(&fbc->op_array);
6874 		}
6875 		if (IS_CONST != IS_CONST) {
6876 
6877 		}
6878 	} else {
6879 		if (UNEXPECTED(ce->constructor == NULL)) {
6880 			zend_throw_error(NULL, "Cannot call constructor");
6881 			HANDLE_EXCEPTION();
6882 		}
6883 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
6884 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
6885 			HANDLE_EXCEPTION();
6886 		}
6887 		fbc = ce->constructor;
6888 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
6889 			init_func_run_time_cache(&fbc->op_array);
6890 		}
6891 	}
6892 
6893 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
6894 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
6895 			ce = (zend_class_entry*)Z_OBJ(EX(This));
6896 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
6897 		} else {
6898 			zend_non_static_method_call(fbc);
6899 			HANDLE_EXCEPTION();
6900 		}
6901 	} else {
6902 		/* previous opcode is ZEND_FETCH_CLASS */
6903 		if (IS_CONST == IS_UNUSED
6904 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
6905 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
6906 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
6907 				ce = Z_OBJCE(EX(This));
6908 			} else {
6909 				ce = Z_CE(EX(This));
6910 			}
6911 		}
6912 		call_info = ZEND_CALL_NESTED_FUNCTION;
6913 	}
6914 
6915 	call = zend_vm_stack_push_call_frame(call_info,
6916 		fbc, opline->extended_value, ce);
6917 	call->prev_execute_data = EX(call);
6918 	EX(call) = call;
6919 
6920 	ZEND_VM_NEXT_OPCODE();
6921 }
6922 
ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6923 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6924 {
6925 	USE_OPLINE
6926 	zval *function_name;
6927 	zend_fcall_info_cache fcc;
6928 	char *error = NULL;
6929 	zend_function *func;
6930 	void *object_or_called_scope;
6931 	zend_execute_data *call;
6932 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
6933 
6934 	SAVE_OPLINE();
6935 	function_name = RT_CONSTANT(opline, opline->op2);
6936 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
6937 		ZEND_ASSERT(!error);
6938 		func = fcc.function_handler;
6939 		object_or_called_scope = fcc.called_scope;
6940 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
6941 			/* Delay closure destruction until its invocation */
6942 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
6943 			call_info |= ZEND_CALL_CLOSURE;
6944 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
6945 				call_info |= ZEND_CALL_FAKE_CLOSURE;
6946 			}
6947 			if (fcc.object) {
6948 				object_or_called_scope = fcc.object;
6949 				call_info |= ZEND_CALL_HAS_THIS;
6950 			}
6951 		} else if (fcc.object) {
6952 			GC_ADDREF(fcc.object); /* For $this pointer */
6953 			object_or_called_scope = fcc.object;
6954 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
6955 		}
6956 
6957 		if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
6958 			if (call_info & ZEND_CALL_CLOSURE) {
6959 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
6960 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
6961 				zend_object_release(fcc.object);
6962 			}
6963 			HANDLE_EXCEPTION();
6964 		}
6965 
6966 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
6967 			init_func_run_time_cache(&func->op_array);
6968 		}
6969 	} else {
6970 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
6971 		efree(error);
6972 
6973 		HANDLE_EXCEPTION();
6974 	}
6975 
6976 	call = zend_vm_stack_push_call_frame(call_info,
6977 		func, opline->extended_value, object_or_called_scope);
6978 	call->prev_execute_data = EX(call);
6979 	EX(call) = call;
6980 
6981 	ZEND_VM_NEXT_OPCODE();
6982 }
6983 
ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6984 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6985 {
6986 	USE_OPLINE
6987 	zval *value, *arg;
6988 
6989 	if (IS_CONST == IS_CONST) {
6990 		SAVE_OPLINE();
6991 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6992 		uint32_t arg_num;
6993 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
6994 		if (UNEXPECTED(!arg)) {
6995 
6996 			HANDLE_EXCEPTION();
6997 		}
6998 	} else {
6999 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
7000 	}
7001 
7002 	value = RT_CONSTANT(opline, opline->op1);
7003 	ZVAL_COPY_VALUE(arg, value);
7004 	if (IS_CONST == IS_CONST) {
7005 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
7006 			Z_ADDREF_P(arg);
7007 		}
7008 	}
7009 	ZEND_VM_NEXT_OPCODE();
7010 }
7011 
ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7012 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7013 {
7014 	USE_OPLINE
7015 	zval *value, *arg;
7016 	uint32_t arg_num;
7017 
7018 	if (IS_CONST == IS_CONST) {
7019 		SAVE_OPLINE();
7020 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
7021 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
7022 		if (UNEXPECTED(!arg)) {
7023 
7024 			HANDLE_EXCEPTION();
7025 		}
7026 	} else {
7027 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
7028 		arg_num = opline->op2.num;
7029 	}
7030 
7031 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
7032 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
7033 			goto send_val_by_ref;
7034 		}
7035 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
7036 send_val_by_ref:
7037 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7038 	}
7039 	value = RT_CONSTANT(opline, opline->op1);
7040 	ZVAL_COPY_VALUE(arg, value);
7041 	if (IS_CONST == IS_CONST) {
7042 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
7043 			Z_ADDREF_P(arg);
7044 		}
7045 	}
7046 	ZEND_VM_NEXT_OPCODE();
7047 }
7048 
ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7049 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7050 {
7051 	zend_class_entry *ce, *scope;
7052 	zend_class_constant *c;
7053 	zval *value, *zv;
7054 	USE_OPLINE
7055 
7056 	SAVE_OPLINE();
7057 
7058 	do {
7059 		if (IS_CONST == IS_CONST) {
7060 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
7061 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
7062 				break;
7063 			} else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
7064 				ce = CACHED_PTR(opline->extended_value);
7065 			} else {
7066 				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);
7067 				if (UNEXPECTED(ce == NULL)) {
7068 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7069 					HANDLE_EXCEPTION();
7070 				}
7071 			}
7072 		} else {
7073 			if (IS_CONST == IS_UNUSED) {
7074 				ce = zend_fetch_class(NULL, opline->op1.num);
7075 				if (UNEXPECTED(ce == NULL)) {
7076 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7077 					HANDLE_EXCEPTION();
7078 				}
7079 			} else {
7080 				ce = Z_CE_P(EX_VAR(opline->op1.var));
7081 			}
7082 			if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
7083 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
7084 				break;
7085 			}
7086 		}
7087 
7088 		zv = zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
7089 		if (EXPECTED(zv != NULL)) {
7090 			c = Z_PTR_P(zv);
7091 			scope = EX(func)->op_array.scope;
7092 			if (!zend_verify_const_access(c, scope)) {
7093 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
7094 				ZVAL_UNDEF(EX_VAR(opline->result.var));
7095 				HANDLE_EXCEPTION();
7096 			}
7097 			value = &c->value;
7098 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
7099 				zval_update_constant_ex(value, c->ce);
7100 				if (UNEXPECTED(EG(exception) != NULL)) {
7101 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7102 					HANDLE_EXCEPTION();
7103 				}
7104 			}
7105 			CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
7106 		} else {
7107 			zend_throw_error(NULL, "Undefined constant %s::%s",
7108 				ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
7109 			ZVAL_UNDEF(EX_VAR(opline->result.var));
7110 			HANDLE_EXCEPTION();
7111 		}
7112 	} while (0);
7113 
7114 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
7115 
7116 	ZEND_VM_NEXT_OPCODE();
7117 }
7118 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7119 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7120 {
7121 	USE_OPLINE
7122 	zval *expr_ptr, new_expr;
7123 
7124 	SAVE_OPLINE();
7125 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
7126 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
7127 		expr_ptr = NULL;
7128 		if (Z_ISREF_P(expr_ptr)) {
7129 			Z_ADDREF_P(expr_ptr);
7130 		} else {
7131 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
7132 		}
7133 
7134 	} else {
7135 		expr_ptr = RT_CONSTANT(opline, opline->op1);
7136 		if (IS_CONST == IS_TMP_VAR) {
7137 			/* pass */
7138 		} else if (IS_CONST == IS_CONST) {
7139 			Z_TRY_ADDREF_P(expr_ptr);
7140 		} else if (IS_CONST == IS_CV) {
7141 			ZVAL_DEREF(expr_ptr);
7142 			Z_TRY_ADDREF_P(expr_ptr);
7143 		} else /* if (IS_CONST == IS_VAR) */ {
7144 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
7145 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
7146 
7147 				expr_ptr = Z_REFVAL_P(expr_ptr);
7148 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
7149 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
7150 					expr_ptr = &new_expr;
7151 					efree_size(ref, sizeof(zend_reference));
7152 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
7153 					Z_ADDREF_P(expr_ptr);
7154 				}
7155 			}
7156 		}
7157 	}
7158 
7159 	if (IS_CONST != IS_UNUSED) {
7160 		zval *offset = RT_CONSTANT(opline, opline->op2);
7161 		zend_string *str;
7162 		zend_ulong hval;
7163 
7164 add_again:
7165 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
7166 			str = Z_STR_P(offset);
7167 			if (IS_CONST != IS_CONST) {
7168 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
7169 					goto num_index;
7170 				}
7171 			}
7172 str_index:
7173 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
7174 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
7175 			hval = Z_LVAL_P(offset);
7176 num_index:
7177 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
7178 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
7179 			offset = Z_REFVAL_P(offset);
7180 			goto add_again;
7181 		} else if (Z_TYPE_P(offset) == IS_NULL) {
7182 			str = ZSTR_EMPTY_ALLOC();
7183 			goto str_index;
7184 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
7185 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
7186 			goto num_index;
7187 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
7188 			hval = 0;
7189 			goto num_index;
7190 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
7191 			hval = 1;
7192 			goto num_index;
7193 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
7194 			zend_use_resource_as_offset(offset);
7195 			hval = Z_RES_HANDLE_P(offset);
7196 			goto num_index;
7197 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
7198 			ZVAL_UNDEFINED_OP2();
7199 			str = ZSTR_EMPTY_ALLOC();
7200 			goto str_index;
7201 		} else {
7202 			zend_illegal_offset();
7203 			zval_ptr_dtor_nogc(expr_ptr);
7204 		}
7205 
7206 	} else {
7207 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
7208 			zend_cannot_add_element();
7209 			zval_ptr_dtor_nogc(expr_ptr);
7210 		}
7211 	}
7212 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7213 }
7214 
ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7215 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7216 {
7217 	zval *array;
7218 	uint32_t size;
7219 	USE_OPLINE
7220 
7221 	array = EX_VAR(opline->result.var);
7222 	if (IS_CONST != IS_UNUSED) {
7223 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
7224 		ZVAL_ARR(array, zend_new_array(size));
7225 		/* Explicitly initialize array as not-packed if flag is set */
7226 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
7227 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
7228 		}
7229 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7230 	} else {
7231 		ZVAL_ARR(array, zend_new_array(0));
7232 		ZEND_VM_NEXT_OPCODE();
7233 	}
7234 }
7235 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7236 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7237 {
7238 	USE_OPLINE
7239 	zval *container;
7240 	bool result;
7241 	zend_ulong hval;
7242 	zval *offset;
7243 
7244 	SAVE_OPLINE();
7245 	container = RT_CONSTANT(opline, opline->op1);
7246 	offset = RT_CONSTANT(opline, opline->op2);
7247 
7248 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7249 		HashTable *ht;
7250 		zval *value;
7251 		zend_string *str;
7252 
7253 isset_dim_obj_array:
7254 		ht = Z_ARRVAL_P(container);
7255 isset_again:
7256 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
7257 			str = Z_STR_P(offset);
7258 			if (IS_CONST != IS_CONST) {
7259 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
7260 					goto num_index_prop;
7261 				}
7262 			}
7263 			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
7264 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
7265 			hval = Z_LVAL_P(offset);
7266 num_index_prop:
7267 			value = zend_hash_index_find(ht, hval);
7268 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
7269 			offset = Z_REFVAL_P(offset);
7270 			goto isset_again;
7271 		} else {
7272 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
7273 			if (UNEXPECTED(EG(exception))) {
7274 				result = 0;
7275 				goto isset_dim_obj_exit;
7276 			}
7277 		}
7278 
7279 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
7280 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
7281 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
7282 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
7283 
7284 			if (IS_CONST & (IS_CONST|IS_CV)) {
7285 				/* avoid exception check */
7286 
7287 				ZEND_VM_SMART_BRANCH(result, 0);
7288 			}
7289 		} else {
7290 			result = (value == NULL || !i_zend_is_true(value));
7291 		}
7292 		goto isset_dim_obj_exit;
7293 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
7294 		container = Z_REFVAL_P(container);
7295 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7296 			goto isset_dim_obj_array;
7297 		}
7298 	}
7299 
7300 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
7301 		offset++;
7302 	}
7303 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
7304 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
7305 	} else {
7306 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
7307 	}
7308 
7309 isset_dim_obj_exit:
7310 
7311 
7312 	ZEND_VM_SMART_BRANCH(result, 1);
7313 }
7314 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7315 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7316 {
7317 	USE_OPLINE
7318 	zval *container;
7319 	int result;
7320 	zval *offset;
7321 	zend_string *name, *tmp_name;
7322 
7323 	SAVE_OPLINE();
7324 	container = RT_CONSTANT(opline, opline->op1);
7325 	offset = RT_CONSTANT(opline, opline->op2);
7326 
7327 	if (IS_CONST == IS_CONST ||
7328 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
7329 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
7330 			container = Z_REFVAL_P(container);
7331 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
7332 				result = (opline->extended_value & ZEND_ISEMPTY);
7333 				goto isset_object_finish;
7334 			}
7335 		} else {
7336 			result = (opline->extended_value & ZEND_ISEMPTY);
7337 			goto isset_object_finish;
7338 		}
7339 	}
7340 
7341 	if (IS_CONST == IS_CONST) {
7342 		name = Z_STR_P(offset);
7343 	} else {
7344 		name = zval_try_get_tmp_string(offset, &tmp_name);
7345 		if (UNEXPECTED(!name)) {
7346 			result = 0;
7347 			goto isset_object_finish;
7348 		}
7349 	}
7350 
7351 	result =
7352 		(opline->extended_value & ZEND_ISEMPTY) ^
7353 		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));
7354 
7355 	if (IS_CONST != IS_CONST) {
7356 		zend_tmp_string_release(tmp_name);
7357 	}
7358 
7359 isset_object_finish:
7360 
7361 
7362 	ZEND_VM_SMART_BRANCH(result, 1);
7363 }
7364 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7365 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7366 {
7367 	USE_OPLINE
7368 
7369 	zval *key, *subject;
7370 	HashTable *ht;
7371 	bool result;
7372 
7373 	SAVE_OPLINE();
7374 
7375 	key = RT_CONSTANT(opline, opline->op1);
7376 	subject = RT_CONSTANT(opline, opline->op2);
7377 
7378 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
7379 array_key_exists_array:
7380 		ht = Z_ARRVAL_P(subject);
7381 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
7382 	} else {
7383 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
7384 			subject = Z_REFVAL_P(subject);
7385 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
7386 				goto array_key_exists_array;
7387 			}
7388 		}
7389 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
7390 		result = 0;
7391 	}
7392 
7393 
7394 	ZEND_VM_SMART_BRANCH(result, 1);
7395 }
7396 
7397 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7398 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7399 {
7400 	USE_OPLINE
7401 
7402 	zend_class_entry *ce = CACHED_PTR(opline->extended_value);
7403 	if (ce == NULL) {
7404 		zval *lcname = RT_CONSTANT(opline, opline->op1);
7405 		zval *zv = zend_hash_find_known_hash(EG(class_table), Z_STR_P(lcname + 1));
7406 		if (zv) {
7407 			SAVE_OPLINE();
7408 			ce = zend_bind_class_in_slot(zv, lcname, Z_STR_P(RT_CONSTANT(opline, opline->op2)));
7409 			if (!ce) {
7410 				HANDLE_EXCEPTION();
7411 			}
7412 		}
7413 		CACHE_PTR(opline->extended_value, ce);
7414 	}
7415 	ZEND_VM_NEXT_OPCODE();
7416 }
7417 
ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7419 {
7420 	USE_OPLINE
7421 	zval *name;
7422 	zval *val;
7423 	zend_constant c;
7424 
7425 	SAVE_OPLINE();
7426 	name  = RT_CONSTANT(opline, opline->op1);
7427 	val   = RT_CONSTANT(opline, opline->op2);
7428 
7429 	ZVAL_COPY(&c.value, val);
7430 	if (Z_OPT_CONSTANT(c.value)) {
7431 		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
7432 			zval_ptr_dtor_nogc(&c.value);
7433 
7434 
7435 			HANDLE_EXCEPTION();
7436 		}
7437 	}
7438 	/* non persistent, case sensitive */
7439 	ZEND_CONSTANT_SET_FLAGS(&c, CONST_CS, PHP_USER_CONSTANT);
7440 	c.name = zend_string_copy(Z_STR_P(name));
7441 
7442 	if (zend_register_constant(&c) == FAILURE) {
7443 	}
7444 
7445 
7446 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7447 }
7448 
ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7449 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7450 {
7451 	USE_OPLINE
7452 
7453 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
7454 
7455 	SAVE_OPLINE();
7456 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
7457 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7458 	}
7459 
7460 	/* Destroy the previously yielded value */
7461 	zval_ptr_dtor(&generator->value);
7462 
7463 	/* Destroy the previously yielded key */
7464 	zval_ptr_dtor(&generator->key);
7465 
7466 	/* Set the new yielded value */
7467 	if (IS_CONST != IS_UNUSED) {
7468 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
7469 			/* Constants and temporary variables aren't yieldable by reference,
7470 			 * but we still allow them with a notice. */
7471 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
7472 				zval *value;
7473 
7474 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7475 
7476 				value = RT_CONSTANT(opline, opline->op1);
7477 				ZVAL_COPY_VALUE(&generator->value, value);
7478 				if (IS_CONST == IS_CONST) {
7479 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7480 						Z_ADDREF(generator->value);
7481 					}
7482 				}
7483 			} else {
7484 				zval *value_ptr = NULL;
7485 
7486 				/* If a function call result is yielded and the function did
7487 				 * not return by reference we throw a notice. */
7488 				do {
7489 					if (IS_CONST == IS_VAR) {
7490 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
7491 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
7492 						 && !Z_ISREF_P(value_ptr)) {
7493 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7494 							ZVAL_COPY(&generator->value, value_ptr);
7495 							break;
7496 						}
7497 					}
7498 					if (Z_ISREF_P(value_ptr)) {
7499 						Z_ADDREF_P(value_ptr);
7500 					} else {
7501 						ZVAL_MAKE_REF_EX(value_ptr, 2);
7502 					}
7503 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
7504 				} while (0);
7505 
7506 			}
7507 		} else {
7508 			zval *value = RT_CONSTANT(opline, opline->op1);
7509 
7510 			/* Consts, temporary variables and references need copying */
7511 			if (IS_CONST == IS_CONST) {
7512 				ZVAL_COPY_VALUE(&generator->value, value);
7513 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7514 					Z_ADDREF(generator->value);
7515 				}
7516 			} else if (IS_CONST == IS_TMP_VAR) {
7517 				ZVAL_COPY_VALUE(&generator->value, value);
7518             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
7519 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
7520 
7521 			} else {
7522 				ZVAL_COPY_VALUE(&generator->value, value);
7523 				if (IS_CONST == IS_CV) {
7524 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
7525 				}
7526 			}
7527 		}
7528 	} else {
7529 		/* If no value was specified yield null */
7530 		ZVAL_NULL(&generator->value);
7531 	}
7532 
7533 	/* Set the new yielded key */
7534 	if (IS_CONST != IS_UNUSED) {
7535 		zval *key = RT_CONSTANT(opline, opline->op2);
7536 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
7537 			key = Z_REFVAL_P(key);
7538 		}
7539 		ZVAL_COPY(&generator->key, key);
7540 
7541 		if (Z_TYPE(generator->key) == IS_LONG
7542 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
7543 		) {
7544 			generator->largest_used_integer_key = Z_LVAL(generator->key);
7545 		}
7546 	} else {
7547 		/* If no key was specified we use auto-increment keys */
7548 		generator->largest_used_integer_key++;
7549 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
7550 	}
7551 
7552 	if (RETURN_VALUE_USED(opline)) {
7553 		/* If the return value of yield is used set the send
7554 		 * target and initialize it to NULL */
7555 		generator->send_target = EX_VAR(opline->result.var);
7556 		ZVAL_NULL(generator->send_target);
7557 	} else {
7558 		generator->send_target = NULL;
7559 	}
7560 
7561 	/* We increment to the next op, so we are at the correct position when the
7562 	 * generator is resumed. */
7563 	ZEND_VM_INC_OPCODE();
7564 
7565 	/* The GOTO VM uses a local opline variable. We need to set the opline
7566 	 * variable in execute_data so we don't resume at an old position. */
7567 	SAVE_OPLINE();
7568 
7569 	ZEND_VM_RETURN();
7570 }
7571 
ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7572 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7573 {
7574 	USE_OPLINE
7575 	zval *op, *jump_zv;
7576 	HashTable *jumptable;
7577 
7578 	op = RT_CONSTANT(opline, opline->op1);
7579 
7580 	if (Z_TYPE_P(op) != IS_LONG) {
7581 		ZVAL_DEREF(op);
7582 		if (Z_TYPE_P(op) != IS_LONG) {
7583 			/* Wrong type, fall back to ZEND_CASE chain */
7584 			ZEND_VM_NEXT_OPCODE();
7585 		}
7586 	}
7587 
7588 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7589 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
7590 	if (jump_zv != NULL) {
7591 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
7592 		ZEND_VM_CONTINUE();
7593 	} else {
7594 		/* default */
7595 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7596 		ZEND_VM_CONTINUE();
7597 	}
7598 }
7599 
ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7600 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7601 {
7602 	USE_OPLINE
7603 	zval *op, *jump_zv;
7604 	HashTable *jumptable;
7605 
7606 	op = RT_CONSTANT(opline, opline->op1);
7607 
7608 	if (Z_TYPE_P(op) != IS_STRING) {
7609 		if (IS_CONST == IS_CONST) {
7610 			/* Wrong type, fall back to ZEND_CASE chain */
7611 			ZEND_VM_NEXT_OPCODE();
7612 		} else {
7613 			ZVAL_DEREF(op);
7614 			if (Z_TYPE_P(op) != IS_STRING) {
7615 				/* Wrong type, fall back to ZEND_CASE chain */
7616 				ZEND_VM_NEXT_OPCODE();
7617 			}
7618 		}
7619 	}
7620 
7621 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7622 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
7623 	if (jump_zv != NULL) {
7624 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
7625 		ZEND_VM_CONTINUE();
7626 	} else {
7627 		/* default */
7628 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7629 		ZEND_VM_CONTINUE();
7630 	}
7631 }
7632 
ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7633 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7634 {
7635 	USE_OPLINE
7636 	zval *op, *jump_zv;
7637 	HashTable *jumptable;
7638 
7639 	op = RT_CONSTANT(opline, opline->op1);
7640 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7641 
7642 match_try_again:
7643 	if (Z_TYPE_P(op) == IS_LONG) {
7644 		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
7645 	} else if (Z_TYPE_P(op) == IS_STRING) {
7646 		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
7647 	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
7648 		op = Z_REFVAL_P(op);
7649 		goto match_try_again;
7650 	} else {
7651 		if (UNEXPECTED((IS_CONST & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
7652 			SAVE_OPLINE();
7653 			op = ZVAL_UNDEFINED_OP1();
7654 			if (UNEXPECTED(EG(exception))) {
7655 				HANDLE_EXCEPTION();
7656 			}
7657 			goto match_try_again;
7658 		}
7659 
7660 		goto default_branch;
7661 	}
7662 
7663 	if (jump_zv != NULL) {
7664 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
7665 		ZEND_VM_CONTINUE();
7666 	} else {
7667 default_branch:
7668 		/* default */
7669 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7670 		ZEND_VM_CONTINUE();
7671 	}
7672 }
7673 
ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7674 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7675 {
7676 	USE_OPLINE
7677 	zval *op1;
7678 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7679 	zval *result;
7680 
7681 	op1 = RT_CONSTANT(opline, opline->op1);
7682 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
7683 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CONST == IS_CONST);
7684 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
7685 			zval_ptr_dtor_str(op1);
7686 		}
7687 		ZEND_VM_SMART_BRANCH(result, 0);
7688 	}
7689 
7690 	if (opline->extended_value) {
7691 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
7692 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
7693 			ZEND_VM_SMART_BRANCH(result, 0);
7694 		}
7695 		SAVE_OPLINE();
7696 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
7697 			op1 = Z_REFVAL_P(op1);
7698 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
7699 				result = zend_hash_find(ht, Z_STR_P(op1));
7700 
7701 				ZEND_VM_SMART_BRANCH(result, 0);
7702 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
7703 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
7704 
7705 				ZEND_VM_SMART_BRANCH(result, 0);
7706 			}
7707 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
7708 			ZVAL_UNDEFINED_OP1();
7709 		}
7710 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
7711 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
7712 			SAVE_OPLINE();
7713 			ZVAL_UNDEFINED_OP1();
7714 			if (UNEXPECTED(EG(exception) != NULL)) {
7715 				HANDLE_EXCEPTION();
7716 			}
7717 		}
7718 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
7719 		ZEND_VM_SMART_BRANCH(result, 0);
7720 	} else {
7721 		zend_string *key;
7722 		zval key_tmp;
7723 
7724 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
7725 			op1 = Z_REFVAL_P(op1);
7726 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
7727 				result = zend_hash_find(ht, Z_STR_P(op1));
7728 
7729 				ZEND_VM_SMART_BRANCH(result, 0);
7730 			}
7731 		}
7732 
7733 		SAVE_OPLINE();
7734 		ZEND_HASH_FOREACH_STR_KEY(ht, key) {
7735 			ZVAL_STR(&key_tmp, key);
7736 			if (zend_compare(op1, &key_tmp) == 0) {
7737 
7738 				ZEND_VM_SMART_BRANCH(1, 1);
7739 			}
7740 		} ZEND_HASH_FOREACH_END();
7741 	}
7742 
7743 	ZEND_VM_SMART_BRANCH(0, 1);
7744 }
7745 
ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7746 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7747 {
7748 	USE_OPLINE
7749 	zval *op1, *op2, *result;
7750 	double d1, d2;
7751 
7752 	op1 = RT_CONSTANT(opline, opline->op1);
7753 	op2 = EX_VAR(opline->op2.var);
7754 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7755 		/* pass */
7756 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7757 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7758 			result = EX_VAR(opline->result.var);
7759 			fast_long_add_function(result, op1, op2);
7760 			ZEND_VM_NEXT_OPCODE();
7761 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7762 			d1 = (double)Z_LVAL_P(op1);
7763 			d2 = Z_DVAL_P(op2);
7764 			goto add_double;
7765 		}
7766 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7767 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7768 			d1 = Z_DVAL_P(op1);
7769 			d2 = Z_DVAL_P(op2);
7770 add_double:
7771 			result = EX_VAR(opline->result.var);
7772 			ZVAL_DOUBLE(result, d1 + d2);
7773 			ZEND_VM_NEXT_OPCODE();
7774 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7775 			d1 = Z_DVAL_P(op1);
7776 			d2 = (double)Z_LVAL_P(op2);
7777 			goto add_double;
7778 		}
7779 	}
7780 
7781 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7782 }
7783 
ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7784 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7785 {
7786 	USE_OPLINE
7787 	zval *op1, *op2, *result;
7788 	double d1, d2;
7789 
7790 	op1 = RT_CONSTANT(opline, opline->op1);
7791 	op2 = EX_VAR(opline->op2.var);
7792 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7793 		/* pass */
7794 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7795 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7796 			result = EX_VAR(opline->result.var);
7797 			fast_long_sub_function(result, op1, op2);
7798 			ZEND_VM_NEXT_OPCODE();
7799 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7800 			d1 = (double)Z_LVAL_P(op1);
7801 			d2 = Z_DVAL_P(op2);
7802 			goto sub_double;
7803 		}
7804 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7805 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7806 			d1 = Z_DVAL_P(op1);
7807 			d2 = Z_DVAL_P(op2);
7808 sub_double:
7809 			result = EX_VAR(opline->result.var);
7810 			ZVAL_DOUBLE(result, d1 - d2);
7811 			ZEND_VM_NEXT_OPCODE();
7812 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7813 			d1 = Z_DVAL_P(op1);
7814 			d2 = (double)Z_LVAL_P(op2);
7815 			goto sub_double;
7816 		}
7817 	}
7818 
7819 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7820 }
7821 
ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7822 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7823 {
7824 	USE_OPLINE
7825 	zval *op1, *op2, *result;
7826 
7827 	op1 = RT_CONSTANT(opline, opline->op1);
7828 	op2 = EX_VAR(opline->op2.var);
7829 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7830 		/* pass */
7831 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7832 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7833 			result = EX_VAR(opline->result.var);
7834 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
7835 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7836 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
7837 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
7838 				ZVAL_LONG(result, 0);
7839 			} else {
7840 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
7841 			}
7842 			ZEND_VM_NEXT_OPCODE();
7843 		}
7844 	}
7845 
7846 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7847 }
7848 
ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7849 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7850 {
7851 	USE_OPLINE
7852 	zval *op1, *op2;
7853 
7854 	op1 = RT_CONSTANT(opline, opline->op1);
7855 	op2 = EX_VAR(opline->op2.var);
7856 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7857 		/* pass */
7858 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
7859 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
7860 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
7861 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
7862 		ZVAL_LONG(EX_VAR(opline->result.var),
7863 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
7864 		ZEND_VM_NEXT_OPCODE();
7865 	}
7866 
7867 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7868 }
7869 
ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7871 {
7872 	USE_OPLINE
7873 	zval *op1, *op2;
7874 
7875 	op1 = RT_CONSTANT(opline, opline->op1);
7876 	op2 = EX_VAR(opline->op2.var);
7877 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7878 		/* pass */
7879 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
7880 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
7881 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
7882 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
7883 		ZEND_VM_NEXT_OPCODE();
7884 	}
7885 
7886 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7887 }
7888 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7889 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7890 {
7891 	USE_OPLINE
7892 	zval *op1, *op2;
7893 	double d1, d2;
7894 
7895 	op1 = RT_CONSTANT(opline, opline->op1);
7896 	op2 = EX_VAR(opline->op2.var);
7897 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7898 		/* pass */
7899 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7900 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7901 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
7902 is_smaller_true:
7903 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
7904 			} else {
7905 is_smaller_false:
7906 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
7907 			}
7908 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7909 			d1 = (double)Z_LVAL_P(op1);
7910 			d2 = Z_DVAL_P(op2);
7911 			goto is_smaller_double;
7912 		}
7913 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7914 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7915 			d1 = Z_DVAL_P(op1);
7916 			d2 = Z_DVAL_P(op2);
7917 is_smaller_double:
7918 			if (d1 < d2) {
7919 				goto is_smaller_true;
7920 			} else {
7921 				goto is_smaller_false;
7922 			}
7923 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7924 			d1 = Z_DVAL_P(op1);
7925 			d2 = (double)Z_LVAL_P(op2);
7926 			goto is_smaller_double;
7927 		}
7928 	}
7929 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7930 }
7931 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7932 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7933 {
7934 	USE_OPLINE
7935 	zval *op1, *op2;
7936 	double d1, d2;
7937 
7938 	op1 = RT_CONSTANT(opline, opline->op1);
7939 	op2 = EX_VAR(opline->op2.var);
7940 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7941 		/* pass */
7942 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7943 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7944 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
7945 is_smaller_true:
7946 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
7947 			} else {
7948 is_smaller_false:
7949 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
7950 			}
7951 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7952 			d1 = (double)Z_LVAL_P(op1);
7953 			d2 = Z_DVAL_P(op2);
7954 			goto is_smaller_double;
7955 		}
7956 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7957 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7958 			d1 = Z_DVAL_P(op1);
7959 			d2 = Z_DVAL_P(op2);
7960 is_smaller_double:
7961 			if (d1 < d2) {
7962 				goto is_smaller_true;
7963 			} else {
7964 				goto is_smaller_false;
7965 			}
7966 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7967 			d1 = Z_DVAL_P(op1);
7968 			d2 = (double)Z_LVAL_P(op2);
7969 			goto is_smaller_double;
7970 		}
7971 	}
7972 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7973 }
7974 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7975 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7976 {
7977 	USE_OPLINE
7978 	zval *op1, *op2;
7979 	double d1, d2;
7980 
7981 	op1 = RT_CONSTANT(opline, opline->op1);
7982 	op2 = EX_VAR(opline->op2.var);
7983 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7984 		/* pass */
7985 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7986 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7987 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
7988 is_smaller_true:
7989 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
7990 			} else {
7991 is_smaller_false:
7992 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
7993 			}
7994 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7995 			d1 = (double)Z_LVAL_P(op1);
7996 			d2 = Z_DVAL_P(op2);
7997 			goto is_smaller_double;
7998 		}
7999 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8000 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8001 			d1 = Z_DVAL_P(op1);
8002 			d2 = Z_DVAL_P(op2);
8003 is_smaller_double:
8004 			if (d1 < d2) {
8005 				goto is_smaller_true;
8006 			} else {
8007 				goto is_smaller_false;
8008 			}
8009 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8010 			d1 = Z_DVAL_P(op1);
8011 			d2 = (double)Z_LVAL_P(op2);
8012 			goto is_smaller_double;
8013 		}
8014 	}
8015 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8016 }
8017 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8018 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8019 {
8020 	USE_OPLINE
8021 	zval *op1, *op2;
8022 	double d1, d2;
8023 
8024 	op1 = RT_CONSTANT(opline, opline->op1);
8025 	op2 = EX_VAR(opline->op2.var);
8026 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8027 		/* pass */
8028 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8029 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8030 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
8031 is_smaller_or_equal_true:
8032 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
8033 				ZVAL_TRUE(EX_VAR(opline->result.var));
8034 				ZEND_VM_NEXT_OPCODE();
8035 			} else {
8036 is_smaller_or_equal_false:
8037 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
8038 				ZVAL_FALSE(EX_VAR(opline->result.var));
8039 				ZEND_VM_NEXT_OPCODE();
8040 			}
8041 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8042 			d1 = (double)Z_LVAL_P(op1);
8043 			d2 = Z_DVAL_P(op2);
8044 			goto is_smaller_or_equal_double;
8045 		}
8046 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8047 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8048 			d1 = Z_DVAL_P(op1);
8049 			d2 = Z_DVAL_P(op2);
8050 is_smaller_or_equal_double:
8051 			if (d1 <= d2) {
8052 				goto is_smaller_or_equal_true;
8053 			} else {
8054 				goto is_smaller_or_equal_false;
8055 			}
8056 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8057 			d1 = Z_DVAL_P(op1);
8058 			d2 = (double)Z_LVAL_P(op2);
8059 			goto is_smaller_or_equal_double;
8060 		}
8061 	}
8062 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8063 }
8064 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8065 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8066 {
8067 	USE_OPLINE
8068 	zval *op1, *op2;
8069 	double d1, d2;
8070 
8071 	op1 = RT_CONSTANT(opline, opline->op1);
8072 	op2 = EX_VAR(opline->op2.var);
8073 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8074 		/* pass */
8075 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8076 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8077 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
8078 is_smaller_or_equal_true:
8079 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
8080 				ZVAL_TRUE(EX_VAR(opline->result.var));
8081 				ZEND_VM_NEXT_OPCODE();
8082 			} else {
8083 is_smaller_or_equal_false:
8084 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
8085 				ZVAL_FALSE(EX_VAR(opline->result.var));
8086 				ZEND_VM_NEXT_OPCODE();
8087 			}
8088 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8089 			d1 = (double)Z_LVAL_P(op1);
8090 			d2 = Z_DVAL_P(op2);
8091 			goto is_smaller_or_equal_double;
8092 		}
8093 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8094 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8095 			d1 = Z_DVAL_P(op1);
8096 			d2 = Z_DVAL_P(op2);
8097 is_smaller_or_equal_double:
8098 			if (d1 <= d2) {
8099 				goto is_smaller_or_equal_true;
8100 			} else {
8101 				goto is_smaller_or_equal_false;
8102 			}
8103 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8104 			d1 = Z_DVAL_P(op1);
8105 			d2 = (double)Z_LVAL_P(op2);
8106 			goto is_smaller_or_equal_double;
8107 		}
8108 	}
8109 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8110 }
8111 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8112 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8113 {
8114 	USE_OPLINE
8115 	zval *op1, *op2;
8116 	double d1, d2;
8117 
8118 	op1 = RT_CONSTANT(opline, opline->op1);
8119 	op2 = EX_VAR(opline->op2.var);
8120 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8121 		/* pass */
8122 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8123 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8124 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
8125 is_smaller_or_equal_true:
8126 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
8127 				ZVAL_TRUE(EX_VAR(opline->result.var));
8128 				ZEND_VM_NEXT_OPCODE();
8129 			} else {
8130 is_smaller_or_equal_false:
8131 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
8132 				ZVAL_FALSE(EX_VAR(opline->result.var));
8133 				ZEND_VM_NEXT_OPCODE();
8134 			}
8135 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8136 			d1 = (double)Z_LVAL_P(op1);
8137 			d2 = Z_DVAL_P(op2);
8138 			goto is_smaller_or_equal_double;
8139 		}
8140 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8141 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8142 			d1 = Z_DVAL_P(op1);
8143 			d2 = Z_DVAL_P(op2);
8144 is_smaller_or_equal_double:
8145 			if (d1 <= d2) {
8146 				goto is_smaller_or_equal_true;
8147 			} else {
8148 				goto is_smaller_or_equal_false;
8149 			}
8150 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8151 			d1 = Z_DVAL_P(op1);
8152 			d2 = (double)Z_LVAL_P(op2);
8153 			goto is_smaller_or_equal_double;
8154 		}
8155 	}
8156 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8157 }
8158 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8159 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8160 {
8161 	USE_OPLINE
8162 	zval *op1, *op2, *result;
8163 
8164 	op1 = RT_CONSTANT(opline, opline->op1);
8165 	op2 = EX_VAR(opline->op2.var);
8166 	result = EX_VAR(opline->result.var);
8167 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
8168 	ZEND_VM_NEXT_OPCODE();
8169 }
8170 
ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8171 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8172 {
8173 	USE_OPLINE
8174 	zval *op1, *op2, *result;
8175 
8176 	op1 = RT_CONSTANT(opline, opline->op1);
8177 	op2 = EX_VAR(opline->op2.var);
8178 	result = EX_VAR(opline->result.var);
8179 	fast_long_sub_function(result, op1, op2);
8180 	ZEND_VM_NEXT_OPCODE();
8181 }
8182 
ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8183 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8184 {
8185 	USE_OPLINE
8186 	zval *op1, *op2, *result;
8187 
8188 	op1 = RT_CONSTANT(opline, opline->op1);
8189 	op2 = EX_VAR(opline->op2.var);
8190 	result = EX_VAR(opline->result.var);
8191 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
8192 	ZEND_VM_NEXT_OPCODE();
8193 }
8194 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8195 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8196 {
8197 	USE_OPLINE
8198 	zval *op1, *op2;
8199 	bool result;
8200 
8201 	op1 = RT_CONSTANT(opline, opline->op1);
8202 	op2 = EX_VAR(opline->op2.var);
8203 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8204 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8205 }
8206 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8207 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8208 {
8209 	USE_OPLINE
8210 	zval *op1, *op2;
8211 	bool result;
8212 
8213 	op1 = RT_CONSTANT(opline, opline->op1);
8214 	op2 = EX_VAR(opline->op2.var);
8215 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8216 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8217 }
8218 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8219 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8220 {
8221 	USE_OPLINE
8222 	zval *op1, *op2;
8223 	bool result;
8224 
8225 	op1 = RT_CONSTANT(opline, opline->op1);
8226 	op2 = EX_VAR(opline->op2.var);
8227 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8228 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8229 }
8230 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8231 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8232 {
8233 	USE_OPLINE
8234 	zval *op1, *op2;
8235 	bool result;
8236 
8237 	op1 = RT_CONSTANT(opline, opline->op1);
8238 	op2 = EX_VAR(opline->op2.var);
8239 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8240 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8241 }
8242 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8243 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8244 {
8245 	USE_OPLINE
8246 	zval *op1, *op2;
8247 	bool result;
8248 
8249 	op1 = RT_CONSTANT(opline, opline->op1);
8250 	op2 = EX_VAR(opline->op2.var);
8251 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8252 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8253 }
8254 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8255 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8256 {
8257 	USE_OPLINE
8258 	zval *op1, *op2;
8259 	bool result;
8260 
8261 	op1 = RT_CONSTANT(opline, opline->op1);
8262 	op2 = EX_VAR(opline->op2.var);
8263 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8264 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8265 }
8266 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8267 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8268 {
8269 	USE_OPLINE
8270 	zval *op1, *op2;
8271 	bool result;
8272 
8273 	op1 = RT_CONSTANT(opline, opline->op1);
8274 	op2 = EX_VAR(opline->op2.var);
8275 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8276 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8277 }
8278 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8279 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)
8280 {
8281 	USE_OPLINE
8282 	zval *op1, *op2;
8283 	bool result;
8284 
8285 	op1 = RT_CONSTANT(opline, opline->op1);
8286 	op2 = EX_VAR(opline->op2.var);
8287 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8288 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8289 }
8290 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8291 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)
8292 {
8293 	USE_OPLINE
8294 	zval *op1, *op2;
8295 	bool result;
8296 
8297 	op1 = RT_CONSTANT(opline, opline->op1);
8298 	op2 = EX_VAR(opline->op2.var);
8299 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8300 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8301 }
8302 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8303 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8304 {
8305 	USE_OPLINE
8306 	zval *op1, *op2;
8307 	bool result;
8308 
8309 	op1 = RT_CONSTANT(opline, opline->op1);
8310 	op2 = EX_VAR(opline->op2.var);
8311 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8312 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8313 }
8314 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8315 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)
8316 {
8317 	USE_OPLINE
8318 	zval *op1, *op2;
8319 	bool result;
8320 
8321 	op1 = RT_CONSTANT(opline, opline->op1);
8322 	op2 = EX_VAR(opline->op2.var);
8323 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8324 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8325 }
8326 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8327 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)
8328 {
8329 	USE_OPLINE
8330 	zval *op1, *op2;
8331 	bool result;
8332 
8333 	op1 = RT_CONSTANT(opline, opline->op1);
8334 	op2 = EX_VAR(opline->op2.var);
8335 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8336 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8337 }
8338 
ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8339 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8340 {
8341 	USE_OPLINE
8342 	zval *container, *dim, *value;
8343 	zend_long offset;
8344 	HashTable *ht;
8345 
8346 	container = RT_CONSTANT(opline, opline->op1);
8347 	dim = EX_VAR(opline->op2.var);
8348 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8349 fetch_dim_r_index_array:
8350 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
8351 			offset = Z_LVAL_P(dim);
8352 		} else {
8353 			SAVE_OPLINE();
8354 			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
8355 
8356 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8357 		}
8358 		ht = Z_ARRVAL_P(container);
8359 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
8360 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
8361 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8362 			SAVE_OPLINE();
8363 
8364 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8365 		} else {
8366 			ZEND_VM_NEXT_OPCODE();
8367 		}
8368 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
8369 		container = Z_REFVAL_P(container);
8370 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8371 			goto fetch_dim_r_index_array;
8372 		} else {
8373 			goto fetch_dim_r_index_slow;
8374 		}
8375 	} else {
8376 fetch_dim_r_index_slow:
8377 		SAVE_OPLINE();
8378 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
8379 			dim++;
8380 		}
8381 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
8382 
8383 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8384 	}
8385 
8386 fetch_dim_r_index_undef:
8387 	ZVAL_NULL(EX_VAR(opline->result.var));
8388 	SAVE_OPLINE();
8389 	zend_undefined_offset(offset);
8390 
8391 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8392 }
8393 
ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8395 {
8396 	USE_OPLINE
8397 	zval *op1, *op2;
8398 
8399 	SAVE_OPLINE();
8400 	op1 = RT_CONSTANT(opline, opline->op1);
8401 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8402 	div_function(EX_VAR(opline->result.var), op1, op2);
8403 
8404 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8405 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8406 }
8407 
ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8408 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8409 {
8410 	USE_OPLINE
8411 	zval *op1, *op2;
8412 
8413 	SAVE_OPLINE();
8414 	op1 = RT_CONSTANT(opline, opline->op1);
8415 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8416 	pow_function(EX_VAR(opline->result.var), op1, op2);
8417 
8418 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8419 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8420 }
8421 
ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8423 {
8424 	USE_OPLINE
8425 	zval *op1, *op2;
8426 
8427 	op1 = RT_CONSTANT(opline, opline->op1);
8428 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8429 
8430 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
8431 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
8432 		zend_string *op1_str = Z_STR_P(op1);
8433 		zend_string *op2_str = Z_STR_P(op2);
8434 		zend_string *str;
8435 
8436 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
8437 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
8438 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
8439 			} else {
8440 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
8441 			}
8442 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8443 				zend_string_release_ex(op1_str, 0);
8444 			}
8445 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
8446 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
8447 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
8448 			} else {
8449 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
8450 			}
8451 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8452 				zend_string_release_ex(op2_str, 0);
8453 			}
8454 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
8455 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
8456 		    size_t len = ZSTR_LEN(op1_str);
8457 
8458 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
8459 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
8460 			}
8461 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
8462 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8463 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8464 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8465 				zend_string_release_ex(op2_str, 0);
8466 			}
8467 		} else {
8468 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
8469 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
8470 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8471 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8472 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8473 				zend_string_release_ex(op1_str, 0);
8474 			}
8475 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8476 				zend_string_release_ex(op2_str, 0);
8477 			}
8478 		}
8479 		ZEND_VM_NEXT_OPCODE();
8480 	} else {
8481 		SAVE_OPLINE();
8482 
8483 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8484 			op1 = ZVAL_UNDEFINED_OP1();
8485 		}
8486 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8487 			op2 = ZVAL_UNDEFINED_OP2();
8488 		}
8489 		concat_function(EX_VAR(opline->result.var), op1, op2);
8490 
8491 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8492 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8493 	}
8494 }
8495 
ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8496 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8497 {
8498 	USE_OPLINE
8499 	zval *op1, *op2;
8500 
8501 	SAVE_OPLINE();
8502 	op1 = RT_CONSTANT(opline, opline->op1);
8503 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8504 	compare_function(EX_VAR(opline->result.var), op1, op2);
8505 
8506 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8507 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8508 }
8509 
ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8510 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8511 {
8512 	USE_OPLINE
8513 	zval *container, *dim, *value;
8514 
8515 	SAVE_OPLINE();
8516 	container = RT_CONSTANT(opline, opline->op1);
8517 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8518 	if (IS_CONST != IS_CONST) {
8519 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8520 fetch_dim_r_array:
8521 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
8522 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
8523 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
8524 			container = Z_REFVAL_P(container);
8525 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8526 				goto fetch_dim_r_array;
8527 			} else {
8528 				goto fetch_dim_r_slow;
8529 			}
8530 		} else {
8531 fetch_dim_r_slow:
8532 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
8533 				dim++;
8534 			}
8535 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
8536 		}
8537 	} else {
8538 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
8539 	}
8540 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8541 
8542 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8543 }
8544 
ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8545 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8546 {
8547 	USE_OPLINE
8548 	zval *container;
8549 
8550 	SAVE_OPLINE();
8551 	container = RT_CONSTANT(opline, opline->op1);
8552 	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);
8553 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8554 
8555 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8556 }
8557 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8558 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8559 {
8560 #if 0
8561 	USE_OPLINE
8562 #endif
8563 
8564 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
8565         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
8566 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8567         }
8568 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8569 	} else {
8570 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
8571 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8572 		}
8573 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8574 	}
8575 }
8576 
ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8577 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8578 {
8579 	USE_OPLINE
8580 	zval *container;
8581 	void **cache_slot = NULL;
8582 
8583 	SAVE_OPLINE();
8584 	container = RT_CONSTANT(opline, opline->op1);
8585 
8586 	if (IS_CONST == IS_CONST ||
8587 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
8588 	    do {
8589 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
8590 				container = Z_REFVAL_P(container);
8591 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
8592 					break;
8593 				}
8594 			}
8595 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
8596 				ZVAL_UNDEFINED_OP1();
8597 			}
8598 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
8599 			ZVAL_NULL(EX_VAR(opline->result.var));
8600 			goto fetch_obj_r_finish;
8601 		} while (0);
8602 	}
8603 
8604 	/* here we are sure we are dealing with an object */
8605 	do {
8606 		zend_object *zobj = Z_OBJ_P(container);
8607 		zend_string *name, *tmp_name;
8608 		zval *retval;
8609 
8610 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8611 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
8612 
8613 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
8614 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
8615 
8616 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
8617 					retval = OBJ_PROP(zobj, prop_offset);
8618 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
8619 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8620 							goto fetch_obj_r_copy;
8621 						} else {
8622 fetch_obj_r_fast_copy:
8623 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8624 							ZEND_VM_NEXT_OPCODE();
8625 						}
8626 					}
8627 				} else if (EXPECTED(zobj->properties != NULL)) {
8628 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
8629 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
8630 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
8631 
8632 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
8633 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
8634 
8635 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
8636 						        (EXPECTED(p->key == name) ||
8637 						         (EXPECTED(p->h == ZSTR_H(name)) &&
8638 						          EXPECTED(p->key != NULL) &&
8639 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
8640 								retval = &p->val;
8641 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8642 									goto fetch_obj_r_copy;
8643 								} else {
8644 									goto fetch_obj_r_fast_copy;
8645 								}
8646 							}
8647 						}
8648 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
8649 					}
8650 					retval = zend_hash_find_known_hash(zobj->properties, name);
8651 					if (EXPECTED(retval)) {
8652 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
8653 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
8654 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8655 							goto fetch_obj_r_copy;
8656 						} else {
8657 							goto fetch_obj_r_fast_copy;
8658 						}
8659 					}
8660 				}
8661 			}
8662 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
8663 		} else {
8664 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
8665 			if (UNEXPECTED(!name)) {
8666 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8667 				break;
8668 			}
8669 		}
8670 
8671 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
8672 #if ZEND_DEBUG
8673 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
8674 			zend_verify_internal_read_property_type(zobj, name, retval);
8675 		}
8676 #endif
8677 
8678 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8679 			zend_tmp_string_release(tmp_name);
8680 		}
8681 
8682 		if (retval != EX_VAR(opline->result.var)) {
8683 fetch_obj_r_copy:
8684 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8685 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
8686 			zend_unwrap_reference(retval);
8687 		}
8688 	} while (0);
8689 
8690 fetch_obj_r_finish:
8691 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8692 
8693 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8694 }
8695 
ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8696 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8697 {
8698 	USE_OPLINE
8699 	zval *container;
8700 	void **cache_slot = NULL;
8701 
8702 	SAVE_OPLINE();
8703 	container = RT_CONSTANT(opline, opline->op1);
8704 
8705 	if (IS_CONST == IS_CONST ||
8706 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
8707 		do {
8708 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
8709 				container = Z_REFVAL_P(container);
8710 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
8711 					break;
8712 				}
8713 			}
8714 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
8715 				ZVAL_UNDEFINED_OP2();
8716 			}
8717 			ZVAL_NULL(EX_VAR(opline->result.var));
8718 			goto fetch_obj_is_finish;
8719 		} while (0);
8720 	}
8721 
8722 	/* here we are sure we are dealing with an object */
8723 	do {
8724 		zend_object *zobj = Z_OBJ_P(container);
8725 		zend_string *name, *tmp_name;
8726 		zval *retval;
8727 
8728 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8729 			cache_slot = CACHE_ADDR(opline->extended_value);
8730 
8731 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
8732 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
8733 
8734 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
8735 					retval = OBJ_PROP(zobj, prop_offset);
8736 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
8737 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8738 							goto fetch_obj_is_copy;
8739 						} else {
8740 fetch_obj_is_fast_copy:
8741 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8742 							ZEND_VM_NEXT_OPCODE();
8743 						}
8744 					}
8745 				} else if (EXPECTED(zobj->properties != NULL)) {
8746 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
8747 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
8748 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
8749 
8750 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
8751 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
8752 
8753 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
8754 						        (EXPECTED(p->key == name) ||
8755 						         (EXPECTED(p->h == ZSTR_H(name)) &&
8756 						          EXPECTED(p->key != NULL) &&
8757 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
8758 								retval = &p->val;
8759 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8760 									goto fetch_obj_is_copy;
8761 								} else {
8762 									goto fetch_obj_is_fast_copy;
8763 								}
8764 							}
8765 						}
8766 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
8767 					}
8768 					retval = zend_hash_find_known_hash(zobj->properties, name);
8769 					if (EXPECTED(retval)) {
8770 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
8771 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
8772 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8773 							goto fetch_obj_is_copy;
8774 						} else {
8775 							goto fetch_obj_is_fast_copy;
8776 						}
8777 					}
8778 				}
8779 			}
8780 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
8781 		} else {
8782 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
8783 			if (UNEXPECTED(!name)) {
8784 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8785 				break;
8786 			}
8787 		}
8788 
8789 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
8790 
8791 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8792 			zend_tmp_string_release(tmp_name);
8793 		}
8794 
8795 		if (retval != EX_VAR(opline->result.var)) {
8796 fetch_obj_is_copy:
8797 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8798 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
8799 			zend_unwrap_reference(retval);
8800 		}
8801 	} while (0);
8802 
8803 fetch_obj_is_finish:
8804 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8805 
8806 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8807 }
8808 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8809 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8810 {
8811 #if 0
8812 	USE_OPLINE
8813 #endif
8814 
8815 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
8816 		/* Behave like FETCH_OBJ_W */
8817 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
8818 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8819 		}
8820 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8821 	} else {
8822 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8823 	}
8824 }
8825 
ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8826 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8827 {
8828 	USE_OPLINE
8829 	zval *container;
8830 
8831 	SAVE_OPLINE();
8832 	container = RT_CONSTANT(opline, opline->op1);
8833 	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);
8834 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8835 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8836 }
8837 
ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8838 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8839 {
8840 	USE_OPLINE
8841 	zval *op1, *op2;
8842 	zend_string *op1_str, *op2_str, *str;
8843 
8844 
8845 	op1 = RT_CONSTANT(opline, opline->op1);
8846 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8847 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
8848 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
8849 		zend_string *op1_str = Z_STR_P(op1);
8850 		zend_string *op2_str = Z_STR_P(op2);
8851 		zend_string *str;
8852 
8853 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
8854 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
8855 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
8856 			} else {
8857 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
8858 			}
8859 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8860 				zend_string_release_ex(op1_str, 0);
8861 			}
8862 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
8863 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
8864 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
8865 			} else {
8866 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
8867 			}
8868 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8869 				zend_string_release_ex(op2_str, 0);
8870 			}
8871 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
8872 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
8873 		    size_t len = ZSTR_LEN(op1_str);
8874 
8875 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
8876 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8877 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8878 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8879 				zend_string_release_ex(op2_str, 0);
8880 			}
8881 		} else {
8882 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
8883 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
8884 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8885 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8886 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8887 				zend_string_release_ex(op1_str, 0);
8888 			}
8889 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8890 				zend_string_release_ex(op2_str, 0);
8891 			}
8892 		}
8893 		ZEND_VM_NEXT_OPCODE();
8894 	}
8895 
8896 	SAVE_OPLINE();
8897 	if (IS_CONST == IS_CONST) {
8898 		op1_str = Z_STR_P(op1);
8899 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
8900 		op1_str = zend_string_copy(Z_STR_P(op1));
8901 	} else {
8902 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8903 			ZVAL_UNDEFINED_OP1();
8904 		}
8905 		op1_str = zval_get_string_func(op1);
8906 	}
8907 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8908 		op2_str = Z_STR_P(op2);
8909 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
8910 		op2_str = zend_string_copy(Z_STR_P(op2));
8911 	} else {
8912 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8913 			ZVAL_UNDEFINED_OP2();
8914 		}
8915 		op2_str = zval_get_string_func(op2);
8916 	}
8917 	do {
8918 		if (IS_CONST != IS_CONST) {
8919 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
8920 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8921 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
8922 						GC_ADDREF(op2_str);
8923 					}
8924 				}
8925 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
8926 				zend_string_release_ex(op1_str, 0);
8927 				break;
8928 			}
8929 		}
8930 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8931 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
8932 				if (IS_CONST == IS_CONST) {
8933 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
8934 						GC_ADDREF(op1_str);
8935 					}
8936 				}
8937 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
8938 				zend_string_release_ex(op2_str, 0);
8939 				break;
8940 			}
8941 		}
8942 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
8943 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
8944 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8945 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8946 		if (IS_CONST != IS_CONST) {
8947 			zend_string_release_ex(op1_str, 0);
8948 		}
8949 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8950 			zend_string_release_ex(op2_str, 0);
8951 		}
8952 	} while (0);
8953 
8954 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8955 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8956 }
8957 
ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8958 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8959 {
8960 	USE_OPLINE
8961 	zval *function_name;
8962 	zval *object;
8963 	zend_function *fbc;
8964 	zend_class_entry *called_scope;
8965 	zend_object *obj;
8966 	zend_execute_data *call;
8967 	uint32_t call_info;
8968 
8969 	SAVE_OPLINE();
8970 
8971 	object = RT_CONSTANT(opline, opline->op1);
8972 
8973 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8974 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8975 	}
8976 
8977 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
8978 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
8979 		do {
8980 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
8981 				function_name = Z_REFVAL_P(function_name);
8982 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
8983 					break;
8984 				}
8985 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
8986 				ZVAL_UNDEFINED_OP2();
8987 				if (UNEXPECTED(EG(exception) != NULL)) {
8988 
8989 					HANDLE_EXCEPTION();
8990 				}
8991 			}
8992 			zend_throw_error(NULL, "Method name must be a string");
8993 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8994 
8995 			HANDLE_EXCEPTION();
8996 		} while (0);
8997 	}
8998 
8999 	if (IS_CONST == IS_UNUSED) {
9000 		obj = Z_OBJ_P(object);
9001 	} else {
9002 		do {
9003 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
9004 				obj = Z_OBJ_P(object);
9005 			} else {
9006 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
9007 					zend_reference *ref = Z_REF_P(object);
9008 
9009 					object = &ref->val;
9010 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
9011 						obj = Z_OBJ_P(object);
9012 						if (IS_CONST & IS_VAR) {
9013 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
9014 								efree_size(ref, sizeof(zend_reference));
9015 							} else {
9016 								Z_ADDREF_P(object);
9017 							}
9018 						}
9019 						break;
9020 					}
9021 				}
9022 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
9023 					object = ZVAL_UNDEFINED_OP1();
9024 					if (UNEXPECTED(EG(exception) != NULL)) {
9025 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9026 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9027 						}
9028 						HANDLE_EXCEPTION();
9029 					}
9030 				}
9031 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9032 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9033 				}
9034 				zend_invalid_method_call(object, function_name);
9035 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9036 
9037 				HANDLE_EXCEPTION();
9038 			}
9039 		} while (0);
9040 	}
9041 
9042 	called_scope = obj->ce;
9043 
9044 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
9045 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
9046 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
9047 	} else {
9048 	    zend_object *orig_obj = obj;
9049 
9050 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9051 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9052 		}
9053 
9054 		/* First, locate the function. */
9055 		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));
9056 		if (UNEXPECTED(fbc == NULL)) {
9057 			if (EXPECTED(!EG(exception))) {
9058 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
9059 			}
9060 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9061 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
9062 				zend_objects_store_del(orig_obj);
9063 			}
9064 			HANDLE_EXCEPTION();
9065 		}
9066 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
9067 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
9068 		    EXPECTED(obj == orig_obj)) {
9069 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
9070 		}
9071 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
9072 			GC_ADDREF(obj); /* For $this pointer */
9073 			if (GC_DELREF(orig_obj) == 0) {
9074 				zend_objects_store_del(orig_obj);
9075 			}
9076 		}
9077 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9078 			init_func_run_time_cache(&fbc->op_array);
9079 		}
9080 	}
9081 
9082 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9083 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9084 	}
9085 
9086 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
9087 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
9088 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
9089 			zend_objects_store_del(obj);
9090 			if (UNEXPECTED(EG(exception))) {
9091 				HANDLE_EXCEPTION();
9092 			}
9093 		}
9094 		/* call static method */
9095 		obj = (zend_object*)called_scope;
9096 		call_info = ZEND_CALL_NESTED_FUNCTION;
9097 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
9098 		if (IS_CONST == IS_CV) {
9099 			GC_ADDREF(obj); /* For $this pointer */
9100 		}
9101 		/* CV may be changed indirectly (e.g. when it's a reference) */
9102 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
9103 	}
9104 
9105 	call = zend_vm_stack_push_call_frame(call_info,
9106 		fbc, opline->extended_value, obj);
9107 	call->prev_execute_data = EX(call);
9108 	EX(call) = call;
9109 
9110 	ZEND_VM_NEXT_OPCODE();
9111 }
9112 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9114 {
9115 	USE_OPLINE
9116 	zval *function_name;
9117 	zend_class_entry *ce;
9118 	uint32_t call_info;
9119 	zend_function *fbc;
9120 	zend_execute_data *call;
9121 
9122 	SAVE_OPLINE();
9123 
9124 	if (IS_CONST == IS_CONST) {
9125 		/* no function found. try a static method in class */
9126 		ce = CACHED_PTR(opline->result.num);
9127 		if (UNEXPECTED(ce == NULL)) {
9128 			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);
9129 			if (UNEXPECTED(ce == NULL)) {
9130 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9131 				HANDLE_EXCEPTION();
9132 			}
9133 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9134 				CACHE_PTR(opline->result.num, ce);
9135 			}
9136 		}
9137 	} else if (IS_CONST == IS_UNUSED) {
9138 		ce = zend_fetch_class(NULL, opline->op1.num);
9139 		if (UNEXPECTED(ce == NULL)) {
9140 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9141 			HANDLE_EXCEPTION();
9142 		}
9143 	} else {
9144 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9145 	}
9146 
9147 	if (IS_CONST == IS_CONST &&
9148 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
9149 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
9150 		/* nothing to do */
9151 	} else if (IS_CONST != IS_CONST &&
9152 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
9153 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
9154 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
9155 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
9156 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9157 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9158 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9159 				do {
9160 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
9161 						function_name = Z_REFVAL_P(function_name);
9162 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9163 							break;
9164 						}
9165 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9166 						ZVAL_UNDEFINED_OP2();
9167 						if (UNEXPECTED(EG(exception) != NULL)) {
9168 							HANDLE_EXCEPTION();
9169 						}
9170 					}
9171 					zend_throw_error(NULL, "Method name must be a string");
9172 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9173 					HANDLE_EXCEPTION();
9174 				} while (0);
9175 			}
9176 		}
9177 
9178 		if (ce->get_static_method) {
9179 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
9180 		} else {
9181 			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));
9182 		}
9183 		if (UNEXPECTED(fbc == NULL)) {
9184 			if (EXPECTED(!EG(exception))) {
9185 				zend_undefined_method(ce, Z_STR_P(function_name));
9186 			}
9187 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9188 			HANDLE_EXCEPTION();
9189 		}
9190 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
9191 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
9192 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
9193 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
9194 		}
9195 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9196 			init_func_run_time_cache(&fbc->op_array);
9197 		}
9198 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9199 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9200 		}
9201 	} else {
9202 		if (UNEXPECTED(ce->constructor == NULL)) {
9203 			zend_throw_error(NULL, "Cannot call constructor");
9204 			HANDLE_EXCEPTION();
9205 		}
9206 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
9207 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
9208 			HANDLE_EXCEPTION();
9209 		}
9210 		fbc = ce->constructor;
9211 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9212 			init_func_run_time_cache(&fbc->op_array);
9213 		}
9214 	}
9215 
9216 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
9217 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
9218 			ce = (zend_class_entry*)Z_OBJ(EX(This));
9219 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
9220 		} else {
9221 			zend_non_static_method_call(fbc);
9222 			HANDLE_EXCEPTION();
9223 		}
9224 	} else {
9225 		/* previous opcode is ZEND_FETCH_CLASS */
9226 		if (IS_CONST == IS_UNUSED
9227 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
9228 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
9229 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
9230 				ce = Z_OBJCE(EX(This));
9231 			} else {
9232 				ce = Z_CE(EX(This));
9233 			}
9234 		}
9235 		call_info = ZEND_CALL_NESTED_FUNCTION;
9236 	}
9237 
9238 	call = zend_vm_stack_push_call_frame(call_info,
9239 		fbc, opline->extended_value, ce);
9240 	call->prev_execute_data = EX(call);
9241 	EX(call) = call;
9242 
9243 	ZEND_VM_NEXT_OPCODE();
9244 }
9245 
ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9246 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9247 {
9248 	USE_OPLINE
9249 	zval *function_name;
9250 	zend_fcall_info_cache fcc;
9251 	char *error = NULL;
9252 	zend_function *func;
9253 	void *object_or_called_scope;
9254 	zend_execute_data *call;
9255 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
9256 
9257 	SAVE_OPLINE();
9258 	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9259 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
9260 		ZEND_ASSERT(!error);
9261 		func = fcc.function_handler;
9262 		object_or_called_scope = fcc.called_scope;
9263 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
9264 			/* Delay closure destruction until its invocation */
9265 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
9266 			call_info |= ZEND_CALL_CLOSURE;
9267 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
9268 				call_info |= ZEND_CALL_FAKE_CLOSURE;
9269 			}
9270 			if (fcc.object) {
9271 				object_or_called_scope = fcc.object;
9272 				call_info |= ZEND_CALL_HAS_THIS;
9273 			}
9274 		} else if (fcc.object) {
9275 			GC_ADDREF(fcc.object); /* For $this pointer */
9276 			object_or_called_scope = fcc.object;
9277 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
9278 		}
9279 
9280 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9281 		if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
9282 			if (call_info & ZEND_CALL_CLOSURE) {
9283 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
9284 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
9285 				zend_object_release(fcc.object);
9286 			}
9287 			HANDLE_EXCEPTION();
9288 		}
9289 
9290 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
9291 			init_func_run_time_cache(&func->op_array);
9292 		}
9293 	} else {
9294 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
9295 		efree(error);
9296 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9297 		HANDLE_EXCEPTION();
9298 	}
9299 
9300 	call = zend_vm_stack_push_call_frame(call_info,
9301 		func, opline->extended_value, object_or_called_scope);
9302 	call->prev_execute_data = EX(call);
9303 	EX(call) = call;
9304 
9305 	ZEND_VM_NEXT_OPCODE();
9306 }
9307 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9308 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9309 {
9310 	USE_OPLINE
9311 	zval *expr_ptr, new_expr;
9312 
9313 	SAVE_OPLINE();
9314 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
9315 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
9316 		expr_ptr = NULL;
9317 		if (Z_ISREF_P(expr_ptr)) {
9318 			Z_ADDREF_P(expr_ptr);
9319 		} else {
9320 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
9321 		}
9322 
9323 	} else {
9324 		expr_ptr = RT_CONSTANT(opline, opline->op1);
9325 		if (IS_CONST == IS_TMP_VAR) {
9326 			/* pass */
9327 		} else if (IS_CONST == IS_CONST) {
9328 			Z_TRY_ADDREF_P(expr_ptr);
9329 		} else if (IS_CONST == IS_CV) {
9330 			ZVAL_DEREF(expr_ptr);
9331 			Z_TRY_ADDREF_P(expr_ptr);
9332 		} else /* if (IS_CONST == IS_VAR) */ {
9333 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
9334 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
9335 
9336 				expr_ptr = Z_REFVAL_P(expr_ptr);
9337 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
9338 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
9339 					expr_ptr = &new_expr;
9340 					efree_size(ref, sizeof(zend_reference));
9341 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
9342 					Z_ADDREF_P(expr_ptr);
9343 				}
9344 			}
9345 		}
9346 	}
9347 
9348 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
9349 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9350 		zend_string *str;
9351 		zend_ulong hval;
9352 
9353 add_again:
9354 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9355 			str = Z_STR_P(offset);
9356 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9357 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9358 					goto num_index;
9359 				}
9360 			}
9361 str_index:
9362 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
9363 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9364 			hval = Z_LVAL_P(offset);
9365 num_index:
9366 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
9367 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
9368 			offset = Z_REFVAL_P(offset);
9369 			goto add_again;
9370 		} else if (Z_TYPE_P(offset) == IS_NULL) {
9371 			str = ZSTR_EMPTY_ALLOC();
9372 			goto str_index;
9373 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
9374 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
9375 			goto num_index;
9376 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
9377 			hval = 0;
9378 			goto num_index;
9379 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
9380 			hval = 1;
9381 			goto num_index;
9382 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
9383 			zend_use_resource_as_offset(offset);
9384 			hval = Z_RES_HANDLE_P(offset);
9385 			goto num_index;
9386 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
9387 			ZVAL_UNDEFINED_OP2();
9388 			str = ZSTR_EMPTY_ALLOC();
9389 			goto str_index;
9390 		} else {
9391 			zend_illegal_offset();
9392 			zval_ptr_dtor_nogc(expr_ptr);
9393 		}
9394 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9395 	} else {
9396 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
9397 			zend_cannot_add_element();
9398 			zval_ptr_dtor_nogc(expr_ptr);
9399 		}
9400 	}
9401 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9402 }
9403 
ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9405 {
9406 	zval *array;
9407 	uint32_t size;
9408 	USE_OPLINE
9409 
9410 	array = EX_VAR(opline->result.var);
9411 	if (IS_CONST != IS_UNUSED) {
9412 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
9413 		ZVAL_ARR(array, zend_new_array(size));
9414 		/* Explicitly initialize array as not-packed if flag is set */
9415 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
9416 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
9417 		}
9418 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9419 	} else {
9420 		ZVAL_ARR(array, zend_new_array(0));
9421 		ZEND_VM_NEXT_OPCODE();
9422 	}
9423 }
9424 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9425 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9426 {
9427 	USE_OPLINE
9428 	zval *container;
9429 	bool result;
9430 	zend_ulong hval;
9431 	zval *offset;
9432 
9433 	SAVE_OPLINE();
9434 	container = RT_CONSTANT(opline, opline->op1);
9435 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9436 
9437 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9438 		HashTable *ht;
9439 		zval *value;
9440 		zend_string *str;
9441 
9442 isset_dim_obj_array:
9443 		ht = Z_ARRVAL_P(container);
9444 isset_again:
9445 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9446 			str = Z_STR_P(offset);
9447 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9448 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9449 					goto num_index_prop;
9450 				}
9451 			}
9452 			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
9453 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9454 			hval = Z_LVAL_P(offset);
9455 num_index_prop:
9456 			value = zend_hash_index_find(ht, hval);
9457 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
9458 			offset = Z_REFVAL_P(offset);
9459 			goto isset_again;
9460 		} else {
9461 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
9462 			if (UNEXPECTED(EG(exception))) {
9463 				result = 0;
9464 				goto isset_dim_obj_exit;
9465 			}
9466 		}
9467 
9468 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
9469 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
9470 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
9471 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
9472 
9473 			if (IS_CONST & (IS_CONST|IS_CV)) {
9474 				/* avoid exception check */
9475 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9476 				ZEND_VM_SMART_BRANCH(result, 0);
9477 			}
9478 		} else {
9479 			result = (value == NULL || !i_zend_is_true(value));
9480 		}
9481 		goto isset_dim_obj_exit;
9482 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
9483 		container = Z_REFVAL_P(container);
9484 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9485 			goto isset_dim_obj_array;
9486 		}
9487 	}
9488 
9489 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
9490 		offset++;
9491 	}
9492 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
9493 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
9494 	} else {
9495 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
9496 	}
9497 
9498 isset_dim_obj_exit:
9499 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9500 
9501 	ZEND_VM_SMART_BRANCH(result, 1);
9502 }
9503 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9504 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9505 {
9506 	USE_OPLINE
9507 	zval *container;
9508 	int result;
9509 	zval *offset;
9510 	zend_string *name, *tmp_name;
9511 
9512 	SAVE_OPLINE();
9513 	container = RT_CONSTANT(opline, opline->op1);
9514 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9515 
9516 	if (IS_CONST == IS_CONST ||
9517 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
9518 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9519 			container = Z_REFVAL_P(container);
9520 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
9521 				result = (opline->extended_value & ZEND_ISEMPTY);
9522 				goto isset_object_finish;
9523 			}
9524 		} else {
9525 			result = (opline->extended_value & ZEND_ISEMPTY);
9526 			goto isset_object_finish;
9527 		}
9528 	}
9529 
9530 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9531 		name = Z_STR_P(offset);
9532 	} else {
9533 		name = zval_try_get_tmp_string(offset, &tmp_name);
9534 		if (UNEXPECTED(!name)) {
9535 			result = 0;
9536 			goto isset_object_finish;
9537 		}
9538 	}
9539 
9540 	result =
9541 		(opline->extended_value & ZEND_ISEMPTY) ^
9542 		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));
9543 
9544 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9545 		zend_tmp_string_release(tmp_name);
9546 	}
9547 
9548 isset_object_finish:
9549 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9550 
9551 	ZEND_VM_SMART_BRANCH(result, 1);
9552 }
9553 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9554 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9555 {
9556 	USE_OPLINE
9557 
9558 	zval *key, *subject;
9559 	HashTable *ht;
9560 	bool result;
9561 
9562 	SAVE_OPLINE();
9563 
9564 	key = RT_CONSTANT(opline, opline->op1);
9565 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9566 
9567 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
9568 array_key_exists_array:
9569 		ht = Z_ARRVAL_P(subject);
9570 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
9571 	} else {
9572 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
9573 			subject = Z_REFVAL_P(subject);
9574 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
9575 				goto array_key_exists_array;
9576 			}
9577 		}
9578 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
9579 		result = 0;
9580 	}
9581 
9582 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9583 
9584 	ZEND_VM_SMART_BRANCH(result, 1);
9585 }
9586 
9587 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9588 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9589 {
9590 	USE_OPLINE
9591 
9592 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
9593 
9594 	SAVE_OPLINE();
9595 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
9596 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9597 	}
9598 
9599 	/* Destroy the previously yielded value */
9600 	zval_ptr_dtor(&generator->value);
9601 
9602 	/* Destroy the previously yielded key */
9603 	zval_ptr_dtor(&generator->key);
9604 
9605 	/* Set the new yielded value */
9606 	if (IS_CONST != IS_UNUSED) {
9607 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
9608 			/* Constants and temporary variables aren't yieldable by reference,
9609 			 * but we still allow them with a notice. */
9610 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
9611 				zval *value;
9612 
9613 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
9614 
9615 				value = RT_CONSTANT(opline, opline->op1);
9616 				ZVAL_COPY_VALUE(&generator->value, value);
9617 				if (IS_CONST == IS_CONST) {
9618 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
9619 						Z_ADDREF(generator->value);
9620 					}
9621 				}
9622 			} else {
9623 				zval *value_ptr = NULL;
9624 
9625 				/* If a function call result is yielded and the function did
9626 				 * not return by reference we throw a notice. */
9627 				do {
9628 					if (IS_CONST == IS_VAR) {
9629 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
9630 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
9631 						 && !Z_ISREF_P(value_ptr)) {
9632 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
9633 							ZVAL_COPY(&generator->value, value_ptr);
9634 							break;
9635 						}
9636 					}
9637 					if (Z_ISREF_P(value_ptr)) {
9638 						Z_ADDREF_P(value_ptr);
9639 					} else {
9640 						ZVAL_MAKE_REF_EX(value_ptr, 2);
9641 					}
9642 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
9643 				} while (0);
9644 
9645 			}
9646 		} else {
9647 			zval *value = RT_CONSTANT(opline, opline->op1);
9648 
9649 			/* Consts, temporary variables and references need copying */
9650 			if (IS_CONST == IS_CONST) {
9651 				ZVAL_COPY_VALUE(&generator->value, value);
9652 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
9653 					Z_ADDREF(generator->value);
9654 				}
9655 			} else if (IS_CONST == IS_TMP_VAR) {
9656 				ZVAL_COPY_VALUE(&generator->value, value);
9657             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
9658 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
9659 
9660 			} else {
9661 				ZVAL_COPY_VALUE(&generator->value, value);
9662 				if (IS_CONST == IS_CV) {
9663 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
9664 				}
9665 			}
9666 		}
9667 	} else {
9668 		/* If no value was specified yield null */
9669 		ZVAL_NULL(&generator->value);
9670 	}
9671 
9672 	/* Set the new yielded key */
9673 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
9674 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9675 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
9676 			key = Z_REFVAL_P(key);
9677 		}
9678 		ZVAL_COPY(&generator->key, key);
9679 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9680 
9681 		if (Z_TYPE(generator->key) == IS_LONG
9682 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
9683 		) {
9684 			generator->largest_used_integer_key = Z_LVAL(generator->key);
9685 		}
9686 	} else {
9687 		/* If no key was specified we use auto-increment keys */
9688 		generator->largest_used_integer_key++;
9689 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
9690 	}
9691 
9692 	if (RETURN_VALUE_USED(opline)) {
9693 		/* If the return value of yield is used set the send
9694 		 * target and initialize it to NULL */
9695 		generator->send_target = EX_VAR(opline->result.var);
9696 		ZVAL_NULL(generator->send_target);
9697 	} else {
9698 		generator->send_target = NULL;
9699 	}
9700 
9701 	/* We increment to the next op, so we are at the correct position when the
9702 	 * generator is resumed. */
9703 	ZEND_VM_INC_OPCODE();
9704 
9705 	/* The GOTO VM uses a local opline variable. We need to set the opline
9706 	 * variable in execute_data so we don't resume at an old position. */
9707 	SAVE_OPLINE();
9708 
9709 	ZEND_VM_RETURN();
9710 }
9711 
zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)9712 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)
9713 {
9714 	USE_OPLINE
9715 	zval *varname;
9716 	zval *retval;
9717 	zend_string *name, *tmp_name;
9718 	HashTable *target_symbol_table;
9719 
9720 	SAVE_OPLINE();
9721 	varname = RT_CONSTANT(opline, opline->op1);
9722 
9723 	if (IS_CONST == IS_CONST) {
9724 		name = Z_STR_P(varname);
9725 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
9726 		name = Z_STR_P(varname);
9727 		tmp_name = NULL;
9728 	} else {
9729 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
9730 			ZVAL_UNDEFINED_OP1();
9731 		}
9732 		name = zval_try_get_tmp_string(varname, &tmp_name);
9733 		if (UNEXPECTED(!name)) {
9734 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
9735 
9736 			}
9737 			ZVAL_UNDEF(EX_VAR(opline->result.var));
9738 			HANDLE_EXCEPTION();
9739 		}
9740 	}
9741 
9742 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
9743 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
9744 	if (retval == NULL) {
9745 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
9746 fetch_this:
9747 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
9748 			if (IS_CONST != IS_CONST) {
9749 				zend_tmp_string_release(tmp_name);
9750 			}
9751 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9752 		}
9753 		if (type == BP_VAR_W) {
9754 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
9755 		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
9756 			retval = &EG(uninitialized_zval);
9757 		} else {
9758 			if (IS_CONST == IS_CV) {
9759 				/* Keep name alive in case an error handler tries to free it. */
9760 				zend_string_addref(name);
9761 			}
9762 			zend_error(E_WARNING, "Undefined %svariable $%s",
9763 				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
9764 			if (type == BP_VAR_RW && !EG(exception)) {
9765 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
9766 			} else {
9767 				retval = &EG(uninitialized_zval);
9768 			}
9769 			if (IS_CONST == IS_CV) {
9770 				zend_string_release(name);
9771 			}
9772 		}
9773 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
9774 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
9775 		retval = Z_INDIRECT_P(retval);
9776 		if (Z_TYPE_P(retval) == IS_UNDEF) {
9777 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
9778 				goto fetch_this;
9779 			}
9780 			if (type == BP_VAR_W) {
9781 				ZVAL_NULL(retval);
9782 			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
9783 				retval = &EG(uninitialized_zval);
9784 			} else {
9785 				zend_error(E_WARNING, "Undefined %svariable $%s",
9786 					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
9787 				if (type == BP_VAR_RW && !EG(exception)) {
9788 					ZVAL_NULL(retval);
9789 				} else {
9790 					retval = &EG(uninitialized_zval);
9791 				}
9792 			}
9793 		}
9794 	}
9795 
9796 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
9797 
9798 	}
9799 
9800 	if (IS_CONST != IS_CONST) {
9801 		zend_tmp_string_release(tmp_name);
9802 	}
9803 
9804 	ZEND_ASSERT(retval != NULL);
9805 	if (type == BP_VAR_R || type == BP_VAR_IS) {
9806 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
9807 	} else {
9808 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
9809 	}
9810 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9811 }
9812 
ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9813 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9814 {
9815 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9816 }
9817 
ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9818 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9819 {
9820 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9821 }
9822 
ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9823 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9824 {
9825 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9826 }
9827 
ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9829 {
9830 	int fetch_type =
9831 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
9832 			BP_VAR_W : BP_VAR_R;
9833 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9834 }
9835 
ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9837 {
9838 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9839 }
9840 
ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9841 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9842 {
9843 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9844 }
9845 
9846 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9847 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9848 {
9849 #if 0
9850 	USE_OPLINE
9851 #endif
9852 
9853 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
9854         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
9855 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9856         }
9857 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9858 	} else {
9859 		if (IS_UNUSED == IS_UNUSED) {
9860 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9861 		}
9862 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9863 	}
9864 }
9865 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9866 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9867 {
9868 	USE_OPLINE
9869 	zval *function_name;
9870 	zend_class_entry *ce;
9871 	uint32_t call_info;
9872 	zend_function *fbc;
9873 	zend_execute_data *call;
9874 
9875 	SAVE_OPLINE();
9876 
9877 	if (IS_CONST == IS_CONST) {
9878 		/* no function found. try a static method in class */
9879 		ce = CACHED_PTR(opline->result.num);
9880 		if (UNEXPECTED(ce == NULL)) {
9881 			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);
9882 			if (UNEXPECTED(ce == NULL)) {
9883 
9884 				HANDLE_EXCEPTION();
9885 			}
9886 			if (IS_UNUSED != IS_CONST) {
9887 				CACHE_PTR(opline->result.num, ce);
9888 			}
9889 		}
9890 	} else if (IS_CONST == IS_UNUSED) {
9891 		ce = zend_fetch_class(NULL, opline->op1.num);
9892 		if (UNEXPECTED(ce == NULL)) {
9893 
9894 			HANDLE_EXCEPTION();
9895 		}
9896 	} else {
9897 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9898 	}
9899 
9900 	if (IS_CONST == IS_CONST &&
9901 	    IS_UNUSED == IS_CONST &&
9902 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
9903 		/* nothing to do */
9904 	} else if (IS_CONST != IS_CONST &&
9905 	           IS_UNUSED == IS_CONST &&
9906 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
9907 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
9908 	} else if (IS_UNUSED != IS_UNUSED) {
9909 		function_name = NULL;
9910 		if (IS_UNUSED != IS_CONST) {
9911 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9912 				do {
9913 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
9914 						function_name = Z_REFVAL_P(function_name);
9915 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9916 							break;
9917 						}
9918 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9919 						ZVAL_UNDEFINED_OP2();
9920 						if (UNEXPECTED(EG(exception) != NULL)) {
9921 							HANDLE_EXCEPTION();
9922 						}
9923 					}
9924 					zend_throw_error(NULL, "Method name must be a string");
9925 
9926 					HANDLE_EXCEPTION();
9927 				} while (0);
9928 			}
9929 		}
9930 
9931 		if (ce->get_static_method) {
9932 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
9933 		} else {
9934 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
9935 		}
9936 		if (UNEXPECTED(fbc == NULL)) {
9937 			if (EXPECTED(!EG(exception))) {
9938 				zend_undefined_method(ce, Z_STR_P(function_name));
9939 			}
9940 
9941 			HANDLE_EXCEPTION();
9942 		}
9943 		if (IS_UNUSED == IS_CONST &&
9944 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
9945 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
9946 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
9947 		}
9948 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9949 			init_func_run_time_cache(&fbc->op_array);
9950 		}
9951 		if (IS_UNUSED != IS_CONST) {
9952 
9953 		}
9954 	} else {
9955 		if (UNEXPECTED(ce->constructor == NULL)) {
9956 			zend_throw_error(NULL, "Cannot call constructor");
9957 			HANDLE_EXCEPTION();
9958 		}
9959 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
9960 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
9961 			HANDLE_EXCEPTION();
9962 		}
9963 		fbc = ce->constructor;
9964 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9965 			init_func_run_time_cache(&fbc->op_array);
9966 		}
9967 	}
9968 
9969 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
9970 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
9971 			ce = (zend_class_entry*)Z_OBJ(EX(This));
9972 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
9973 		} else {
9974 			zend_non_static_method_call(fbc);
9975 			HANDLE_EXCEPTION();
9976 		}
9977 	} else {
9978 		/* previous opcode is ZEND_FETCH_CLASS */
9979 		if (IS_CONST == IS_UNUSED
9980 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
9981 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
9982 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
9983 				ce = Z_OBJCE(EX(This));
9984 			} else {
9985 				ce = Z_CE(EX(This));
9986 			}
9987 		}
9988 		call_info = ZEND_CALL_NESTED_FUNCTION;
9989 	}
9990 
9991 	call = zend_vm_stack_push_call_frame(call_info,
9992 		fbc, opline->extended_value, ce);
9993 	call->prev_execute_data = EX(call);
9994 	EX(call) = call;
9995 
9996 	ZEND_VM_NEXT_OPCODE();
9997 }
9998 
ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9999 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10000 {
10001 	if (IS_CONST == IS_UNUSED) {
10002 		SAVE_OPLINE();
10003 		zend_verify_missing_return_type(EX(func));
10004 		HANDLE_EXCEPTION();
10005 	} else {
10006 /* prevents "undefined variable opline" errors */
10007 #if 0 || (IS_CONST != IS_UNUSED)
10008 		USE_OPLINE
10009 		zval *retval_ref, *retval_ptr;
10010 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
10011 		retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);
10012 
10013 		if (IS_CONST == IS_CONST) {
10014 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
10015 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
10016 		} else if (IS_CONST == IS_VAR) {
10017 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
10018 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
10019 			}
10020 			ZVAL_DEREF(retval_ptr);
10021 		} else if (IS_CONST == IS_CV) {
10022 			ZVAL_DEREF(retval_ptr);
10023 		}
10024 
10025 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
10026 			ZEND_VM_NEXT_OPCODE();
10027 		}
10028 
10029 		if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
10030 			SAVE_OPLINE();
10031 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
10032 			if (UNEXPECTED(EG(exception))) {
10033 				HANDLE_EXCEPTION();
10034 			}
10035 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
10036 				ZEND_VM_NEXT_OPCODE();
10037 			}
10038 		}
10039 
10040 		zend_reference *ref = NULL;
10041 		void *cache_slot = CACHE_ADDR(opline->op2.num);
10042 		if (UNEXPECTED(retval_ref != retval_ptr)) {
10043 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
10044 				ref = Z_REF_P(retval_ref);
10045 			} else {
10046 				/* A cast might happen - unwrap the reference if this is a by-value return */
10047 				if (Z_REFCOUNT_P(retval_ref) == 1) {
10048 					ZVAL_UNREF(retval_ref);
10049 				} else {
10050 					Z_DELREF_P(retval_ref);
10051 					ZVAL_COPY(retval_ref, retval_ptr);
10052 				}
10053 				retval_ptr = retval_ref;
10054 			}
10055 		}
10056 
10057 		SAVE_OPLINE();
10058 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
10059 			zend_verify_return_error(EX(func), retval_ptr);
10060 			HANDLE_EXCEPTION();
10061 		}
10062 		ZEND_VM_NEXT_OPCODE();
10063 #endif
10064 	}
10065 }
10066 
ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10067 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10068 {
10069 	USE_OPLINE
10070 	zval *value, *arg;
10071 
10072 	if (IS_UNUSED == IS_CONST) {
10073 		SAVE_OPLINE();
10074 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
10075 		uint32_t arg_num;
10076 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
10077 		if (UNEXPECTED(!arg)) {
10078 
10079 			HANDLE_EXCEPTION();
10080 		}
10081 	} else {
10082 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
10083 	}
10084 
10085 	value = RT_CONSTANT(opline, opline->op1);
10086 	ZVAL_COPY_VALUE(arg, value);
10087 	if (IS_CONST == IS_CONST) {
10088 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
10089 			Z_ADDREF_P(arg);
10090 		}
10091 	}
10092 	ZEND_VM_NEXT_OPCODE();
10093 }
10094 
ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10095 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10096 {
10097 	USE_OPLINE
10098 	zval *value, *arg;
10099 	uint32_t arg_num;
10100 
10101 	if (IS_UNUSED == IS_CONST) {
10102 		SAVE_OPLINE();
10103 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
10104 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
10105 		if (UNEXPECTED(!arg)) {
10106 
10107 			HANDLE_EXCEPTION();
10108 		}
10109 	} else {
10110 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
10111 		arg_num = opline->op2.num;
10112 	}
10113 
10114 	if (EXPECTED(0)) {
10115 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10116 			goto send_val_by_ref;
10117 		}
10118 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10119 send_val_by_ref:
10120 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10121 	}
10122 	value = RT_CONSTANT(opline, opline->op1);
10123 	ZVAL_COPY_VALUE(arg, value);
10124 	if (IS_CONST == IS_CONST) {
10125 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
10126 			Z_ADDREF_P(arg);
10127 		}
10128 	}
10129 	ZEND_VM_NEXT_OPCODE();
10130 }
10131 
ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10132 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10133 {
10134 	USE_OPLINE
10135 	zval *value, *arg;
10136 	uint32_t arg_num;
10137 
10138 	if (IS_UNUSED == IS_CONST) {
10139 		SAVE_OPLINE();
10140 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
10141 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
10142 		if (UNEXPECTED(!arg)) {
10143 
10144 			HANDLE_EXCEPTION();
10145 		}
10146 	} else {
10147 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
10148 		arg_num = opline->op2.num;
10149 	}
10150 
10151 	if (EXPECTED(1)) {
10152 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10153 			goto send_val_by_ref;
10154 		}
10155 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10156 send_val_by_ref:
10157 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10158 	}
10159 	value = RT_CONSTANT(opline, opline->op1);
10160 	ZVAL_COPY_VALUE(arg, value);
10161 	if (IS_CONST == IS_CONST) {
10162 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
10163 			Z_ADDREF_P(arg);
10164 		}
10165 	}
10166 	ZEND_VM_NEXT_OPCODE();
10167 }
10168 
ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10169 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10170 {
10171 	USE_OPLINE
10172 	zval *result;
10173 	zend_function *constructor;
10174 	zend_class_entry *ce;
10175 	zend_execute_data *call;
10176 
10177 	SAVE_OPLINE();
10178 	if (IS_CONST == IS_CONST) {
10179 		ce = CACHED_PTR(opline->op2.num);
10180 		if (UNEXPECTED(ce == NULL)) {
10181 			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);
10182 			if (UNEXPECTED(ce == NULL)) {
10183 				ZVAL_UNDEF(EX_VAR(opline->result.var));
10184 				HANDLE_EXCEPTION();
10185 			}
10186 			CACHE_PTR(opline->op2.num, ce);
10187 		}
10188 	} else if (IS_CONST == IS_UNUSED) {
10189 		ce = zend_fetch_class(NULL, opline->op1.num);
10190 		if (UNEXPECTED(ce == NULL)) {
10191 			ZVAL_UNDEF(EX_VAR(opline->result.var));
10192 			HANDLE_EXCEPTION();
10193 		}
10194 	} else {
10195 		ce = Z_CE_P(EX_VAR(opline->op1.var));
10196 	}
10197 
10198 	result = EX_VAR(opline->result.var);
10199 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
10200 		ZVAL_UNDEF(result);
10201 		HANDLE_EXCEPTION();
10202 	}
10203 
10204 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
10205 	if (constructor == NULL) {
10206 		if (UNEXPECTED(EG(exception))) {
10207 			HANDLE_EXCEPTION();
10208 		}
10209 
10210 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
10211 		 * opcode is DO_FCALL in case EXT instructions are used. */
10212 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
10213 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
10214 		}
10215 
10216 		/* Perform a dummy function call */
10217 		call = zend_vm_stack_push_call_frame(
10218 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
10219 			opline->extended_value, NULL);
10220 	} else {
10221 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
10222 			init_func_run_time_cache(&constructor->op_array);
10223 		}
10224 		/* We are not handling overloaded classes right now */
10225 		call = zend_vm_stack_push_call_frame(
10226 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
10227 			constructor,
10228 			opline->extended_value,
10229 			Z_OBJ_P(result));
10230 		Z_ADDREF_P(result);
10231 	}
10232 
10233 	call->prev_execute_data = EX(call);
10234 	EX(call) = call;
10235 	ZEND_VM_NEXT_OPCODE();
10236 }
10237 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10238 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10239 {
10240 	USE_OPLINE
10241 	zval *expr_ptr, new_expr;
10242 
10243 	SAVE_OPLINE();
10244 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
10245 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
10246 		expr_ptr = NULL;
10247 		if (Z_ISREF_P(expr_ptr)) {
10248 			Z_ADDREF_P(expr_ptr);
10249 		} else {
10250 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
10251 		}
10252 
10253 	} else {
10254 		expr_ptr = RT_CONSTANT(opline, opline->op1);
10255 		if (IS_CONST == IS_TMP_VAR) {
10256 			/* pass */
10257 		} else if (IS_CONST == IS_CONST) {
10258 			Z_TRY_ADDREF_P(expr_ptr);
10259 		} else if (IS_CONST == IS_CV) {
10260 			ZVAL_DEREF(expr_ptr);
10261 			Z_TRY_ADDREF_P(expr_ptr);
10262 		} else /* if (IS_CONST == IS_VAR) */ {
10263 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
10264 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
10265 
10266 				expr_ptr = Z_REFVAL_P(expr_ptr);
10267 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
10268 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
10269 					expr_ptr = &new_expr;
10270 					efree_size(ref, sizeof(zend_reference));
10271 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
10272 					Z_ADDREF_P(expr_ptr);
10273 				}
10274 			}
10275 		}
10276 	}
10277 
10278 	if (IS_UNUSED != IS_UNUSED) {
10279 		zval *offset = NULL;
10280 		zend_string *str;
10281 		zend_ulong hval;
10282 
10283 add_again:
10284 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
10285 			str = Z_STR_P(offset);
10286 			if (IS_UNUSED != IS_CONST) {
10287 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
10288 					goto num_index;
10289 				}
10290 			}
10291 str_index:
10292 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
10293 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
10294 			hval = Z_LVAL_P(offset);
10295 num_index:
10296 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
10297 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
10298 			offset = Z_REFVAL_P(offset);
10299 			goto add_again;
10300 		} else if (Z_TYPE_P(offset) == IS_NULL) {
10301 			str = ZSTR_EMPTY_ALLOC();
10302 			goto str_index;
10303 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
10304 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
10305 			goto num_index;
10306 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
10307 			hval = 0;
10308 			goto num_index;
10309 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
10310 			hval = 1;
10311 			goto num_index;
10312 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
10313 			zend_use_resource_as_offset(offset);
10314 			hval = Z_RES_HANDLE_P(offset);
10315 			goto num_index;
10316 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
10317 			ZVAL_UNDEFINED_OP2();
10318 			str = ZSTR_EMPTY_ALLOC();
10319 			goto str_index;
10320 		} else {
10321 			zend_illegal_offset();
10322 			zval_ptr_dtor_nogc(expr_ptr);
10323 		}
10324 
10325 	} else {
10326 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
10327 			zend_cannot_add_element();
10328 			zval_ptr_dtor_nogc(expr_ptr);
10329 		}
10330 	}
10331 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10332 }
10333 
ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10334 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10335 {
10336 	zval *array;
10337 	uint32_t size;
10338 	USE_OPLINE
10339 
10340 	array = EX_VAR(opline->result.var);
10341 	if (IS_CONST != IS_UNUSED) {
10342 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
10343 		ZVAL_ARR(array, zend_new_array(size));
10344 		/* Explicitly initialize array as not-packed if flag is set */
10345 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
10346 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
10347 		}
10348 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10349 	} else {
10350 		ZVAL_ARR(array, zend_new_array(0));
10351 		ZEND_VM_NEXT_OPCODE();
10352 	}
10353 }
10354 
ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10355 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10356 {
10357 	USE_OPLINE
10358 	zval *varname;
10359 	zend_string *name, *tmp_name;
10360 	HashTable *target_symbol_table;
10361 
10362 	SAVE_OPLINE();
10363 
10364 	varname = RT_CONSTANT(opline, opline->op1);
10365 
10366 	if (IS_CONST == IS_CONST) {
10367 		name = Z_STR_P(varname);
10368 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
10369 		name = Z_STR_P(varname);
10370 		tmp_name = NULL;
10371 	} else {
10372 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
10373 			varname = ZVAL_UNDEFINED_OP1();
10374 		}
10375 		name = zval_try_get_tmp_string(varname, &tmp_name);
10376 		if (UNEXPECTED(!name)) {
10377 
10378 			HANDLE_EXCEPTION();
10379 		}
10380 	}
10381 
10382 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
10383 	zend_hash_del_ind(target_symbol_table, name);
10384 
10385 	if (IS_CONST != IS_CONST) {
10386 		zend_tmp_string_release(tmp_name);
10387 	}
10388 
10389 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10390 }
10391 
10392 /* 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)10393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10394 {
10395 	USE_OPLINE
10396 	zval *value;
10397 	/* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
10398 	int result;
10399 	zval *varname;
10400 	zend_string *name, *tmp_name;
10401 	HashTable *target_symbol_table;
10402 
10403 	SAVE_OPLINE();
10404 	varname = RT_CONSTANT(opline, opline->op1);
10405 	if (IS_CONST == IS_CONST) {
10406 		name = Z_STR_P(varname);
10407 	} else {
10408 		name = zval_get_tmp_string(varname, &tmp_name);
10409 	}
10410 
10411 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
10412 	value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
10413 
10414 	if (IS_CONST != IS_CONST) {
10415 		zend_tmp_string_release(tmp_name);
10416 	}
10417 
10418 	if (!value) {
10419 		result = (opline->extended_value & ZEND_ISEMPTY);
10420 	} else {
10421 		if (Z_TYPE_P(value) == IS_INDIRECT) {
10422 			value = Z_INDIRECT_P(value);
10423 		}
10424 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
10425 			if (Z_ISREF_P(value)) {
10426 				value = Z_REFVAL_P(value);
10427 			}
10428 			result = Z_TYPE_P(value) > IS_NULL;
10429 		} else {
10430 			result = !i_zend_is_true(value);
10431 		}
10432 	}
10433 
10434 	ZEND_VM_SMART_BRANCH(result, 1);
10435 }
10436 
10437 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10438 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10439 {
10440 	USE_OPLINE
10441 
10442 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
10443 
10444 	SAVE_OPLINE();
10445 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
10446 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10447 	}
10448 
10449 	/* Destroy the previously yielded value */
10450 	zval_ptr_dtor(&generator->value);
10451 
10452 	/* Destroy the previously yielded key */
10453 	zval_ptr_dtor(&generator->key);
10454 
10455 	/* Set the new yielded value */
10456 	if (IS_CONST != IS_UNUSED) {
10457 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
10458 			/* Constants and temporary variables aren't yieldable by reference,
10459 			 * but we still allow them with a notice. */
10460 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
10461 				zval *value;
10462 
10463 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10464 
10465 				value = RT_CONSTANT(opline, opline->op1);
10466 				ZVAL_COPY_VALUE(&generator->value, value);
10467 				if (IS_CONST == IS_CONST) {
10468 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10469 						Z_ADDREF(generator->value);
10470 					}
10471 				}
10472 			} else {
10473 				zval *value_ptr = NULL;
10474 
10475 				/* If a function call result is yielded and the function did
10476 				 * not return by reference we throw a notice. */
10477 				do {
10478 					if (IS_CONST == IS_VAR) {
10479 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
10480 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
10481 						 && !Z_ISREF_P(value_ptr)) {
10482 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10483 							ZVAL_COPY(&generator->value, value_ptr);
10484 							break;
10485 						}
10486 					}
10487 					if (Z_ISREF_P(value_ptr)) {
10488 						Z_ADDREF_P(value_ptr);
10489 					} else {
10490 						ZVAL_MAKE_REF_EX(value_ptr, 2);
10491 					}
10492 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
10493 				} while (0);
10494 
10495 			}
10496 		} else {
10497 			zval *value = RT_CONSTANT(opline, opline->op1);
10498 
10499 			/* Consts, temporary variables and references need copying */
10500 			if (IS_CONST == IS_CONST) {
10501 				ZVAL_COPY_VALUE(&generator->value, value);
10502 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10503 					Z_ADDREF(generator->value);
10504 				}
10505 			} else if (IS_CONST == IS_TMP_VAR) {
10506 				ZVAL_COPY_VALUE(&generator->value, value);
10507             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
10508 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
10509 
10510 			} else {
10511 				ZVAL_COPY_VALUE(&generator->value, value);
10512 				if (IS_CONST == IS_CV) {
10513 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
10514 				}
10515 			}
10516 		}
10517 	} else {
10518 		/* If no value was specified yield null */
10519 		ZVAL_NULL(&generator->value);
10520 	}
10521 
10522 	/* Set the new yielded key */
10523 	if (IS_UNUSED != IS_UNUSED) {
10524 		zval *key = NULL;
10525 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
10526 			key = Z_REFVAL_P(key);
10527 		}
10528 		ZVAL_COPY(&generator->key, key);
10529 
10530 		if (Z_TYPE(generator->key) == IS_LONG
10531 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
10532 		) {
10533 			generator->largest_used_integer_key = Z_LVAL(generator->key);
10534 		}
10535 	} else {
10536 		/* If no key was specified we use auto-increment keys */
10537 		generator->largest_used_integer_key++;
10538 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
10539 	}
10540 
10541 	if (RETURN_VALUE_USED(opline)) {
10542 		/* If the return value of yield is used set the send
10543 		 * target and initialize it to NULL */
10544 		generator->send_target = EX_VAR(opline->result.var);
10545 		ZVAL_NULL(generator->send_target);
10546 	} else {
10547 		generator->send_target = NULL;
10548 	}
10549 
10550 	/* We increment to the next op, so we are at the correct position when the
10551 	 * generator is resumed. */
10552 	ZEND_VM_INC_OPCODE();
10553 
10554 	/* The GOTO VM uses a local opline variable. We need to set the opline
10555 	 * variable in execute_data so we don't resume at an old position. */
10556 	SAVE_OPLINE();
10557 
10558 	ZEND_VM_RETURN();
10559 }
10560 
ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10561 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10562 {
10563 	USE_OPLINE
10564 	zval *op;
10565 
10566 	SAVE_OPLINE();
10567 	op = RT_CONSTANT(opline, opline->op1);
10568 	zend_match_unhandled_error(op);
10569 	HANDLE_EXCEPTION();
10570 }
10571 
ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10572 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10573 {
10574 	USE_OPLINE
10575 	zval *op1;
10576 	zend_long count;
10577 
10578 	SAVE_OPLINE();
10579 	op1 = RT_CONSTANT(opline, opline->op1);
10580 
10581 	while (1) {
10582 		if (Z_TYPE_P(op1) == IS_ARRAY) {
10583 			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
10584 			break;
10585 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
10586 			zend_object *zobj = Z_OBJ_P(op1);
10587 
10588 			/* first, we check if the handler is defined */
10589 			if (zobj->handlers->count_elements) {
10590 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
10591 					break;
10592 				}
10593 				if (UNEXPECTED(EG(exception))) {
10594 					count = 0;
10595 					break;
10596 				}
10597 			}
10598 
10599 			/* if not and the object implements Countable we call its count() method */
10600 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
10601 				zval retval;
10602 
10603 				zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
10604 				count = zval_get_long(&retval);
10605 				zval_ptr_dtor(&retval);
10606 				break;
10607 			}
10608 
10609 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
10610 		} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
10611 			op1 = Z_REFVAL_P(op1);
10612 			continue;
10613 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10614 			ZVAL_UNDEFINED_OP1();
10615 		}
10616 		count = 0;
10617 		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_type_name(op1));
10618 		break;
10619 	}
10620 
10621 	ZVAL_LONG(EX_VAR(opline->result.var), count);
10622 
10623 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10624 }
10625 
ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10626 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10627 {
10628 	USE_OPLINE
10629 
10630 	if (IS_CONST == IS_UNUSED) {
10631 		if (UNEXPECTED(!EX(func)->common.scope)) {
10632 			SAVE_OPLINE();
10633 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
10634 			ZVAL_UNDEF(EX_VAR(opline->result.var));
10635 			HANDLE_EXCEPTION();
10636 		} else {
10637 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
10638 			ZEND_VM_NEXT_OPCODE();
10639 		}
10640 	} else {
10641 		zval *op1;
10642 
10643 		SAVE_OPLINE();
10644 		op1 = RT_CONSTANT(opline, opline->op1);
10645 		while (1) {
10646 			if (Z_TYPE_P(op1) == IS_OBJECT) {
10647 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
10648 			} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
10649 				op1 = Z_REFVAL_P(op1);
10650 				continue;
10651 			} else {
10652 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10653 					ZVAL_UNDEFINED_OP1();
10654 				}
10655 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
10656 				ZVAL_UNDEF(EX_VAR(opline->result.var));
10657 			}
10658 			break;
10659 		}
10660 
10661 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10662 	}
10663 }
10664 
ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10665 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10666 {
10667 	USE_OPLINE
10668 	zval *op1;
10669 	zend_string *type;
10670 
10671 	SAVE_OPLINE();
10672 	op1 = RT_CONSTANT(opline, opline->op1);
10673 	type = zend_zval_get_legacy_type(op1);
10674 	if (EXPECTED(type)) {
10675 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
10676 	} else {
10677 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
10678 	}
10679 
10680 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10681 }
10682 
ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10683 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10684 {
10685 	USE_OPLINE
10686 	zend_array *ht;
10687 	uint32_t arg_count, result_size, skip;
10688 
10689 	arg_count = EX_NUM_ARGS();
10690 	if (IS_CONST == IS_CONST) {
10691 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
10692 		if (arg_count < skip) {
10693 			result_size = 0;
10694 		} else {
10695 			result_size = arg_count - skip;
10696 		}
10697 	} else {
10698 		skip = 0;
10699 		result_size = arg_count;
10700 	}
10701 
10702 	if (result_size) {
10703 		SAVE_OPLINE();
10704 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
10705 
10706 		ht = zend_new_array(result_size);
10707 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
10708 		zend_hash_real_init_packed(ht);
10709 		ZEND_HASH_FILL_PACKED(ht) {
10710 			zval *p, *q;
10711 			uint32_t i = skip;
10712 			p = EX_VAR_NUM(i);
10713 			if (arg_count > first_extra_arg) {
10714 				while (i < first_extra_arg) {
10715 					q = p;
10716 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
10717 						ZVAL_DEREF(q);
10718 						if (Z_OPT_REFCOUNTED_P(q)) {
10719 							Z_ADDREF_P(q);
10720 						}
10721 						ZEND_HASH_FILL_SET(q);
10722 					} else {
10723 						ZEND_HASH_FILL_SET_NULL();
10724 					}
10725 					ZEND_HASH_FILL_NEXT();
10726 					p++;
10727 					i++;
10728 				}
10729 				if (skip < first_extra_arg) {
10730 					skip = 0;
10731 				} else {
10732 					skip -= first_extra_arg;
10733 				}
10734 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
10735 			}
10736 			while (i < arg_count) {
10737 				q = p;
10738 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
10739 					ZVAL_DEREF(q);
10740 					if (Z_OPT_REFCOUNTED_P(q)) {
10741 						Z_ADDREF_P(q);
10742 					}
10743 					ZEND_HASH_FILL_SET(q);
10744 				} else {
10745 					ZEND_HASH_FILL_SET_NULL();
10746 				}
10747 				ZEND_HASH_FILL_NEXT();
10748 				p++;
10749 				i++;
10750 			}
10751 		} ZEND_HASH_FILL_END();
10752 		ht->nNumOfElements = result_size;
10753 	} else {
10754 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
10755 	}
10756 	ZEND_VM_NEXT_OPCODE();
10757 }
10758 
ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10760 {
10761 	USE_OPLINE
10762 	zval *op1, *op2;
10763 
10764 	SAVE_OPLINE();
10765 	op1 = RT_CONSTANT(opline, opline->op1);
10766 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
10767 	div_function(EX_VAR(opline->result.var), op1, op2);
10768 
10769 
10770 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10771 }
10772 
ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10773 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10774 {
10775 	USE_OPLINE
10776 	zval *op1, *op2;
10777 
10778 	SAVE_OPLINE();
10779 	op1 = RT_CONSTANT(opline, opline->op1);
10780 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
10781 	pow_function(EX_VAR(opline->result.var), op1, op2);
10782 
10783 
10784 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10785 }
10786 
ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10787 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10788 {
10789 	USE_OPLINE
10790 	zval *op1, *op2;
10791 
10792 	op1 = RT_CONSTANT(opline, opline->op1);
10793 	op2 = EX_VAR(opline->op2.var);
10794 
10795 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
10796 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
10797 		zend_string *op1_str = Z_STR_P(op1);
10798 		zend_string *op2_str = Z_STR_P(op2);
10799 		zend_string *str;
10800 
10801 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
10802 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
10803 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
10804 			} else {
10805 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
10806 			}
10807 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
10808 				zend_string_release_ex(op1_str, 0);
10809 			}
10810 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
10811 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
10812 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
10813 			} else {
10814 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
10815 			}
10816 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
10817 				zend_string_release_ex(op2_str, 0);
10818 			}
10819 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
10820 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
10821 		    size_t len = ZSTR_LEN(op1_str);
10822 
10823 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
10824 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
10825 			}
10826 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
10827 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10828 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10829 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
10830 				zend_string_release_ex(op2_str, 0);
10831 			}
10832 		} else {
10833 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
10834 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
10835 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10836 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10837 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
10838 				zend_string_release_ex(op1_str, 0);
10839 			}
10840 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
10841 				zend_string_release_ex(op2_str, 0);
10842 			}
10843 		}
10844 		ZEND_VM_NEXT_OPCODE();
10845 	} else {
10846 		SAVE_OPLINE();
10847 
10848 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10849 			op1 = ZVAL_UNDEFINED_OP1();
10850 		}
10851 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
10852 			op2 = ZVAL_UNDEFINED_OP2();
10853 		}
10854 		concat_function(EX_VAR(opline->result.var), op1, op2);
10855 
10856 
10857 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10858 	}
10859 }
10860 
ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10861 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10862 {
10863 	USE_OPLINE
10864 	zval *op1, *op2;
10865 
10866 	SAVE_OPLINE();
10867 	op1 = RT_CONSTANT(opline, opline->op1);
10868 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
10869 	compare_function(EX_VAR(opline->result.var), op1, op2);
10870 
10871 
10872 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10873 }
10874 
ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10875 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10876 {
10877 	USE_OPLINE
10878 	zval *container, *dim, *value;
10879 
10880 	SAVE_OPLINE();
10881 	container = RT_CONSTANT(opline, opline->op1);
10882 	dim = EX_VAR(opline->op2.var);
10883 	if (IS_CONST != IS_CONST) {
10884 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10885 fetch_dim_r_array:
10886 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
10887 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
10888 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
10889 			container = Z_REFVAL_P(container);
10890 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10891 				goto fetch_dim_r_array;
10892 			} else {
10893 				goto fetch_dim_r_slow;
10894 			}
10895 		} else {
10896 fetch_dim_r_slow:
10897 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
10898 				dim++;
10899 			}
10900 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
10901 		}
10902 	} else {
10903 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
10904 	}
10905 
10906 
10907 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10908 }
10909 
ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10910 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10911 {
10912 	USE_OPLINE
10913 	zval *container;
10914 
10915 	SAVE_OPLINE();
10916 	container = RT_CONSTANT(opline, opline->op1);
10917 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
10918 
10919 
10920 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10921 }
10922 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10923 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10924 {
10925 #if 0
10926 	USE_OPLINE
10927 #endif
10928 
10929 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
10930         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
10931 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10932         }
10933 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10934 	} else {
10935 		if (IS_CV == IS_UNUSED) {
10936 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10937 		}
10938 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10939 	}
10940 }
10941 
ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10942 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10943 {
10944 	USE_OPLINE
10945 	zval *container;
10946 	void **cache_slot = NULL;
10947 
10948 	SAVE_OPLINE();
10949 	container = RT_CONSTANT(opline, opline->op1);
10950 
10951 	if (IS_CONST == IS_CONST ||
10952 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
10953 	    do {
10954 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10955 				container = Z_REFVAL_P(container);
10956 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
10957 					break;
10958 				}
10959 			}
10960 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
10961 				ZVAL_UNDEFINED_OP1();
10962 			}
10963 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
10964 			ZVAL_NULL(EX_VAR(opline->result.var));
10965 			goto fetch_obj_r_finish;
10966 		} while (0);
10967 	}
10968 
10969 	/* here we are sure we are dealing with an object */
10970 	do {
10971 		zend_object *zobj = Z_OBJ_P(container);
10972 		zend_string *name, *tmp_name;
10973 		zval *retval;
10974 
10975 		if (IS_CV == IS_CONST) {
10976 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
10977 
10978 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
10979 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
10980 
10981 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
10982 					retval = OBJ_PROP(zobj, prop_offset);
10983 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
10984 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10985 							goto fetch_obj_r_copy;
10986 						} else {
10987 fetch_obj_r_fast_copy:
10988 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10989 							ZEND_VM_NEXT_OPCODE();
10990 						}
10991 					}
10992 				} else if (EXPECTED(zobj->properties != NULL)) {
10993 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
10994 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
10995 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
10996 
10997 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
10998 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
10999 
11000 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
11001 						        (EXPECTED(p->key == name) ||
11002 						         (EXPECTED(p->h == ZSTR_H(name)) &&
11003 						          EXPECTED(p->key != NULL) &&
11004 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
11005 								retval = &p->val;
11006 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11007 									goto fetch_obj_r_copy;
11008 								} else {
11009 									goto fetch_obj_r_fast_copy;
11010 								}
11011 							}
11012 						}
11013 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
11014 					}
11015 					retval = zend_hash_find_known_hash(zobj->properties, name);
11016 					if (EXPECTED(retval)) {
11017 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
11018 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
11019 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11020 							goto fetch_obj_r_copy;
11021 						} else {
11022 							goto fetch_obj_r_fast_copy;
11023 						}
11024 					}
11025 				}
11026 			}
11027 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11028 		} else {
11029 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
11030 			if (UNEXPECTED(!name)) {
11031 				ZVAL_UNDEF(EX_VAR(opline->result.var));
11032 				break;
11033 			}
11034 		}
11035 
11036 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
11037 #if ZEND_DEBUG
11038 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
11039 			zend_verify_internal_read_property_type(zobj, name, retval);
11040 		}
11041 #endif
11042 
11043 		if (IS_CV != IS_CONST) {
11044 			zend_tmp_string_release(tmp_name);
11045 		}
11046 
11047 		if (retval != EX_VAR(opline->result.var)) {
11048 fetch_obj_r_copy:
11049 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11050 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
11051 			zend_unwrap_reference(retval);
11052 		}
11053 	} while (0);
11054 
11055 fetch_obj_r_finish:
11056 
11057 
11058 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11059 }
11060 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11061 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11062 {
11063 	USE_OPLINE
11064 	zval *container;
11065 	void **cache_slot = NULL;
11066 
11067 	SAVE_OPLINE();
11068 	container = RT_CONSTANT(opline, opline->op1);
11069 
11070 	if (IS_CONST == IS_CONST ||
11071 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11072 		do {
11073 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11074 				container = Z_REFVAL_P(container);
11075 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
11076 					break;
11077 				}
11078 			}
11079 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
11080 				ZVAL_UNDEFINED_OP2();
11081 			}
11082 			ZVAL_NULL(EX_VAR(opline->result.var));
11083 			goto fetch_obj_is_finish;
11084 		} while (0);
11085 	}
11086 
11087 	/* here we are sure we are dealing with an object */
11088 	do {
11089 		zend_object *zobj = Z_OBJ_P(container);
11090 		zend_string *name, *tmp_name;
11091 		zval *retval;
11092 
11093 		if (IS_CV == IS_CONST) {
11094 			cache_slot = CACHE_ADDR(opline->extended_value);
11095 
11096 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
11097 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
11098 
11099 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
11100 					retval = OBJ_PROP(zobj, prop_offset);
11101 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
11102 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11103 							goto fetch_obj_is_copy;
11104 						} else {
11105 fetch_obj_is_fast_copy:
11106 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11107 							ZEND_VM_NEXT_OPCODE();
11108 						}
11109 					}
11110 				} else if (EXPECTED(zobj->properties != NULL)) {
11111 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11112 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
11113 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
11114 
11115 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
11116 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
11117 
11118 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
11119 						        (EXPECTED(p->key == name) ||
11120 						         (EXPECTED(p->h == ZSTR_H(name)) &&
11121 						          EXPECTED(p->key != NULL) &&
11122 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
11123 								retval = &p->val;
11124 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11125 									goto fetch_obj_is_copy;
11126 								} else {
11127 									goto fetch_obj_is_fast_copy;
11128 								}
11129 							}
11130 						}
11131 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
11132 					}
11133 					retval = zend_hash_find_known_hash(zobj->properties, name);
11134 					if (EXPECTED(retval)) {
11135 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
11136 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
11137 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11138 							goto fetch_obj_is_copy;
11139 						} else {
11140 							goto fetch_obj_is_fast_copy;
11141 						}
11142 					}
11143 				}
11144 			}
11145 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11146 		} else {
11147 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
11148 			if (UNEXPECTED(!name)) {
11149 				ZVAL_UNDEF(EX_VAR(opline->result.var));
11150 				break;
11151 			}
11152 		}
11153 
11154 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
11155 
11156 		if (IS_CV != IS_CONST) {
11157 			zend_tmp_string_release(tmp_name);
11158 		}
11159 
11160 		if (retval != EX_VAR(opline->result.var)) {
11161 fetch_obj_is_copy:
11162 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11163 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
11164 			zend_unwrap_reference(retval);
11165 		}
11166 	} while (0);
11167 
11168 fetch_obj_is_finish:
11169 
11170 
11171 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11172 }
11173 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11174 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11175 {
11176 #if 0
11177 	USE_OPLINE
11178 #endif
11179 
11180 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
11181 		/* Behave like FETCH_OBJ_W */
11182 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
11183 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11184 		}
11185 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11186 	} else {
11187 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11188 	}
11189 }
11190 
ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11191 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11192 {
11193 	USE_OPLINE
11194 	zval *container;
11195 
11196 	SAVE_OPLINE();
11197 	container = RT_CONSTANT(opline, opline->op1);
11198 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
11199 
11200 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11201 }
11202 
ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11203 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11204 {
11205 	USE_OPLINE
11206 	zval *op1, *op2;
11207 	zend_string *op1_str, *op2_str, *str;
11208 
11209 
11210 	op1 = RT_CONSTANT(opline, opline->op1);
11211 	op2 = EX_VAR(opline->op2.var);
11212 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
11213 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
11214 		zend_string *op1_str = Z_STR_P(op1);
11215 		zend_string *op2_str = Z_STR_P(op2);
11216 		zend_string *str;
11217 
11218 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11219 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
11220 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
11221 			} else {
11222 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11223 			}
11224 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11225 				zend_string_release_ex(op1_str, 0);
11226 			}
11227 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11228 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
11229 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
11230 			} else {
11231 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11232 			}
11233 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11234 				zend_string_release_ex(op2_str, 0);
11235 			}
11236 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
11237 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
11238 		    size_t len = ZSTR_LEN(op1_str);
11239 
11240 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
11241 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11242 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11243 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11244 				zend_string_release_ex(op2_str, 0);
11245 			}
11246 		} else {
11247 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11248 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11249 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11250 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11251 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11252 				zend_string_release_ex(op1_str, 0);
11253 			}
11254 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11255 				zend_string_release_ex(op2_str, 0);
11256 			}
11257 		}
11258 		ZEND_VM_NEXT_OPCODE();
11259 	}
11260 
11261 	SAVE_OPLINE();
11262 	if (IS_CONST == IS_CONST) {
11263 		op1_str = Z_STR_P(op1);
11264 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
11265 		op1_str = zend_string_copy(Z_STR_P(op1));
11266 	} else {
11267 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11268 			ZVAL_UNDEFINED_OP1();
11269 		}
11270 		op1_str = zval_get_string_func(op1);
11271 	}
11272 	if (IS_CV == IS_CONST) {
11273 		op2_str = Z_STR_P(op2);
11274 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
11275 		op2_str = zend_string_copy(Z_STR_P(op2));
11276 	} else {
11277 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11278 			ZVAL_UNDEFINED_OP2();
11279 		}
11280 		op2_str = zval_get_string_func(op2);
11281 	}
11282 	do {
11283 		if (IS_CONST != IS_CONST) {
11284 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11285 				if (IS_CV == IS_CONST) {
11286 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
11287 						GC_ADDREF(op2_str);
11288 					}
11289 				}
11290 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11291 				zend_string_release_ex(op1_str, 0);
11292 				break;
11293 			}
11294 		}
11295 		if (IS_CV != IS_CONST) {
11296 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11297 				if (IS_CONST == IS_CONST) {
11298 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
11299 						GC_ADDREF(op1_str);
11300 					}
11301 				}
11302 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11303 				zend_string_release_ex(op2_str, 0);
11304 				break;
11305 			}
11306 		}
11307 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11308 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11309 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11310 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11311 		if (IS_CONST != IS_CONST) {
11312 			zend_string_release_ex(op1_str, 0);
11313 		}
11314 		if (IS_CV != IS_CONST) {
11315 			zend_string_release_ex(op2_str, 0);
11316 		}
11317 	} while (0);
11318 
11319 
11320 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11321 }
11322 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11323 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11324 {
11325 	USE_OPLINE
11326 	zval *function_name;
11327 	zval *object;
11328 	zend_function *fbc;
11329 	zend_class_entry *called_scope;
11330 	zend_object *obj;
11331 	zend_execute_data *call;
11332 	uint32_t call_info;
11333 
11334 	SAVE_OPLINE();
11335 
11336 	object = RT_CONSTANT(opline, opline->op1);
11337 
11338 	if (IS_CV != IS_CONST) {
11339 		function_name = EX_VAR(opline->op2.var);
11340 	}
11341 
11342 	if (IS_CV != IS_CONST &&
11343 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11344 		do {
11345 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
11346 				function_name = Z_REFVAL_P(function_name);
11347 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11348 					break;
11349 				}
11350 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11351 				ZVAL_UNDEFINED_OP2();
11352 				if (UNEXPECTED(EG(exception) != NULL)) {
11353 
11354 					HANDLE_EXCEPTION();
11355 				}
11356 			}
11357 			zend_throw_error(NULL, "Method name must be a string");
11358 
11359 
11360 			HANDLE_EXCEPTION();
11361 		} while (0);
11362 	}
11363 
11364 	if (IS_CONST == IS_UNUSED) {
11365 		obj = Z_OBJ_P(object);
11366 	} else {
11367 		do {
11368 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11369 				obj = Z_OBJ_P(object);
11370 			} else {
11371 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
11372 					zend_reference *ref = Z_REF_P(object);
11373 
11374 					object = &ref->val;
11375 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11376 						obj = Z_OBJ_P(object);
11377 						if (IS_CONST & IS_VAR) {
11378 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
11379 								efree_size(ref, sizeof(zend_reference));
11380 							} else {
11381 								Z_ADDREF_P(object);
11382 							}
11383 						}
11384 						break;
11385 					}
11386 				}
11387 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
11388 					object = ZVAL_UNDEFINED_OP1();
11389 					if (UNEXPECTED(EG(exception) != NULL)) {
11390 						if (IS_CV != IS_CONST) {
11391 
11392 						}
11393 						HANDLE_EXCEPTION();
11394 					}
11395 				}
11396 				if (IS_CV == IS_CONST) {
11397 					function_name = EX_VAR(opline->op2.var);
11398 				}
11399 				zend_invalid_method_call(object, function_name);
11400 
11401 
11402 				HANDLE_EXCEPTION();
11403 			}
11404 		} while (0);
11405 	}
11406 
11407 	called_scope = obj->ce;
11408 
11409 	if (IS_CV == IS_CONST &&
11410 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
11411 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
11412 	} else {
11413 	    zend_object *orig_obj = obj;
11414 
11415 		if (IS_CV == IS_CONST) {
11416 			function_name = EX_VAR(opline->op2.var);
11417 		}
11418 
11419 		/* First, locate the function. */
11420 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
11421 		if (UNEXPECTED(fbc == NULL)) {
11422 			if (EXPECTED(!EG(exception))) {
11423 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
11424 			}
11425 
11426 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
11427 				zend_objects_store_del(orig_obj);
11428 			}
11429 			HANDLE_EXCEPTION();
11430 		}
11431 		if (IS_CV == IS_CONST &&
11432 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
11433 		    EXPECTED(obj == orig_obj)) {
11434 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
11435 		}
11436 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
11437 			GC_ADDREF(obj); /* For $this pointer */
11438 			if (GC_DELREF(orig_obj) == 0) {
11439 				zend_objects_store_del(orig_obj);
11440 			}
11441 		}
11442 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
11443 			init_func_run_time_cache(&fbc->op_array);
11444 		}
11445 	}
11446 
11447 	if (IS_CV != IS_CONST) {
11448 
11449 	}
11450 
11451 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
11452 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
11453 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
11454 			zend_objects_store_del(obj);
11455 			if (UNEXPECTED(EG(exception))) {
11456 				HANDLE_EXCEPTION();
11457 			}
11458 		}
11459 		/* call static method */
11460 		obj = (zend_object*)called_scope;
11461 		call_info = ZEND_CALL_NESTED_FUNCTION;
11462 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
11463 		if (IS_CONST == IS_CV) {
11464 			GC_ADDREF(obj); /* For $this pointer */
11465 		}
11466 		/* CV may be changed indirectly (e.g. when it's a reference) */
11467 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
11468 	}
11469 
11470 	call = zend_vm_stack_push_call_frame(call_info,
11471 		fbc, opline->extended_value, obj);
11472 	call->prev_execute_data = EX(call);
11473 	EX(call) = call;
11474 
11475 	ZEND_VM_NEXT_OPCODE();
11476 }
11477 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11479 {
11480 	USE_OPLINE
11481 	zval *function_name;
11482 	zend_class_entry *ce;
11483 	uint32_t call_info;
11484 	zend_function *fbc;
11485 	zend_execute_data *call;
11486 
11487 	SAVE_OPLINE();
11488 
11489 	if (IS_CONST == IS_CONST) {
11490 		/* no function found. try a static method in class */
11491 		ce = CACHED_PTR(opline->result.num);
11492 		if (UNEXPECTED(ce == NULL)) {
11493 			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);
11494 			if (UNEXPECTED(ce == NULL)) {
11495 
11496 				HANDLE_EXCEPTION();
11497 			}
11498 			if (IS_CV != IS_CONST) {
11499 				CACHE_PTR(opline->result.num, ce);
11500 			}
11501 		}
11502 	} else if (IS_CONST == IS_UNUSED) {
11503 		ce = zend_fetch_class(NULL, opline->op1.num);
11504 		if (UNEXPECTED(ce == NULL)) {
11505 
11506 			HANDLE_EXCEPTION();
11507 		}
11508 	} else {
11509 		ce = Z_CE_P(EX_VAR(opline->op1.var));
11510 	}
11511 
11512 	if (IS_CONST == IS_CONST &&
11513 	    IS_CV == IS_CONST &&
11514 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
11515 		/* nothing to do */
11516 	} else if (IS_CONST != IS_CONST &&
11517 	           IS_CV == IS_CONST &&
11518 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
11519 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
11520 	} else if (IS_CV != IS_UNUSED) {
11521 		function_name = EX_VAR(opline->op2.var);
11522 		if (IS_CV != IS_CONST) {
11523 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11524 				do {
11525 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
11526 						function_name = Z_REFVAL_P(function_name);
11527 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11528 							break;
11529 						}
11530 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11531 						ZVAL_UNDEFINED_OP2();
11532 						if (UNEXPECTED(EG(exception) != NULL)) {
11533 							HANDLE_EXCEPTION();
11534 						}
11535 					}
11536 					zend_throw_error(NULL, "Method name must be a string");
11537 
11538 					HANDLE_EXCEPTION();
11539 				} while (0);
11540 			}
11541 		}
11542 
11543 		if (ce->get_static_method) {
11544 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
11545 		} else {
11546 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
11547 		}
11548 		if (UNEXPECTED(fbc == NULL)) {
11549 			if (EXPECTED(!EG(exception))) {
11550 				zend_undefined_method(ce, Z_STR_P(function_name));
11551 			}
11552 
11553 			HANDLE_EXCEPTION();
11554 		}
11555 		if (IS_CV == IS_CONST &&
11556 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
11557 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
11558 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
11559 		}
11560 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
11561 			init_func_run_time_cache(&fbc->op_array);
11562 		}
11563 		if (IS_CV != IS_CONST) {
11564 
11565 		}
11566 	} else {
11567 		if (UNEXPECTED(ce->constructor == NULL)) {
11568 			zend_throw_error(NULL, "Cannot call constructor");
11569 			HANDLE_EXCEPTION();
11570 		}
11571 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
11572 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
11573 			HANDLE_EXCEPTION();
11574 		}
11575 		fbc = ce->constructor;
11576 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
11577 			init_func_run_time_cache(&fbc->op_array);
11578 		}
11579 	}
11580 
11581 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
11582 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
11583 			ce = (zend_class_entry*)Z_OBJ(EX(This));
11584 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
11585 		} else {
11586 			zend_non_static_method_call(fbc);
11587 			HANDLE_EXCEPTION();
11588 		}
11589 	} else {
11590 		/* previous opcode is ZEND_FETCH_CLASS */
11591 		if (IS_CONST == IS_UNUSED
11592 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
11593 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
11594 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
11595 				ce = Z_OBJCE(EX(This));
11596 			} else {
11597 				ce = Z_CE(EX(This));
11598 			}
11599 		}
11600 		call_info = ZEND_CALL_NESTED_FUNCTION;
11601 	}
11602 
11603 	call = zend_vm_stack_push_call_frame(call_info,
11604 		fbc, opline->extended_value, ce);
11605 	call->prev_execute_data = EX(call);
11606 	EX(call) = call;
11607 
11608 	ZEND_VM_NEXT_OPCODE();
11609 }
11610 
ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11611 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11612 {
11613 	USE_OPLINE
11614 	zval *function_name;
11615 	zend_fcall_info_cache fcc;
11616 	char *error = NULL;
11617 	zend_function *func;
11618 	void *object_or_called_scope;
11619 	zend_execute_data *call;
11620 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
11621 
11622 	SAVE_OPLINE();
11623 	function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11624 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
11625 		ZEND_ASSERT(!error);
11626 		func = fcc.function_handler;
11627 		object_or_called_scope = fcc.called_scope;
11628 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
11629 			/* Delay closure destruction until its invocation */
11630 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
11631 			call_info |= ZEND_CALL_CLOSURE;
11632 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
11633 				call_info |= ZEND_CALL_FAKE_CLOSURE;
11634 			}
11635 			if (fcc.object) {
11636 				object_or_called_scope = fcc.object;
11637 				call_info |= ZEND_CALL_HAS_THIS;
11638 			}
11639 		} else if (fcc.object) {
11640 			GC_ADDREF(fcc.object); /* For $this pointer */
11641 			object_or_called_scope = fcc.object;
11642 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
11643 		}
11644 
11645 		if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
11646 			if (call_info & ZEND_CALL_CLOSURE) {
11647 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
11648 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
11649 				zend_object_release(fcc.object);
11650 			}
11651 			HANDLE_EXCEPTION();
11652 		}
11653 
11654 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
11655 			init_func_run_time_cache(&func->op_array);
11656 		}
11657 	} else {
11658 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
11659 		efree(error);
11660 
11661 		HANDLE_EXCEPTION();
11662 	}
11663 
11664 	call = zend_vm_stack_push_call_frame(call_info,
11665 		func, opline->extended_value, object_or_called_scope);
11666 	call->prev_execute_data = EX(call);
11667 	EX(call) = call;
11668 
11669 	ZEND_VM_NEXT_OPCODE();
11670 }
11671 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11673 {
11674 	USE_OPLINE
11675 	zval *expr_ptr, new_expr;
11676 
11677 	SAVE_OPLINE();
11678 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
11679 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
11680 		expr_ptr = NULL;
11681 		if (Z_ISREF_P(expr_ptr)) {
11682 			Z_ADDREF_P(expr_ptr);
11683 		} else {
11684 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
11685 		}
11686 
11687 	} else {
11688 		expr_ptr = RT_CONSTANT(opline, opline->op1);
11689 		if (IS_CONST == IS_TMP_VAR) {
11690 			/* pass */
11691 		} else if (IS_CONST == IS_CONST) {
11692 			Z_TRY_ADDREF_P(expr_ptr);
11693 		} else if (IS_CONST == IS_CV) {
11694 			ZVAL_DEREF(expr_ptr);
11695 			Z_TRY_ADDREF_P(expr_ptr);
11696 		} else /* if (IS_CONST == IS_VAR) */ {
11697 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
11698 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
11699 
11700 				expr_ptr = Z_REFVAL_P(expr_ptr);
11701 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
11702 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
11703 					expr_ptr = &new_expr;
11704 					efree_size(ref, sizeof(zend_reference));
11705 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
11706 					Z_ADDREF_P(expr_ptr);
11707 				}
11708 			}
11709 		}
11710 	}
11711 
11712 	if (IS_CV != IS_UNUSED) {
11713 		zval *offset = EX_VAR(opline->op2.var);
11714 		zend_string *str;
11715 		zend_ulong hval;
11716 
11717 add_again:
11718 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
11719 			str = Z_STR_P(offset);
11720 			if (IS_CV != IS_CONST) {
11721 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
11722 					goto num_index;
11723 				}
11724 			}
11725 str_index:
11726 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
11727 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11728 			hval = Z_LVAL_P(offset);
11729 num_index:
11730 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
11731 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
11732 			offset = Z_REFVAL_P(offset);
11733 			goto add_again;
11734 		} else if (Z_TYPE_P(offset) == IS_NULL) {
11735 			str = ZSTR_EMPTY_ALLOC();
11736 			goto str_index;
11737 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
11738 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
11739 			goto num_index;
11740 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
11741 			hval = 0;
11742 			goto num_index;
11743 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
11744 			hval = 1;
11745 			goto num_index;
11746 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
11747 			zend_use_resource_as_offset(offset);
11748 			hval = Z_RES_HANDLE_P(offset);
11749 			goto num_index;
11750 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
11751 			ZVAL_UNDEFINED_OP2();
11752 			str = ZSTR_EMPTY_ALLOC();
11753 			goto str_index;
11754 		} else {
11755 			zend_illegal_offset();
11756 			zval_ptr_dtor_nogc(expr_ptr);
11757 		}
11758 
11759 	} else {
11760 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
11761 			zend_cannot_add_element();
11762 			zval_ptr_dtor_nogc(expr_ptr);
11763 		}
11764 	}
11765 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11766 }
11767 
ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11768 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11769 {
11770 	zval *array;
11771 	uint32_t size;
11772 	USE_OPLINE
11773 
11774 	array = EX_VAR(opline->result.var);
11775 	if (IS_CONST != IS_UNUSED) {
11776 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
11777 		ZVAL_ARR(array, zend_new_array(size));
11778 		/* Explicitly initialize array as not-packed if flag is set */
11779 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
11780 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
11781 		}
11782 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11783 	} else {
11784 		ZVAL_ARR(array, zend_new_array(0));
11785 		ZEND_VM_NEXT_OPCODE();
11786 	}
11787 }
11788 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11789 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11790 {
11791 	USE_OPLINE
11792 	zval *container;
11793 	bool result;
11794 	zend_ulong hval;
11795 	zval *offset;
11796 
11797 	SAVE_OPLINE();
11798 	container = RT_CONSTANT(opline, opline->op1);
11799 	offset = EX_VAR(opline->op2.var);
11800 
11801 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11802 		HashTable *ht;
11803 		zval *value;
11804 		zend_string *str;
11805 
11806 isset_dim_obj_array:
11807 		ht = Z_ARRVAL_P(container);
11808 isset_again:
11809 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
11810 			str = Z_STR_P(offset);
11811 			if (IS_CV != IS_CONST) {
11812 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
11813 					goto num_index_prop;
11814 				}
11815 			}
11816 			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
11817 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11818 			hval = Z_LVAL_P(offset);
11819 num_index_prop:
11820 			value = zend_hash_index_find(ht, hval);
11821 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
11822 			offset = Z_REFVAL_P(offset);
11823 			goto isset_again;
11824 		} else {
11825 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
11826 			if (UNEXPECTED(EG(exception))) {
11827 				result = 0;
11828 				goto isset_dim_obj_exit;
11829 			}
11830 		}
11831 
11832 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
11833 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
11834 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
11835 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
11836 
11837 			if (IS_CONST & (IS_CONST|IS_CV)) {
11838 				/* avoid exception check */
11839 
11840 				ZEND_VM_SMART_BRANCH(result, 0);
11841 			}
11842 		} else {
11843 			result = (value == NULL || !i_zend_is_true(value));
11844 		}
11845 		goto isset_dim_obj_exit;
11846 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
11847 		container = Z_REFVAL_P(container);
11848 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11849 			goto isset_dim_obj_array;
11850 		}
11851 	}
11852 
11853 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
11854 		offset++;
11855 	}
11856 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
11857 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
11858 	} else {
11859 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
11860 	}
11861 
11862 isset_dim_obj_exit:
11863 
11864 
11865 	ZEND_VM_SMART_BRANCH(result, 1);
11866 }
11867 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11868 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11869 {
11870 	USE_OPLINE
11871 	zval *container;
11872 	int result;
11873 	zval *offset;
11874 	zend_string *name, *tmp_name;
11875 
11876 	SAVE_OPLINE();
11877 	container = RT_CONSTANT(opline, opline->op1);
11878 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11879 
11880 	if (IS_CONST == IS_CONST ||
11881 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11882 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11883 			container = Z_REFVAL_P(container);
11884 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
11885 				result = (opline->extended_value & ZEND_ISEMPTY);
11886 				goto isset_object_finish;
11887 			}
11888 		} else {
11889 			result = (opline->extended_value & ZEND_ISEMPTY);
11890 			goto isset_object_finish;
11891 		}
11892 	}
11893 
11894 	if (IS_CV == IS_CONST) {
11895 		name = Z_STR_P(offset);
11896 	} else {
11897 		name = zval_try_get_tmp_string(offset, &tmp_name);
11898 		if (UNEXPECTED(!name)) {
11899 			result = 0;
11900 			goto isset_object_finish;
11901 		}
11902 	}
11903 
11904 	result =
11905 		(opline->extended_value & ZEND_ISEMPTY) ^
11906 		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));
11907 
11908 	if (IS_CV != IS_CONST) {
11909 		zend_tmp_string_release(tmp_name);
11910 	}
11911 
11912 isset_object_finish:
11913 
11914 
11915 	ZEND_VM_SMART_BRANCH(result, 1);
11916 }
11917 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11918 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11919 {
11920 	USE_OPLINE
11921 
11922 	zval *key, *subject;
11923 	HashTable *ht;
11924 	bool result;
11925 
11926 	SAVE_OPLINE();
11927 
11928 	key = RT_CONSTANT(opline, opline->op1);
11929 	subject = EX_VAR(opline->op2.var);
11930 
11931 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
11932 array_key_exists_array:
11933 		ht = Z_ARRVAL_P(subject);
11934 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
11935 	} else {
11936 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
11937 			subject = Z_REFVAL_P(subject);
11938 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
11939 				goto array_key_exists_array;
11940 			}
11941 		}
11942 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
11943 		result = 0;
11944 	}
11945 
11946 
11947 	ZEND_VM_SMART_BRANCH(result, 1);
11948 }
11949 
11950 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11951 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11952 {
11953 	USE_OPLINE
11954 
11955 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
11956 
11957 	SAVE_OPLINE();
11958 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
11959 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11960 	}
11961 
11962 	/* Destroy the previously yielded value */
11963 	zval_ptr_dtor(&generator->value);
11964 
11965 	/* Destroy the previously yielded key */
11966 	zval_ptr_dtor(&generator->key);
11967 
11968 	/* Set the new yielded value */
11969 	if (IS_CONST != IS_UNUSED) {
11970 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
11971 			/* Constants and temporary variables aren't yieldable by reference,
11972 			 * but we still allow them with a notice. */
11973 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
11974 				zval *value;
11975 
11976 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
11977 
11978 				value = RT_CONSTANT(opline, opline->op1);
11979 				ZVAL_COPY_VALUE(&generator->value, value);
11980 				if (IS_CONST == IS_CONST) {
11981 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
11982 						Z_ADDREF(generator->value);
11983 					}
11984 				}
11985 			} else {
11986 				zval *value_ptr = NULL;
11987 
11988 				/* If a function call result is yielded and the function did
11989 				 * not return by reference we throw a notice. */
11990 				do {
11991 					if (IS_CONST == IS_VAR) {
11992 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
11993 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
11994 						 && !Z_ISREF_P(value_ptr)) {
11995 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
11996 							ZVAL_COPY(&generator->value, value_ptr);
11997 							break;
11998 						}
11999 					}
12000 					if (Z_ISREF_P(value_ptr)) {
12001 						Z_ADDREF_P(value_ptr);
12002 					} else {
12003 						ZVAL_MAKE_REF_EX(value_ptr, 2);
12004 					}
12005 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
12006 				} while (0);
12007 
12008 			}
12009 		} else {
12010 			zval *value = RT_CONSTANT(opline, opline->op1);
12011 
12012 			/* Consts, temporary variables and references need copying */
12013 			if (IS_CONST == IS_CONST) {
12014 				ZVAL_COPY_VALUE(&generator->value, value);
12015 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
12016 					Z_ADDREF(generator->value);
12017 				}
12018 			} else if (IS_CONST == IS_TMP_VAR) {
12019 				ZVAL_COPY_VALUE(&generator->value, value);
12020             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
12021 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
12022 
12023 			} else {
12024 				ZVAL_COPY_VALUE(&generator->value, value);
12025 				if (IS_CONST == IS_CV) {
12026 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
12027 				}
12028 			}
12029 		}
12030 	} else {
12031 		/* If no value was specified yield null */
12032 		ZVAL_NULL(&generator->value);
12033 	}
12034 
12035 	/* Set the new yielded key */
12036 	if (IS_CV != IS_UNUSED) {
12037 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
12038 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
12039 			key = Z_REFVAL_P(key);
12040 		}
12041 		ZVAL_COPY(&generator->key, key);
12042 
12043 		if (Z_TYPE(generator->key) == IS_LONG
12044 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
12045 		) {
12046 			generator->largest_used_integer_key = Z_LVAL(generator->key);
12047 		}
12048 	} else {
12049 		/* If no key was specified we use auto-increment keys */
12050 		generator->largest_used_integer_key++;
12051 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
12052 	}
12053 
12054 	if (RETURN_VALUE_USED(opline)) {
12055 		/* If the return value of yield is used set the send
12056 		 * target and initialize it to NULL */
12057 		generator->send_target = EX_VAR(opline->result.var);
12058 		ZVAL_NULL(generator->send_target);
12059 	} else {
12060 		generator->send_target = NULL;
12061 	}
12062 
12063 	/* We increment to the next op, so we are at the correct position when the
12064 	 * generator is resumed. */
12065 	ZEND_VM_INC_OPCODE();
12066 
12067 	/* The GOTO VM uses a local opline variable. We need to set the opline
12068 	 * variable in execute_data so we don't resume at an old position. */
12069 	SAVE_OPLINE();
12070 
12071 	ZEND_VM_RETURN();
12072 }
12073 
ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12074 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12075 {
12076 	USE_OPLINE
12077 	zval *op1;
12078 
12079 	op1 = EX_VAR(opline->op1.var);
12080 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12081 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
12082 		ZEND_VM_NEXT_OPCODE();
12083 	}
12084 
12085 	ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12086 }
12087 
ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12088 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12089 {
12090 	USE_OPLINE
12091 	zval *value;
12092 
12093 	value = EX_VAR(opline->op1.var);
12094 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
12095 	ZEND_VM_NEXT_OPCODE();
12096 }
12097 
ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12098 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12099 {
12100 	USE_OPLINE
12101 	zval *value;
12102 
12103 	value = EX_VAR(opline->op1.var);
12104 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
12105 	ZEND_VM_NEXT_OPCODE();
12106 }
12107 
ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12108 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12109 {
12110 	USE_OPLINE
12111 	zval *value;
12112 
12113 	value = EX_VAR(opline->op1.var);
12114 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
12115 	ZEND_VM_NEXT_OPCODE();
12116 }
12117 
ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12118 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12119 {
12120 	USE_OPLINE
12121 	zval *op1, *op2, *result;
12122 	double d1, d2;
12123 
12124 	op1 = EX_VAR(opline->op1.var);
12125 	op2 = RT_CONSTANT(opline, opline->op2);
12126 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12127 		/* pass */
12128 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12129 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12130 			result = EX_VAR(opline->result.var);
12131 			fast_long_add_function(result, op1, op2);
12132 			ZEND_VM_NEXT_OPCODE();
12133 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12134 			d1 = (double)Z_LVAL_P(op1);
12135 			d2 = Z_DVAL_P(op2);
12136 			goto add_double;
12137 		}
12138 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12139 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12140 			d1 = Z_DVAL_P(op1);
12141 			d2 = Z_DVAL_P(op2);
12142 add_double:
12143 			result = EX_VAR(opline->result.var);
12144 			ZVAL_DOUBLE(result, d1 + d2);
12145 			ZEND_VM_NEXT_OPCODE();
12146 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12147 			d1 = Z_DVAL_P(op1);
12148 			d2 = (double)Z_LVAL_P(op2);
12149 			goto add_double;
12150 		}
12151 	}
12152 
12153 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12154 }
12155 
ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12156 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12157 {
12158 	USE_OPLINE
12159 	zval *op1, *op2, *result;
12160 	double d1, d2;
12161 
12162 	op1 = EX_VAR(opline->op1.var);
12163 	op2 = RT_CONSTANT(opline, opline->op2);
12164 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12165 		/* pass */
12166 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12167 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12168 			result = EX_VAR(opline->result.var);
12169 			fast_long_sub_function(result, op1, op2);
12170 			ZEND_VM_NEXT_OPCODE();
12171 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12172 			d1 = (double)Z_LVAL_P(op1);
12173 			d2 = Z_DVAL_P(op2);
12174 			goto sub_double;
12175 		}
12176 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12177 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12178 			d1 = Z_DVAL_P(op1);
12179 			d2 = Z_DVAL_P(op2);
12180 sub_double:
12181 			result = EX_VAR(opline->result.var);
12182 			ZVAL_DOUBLE(result, d1 - d2);
12183 			ZEND_VM_NEXT_OPCODE();
12184 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12185 			d1 = Z_DVAL_P(op1);
12186 			d2 = (double)Z_LVAL_P(op2);
12187 			goto sub_double;
12188 		}
12189 	}
12190 
12191 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12192 }
12193 
ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12194 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12195 {
12196 	USE_OPLINE
12197 	zval *op1, *op2, *result;
12198 	double d1, d2;
12199 
12200 	op1 = EX_VAR(opline->op1.var);
12201 	op2 = RT_CONSTANT(opline, opline->op2);
12202 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12203 		/* pass */
12204 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12205 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12206 			zend_long overflow;
12207 
12208 			result = EX_VAR(opline->result.var);
12209 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
12210 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
12211 			ZEND_VM_NEXT_OPCODE();
12212 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12213 			d1 = (double)Z_LVAL_P(op1);
12214 			d2 = Z_DVAL_P(op2);
12215 			goto mul_double;
12216 		}
12217 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12218 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12219 			d1 = Z_DVAL_P(op1);
12220 			d2 = Z_DVAL_P(op2);
12221 mul_double:
12222 			result = EX_VAR(opline->result.var);
12223 			ZVAL_DOUBLE(result, d1 * d2);
12224 			ZEND_VM_NEXT_OPCODE();
12225 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12226 			d1 = Z_DVAL_P(op1);
12227 			d2 = (double)Z_LVAL_P(op2);
12228 			goto mul_double;
12229 		}
12230 	}
12231 
12232 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12233 }
12234 
ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12235 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12236 {
12237 	USE_OPLINE
12238 	zval *op1, *op2, *result;
12239 
12240 	op1 = EX_VAR(opline->op1.var);
12241 	op2 = RT_CONSTANT(opline, opline->op2);
12242 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12243 		/* pass */
12244 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12245 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12246 			result = EX_VAR(opline->result.var);
12247 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
12248 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12249 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
12250 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
12251 				ZVAL_LONG(result, 0);
12252 			} else {
12253 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
12254 			}
12255 			ZEND_VM_NEXT_OPCODE();
12256 		}
12257 	}
12258 
12259 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12260 }
12261 
ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12262 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12263 {
12264 	USE_OPLINE
12265 	zval *op1, *op2;
12266 
12267 	op1 = EX_VAR(opline->op1.var);
12268 	op2 = RT_CONSTANT(opline, opline->op2);
12269 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12270 		/* pass */
12271 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12272 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12273 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12274 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
12275 		ZVAL_LONG(EX_VAR(opline->result.var),
12276 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
12277 		ZEND_VM_NEXT_OPCODE();
12278 	}
12279 
12280 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12281 }
12282 
ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12283 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12284 {
12285 	USE_OPLINE
12286 	zval *op1, *op2;
12287 
12288 	op1 = EX_VAR(opline->op1.var);
12289 	op2 = RT_CONSTANT(opline, opline->op2);
12290 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12291 		/* pass */
12292 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12293 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12294 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12295 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
12296 		ZEND_VM_NEXT_OPCODE();
12297 	}
12298 
12299 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12300 }
12301 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12302 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12303 {
12304 	USE_OPLINE
12305 	zval *op1, *op2;
12306 	double d1, d2;
12307 
12308 	op1 = EX_VAR(opline->op1.var);
12309 	op2 = RT_CONSTANT(opline, opline->op2);
12310 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12311 		/* pass */
12312 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12313 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12314 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12315 is_smaller_true:
12316 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
12317 			} else {
12318 is_smaller_false:
12319 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
12320 			}
12321 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12322 			d1 = (double)Z_LVAL_P(op1);
12323 			d2 = Z_DVAL_P(op2);
12324 			goto is_smaller_double;
12325 		}
12326 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12327 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12328 			d1 = Z_DVAL_P(op1);
12329 			d2 = Z_DVAL_P(op2);
12330 is_smaller_double:
12331 			if (d1 < d2) {
12332 				goto is_smaller_true;
12333 			} else {
12334 				goto is_smaller_false;
12335 			}
12336 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12337 			d1 = Z_DVAL_P(op1);
12338 			d2 = (double)Z_LVAL_P(op2);
12339 			goto is_smaller_double;
12340 		}
12341 	}
12342 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12343 }
12344 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12345 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12346 {
12347 	USE_OPLINE
12348 	zval *op1, *op2;
12349 	double d1, d2;
12350 
12351 	op1 = EX_VAR(opline->op1.var);
12352 	op2 = RT_CONSTANT(opline, opline->op2);
12353 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12354 		/* pass */
12355 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12356 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12357 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12358 is_smaller_true:
12359 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
12360 			} else {
12361 is_smaller_false:
12362 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
12363 			}
12364 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12365 			d1 = (double)Z_LVAL_P(op1);
12366 			d2 = Z_DVAL_P(op2);
12367 			goto is_smaller_double;
12368 		}
12369 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12370 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12371 			d1 = Z_DVAL_P(op1);
12372 			d2 = Z_DVAL_P(op2);
12373 is_smaller_double:
12374 			if (d1 < d2) {
12375 				goto is_smaller_true;
12376 			} else {
12377 				goto is_smaller_false;
12378 			}
12379 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12380 			d1 = Z_DVAL_P(op1);
12381 			d2 = (double)Z_LVAL_P(op2);
12382 			goto is_smaller_double;
12383 		}
12384 	}
12385 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12386 }
12387 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12388 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12389 {
12390 	USE_OPLINE
12391 	zval *op1, *op2;
12392 	double d1, d2;
12393 
12394 	op1 = EX_VAR(opline->op1.var);
12395 	op2 = RT_CONSTANT(opline, opline->op2);
12396 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12397 		/* pass */
12398 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12399 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12400 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12401 is_smaller_true:
12402 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
12403 			} else {
12404 is_smaller_false:
12405 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
12406 			}
12407 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12408 			d1 = (double)Z_LVAL_P(op1);
12409 			d2 = Z_DVAL_P(op2);
12410 			goto is_smaller_double;
12411 		}
12412 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12413 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12414 			d1 = Z_DVAL_P(op1);
12415 			d2 = Z_DVAL_P(op2);
12416 is_smaller_double:
12417 			if (d1 < d2) {
12418 				goto is_smaller_true;
12419 			} else {
12420 				goto is_smaller_false;
12421 			}
12422 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12423 			d1 = Z_DVAL_P(op1);
12424 			d2 = (double)Z_LVAL_P(op2);
12425 			goto is_smaller_double;
12426 		}
12427 	}
12428 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12429 }
12430 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12431 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12432 {
12433 	USE_OPLINE
12434 	zval *op1, *op2;
12435 	double d1, d2;
12436 
12437 	op1 = EX_VAR(opline->op1.var);
12438 	op2 = RT_CONSTANT(opline, opline->op2);
12439 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12440 		/* pass */
12441 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12442 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12443 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12444 is_smaller_or_equal_true:
12445 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
12446 				ZVAL_TRUE(EX_VAR(opline->result.var));
12447 				ZEND_VM_NEXT_OPCODE();
12448 			} else {
12449 is_smaller_or_equal_false:
12450 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
12451 				ZVAL_FALSE(EX_VAR(opline->result.var));
12452 				ZEND_VM_NEXT_OPCODE();
12453 			}
12454 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12455 			d1 = (double)Z_LVAL_P(op1);
12456 			d2 = Z_DVAL_P(op2);
12457 			goto is_smaller_or_equal_double;
12458 		}
12459 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12460 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12461 			d1 = Z_DVAL_P(op1);
12462 			d2 = Z_DVAL_P(op2);
12463 is_smaller_or_equal_double:
12464 			if (d1 <= d2) {
12465 				goto is_smaller_or_equal_true;
12466 			} else {
12467 				goto is_smaller_or_equal_false;
12468 			}
12469 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12470 			d1 = Z_DVAL_P(op1);
12471 			d2 = (double)Z_LVAL_P(op2);
12472 			goto is_smaller_or_equal_double;
12473 		}
12474 	}
12475 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12476 }
12477 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12478 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12479 {
12480 	USE_OPLINE
12481 	zval *op1, *op2;
12482 	double d1, d2;
12483 
12484 	op1 = EX_VAR(opline->op1.var);
12485 	op2 = RT_CONSTANT(opline, opline->op2);
12486 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12487 		/* pass */
12488 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12489 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12490 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12491 is_smaller_or_equal_true:
12492 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
12493 				ZVAL_TRUE(EX_VAR(opline->result.var));
12494 				ZEND_VM_NEXT_OPCODE();
12495 			} else {
12496 is_smaller_or_equal_false:
12497 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
12498 				ZVAL_FALSE(EX_VAR(opline->result.var));
12499 				ZEND_VM_NEXT_OPCODE();
12500 			}
12501 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12502 			d1 = (double)Z_LVAL_P(op1);
12503 			d2 = Z_DVAL_P(op2);
12504 			goto is_smaller_or_equal_double;
12505 		}
12506 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12507 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12508 			d1 = Z_DVAL_P(op1);
12509 			d2 = Z_DVAL_P(op2);
12510 is_smaller_or_equal_double:
12511 			if (d1 <= d2) {
12512 				goto is_smaller_or_equal_true;
12513 			} else {
12514 				goto is_smaller_or_equal_false;
12515 			}
12516 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12517 			d1 = Z_DVAL_P(op1);
12518 			d2 = (double)Z_LVAL_P(op2);
12519 			goto is_smaller_or_equal_double;
12520 		}
12521 	}
12522 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12523 }
12524 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12525 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12526 {
12527 	USE_OPLINE
12528 	zval *op1, *op2;
12529 	double d1, d2;
12530 
12531 	op1 = EX_VAR(opline->op1.var);
12532 	op2 = RT_CONSTANT(opline, opline->op2);
12533 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12534 		/* pass */
12535 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12536 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12537 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12538 is_smaller_or_equal_true:
12539 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
12540 				ZVAL_TRUE(EX_VAR(opline->result.var));
12541 				ZEND_VM_NEXT_OPCODE();
12542 			} else {
12543 is_smaller_or_equal_false:
12544 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
12545 				ZVAL_FALSE(EX_VAR(opline->result.var));
12546 				ZEND_VM_NEXT_OPCODE();
12547 			}
12548 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12549 			d1 = (double)Z_LVAL_P(op1);
12550 			d2 = Z_DVAL_P(op2);
12551 			goto is_smaller_or_equal_double;
12552 		}
12553 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12554 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12555 			d1 = Z_DVAL_P(op1);
12556 			d2 = Z_DVAL_P(op2);
12557 is_smaller_or_equal_double:
12558 			if (d1 <= d2) {
12559 				goto is_smaller_or_equal_true;
12560 			} else {
12561 				goto is_smaller_or_equal_false;
12562 			}
12563 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12564 			d1 = Z_DVAL_P(op1);
12565 			d2 = (double)Z_LVAL_P(op2);
12566 			goto is_smaller_or_equal_double;
12567 		}
12568 	}
12569 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12570 }
12571 
ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12572 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12573 {
12574 	USE_OPLINE
12575 	zval *op1, *op2;
12576 
12577 	op1 = EX_VAR(opline->op1.var);
12578 	op2 = RT_CONSTANT(opline, opline->op2);
12579 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12580 		/* pass */
12581 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12582 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12583 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
12584 		ZEND_VM_NEXT_OPCODE();
12585 	}
12586 
12587 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12588 }
12589 
ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12590 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12591 {
12592 	USE_OPLINE
12593 	zval *op1, *op2;
12594 
12595 	op1 = EX_VAR(opline->op1.var);
12596 	op2 = RT_CONSTANT(opline, opline->op2);
12597 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12598 		/* pass */
12599 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12600 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12601 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
12602 		ZEND_VM_NEXT_OPCODE();
12603 	}
12604 
12605 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12606 }
12607 
ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12608 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12609 {
12610 	USE_OPLINE
12611 	zval *op1, *op2;
12612 
12613 	op1 = EX_VAR(opline->op1.var);
12614 	op2 = RT_CONSTANT(opline, opline->op2);
12615 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12616 		/* pass */
12617 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12618 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12619 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
12620 		ZEND_VM_NEXT_OPCODE();
12621 	}
12622 
12623 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12624 }
12625 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12626 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12627 {
12628 	USE_OPLINE
12629 	zval *container;
12630 
12631 	SAVE_OPLINE();
12632 	container = EX_VAR(opline->op1.var);
12633 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
12634 
12635 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12636 }
12637 
ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12638 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12639 {
12640 	USE_OPLINE
12641 	zval *op, *jump_zv;
12642 	HashTable *jumptable;
12643 
12644 	op = EX_VAR(opline->op1.var);
12645 
12646 	if (Z_TYPE_P(op) != IS_LONG) {
12647 		ZVAL_DEREF(op);
12648 		if (Z_TYPE_P(op) != IS_LONG) {
12649 			/* Wrong type, fall back to ZEND_CASE chain */
12650 			ZEND_VM_NEXT_OPCODE();
12651 		}
12652 	}
12653 
12654 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
12655 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
12656 	if (jump_zv != NULL) {
12657 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
12658 		ZEND_VM_CONTINUE();
12659 	} else {
12660 		/* default */
12661 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
12662 		ZEND_VM_CONTINUE();
12663 	}
12664 }
12665 
ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12666 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12667 {
12668 	USE_OPLINE
12669 	zval *op, *jump_zv;
12670 	HashTable *jumptable;
12671 
12672 	op = EX_VAR(opline->op1.var);
12673 
12674 	if (Z_TYPE_P(op) != IS_STRING) {
12675 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12676 			/* Wrong type, fall back to ZEND_CASE chain */
12677 			ZEND_VM_NEXT_OPCODE();
12678 		} else {
12679 			ZVAL_DEREF(op);
12680 			if (Z_TYPE_P(op) != IS_STRING) {
12681 				/* Wrong type, fall back to ZEND_CASE chain */
12682 				ZEND_VM_NEXT_OPCODE();
12683 			}
12684 		}
12685 	}
12686 
12687 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
12688 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
12689 	if (jump_zv != NULL) {
12690 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
12691 		ZEND_VM_CONTINUE();
12692 	} else {
12693 		/* default */
12694 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
12695 		ZEND_VM_CONTINUE();
12696 	}
12697 }
12698 
ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12699 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12700 {
12701 	USE_OPLINE
12702 	zval *op, *jump_zv;
12703 	HashTable *jumptable;
12704 
12705 	op = EX_VAR(opline->op1.var);
12706 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
12707 
12708 match_try_again:
12709 	if (Z_TYPE_P(op) == IS_LONG) {
12710 		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
12711 	} else if (Z_TYPE_P(op) == IS_STRING) {
12712 		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
12713 	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
12714 		op = Z_REFVAL_P(op);
12715 		goto match_try_again;
12716 	} else {
12717 		if (UNEXPECTED(((IS_TMP_VAR|IS_VAR|IS_CV) & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
12718 			SAVE_OPLINE();
12719 			op = ZVAL_UNDEFINED_OP1();
12720 			if (UNEXPECTED(EG(exception))) {
12721 				HANDLE_EXCEPTION();
12722 			}
12723 			goto match_try_again;
12724 		}
12725 
12726 		goto default_branch;
12727 	}
12728 
12729 	if (jump_zv != NULL) {
12730 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
12731 		ZEND_VM_CONTINUE();
12732 	} else {
12733 default_branch:
12734 		/* default */
12735 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
12736 		ZEND_VM_CONTINUE();
12737 	}
12738 }
12739 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12740 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12741 {
12742 	USE_OPLINE
12743 	zval *op1, *op2, *result;
12744 
12745 	op1 = EX_VAR(opline->op1.var);
12746 	op2 = RT_CONSTANT(opline, opline->op2);
12747 	result = EX_VAR(opline->result.var);
12748 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
12749 	ZEND_VM_NEXT_OPCODE();
12750 }
12751 
ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12752 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12753 {
12754 	USE_OPLINE
12755 	zval *op1, *op2, *result;
12756 
12757 	op1 = EX_VAR(opline->op1.var);
12758 	op2 = RT_CONSTANT(opline, opline->op2);
12759 	result = EX_VAR(opline->result.var);
12760 	fast_long_add_function(result, op1, op2);
12761 	ZEND_VM_NEXT_OPCODE();
12762 }
12763 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12764 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12765 {
12766 	USE_OPLINE
12767 	zval *op1, *op2, *result;
12768 
12769 	op1 = EX_VAR(opline->op1.var);
12770 	op2 = RT_CONSTANT(opline, opline->op2);
12771 	result = EX_VAR(opline->result.var);
12772 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
12773 	ZEND_VM_NEXT_OPCODE();
12774 }
12775 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12776 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12777 {
12778 	USE_OPLINE
12779 	zval *op1, *op2, *result;
12780 
12781 	op1 = EX_VAR(opline->op1.var);
12782 	op2 = RT_CONSTANT(opline, opline->op2);
12783 	result = EX_VAR(opline->result.var);
12784 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
12785 	ZEND_VM_NEXT_OPCODE();
12786 }
12787 
ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12788 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12789 {
12790 	USE_OPLINE
12791 	zval *op1, *op2, *result;
12792 
12793 	op1 = EX_VAR(opline->op1.var);
12794 	op2 = RT_CONSTANT(opline, opline->op2);
12795 	result = EX_VAR(opline->result.var);
12796 	fast_long_sub_function(result, op1, op2);
12797 	ZEND_VM_NEXT_OPCODE();
12798 }
12799 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12800 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12801 {
12802 	USE_OPLINE
12803 	zval *op1, *op2, *result;
12804 
12805 	op1 = EX_VAR(opline->op1.var);
12806 	op2 = RT_CONSTANT(opline, opline->op2);
12807 	result = EX_VAR(opline->result.var);
12808 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
12809 	ZEND_VM_NEXT_OPCODE();
12810 }
12811 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12812 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12813 {
12814 	USE_OPLINE
12815 	zval *op1, *op2, *result;
12816 
12817 	op1 = EX_VAR(opline->op1.var);
12818 	op2 = RT_CONSTANT(opline, opline->op2);
12819 	result = EX_VAR(opline->result.var);
12820 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
12821 	ZEND_VM_NEXT_OPCODE();
12822 }
12823 
ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12824 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12825 {
12826 	USE_OPLINE
12827 	zval *op1, *op2, *result;
12828 	zend_long overflow;
12829 
12830 	op1 = EX_VAR(opline->op1.var);
12831 	op2 = RT_CONSTANT(opline, opline->op2);
12832 	result = EX_VAR(opline->result.var);
12833 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
12834 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
12835 	ZEND_VM_NEXT_OPCODE();
12836 }
12837 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12838 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12839 {
12840 	USE_OPLINE
12841 	zval *op1, *op2, *result;
12842 
12843 	op1 = EX_VAR(opline->op1.var);
12844 	op2 = RT_CONSTANT(opline, opline->op2);
12845 	result = EX_VAR(opline->result.var);
12846 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
12847 	ZEND_VM_NEXT_OPCODE();
12848 }
12849 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12851 {
12852 	USE_OPLINE
12853 	zval *op1, *op2;
12854 	bool result;
12855 
12856 	op1 = EX_VAR(opline->op1.var);
12857 	op2 = RT_CONSTANT(opline, opline->op2);
12858 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12859 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12860 }
12861 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12862 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12863 {
12864 	USE_OPLINE
12865 	zval *op1, *op2;
12866 	bool result;
12867 
12868 	op1 = EX_VAR(opline->op1.var);
12869 	op2 = RT_CONSTANT(opline, opline->op2);
12870 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12871 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12872 }
12873 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12874 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12875 {
12876 	USE_OPLINE
12877 	zval *op1, *op2;
12878 	bool result;
12879 
12880 	op1 = EX_VAR(opline->op1.var);
12881 	op2 = RT_CONSTANT(opline, opline->op2);
12882 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12883 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12884 }
12885 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12886 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12887 {
12888 	USE_OPLINE
12889 	zval *op1, *op2;
12890 	bool result;
12891 
12892 	op1 = EX_VAR(opline->op1.var);
12893 	op2 = RT_CONSTANT(opline, opline->op2);
12894 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12895 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12896 }
12897 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12898 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12899 {
12900 	USE_OPLINE
12901 	zval *op1, *op2;
12902 	bool result;
12903 
12904 	op1 = EX_VAR(opline->op1.var);
12905 	op2 = RT_CONSTANT(opline, opline->op2);
12906 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12907 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12908 }
12909 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12910 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12911 {
12912 	USE_OPLINE
12913 	zval *op1, *op2;
12914 	bool result;
12915 
12916 	op1 = EX_VAR(opline->op1.var);
12917 	op2 = RT_CONSTANT(opline, opline->op2);
12918 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12919 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12920 }
12921 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12922 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12923 {
12924 	USE_OPLINE
12925 	zval *op1, *op2;
12926 	bool result;
12927 
12928 	op1 = EX_VAR(opline->op1.var);
12929 	op2 = RT_CONSTANT(opline, opline->op2);
12930 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12931 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12932 }
12933 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12934 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12935 {
12936 	USE_OPLINE
12937 	zval *op1, *op2;
12938 	bool result;
12939 
12940 	op1 = EX_VAR(opline->op1.var);
12941 	op2 = RT_CONSTANT(opline, opline->op2);
12942 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12943 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12944 }
12945 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12946 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12947 {
12948 	USE_OPLINE
12949 	zval *op1, *op2;
12950 	bool result;
12951 
12952 	op1 = EX_VAR(opline->op1.var);
12953 	op2 = RT_CONSTANT(opline, opline->op2);
12954 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12955 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12956 }
12957 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12958 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12959 {
12960 	USE_OPLINE
12961 	zval *op1, *op2;
12962 	bool result;
12963 
12964 	op1 = EX_VAR(opline->op1.var);
12965 	op2 = RT_CONSTANT(opline, opline->op2);
12966 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12967 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12968 }
12969 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12970 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12971 {
12972 	USE_OPLINE
12973 	zval *op1, *op2;
12974 	bool result;
12975 
12976 	op1 = EX_VAR(opline->op1.var);
12977 	op2 = RT_CONSTANT(opline, opline->op2);
12978 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12979 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12980 }
12981 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12982 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12983 {
12984 	USE_OPLINE
12985 	zval *op1, *op2;
12986 	bool result;
12987 
12988 	op1 = EX_VAR(opline->op1.var);
12989 	op2 = RT_CONSTANT(opline, opline->op2);
12990 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12991 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12992 }
12993 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12994 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12995 {
12996 	USE_OPLINE
12997 	zval *op1, *op2;
12998 	bool result;
12999 
13000 	op1 = EX_VAR(opline->op1.var);
13001 	op2 = RT_CONSTANT(opline, opline->op2);
13002 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13003 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13004 }
13005 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13006 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13007 {
13008 	USE_OPLINE
13009 	zval *op1, *op2;
13010 	bool result;
13011 
13012 	op1 = EX_VAR(opline->op1.var);
13013 	op2 = RT_CONSTANT(opline, opline->op2);
13014 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13015 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13016 }
13017 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13018 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13019 {
13020 	USE_OPLINE
13021 	zval *op1, *op2;
13022 	bool result;
13023 
13024 	op1 = EX_VAR(opline->op1.var);
13025 	op2 = RT_CONSTANT(opline, opline->op2);
13026 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13027 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13028 }
13029 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13030 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13031 {
13032 	USE_OPLINE
13033 	zval *op1, *op2;
13034 	bool result;
13035 
13036 	op1 = EX_VAR(opline->op1.var);
13037 	op2 = RT_CONSTANT(opline, opline->op2);
13038 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13039 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13040 }
13041 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13042 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13043 {
13044 	USE_OPLINE
13045 	zval *op1, *op2;
13046 	bool result;
13047 
13048 	op1 = EX_VAR(opline->op1.var);
13049 	op2 = RT_CONSTANT(opline, opline->op2);
13050 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13051 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13052 }
13053 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13054 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13055 {
13056 	USE_OPLINE
13057 	zval *op1, *op2;
13058 	bool result;
13059 
13060 	op1 = EX_VAR(opline->op1.var);
13061 	op2 = RT_CONSTANT(opline, opline->op2);
13062 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13063 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13064 }
13065 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13066 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13067 {
13068 	USE_OPLINE
13069 	zval *op1, *op2;
13070 	bool result;
13071 
13072 	op1 = EX_VAR(opline->op1.var);
13073 	op2 = RT_CONSTANT(opline, opline->op2);
13074 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13075 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13076 }
13077 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13078 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)
13079 {
13080 	USE_OPLINE
13081 	zval *op1, *op2;
13082 	bool result;
13083 
13084 	op1 = EX_VAR(opline->op1.var);
13085 	op2 = RT_CONSTANT(opline, opline->op2);
13086 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13087 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13088 }
13089 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13090 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)
13091 {
13092 	USE_OPLINE
13093 	zval *op1, *op2;
13094 	bool result;
13095 
13096 	op1 = EX_VAR(opline->op1.var);
13097 	op2 = RT_CONSTANT(opline, opline->op2);
13098 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13099 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13100 }
13101 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13102 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13103 {
13104 	USE_OPLINE
13105 	zval *op1, *op2;
13106 	bool result;
13107 
13108 	op1 = EX_VAR(opline->op1.var);
13109 	op2 = RT_CONSTANT(opline, opline->op2);
13110 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13111 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13112 }
13113 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13114 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)
13115 {
13116 	USE_OPLINE
13117 	zval *op1, *op2;
13118 	bool result;
13119 
13120 	op1 = EX_VAR(opline->op1.var);
13121 	op2 = RT_CONSTANT(opline, opline->op2);
13122 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13123 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13124 }
13125 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13126 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)
13127 {
13128 	USE_OPLINE
13129 	zval *op1, *op2;
13130 	bool result;
13131 
13132 	op1 = EX_VAR(opline->op1.var);
13133 	op2 = RT_CONSTANT(opline, opline->op2);
13134 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13135 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13136 }
13137 
ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13138 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13139 {
13140 	USE_OPLINE
13141 	zval *op1, *op2, *result;
13142 	double d1, d2;
13143 
13144 	op1 = EX_VAR(opline->op1.var);
13145 	op2 = EX_VAR(opline->op2.var);
13146 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13147 		/* pass */
13148 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13149 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13150 			result = EX_VAR(opline->result.var);
13151 			fast_long_add_function(result, op1, op2);
13152 			ZEND_VM_NEXT_OPCODE();
13153 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13154 			d1 = (double)Z_LVAL_P(op1);
13155 			d2 = Z_DVAL_P(op2);
13156 			goto add_double;
13157 		}
13158 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13159 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13160 			d1 = Z_DVAL_P(op1);
13161 			d2 = Z_DVAL_P(op2);
13162 add_double:
13163 			result = EX_VAR(opline->result.var);
13164 			ZVAL_DOUBLE(result, d1 + d2);
13165 			ZEND_VM_NEXT_OPCODE();
13166 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13167 			d1 = Z_DVAL_P(op1);
13168 			d2 = (double)Z_LVAL_P(op2);
13169 			goto add_double;
13170 		}
13171 	}
13172 
13173 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13174 }
13175 
ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13176 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13177 {
13178 	USE_OPLINE
13179 	zval *op1, *op2, *result;
13180 	double d1, d2;
13181 
13182 	op1 = EX_VAR(opline->op1.var);
13183 	op2 = EX_VAR(opline->op2.var);
13184 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13185 		/* pass */
13186 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13187 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13188 			result = EX_VAR(opline->result.var);
13189 			fast_long_sub_function(result, op1, op2);
13190 			ZEND_VM_NEXT_OPCODE();
13191 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13192 			d1 = (double)Z_LVAL_P(op1);
13193 			d2 = Z_DVAL_P(op2);
13194 			goto sub_double;
13195 		}
13196 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13197 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13198 			d1 = Z_DVAL_P(op1);
13199 			d2 = Z_DVAL_P(op2);
13200 sub_double:
13201 			result = EX_VAR(opline->result.var);
13202 			ZVAL_DOUBLE(result, d1 - d2);
13203 			ZEND_VM_NEXT_OPCODE();
13204 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13205 			d1 = Z_DVAL_P(op1);
13206 			d2 = (double)Z_LVAL_P(op2);
13207 			goto sub_double;
13208 		}
13209 	}
13210 
13211 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13212 }
13213 
ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13214 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13215 {
13216 	USE_OPLINE
13217 	zval *op1, *op2, *result;
13218 	double d1, d2;
13219 
13220 	op1 = EX_VAR(opline->op1.var);
13221 	op2 = EX_VAR(opline->op2.var);
13222 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13223 		/* pass */
13224 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13225 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13226 			zend_long overflow;
13227 
13228 			result = EX_VAR(opline->result.var);
13229 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
13230 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
13231 			ZEND_VM_NEXT_OPCODE();
13232 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13233 			d1 = (double)Z_LVAL_P(op1);
13234 			d2 = Z_DVAL_P(op2);
13235 			goto mul_double;
13236 		}
13237 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13238 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13239 			d1 = Z_DVAL_P(op1);
13240 			d2 = Z_DVAL_P(op2);
13241 mul_double:
13242 			result = EX_VAR(opline->result.var);
13243 			ZVAL_DOUBLE(result, d1 * d2);
13244 			ZEND_VM_NEXT_OPCODE();
13245 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13246 			d1 = Z_DVAL_P(op1);
13247 			d2 = (double)Z_LVAL_P(op2);
13248 			goto mul_double;
13249 		}
13250 	}
13251 
13252 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13253 }
13254 
ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13255 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13256 {
13257 	USE_OPLINE
13258 	zval *op1, *op2, *result;
13259 
13260 	op1 = EX_VAR(opline->op1.var);
13261 	op2 = EX_VAR(opline->op2.var);
13262 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13263 		/* pass */
13264 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13265 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13266 			result = EX_VAR(opline->result.var);
13267 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
13268 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
13269 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
13270 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
13271 				ZVAL_LONG(result, 0);
13272 			} else {
13273 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
13274 			}
13275 			ZEND_VM_NEXT_OPCODE();
13276 		}
13277 	}
13278 
13279 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13280 }
13281 
ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13282 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13283 {
13284 	USE_OPLINE
13285 	zval *op1, *op2;
13286 
13287 	op1 = EX_VAR(opline->op1.var);
13288 	op2 = EX_VAR(opline->op2.var);
13289 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13290 		/* pass */
13291 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13292 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
13293 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
13294 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
13295 		ZVAL_LONG(EX_VAR(opline->result.var),
13296 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
13297 		ZEND_VM_NEXT_OPCODE();
13298 	}
13299 
13300 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13301 }
13302 
ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13303 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13304 {
13305 	USE_OPLINE
13306 	zval *op1, *op2;
13307 
13308 	op1 = EX_VAR(opline->op1.var);
13309 	op2 = EX_VAR(opline->op2.var);
13310 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13311 		/* pass */
13312 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13313 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
13314 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
13315 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
13316 		ZEND_VM_NEXT_OPCODE();
13317 	}
13318 
13319 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13320 }
13321 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13322 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13323 {
13324 	USE_OPLINE
13325 	zval *op1, *op2;
13326 	double d1, d2;
13327 
13328 	op1 = EX_VAR(opline->op1.var);
13329 	op2 = EX_VAR(opline->op2.var);
13330 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13331 		/* pass */
13332 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13333 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13334 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13335 is_smaller_true:
13336 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
13337 			} else {
13338 is_smaller_false:
13339 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
13340 			}
13341 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13342 			d1 = (double)Z_LVAL_P(op1);
13343 			d2 = Z_DVAL_P(op2);
13344 			goto is_smaller_double;
13345 		}
13346 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13347 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13348 			d1 = Z_DVAL_P(op1);
13349 			d2 = Z_DVAL_P(op2);
13350 is_smaller_double:
13351 			if (d1 < d2) {
13352 				goto is_smaller_true;
13353 			} else {
13354 				goto is_smaller_false;
13355 			}
13356 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13357 			d1 = Z_DVAL_P(op1);
13358 			d2 = (double)Z_LVAL_P(op2);
13359 			goto is_smaller_double;
13360 		}
13361 	}
13362 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13363 }
13364 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13365 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13366 {
13367 	USE_OPLINE
13368 	zval *op1, *op2;
13369 	double d1, d2;
13370 
13371 	op1 = EX_VAR(opline->op1.var);
13372 	op2 = EX_VAR(opline->op2.var);
13373 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13374 		/* pass */
13375 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13376 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13377 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13378 is_smaller_true:
13379 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
13380 			} else {
13381 is_smaller_false:
13382 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
13383 			}
13384 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13385 			d1 = (double)Z_LVAL_P(op1);
13386 			d2 = Z_DVAL_P(op2);
13387 			goto is_smaller_double;
13388 		}
13389 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13390 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13391 			d1 = Z_DVAL_P(op1);
13392 			d2 = Z_DVAL_P(op2);
13393 is_smaller_double:
13394 			if (d1 < d2) {
13395 				goto is_smaller_true;
13396 			} else {
13397 				goto is_smaller_false;
13398 			}
13399 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13400 			d1 = Z_DVAL_P(op1);
13401 			d2 = (double)Z_LVAL_P(op2);
13402 			goto is_smaller_double;
13403 		}
13404 	}
13405 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13406 }
13407 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13408 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13409 {
13410 	USE_OPLINE
13411 	zval *op1, *op2;
13412 	double d1, d2;
13413 
13414 	op1 = EX_VAR(opline->op1.var);
13415 	op2 = EX_VAR(opline->op2.var);
13416 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13417 		/* pass */
13418 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13419 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13420 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13421 is_smaller_true:
13422 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
13423 			} else {
13424 is_smaller_false:
13425 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
13426 			}
13427 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13428 			d1 = (double)Z_LVAL_P(op1);
13429 			d2 = Z_DVAL_P(op2);
13430 			goto is_smaller_double;
13431 		}
13432 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13433 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13434 			d1 = Z_DVAL_P(op1);
13435 			d2 = Z_DVAL_P(op2);
13436 is_smaller_double:
13437 			if (d1 < d2) {
13438 				goto is_smaller_true;
13439 			} else {
13440 				goto is_smaller_false;
13441 			}
13442 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13443 			d1 = Z_DVAL_P(op1);
13444 			d2 = (double)Z_LVAL_P(op2);
13445 			goto is_smaller_double;
13446 		}
13447 	}
13448 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13449 }
13450 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13451 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13452 {
13453 	USE_OPLINE
13454 	zval *op1, *op2;
13455 	double d1, d2;
13456 
13457 	op1 = EX_VAR(opline->op1.var);
13458 	op2 = EX_VAR(opline->op2.var);
13459 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13460 		/* pass */
13461 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13462 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13463 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13464 is_smaller_or_equal_true:
13465 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
13466 				ZVAL_TRUE(EX_VAR(opline->result.var));
13467 				ZEND_VM_NEXT_OPCODE();
13468 			} else {
13469 is_smaller_or_equal_false:
13470 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
13471 				ZVAL_FALSE(EX_VAR(opline->result.var));
13472 				ZEND_VM_NEXT_OPCODE();
13473 			}
13474 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13475 			d1 = (double)Z_LVAL_P(op1);
13476 			d2 = Z_DVAL_P(op2);
13477 			goto is_smaller_or_equal_double;
13478 		}
13479 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13480 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13481 			d1 = Z_DVAL_P(op1);
13482 			d2 = Z_DVAL_P(op2);
13483 is_smaller_or_equal_double:
13484 			if (d1 <= d2) {
13485 				goto is_smaller_or_equal_true;
13486 			} else {
13487 				goto is_smaller_or_equal_false;
13488 			}
13489 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13490 			d1 = Z_DVAL_P(op1);
13491 			d2 = (double)Z_LVAL_P(op2);
13492 			goto is_smaller_or_equal_double;
13493 		}
13494 	}
13495 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13496 }
13497 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13498 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13499 {
13500 	USE_OPLINE
13501 	zval *op1, *op2;
13502 	double d1, d2;
13503 
13504 	op1 = EX_VAR(opline->op1.var);
13505 	op2 = EX_VAR(opline->op2.var);
13506 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13507 		/* pass */
13508 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13509 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13510 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13511 is_smaller_or_equal_true:
13512 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
13513 				ZVAL_TRUE(EX_VAR(opline->result.var));
13514 				ZEND_VM_NEXT_OPCODE();
13515 			} else {
13516 is_smaller_or_equal_false:
13517 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
13518 				ZVAL_FALSE(EX_VAR(opline->result.var));
13519 				ZEND_VM_NEXT_OPCODE();
13520 			}
13521 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13522 			d1 = (double)Z_LVAL_P(op1);
13523 			d2 = Z_DVAL_P(op2);
13524 			goto is_smaller_or_equal_double;
13525 		}
13526 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13527 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13528 			d1 = Z_DVAL_P(op1);
13529 			d2 = Z_DVAL_P(op2);
13530 is_smaller_or_equal_double:
13531 			if (d1 <= d2) {
13532 				goto is_smaller_or_equal_true;
13533 			} else {
13534 				goto is_smaller_or_equal_false;
13535 			}
13536 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13537 			d1 = Z_DVAL_P(op1);
13538 			d2 = (double)Z_LVAL_P(op2);
13539 			goto is_smaller_or_equal_double;
13540 		}
13541 	}
13542 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13543 }
13544 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13545 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13546 {
13547 	USE_OPLINE
13548 	zval *op1, *op2;
13549 	double d1, d2;
13550 
13551 	op1 = EX_VAR(opline->op1.var);
13552 	op2 = EX_VAR(opline->op2.var);
13553 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13554 		/* pass */
13555 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13556 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13557 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13558 is_smaller_or_equal_true:
13559 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
13560 				ZVAL_TRUE(EX_VAR(opline->result.var));
13561 				ZEND_VM_NEXT_OPCODE();
13562 			} else {
13563 is_smaller_or_equal_false:
13564 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
13565 				ZVAL_FALSE(EX_VAR(opline->result.var));
13566 				ZEND_VM_NEXT_OPCODE();
13567 			}
13568 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13569 			d1 = (double)Z_LVAL_P(op1);
13570 			d2 = Z_DVAL_P(op2);
13571 			goto is_smaller_or_equal_double;
13572 		}
13573 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13574 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13575 			d1 = Z_DVAL_P(op1);
13576 			d2 = Z_DVAL_P(op2);
13577 is_smaller_or_equal_double:
13578 			if (d1 <= d2) {
13579 				goto is_smaller_or_equal_true;
13580 			} else {
13581 				goto is_smaller_or_equal_false;
13582 			}
13583 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13584 			d1 = Z_DVAL_P(op1);
13585 			d2 = (double)Z_LVAL_P(op2);
13586 			goto is_smaller_or_equal_double;
13587 		}
13588 	}
13589 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13590 }
13591 
ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13592 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13593 {
13594 	USE_OPLINE
13595 	zval *op1, *op2;
13596 
13597 	op1 = EX_VAR(opline->op1.var);
13598 	op2 = EX_VAR(opline->op2.var);
13599 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13600 		/* pass */
13601 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13602 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13603 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
13604 		ZEND_VM_NEXT_OPCODE();
13605 	}
13606 
13607 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13608 }
13609 
ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13610 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13611 {
13612 	USE_OPLINE
13613 	zval *op1, *op2;
13614 
13615 	op1 = EX_VAR(opline->op1.var);
13616 	op2 = EX_VAR(opline->op2.var);
13617 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13618 		/* pass */
13619 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13620 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13621 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
13622 		ZEND_VM_NEXT_OPCODE();
13623 	}
13624 
13625 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13626 }
13627 
ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13628 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13629 {
13630 	USE_OPLINE
13631 	zval *op1, *op2;
13632 
13633 	op1 = EX_VAR(opline->op1.var);
13634 	op2 = EX_VAR(opline->op2.var);
13635 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13636 		/* pass */
13637 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13638 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13639 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
13640 		ZEND_VM_NEXT_OPCODE();
13641 	}
13642 
13643 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13644 }
13645 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13646 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13647 {
13648 	USE_OPLINE
13649 	zval *op1, *op2, *result;
13650 
13651 	op1 = EX_VAR(opline->op1.var);
13652 	op2 = EX_VAR(opline->op2.var);
13653 	result = EX_VAR(opline->result.var);
13654 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
13655 	ZEND_VM_NEXT_OPCODE();
13656 }
13657 
ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13658 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13659 {
13660 	USE_OPLINE
13661 	zval *op1, *op2, *result;
13662 
13663 	op1 = EX_VAR(opline->op1.var);
13664 	op2 = EX_VAR(opline->op2.var);
13665 	result = EX_VAR(opline->result.var);
13666 	fast_long_add_function(result, op1, op2);
13667 	ZEND_VM_NEXT_OPCODE();
13668 }
13669 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13670 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13671 {
13672 	USE_OPLINE
13673 	zval *op1, *op2, *result;
13674 
13675 	op1 = EX_VAR(opline->op1.var);
13676 	op2 = EX_VAR(opline->op2.var);
13677 	result = EX_VAR(opline->result.var);
13678 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
13679 	ZEND_VM_NEXT_OPCODE();
13680 }
13681 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13682 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13683 {
13684 	USE_OPLINE
13685 	zval *op1, *op2, *result;
13686 
13687 	op1 = EX_VAR(opline->op1.var);
13688 	op2 = EX_VAR(opline->op2.var);
13689 	result = EX_VAR(opline->result.var);
13690 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
13691 	ZEND_VM_NEXT_OPCODE();
13692 }
13693 
ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13694 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13695 {
13696 	USE_OPLINE
13697 	zval *op1, *op2, *result;
13698 
13699 	op1 = EX_VAR(opline->op1.var);
13700 	op2 = EX_VAR(opline->op2.var);
13701 	result = EX_VAR(opline->result.var);
13702 	fast_long_sub_function(result, op1, op2);
13703 	ZEND_VM_NEXT_OPCODE();
13704 }
13705 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13706 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13707 {
13708 	USE_OPLINE
13709 	zval *op1, *op2, *result;
13710 
13711 	op1 = EX_VAR(opline->op1.var);
13712 	op2 = EX_VAR(opline->op2.var);
13713 	result = EX_VAR(opline->result.var);
13714 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
13715 	ZEND_VM_NEXT_OPCODE();
13716 }
13717 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13718 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13719 {
13720 	USE_OPLINE
13721 	zval *op1, *op2, *result;
13722 
13723 	op1 = EX_VAR(opline->op1.var);
13724 	op2 = EX_VAR(opline->op2.var);
13725 	result = EX_VAR(opline->result.var);
13726 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
13727 	ZEND_VM_NEXT_OPCODE();
13728 }
13729 
ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13730 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13731 {
13732 	USE_OPLINE
13733 	zval *op1, *op2, *result;
13734 	zend_long overflow;
13735 
13736 	op1 = EX_VAR(opline->op1.var);
13737 	op2 = EX_VAR(opline->op2.var);
13738 	result = EX_VAR(opline->result.var);
13739 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
13740 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
13741 	ZEND_VM_NEXT_OPCODE();
13742 }
13743 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13744 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13745 {
13746 	USE_OPLINE
13747 	zval *op1, *op2, *result;
13748 
13749 	op1 = EX_VAR(opline->op1.var);
13750 	op2 = EX_VAR(opline->op2.var);
13751 	result = EX_VAR(opline->result.var);
13752 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
13753 	ZEND_VM_NEXT_OPCODE();
13754 }
13755 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13756 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13757 {
13758 	USE_OPLINE
13759 	zval *op1, *op2;
13760 	bool result;
13761 
13762 	op1 = EX_VAR(opline->op1.var);
13763 	op2 = EX_VAR(opline->op2.var);
13764 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13765 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13766 }
13767 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13768 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13769 {
13770 	USE_OPLINE
13771 	zval *op1, *op2;
13772 	bool result;
13773 
13774 	op1 = EX_VAR(opline->op1.var);
13775 	op2 = EX_VAR(opline->op2.var);
13776 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13777 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13778 }
13779 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13780 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13781 {
13782 	USE_OPLINE
13783 	zval *op1, *op2;
13784 	bool result;
13785 
13786 	op1 = EX_VAR(opline->op1.var);
13787 	op2 = EX_VAR(opline->op2.var);
13788 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13789 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13790 }
13791 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13793 {
13794 	USE_OPLINE
13795 	zval *op1, *op2;
13796 	bool result;
13797 
13798 	op1 = EX_VAR(opline->op1.var);
13799 	op2 = EX_VAR(opline->op2.var);
13800 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13801 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13802 }
13803 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13804 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13805 {
13806 	USE_OPLINE
13807 	zval *op1, *op2;
13808 	bool result;
13809 
13810 	op1 = EX_VAR(opline->op1.var);
13811 	op2 = EX_VAR(opline->op2.var);
13812 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13813 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13814 }
13815 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13816 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13817 {
13818 	USE_OPLINE
13819 	zval *op1, *op2;
13820 	bool result;
13821 
13822 	op1 = EX_VAR(opline->op1.var);
13823 	op2 = EX_VAR(opline->op2.var);
13824 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13825 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13826 }
13827 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13829 {
13830 	USE_OPLINE
13831 	zval *op1, *op2;
13832 	bool result;
13833 
13834 	op1 = EX_VAR(opline->op1.var);
13835 	op2 = EX_VAR(opline->op2.var);
13836 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13837 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13838 }
13839 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13840 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13841 {
13842 	USE_OPLINE
13843 	zval *op1, *op2;
13844 	bool result;
13845 
13846 	op1 = EX_VAR(opline->op1.var);
13847 	op2 = EX_VAR(opline->op2.var);
13848 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13849 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13850 }
13851 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13852 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13853 {
13854 	USE_OPLINE
13855 	zval *op1, *op2;
13856 	bool result;
13857 
13858 	op1 = EX_VAR(opline->op1.var);
13859 	op2 = EX_VAR(opline->op2.var);
13860 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13861 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13862 }
13863 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13865 {
13866 	USE_OPLINE
13867 	zval *op1, *op2;
13868 	bool result;
13869 
13870 	op1 = EX_VAR(opline->op1.var);
13871 	op2 = EX_VAR(opline->op2.var);
13872 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13873 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13874 }
13875 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13876 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13877 {
13878 	USE_OPLINE
13879 	zval *op1, *op2;
13880 	bool result;
13881 
13882 	op1 = EX_VAR(opline->op1.var);
13883 	op2 = EX_VAR(opline->op2.var);
13884 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13885 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13886 }
13887 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13888 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13889 {
13890 	USE_OPLINE
13891 	zval *op1, *op2;
13892 	bool result;
13893 
13894 	op1 = EX_VAR(opline->op1.var);
13895 	op2 = EX_VAR(opline->op2.var);
13896 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13897 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13898 }
13899 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13901 {
13902 	USE_OPLINE
13903 	zval *op1, *op2;
13904 	bool result;
13905 
13906 	op1 = EX_VAR(opline->op1.var);
13907 	op2 = EX_VAR(opline->op2.var);
13908 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13909 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13910 }
13911 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13912 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13913 {
13914 	USE_OPLINE
13915 	zval *op1, *op2;
13916 	bool result;
13917 
13918 	op1 = EX_VAR(opline->op1.var);
13919 	op2 = EX_VAR(opline->op2.var);
13920 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13921 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13922 }
13923 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13924 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13925 {
13926 	USE_OPLINE
13927 	zval *op1, *op2;
13928 	bool result;
13929 
13930 	op1 = EX_VAR(opline->op1.var);
13931 	op2 = EX_VAR(opline->op2.var);
13932 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13933 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13934 }
13935 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13936 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13937 {
13938 	USE_OPLINE
13939 	zval *op1, *op2;
13940 	bool result;
13941 
13942 	op1 = EX_VAR(opline->op1.var);
13943 	op2 = EX_VAR(opline->op2.var);
13944 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13945 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13946 }
13947 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13948 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13949 {
13950 	USE_OPLINE
13951 	zval *op1, *op2;
13952 	bool result;
13953 
13954 	op1 = EX_VAR(opline->op1.var);
13955 	op2 = EX_VAR(opline->op2.var);
13956 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13957 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13958 }
13959 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13960 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13961 {
13962 	USE_OPLINE
13963 	zval *op1, *op2;
13964 	bool result;
13965 
13966 	op1 = EX_VAR(opline->op1.var);
13967 	op2 = EX_VAR(opline->op2.var);
13968 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13969 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13970 }
13971 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13972 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13973 {
13974 	USE_OPLINE
13975 	zval *op1, *op2;
13976 	bool result;
13977 
13978 	op1 = EX_VAR(opline->op1.var);
13979 	op2 = EX_VAR(opline->op2.var);
13980 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13981 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13982 }
13983 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13984 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)
13985 {
13986 	USE_OPLINE
13987 	zval *op1, *op2;
13988 	bool result;
13989 
13990 	op1 = EX_VAR(opline->op1.var);
13991 	op2 = EX_VAR(opline->op2.var);
13992 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13993 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13994 }
13995 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13996 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)
13997 {
13998 	USE_OPLINE
13999 	zval *op1, *op2;
14000 	bool result;
14001 
14002 	op1 = EX_VAR(opline->op1.var);
14003 	op2 = EX_VAR(opline->op2.var);
14004 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
14005 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14006 }
14007 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14008 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14009 {
14010 	USE_OPLINE
14011 	zval *op1, *op2;
14012 	bool result;
14013 
14014 	op1 = EX_VAR(opline->op1.var);
14015 	op2 = EX_VAR(opline->op2.var);
14016 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
14017 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14018 }
14019 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14020 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)
14021 {
14022 	USE_OPLINE
14023 	zval *op1, *op2;
14024 	bool result;
14025 
14026 	op1 = EX_VAR(opline->op1.var);
14027 	op2 = EX_VAR(opline->op2.var);
14028 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
14029 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14030 }
14031 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14032 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)
14033 {
14034 	USE_OPLINE
14035 	zval *op1, *op2;
14036 	bool result;
14037 
14038 	op1 = EX_VAR(opline->op1.var);
14039 	op2 = EX_VAR(opline->op2.var);
14040 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
14041 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14042 }
14043 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14044 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14045 {
14046 	USE_OPLINE
14047 	zval *container;
14048 
14049 	SAVE_OPLINE();
14050 	container = EX_VAR(opline->op1.var);
14051 	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);
14052 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
14053 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14054 }
14055 
ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14056 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14057 {
14058 	USE_OPLINE
14059 	zval *op;
14060 
14061 	SAVE_OPLINE();
14062 	op = EX_VAR(opline->op1.var);
14063 	zend_match_unhandled_error(op);
14064 	HANDLE_EXCEPTION();
14065 }
14066 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14067 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14068 {
14069 	USE_OPLINE
14070 	zval *container;
14071 
14072 	SAVE_OPLINE();
14073 	container = EX_VAR(opline->op1.var);
14074 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
14075 
14076 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14077 }
14078 
ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14079 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14080 {
14081 	USE_OPLINE
14082 	zval *val;
14083 
14084 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14085 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14086 		ZVAL_FALSE(EX_VAR(opline->result.var));
14087 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14088 		/* The result and op1 can be the same cv zval */
14089 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
14090 		ZVAL_TRUE(EX_VAR(opline->result.var));
14091 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
14092 			SAVE_OPLINE();
14093 			ZVAL_UNDEFINED_OP1();
14094 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14095 		}
14096 	} else {
14097 		SAVE_OPLINE();
14098 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
14099 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14100 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14101 	}
14102 	ZEND_VM_NEXT_OPCODE();
14103 }
14104 
ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14105 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14106 {
14107 	USE_OPLINE
14108 	zval *z;
14109 
14110 	SAVE_OPLINE();
14111 	z = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14112 
14113 	if (Z_TYPE_P(z) == IS_STRING) {
14114 		zend_string *str = Z_STR_P(z);
14115 
14116 		if (ZSTR_LEN(str) != 0) {
14117 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
14118 		}
14119 	} else {
14120 		zend_string *str = zval_get_string_func(z);
14121 
14122 		if (ZSTR_LEN(str) != 0) {
14123 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
14124 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
14125 			ZVAL_UNDEFINED_OP1();
14126 		}
14127 		zend_string_release_ex(str, 0);
14128 	}
14129 
14130 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14131 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14132 }
14133 
ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14134 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14135 {
14136 	USE_OPLINE
14137 	zval *val;
14138 	zend_uchar op1_type;
14139 
14140 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14141 
14142 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14143 		ZEND_VM_NEXT_OPCODE();
14144 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14145 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14146 			SAVE_OPLINE();
14147 			ZVAL_UNDEFINED_OP1();
14148 			if (UNEXPECTED(EG(exception))) {
14149 				HANDLE_EXCEPTION();
14150 			}
14151 		}
14152 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14153 	}
14154 
14155 	SAVE_OPLINE();
14156 	op1_type = (IS_TMP_VAR|IS_VAR);
14157 	if (i_zend_is_true(val)) {
14158 		opline++;
14159 	} else {
14160 		opline = OP_JMP_ADDR(opline, opline->op2);
14161 	}
14162 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
14163 		zval_ptr_dtor_nogc(val);
14164 	}
14165 	ZEND_VM_JMP(opline);
14166 }
14167 
ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14168 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14169 {
14170 	USE_OPLINE
14171 	zval *val;
14172 	zend_uchar op1_type;
14173 
14174 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14175 
14176 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14177 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14178 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14179 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14180 			SAVE_OPLINE();
14181 			ZVAL_UNDEFINED_OP1();
14182 			if (UNEXPECTED(EG(exception))) {
14183 				HANDLE_EXCEPTION();
14184 			}
14185 		}
14186 		ZEND_VM_NEXT_OPCODE();
14187 	}
14188 
14189 	SAVE_OPLINE();
14190 	op1_type = (IS_TMP_VAR|IS_VAR);
14191 	if (i_zend_is_true(val)) {
14192 		opline = OP_JMP_ADDR(opline, opline->op2);
14193 	} else {
14194 		opline++;
14195 	}
14196 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
14197 		zval_ptr_dtor_nogc(val);
14198 	}
14199 	ZEND_VM_JMP(opline);
14200 }
14201 
ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14203 {
14204 	USE_OPLINE
14205 	zval *val;
14206 	zend_uchar op1_type;
14207 
14208 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14209 
14210 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
14211 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
14212 		ZEND_VM_CONTINUE();
14213 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14214 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14215 			SAVE_OPLINE();
14216 			ZVAL_UNDEFINED_OP1();
14217 			if (UNEXPECTED(EG(exception))) {
14218 				HANDLE_EXCEPTION();
14219 			}
14220 		}
14221 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14222 	}
14223 
14224 	SAVE_OPLINE();
14225 	op1_type = (IS_TMP_VAR|IS_VAR);
14226 	if (i_zend_is_true(val)) {
14227 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
14228 	} else {
14229 		opline = OP_JMP_ADDR(opline, opline->op2);
14230 	}
14231 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
14232 		zval_ptr_dtor_nogc(val);
14233 	}
14234 	ZEND_VM_JMP(opline);
14235 }
14236 
ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14237 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14238 {
14239 	USE_OPLINE
14240 	zval *val;
14241 	bool ret;
14242 
14243 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14244 
14245 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14246 		ZVAL_TRUE(EX_VAR(opline->result.var));
14247 		ZEND_VM_NEXT_OPCODE();
14248 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14249 		ZVAL_FALSE(EX_VAR(opline->result.var));
14250 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14251 			SAVE_OPLINE();
14252 			ZVAL_UNDEFINED_OP1();
14253 			if (UNEXPECTED(EG(exception))) {
14254 				HANDLE_EXCEPTION();
14255 			}
14256 		}
14257 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14258 	}
14259 
14260 	SAVE_OPLINE();
14261 	ret = i_zend_is_true(val);
14262 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14263 	if (ret) {
14264 		ZVAL_TRUE(EX_VAR(opline->result.var));
14265 		opline++;
14266 	} else {
14267 		ZVAL_FALSE(EX_VAR(opline->result.var));
14268 		opline = OP_JMP_ADDR(opline, opline->op2);
14269 	}
14270 	ZEND_VM_JMP(opline);
14271 }
14272 
ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14273 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14274 {
14275 	USE_OPLINE
14276 	zval *val;
14277 	bool ret;
14278 
14279 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14280 
14281 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14282 		ZVAL_TRUE(EX_VAR(opline->result.var));
14283 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14284 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14285 		ZVAL_FALSE(EX_VAR(opline->result.var));
14286 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14287 			SAVE_OPLINE();
14288 			ZVAL_UNDEFINED_OP1();
14289 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14290 		} else {
14291 			ZEND_VM_NEXT_OPCODE();
14292 		}
14293 	}
14294 
14295 	SAVE_OPLINE();
14296 	ret = i_zend_is_true(val);
14297 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14298 	if (ret) {
14299 		ZVAL_TRUE(EX_VAR(opline->result.var));
14300 		opline = OP_JMP_ADDR(opline, opline->op2);
14301 	} else {
14302 		ZVAL_FALSE(EX_VAR(opline->result.var));
14303 		opline++;
14304 	}
14305 	ZEND_VM_JMP(opline);
14306 }
14307 
ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14308 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14309 {
14310 	USE_OPLINE
14311 
14312 	SAVE_OPLINE();
14313 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14314 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14315 }
14316 
ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14317 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14318 {
14319 	zval *var;
14320 	USE_OPLINE
14321 
14322 	var = EX_VAR(opline->op1.var);
14323 	if (Z_TYPE_P(var) != IS_ARRAY) {
14324 		SAVE_OPLINE();
14325 		if (Z_FE_ITER_P(var) != (uint32_t)-1) {
14326 			zend_hash_iterator_del(Z_FE_ITER_P(var));
14327 		}
14328 		zval_ptr_dtor_nogc(var);
14329 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14330 	}
14331 
14332 	/* This is freeing an array. Use an inlined version of zval_ptr_dtor_nogc. */
14333 	/* 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) */
14334 	if (Z_REFCOUNTED_P(var) && !Z_DELREF_P(var)) {
14335 		SAVE_OPLINE();
14336 		rc_dtor_func(Z_COUNTED_P(var));
14337 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14338 	}
14339 	ZEND_VM_NEXT_OPCODE();
14340 }
14341 
ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14342 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14343 {
14344 	USE_OPLINE
14345 	zval *value;
14346 
14347 	SAVE_OPLINE();
14348 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14349 
14350 	do {
14351 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
14352 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
14353 				value = Z_REFVAL_P(value);
14354 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
14355 					break;
14356 				}
14357 			}
14358 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
14359 				ZVAL_UNDEFINED_OP1();
14360 				if (UNEXPECTED(EG(exception) != NULL)) {
14361 					HANDLE_EXCEPTION();
14362 				}
14363 			}
14364 			zend_throw_error(NULL, "Can only throw objects");
14365 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14366 			HANDLE_EXCEPTION();
14367 		}
14368 	} while (0);
14369 
14370 	zend_exception_save();
14371 	Z_TRY_ADDREF_P(value);
14372 	zend_throw_exception_object(value);
14373 	zend_exception_restore();
14374 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14375 	HANDLE_EXCEPTION();
14376 }
14377 
ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14378 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14379 {
14380 	USE_OPLINE
14381 	zval *val;
14382 
14383 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14384 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14385 		ZVAL_TRUE(EX_VAR(opline->result.var));
14386 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14387 		/* The result and op1 can be the same cv zval */
14388 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
14389 		ZVAL_FALSE(EX_VAR(opline->result.var));
14390 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
14391 			SAVE_OPLINE();
14392 			ZVAL_UNDEFINED_OP1();
14393 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14394 		}
14395 	} else {
14396 		SAVE_OPLINE();
14397 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
14398 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14399 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14400 	}
14401 	ZEND_VM_NEXT_OPCODE();
14402 }
14403 
ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14405 {
14406 	USE_OPLINE
14407 	zval *obj;
14408 	zend_object *zobj;
14409 	zend_class_entry *ce, *scope;
14410 	zend_function *clone;
14411 	zend_object_clone_obj_t clone_call;
14412 
14413 	SAVE_OPLINE();
14414 	obj = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14415 
14416 	do {
14417 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
14418 		    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
14419 		    if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
14420 				obj = Z_REFVAL_P(obj);
14421 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
14422 					break;
14423 				}
14424 			}
14425 			ZVAL_UNDEF(EX_VAR(opline->result.var));
14426 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
14427 				ZVAL_UNDEFINED_OP1();
14428 				if (UNEXPECTED(EG(exception) != NULL)) {
14429 					HANDLE_EXCEPTION();
14430 				}
14431 			}
14432 			zend_throw_error(NULL, "__clone method called on non-object");
14433 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14434 			HANDLE_EXCEPTION();
14435 		}
14436 	} while (0);
14437 
14438 	zobj = Z_OBJ_P(obj);
14439 	ce = zobj->ce;
14440 	clone = ce->clone;
14441 	clone_call = zobj->handlers->clone_obj;
14442 	if (UNEXPECTED(clone_call == NULL)) {
14443 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
14444 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14445 		ZVAL_UNDEF(EX_VAR(opline->result.var));
14446 		HANDLE_EXCEPTION();
14447 	}
14448 
14449 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
14450 		scope = EX(func)->op_array.scope;
14451 		if (clone->common.scope != scope) {
14452 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
14453 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
14454 				zend_wrong_clone_call(clone, scope);
14455 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14456 				ZVAL_UNDEF(EX_VAR(opline->result.var));
14457 				HANDLE_EXCEPTION();
14458 			}
14459 		}
14460 	}
14461 
14462 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
14463 
14464 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14465 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14466 }
14467 
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14469 {
14470 	USE_OPLINE
14471 	zend_op_array *new_op_array;
14472 	zval *inc_filename;
14473 
14474 	SAVE_OPLINE();
14475 	inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14476 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
14477 	if (UNEXPECTED(EG(exception) != NULL)) {
14478 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14479 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
14480 			destroy_op_array(new_op_array);
14481 			efree_size(new_op_array, sizeof(zend_op_array));
14482 		}
14483 		UNDEF_RESULT();
14484 		HANDLE_EXCEPTION();
14485 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
14486 		if (RETURN_VALUE_USED(opline)) {
14487 			ZVAL_TRUE(EX_VAR(opline->result.var));
14488 		}
14489 	} else if (EXPECTED(new_op_array != NULL)) {
14490 		zval *return_value = NULL;
14491 		zend_execute_data *call;
14492 
14493 		if (RETURN_VALUE_USED(opline)) {
14494 			return_value = EX_VAR(opline->result.var);
14495 		}
14496 
14497 		new_op_array->scope = EX(func)->op_array.scope;
14498 
14499 		call = zend_vm_stack_push_call_frame(
14500 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
14501 			(zend_function*)new_op_array, 0,
14502 			Z_PTR(EX(This)));
14503 
14504 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
14505 			call->symbol_table = EX(symbol_table);
14506 		} else {
14507 			call->symbol_table = zend_rebuild_symbol_table();
14508 		}
14509 
14510 		call->prev_execute_data = execute_data;
14511 		i_init_code_execute_data(call, new_op_array, return_value);
14512 
14513 		if (EXPECTED(zend_execute_ex == execute_ex)) {
14514 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14515 			ZEND_VM_ENTER();
14516 		} else {
14517 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
14518 			zend_execute_ex(call);
14519 			zend_vm_stack_free_call_frame(call);
14520 		}
14521 
14522 		zend_destroy_static_vars(new_op_array);
14523 		destroy_op_array(new_op_array);
14524 		efree_size(new_op_array, sizeof(zend_op_array));
14525 		if (UNEXPECTED(EG(exception) != NULL)) {
14526 			zend_rethrow_exception(execute_data);
14527 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14528 			UNDEF_RESULT();
14529 			HANDLE_EXCEPTION();
14530 		}
14531 	} else if (RETURN_VALUE_USED(opline)) {
14532 		ZVAL_FALSE(EX_VAR(opline->result.var));
14533 	}
14534 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14535 	ZEND_VM_NEXT_OPCODE();
14536 }
14537 
ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14538 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14539 {
14540 	USE_OPLINE
14541 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
14542 	zval *val;
14543 
14544 	SAVE_OPLINE();
14545 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14546 
14547 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
14548 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
14549 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14550 		UNDEF_RESULT();
14551 		HANDLE_EXCEPTION();
14552 	}
14553 
14554 yield_from_try_again:
14555 	if (Z_TYPE_P(val) == IS_ARRAY) {
14556 		ZVAL_COPY_VALUE(&generator->values, val);
14557 		if (Z_OPT_REFCOUNTED_P(val)) {
14558 			Z_ADDREF_P(val);
14559 		}
14560 		Z_FE_POS(generator->values) = 0;
14561 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14562 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
14563 		zend_class_entry *ce = Z_OBJCE_P(val);
14564 		if (ce == zend_ce_generator) {
14565 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
14566 
14567 			Z_ADDREF_P(val);
14568 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14569 
14570 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
14571 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
14572 				zval_ptr_dtor(val);
14573 				UNDEF_RESULT();
14574 				HANDLE_EXCEPTION();
14575 			} else if (Z_ISUNDEF(new_gen->retval)) {
14576 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
14577 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
14578 					zval_ptr_dtor(val);
14579 					UNDEF_RESULT();
14580 					HANDLE_EXCEPTION();
14581 				} else {
14582 					zend_generator_yield_from(generator, new_gen);
14583 				}
14584 			} else {
14585 				if (RETURN_VALUE_USED(opline)) {
14586 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
14587 				}
14588 				ZEND_VM_NEXT_OPCODE();
14589 			}
14590 		} else {
14591 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
14592 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14593 
14594 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
14595 				if (!EG(exception)) {
14596 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
14597 				}
14598 				UNDEF_RESULT();
14599 				HANDLE_EXCEPTION();
14600 			}
14601 
14602 			iter->index = 0;
14603 			if (iter->funcs->rewind) {
14604 				iter->funcs->rewind(iter);
14605 				if (UNEXPECTED(EG(exception) != NULL)) {
14606 					OBJ_RELEASE(&iter->std);
14607 					UNDEF_RESULT();
14608 					HANDLE_EXCEPTION();
14609 				}
14610 			}
14611 
14612 			ZVAL_OBJ(&generator->values, &iter->std);
14613 		}
14614 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
14615 		val = Z_REFVAL_P(val);
14616 		goto yield_from_try_again;
14617 	} else {
14618 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
14619 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14620 		UNDEF_RESULT();
14621 		HANDLE_EXCEPTION();
14622 	}
14623 
14624 	/* This is the default return value
14625 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
14626 	if (RETURN_VALUE_USED(opline)) {
14627 		ZVAL_NULL(EX_VAR(opline->result.var));
14628 	}
14629 
14630 	/* This generator has no send target (though the generator we delegate to might have one) */
14631 	generator->send_target = NULL;
14632 
14633 	/* We increment to the next op, so we are at the correct position when the
14634 	 * generator is resumed. */
14635 	ZEND_VM_INC_OPCODE();
14636 
14637 	/* The GOTO VM uses a local opline variable. We need to set the opline
14638 	 * variable in execute_data so we don't resume at an old position. */
14639 	SAVE_OPLINE();
14640 
14641 	ZEND_VM_RETURN();
14642 }
14643 
ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14644 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14645 {
14646 	USE_OPLINE
14647 	zval *value;
14648 
14649 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14650 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
14651 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
14652 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14653 			zval_ptr_dtor_str(value);
14654 		}
14655 		ZEND_VM_NEXT_OPCODE();
14656 	} else {
14657 		bool strict;
14658 
14659 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
14660 			value = Z_REFVAL_P(value);
14661 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
14662 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
14663 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14664 				ZEND_VM_NEXT_OPCODE();
14665 			}
14666 		}
14667 
14668 		SAVE_OPLINE();
14669 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
14670 			value = ZVAL_UNDEFINED_OP1();
14671 		}
14672 		strict = EX_USES_STRICT_TYPES();
14673 		do {
14674 			if (EXPECTED(!strict)) {
14675 				zend_string *str;
14676 				zval tmp;
14677 
14678 				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
14679 					zend_error(E_DEPRECATED,
14680 						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
14681 					ZVAL_LONG(EX_VAR(opline->result.var), 0);
14682 					if (UNEXPECTED(EG(exception))) {
14683 						HANDLE_EXCEPTION();
14684 					}
14685 					break;
14686 				}
14687 
14688 				ZVAL_COPY(&tmp, value);
14689 				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
14690 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
14691 					zval_ptr_dtor(&tmp);
14692 					break;
14693 				}
14694 				zval_ptr_dtor(&tmp);
14695 			}
14696 			if (!EG(exception)) {
14697 				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_type_name(value));
14698 			}
14699 			ZVAL_UNDEF(EX_VAR(opline->result.var));
14700 		} while (0);
14701 	}
14702 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14703 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14704 }
14705 
ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14706 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14707 {
14708 	USE_OPLINE
14709 	zval *value;
14710 	int result = 0;
14711 
14712 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14713 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
14714 type_check_resource:
14715 		if (opline->extended_value != MAY_BE_RESOURCE
14716 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
14717 			result = 1;
14718 		}
14719 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
14720 		value = Z_REFVAL_P(value);
14721 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
14722 			goto type_check_resource;
14723 		}
14724 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
14725 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
14726 		SAVE_OPLINE();
14727 		ZVAL_UNDEFINED_OP1();
14728 		if (UNEXPECTED(EG(exception))) {
14729 			ZVAL_UNDEF(EX_VAR(opline->result.var));
14730 			HANDLE_EXCEPTION();
14731 		}
14732 	}
14733 	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14734 		SAVE_OPLINE();
14735 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14736 		ZEND_VM_SMART_BRANCH(result, 1);
14737 	} else {
14738 		ZEND_VM_SMART_BRANCH(result, 0);
14739 	}
14740 }
14741 
ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14743 {
14744 	uint32_t fetch_type;
14745 	zend_class_entry *called_scope, *scope;
14746 	USE_OPLINE
14747 
14748 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
14749 		SAVE_OPLINE();
14750 		zval *op = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14751 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
14752 			ZVAL_DEREF(op);
14753 			if (Z_TYPE_P(op) != IS_OBJECT) {
14754 				zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
14755 				ZVAL_UNDEF(EX_VAR(opline->result.var));
14756 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14757 				HANDLE_EXCEPTION();
14758 			}
14759 		}
14760 
14761 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
14762 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14763 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14764 	}
14765 
14766 	fetch_type = opline->op1.num;
14767 	scope = EX(func)->op_array.scope;
14768 	if (UNEXPECTED(scope == NULL)) {
14769 		SAVE_OPLINE();
14770 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
14771 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
14772 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
14773 		ZVAL_UNDEF(EX_VAR(opline->result.var));
14774 		HANDLE_EXCEPTION();
14775 	}
14776 
14777 	switch (fetch_type) {
14778 		case ZEND_FETCH_CLASS_SELF:
14779 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
14780 			break;
14781 		case ZEND_FETCH_CLASS_PARENT:
14782 			if (UNEXPECTED(scope->parent == NULL)) {
14783 				SAVE_OPLINE();
14784 				zend_throw_error(NULL,
14785 					"Cannot use \"parent\" when current class scope has no parent");
14786 				ZVAL_UNDEF(EX_VAR(opline->result.var));
14787 				HANDLE_EXCEPTION();
14788 			}
14789 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
14790 			break;
14791 		case ZEND_FETCH_CLASS_STATIC:
14792 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
14793 				called_scope = Z_OBJCE(EX(This));
14794 			} else {
14795 				called_scope = Z_CE(EX(This));
14796 			}
14797 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
14798 			break;
14799 		EMPTY_SWITCH_DEFAULT_CASE()
14800 	}
14801 	ZEND_VM_NEXT_OPCODE();
14802 }
14803 
ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14804 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14805 {
14806 	USE_OPLINE
14807 	zval *op1, *op2;
14808 
14809 	SAVE_OPLINE();
14810 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14811 	op2 = RT_CONSTANT(opline, opline->op2);
14812 	div_function(EX_VAR(opline->result.var), op1, op2);
14813 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14814 
14815 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14816 }
14817 
ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14818 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14819 {
14820 	USE_OPLINE
14821 	zval *op1, *op2;
14822 
14823 	SAVE_OPLINE();
14824 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14825 	op2 = RT_CONSTANT(opline, opline->op2);
14826 	pow_function(EX_VAR(opline->result.var), op1, op2);
14827 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14828 
14829 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14830 }
14831 
ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14833 {
14834 	USE_OPLINE
14835 	zval *op1, *op2;
14836 
14837 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14838 	op2 = RT_CONSTANT(opline, opline->op2);
14839 
14840 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
14841 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
14842 		zend_string *op1_str = Z_STR_P(op1);
14843 		zend_string *op2_str = Z_STR_P(op2);
14844 		zend_string *str;
14845 
14846 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
14847 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
14848 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
14849 			} else {
14850 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
14851 			}
14852 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14853 				zend_string_release_ex(op1_str, 0);
14854 			}
14855 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
14856 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
14857 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
14858 			} else {
14859 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
14860 			}
14861 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14862 				zend_string_release_ex(op2_str, 0);
14863 			}
14864 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
14865 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
14866 		    size_t len = ZSTR_LEN(op1_str);
14867 
14868 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
14869 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
14870 			}
14871 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
14872 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
14873 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
14874 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14875 				zend_string_release_ex(op2_str, 0);
14876 			}
14877 		} else {
14878 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
14879 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
14880 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
14881 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
14882 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14883 				zend_string_release_ex(op1_str, 0);
14884 			}
14885 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14886 				zend_string_release_ex(op2_str, 0);
14887 			}
14888 		}
14889 		ZEND_VM_NEXT_OPCODE();
14890 	} else {
14891 		SAVE_OPLINE();
14892 
14893 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
14894 			op1 = ZVAL_UNDEFINED_OP1();
14895 		}
14896 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
14897 			op2 = ZVAL_UNDEFINED_OP2();
14898 		}
14899 		concat_function(EX_VAR(opline->result.var), op1, op2);
14900 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14901 
14902 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14903 	}
14904 }
14905 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14906 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14907 {
14908 	USE_OPLINE
14909 	zval *op1, *op2;
14910 	double d1, d2;
14911 
14912 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14913 	op2 = RT_CONSTANT(opline, opline->op2);
14914 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14915 		/* pass */
14916 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14917 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14918 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
14919 is_equal_true:
14920 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
14921 			} else {
14922 is_equal_false:
14923 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
14924 			}
14925 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14926 			d1 = (double)Z_LVAL_P(op1);
14927 			d2 = Z_DVAL_P(op2);
14928 			goto is_equal_double;
14929 		}
14930 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14931 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14932 			d1 = Z_DVAL_P(op1);
14933 			d2 = Z_DVAL_P(op2);
14934 is_equal_double:
14935 			if (d1 == d2) {
14936 				goto is_equal_true;
14937 			} else {
14938 				goto is_equal_false;
14939 			}
14940 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14941 			d1 = Z_DVAL_P(op1);
14942 			d2 = (double)Z_LVAL_P(op2);
14943 			goto is_equal_double;
14944 		}
14945 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14946 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14947 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14948 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14949 				zval_ptr_dtor_str(op1);
14950 			}
14951 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14952 				zval_ptr_dtor_str(op2);
14953 			}
14954 			if (result) {
14955 				goto is_equal_true;
14956 			} else {
14957 				goto is_equal_false;
14958 			}
14959 		}
14960 	}
14961 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14962 }
14963 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14964 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14965 {
14966 	USE_OPLINE
14967 	zval *op1, *op2;
14968 	double d1, d2;
14969 
14970 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14971 	op2 = RT_CONSTANT(opline, opline->op2);
14972 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14973 		/* pass */
14974 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14975 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14976 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
14977 is_equal_true:
14978 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
14979 			} else {
14980 is_equal_false:
14981 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
14982 			}
14983 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14984 			d1 = (double)Z_LVAL_P(op1);
14985 			d2 = Z_DVAL_P(op2);
14986 			goto is_equal_double;
14987 		}
14988 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14989 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14990 			d1 = Z_DVAL_P(op1);
14991 			d2 = Z_DVAL_P(op2);
14992 is_equal_double:
14993 			if (d1 == d2) {
14994 				goto is_equal_true;
14995 			} else {
14996 				goto is_equal_false;
14997 			}
14998 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14999 			d1 = Z_DVAL_P(op1);
15000 			d2 = (double)Z_LVAL_P(op2);
15001 			goto is_equal_double;
15002 		}
15003 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15004 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15005 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15006 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15007 				zval_ptr_dtor_str(op1);
15008 			}
15009 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15010 				zval_ptr_dtor_str(op2);
15011 			}
15012 			if (result) {
15013 				goto is_equal_true;
15014 			} else {
15015 				goto is_equal_false;
15016 			}
15017 		}
15018 	}
15019 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15020 }
15021 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15022 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15023 {
15024 	USE_OPLINE
15025 	zval *op1, *op2;
15026 	double d1, d2;
15027 
15028 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15029 	op2 = RT_CONSTANT(opline, opline->op2);
15030 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15031 		/* pass */
15032 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15033 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15034 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15035 is_equal_true:
15036 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
15037 			} else {
15038 is_equal_false:
15039 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
15040 			}
15041 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15042 			d1 = (double)Z_LVAL_P(op1);
15043 			d2 = Z_DVAL_P(op2);
15044 			goto is_equal_double;
15045 		}
15046 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15047 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15048 			d1 = Z_DVAL_P(op1);
15049 			d2 = Z_DVAL_P(op2);
15050 is_equal_double:
15051 			if (d1 == d2) {
15052 				goto is_equal_true;
15053 			} else {
15054 				goto is_equal_false;
15055 			}
15056 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15057 			d1 = Z_DVAL_P(op1);
15058 			d2 = (double)Z_LVAL_P(op2);
15059 			goto is_equal_double;
15060 		}
15061 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15062 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15063 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15064 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15065 				zval_ptr_dtor_str(op1);
15066 			}
15067 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15068 				zval_ptr_dtor_str(op2);
15069 			}
15070 			if (result) {
15071 				goto is_equal_true;
15072 			} else {
15073 				goto is_equal_false;
15074 			}
15075 		}
15076 	}
15077 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15078 }
15079 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15080 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15081 {
15082 	USE_OPLINE
15083 	zval *op1, *op2;
15084 	double d1, d2;
15085 
15086 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15087 	op2 = RT_CONSTANT(opline, opline->op2);
15088 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15089 		/* pass */
15090 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15091 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15092 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15093 is_not_equal_true:
15094 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
15095 			} else {
15096 is_not_equal_false:
15097 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
15098 			}
15099 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15100 			d1 = (double)Z_LVAL_P(op1);
15101 			d2 = Z_DVAL_P(op2);
15102 			goto is_not_equal_double;
15103 		}
15104 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15105 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15106 			d1 = Z_DVAL_P(op1);
15107 			d2 = Z_DVAL_P(op2);
15108 is_not_equal_double:
15109 			if (d1 != d2) {
15110 				goto is_not_equal_true;
15111 			} else {
15112 				goto is_not_equal_false;
15113 			}
15114 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15115 			d1 = Z_DVAL_P(op1);
15116 			d2 = (double)Z_LVAL_P(op2);
15117 			goto is_not_equal_double;
15118 		}
15119 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15120 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15121 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15122 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15123 				zval_ptr_dtor_str(op1);
15124 			}
15125 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15126 				zval_ptr_dtor_str(op2);
15127 			}
15128 			if (!result) {
15129 				goto is_not_equal_true;
15130 			} else {
15131 				goto is_not_equal_false;
15132 			}
15133 		}
15134 	}
15135 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15136 }
15137 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15138 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15139 {
15140 	USE_OPLINE
15141 	zval *op1, *op2;
15142 	double d1, d2;
15143 
15144 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15145 	op2 = RT_CONSTANT(opline, opline->op2);
15146 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15147 		/* pass */
15148 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15149 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15150 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15151 is_not_equal_true:
15152 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
15153 			} else {
15154 is_not_equal_false:
15155 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
15156 			}
15157 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15158 			d1 = (double)Z_LVAL_P(op1);
15159 			d2 = Z_DVAL_P(op2);
15160 			goto is_not_equal_double;
15161 		}
15162 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15163 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15164 			d1 = Z_DVAL_P(op1);
15165 			d2 = Z_DVAL_P(op2);
15166 is_not_equal_double:
15167 			if (d1 != d2) {
15168 				goto is_not_equal_true;
15169 			} else {
15170 				goto is_not_equal_false;
15171 			}
15172 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15173 			d1 = Z_DVAL_P(op1);
15174 			d2 = (double)Z_LVAL_P(op2);
15175 			goto is_not_equal_double;
15176 		}
15177 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15178 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15179 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15180 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15181 				zval_ptr_dtor_str(op1);
15182 			}
15183 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15184 				zval_ptr_dtor_str(op2);
15185 			}
15186 			if (!result) {
15187 				goto is_not_equal_true;
15188 			} else {
15189 				goto is_not_equal_false;
15190 			}
15191 		}
15192 	}
15193 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15194 }
15195 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15196 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15197 {
15198 	USE_OPLINE
15199 	zval *op1, *op2;
15200 	double d1, d2;
15201 
15202 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15203 	op2 = RT_CONSTANT(opline, opline->op2);
15204 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15205 		/* pass */
15206 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15207 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15208 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15209 is_not_equal_true:
15210 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
15211 			} else {
15212 is_not_equal_false:
15213 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
15214 			}
15215 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15216 			d1 = (double)Z_LVAL_P(op1);
15217 			d2 = Z_DVAL_P(op2);
15218 			goto is_not_equal_double;
15219 		}
15220 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15221 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15222 			d1 = Z_DVAL_P(op1);
15223 			d2 = Z_DVAL_P(op2);
15224 is_not_equal_double:
15225 			if (d1 != d2) {
15226 				goto is_not_equal_true;
15227 			} else {
15228 				goto is_not_equal_false;
15229 			}
15230 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15231 			d1 = Z_DVAL_P(op1);
15232 			d2 = (double)Z_LVAL_P(op2);
15233 			goto is_not_equal_double;
15234 		}
15235 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15236 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15237 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15238 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15239 				zval_ptr_dtor_str(op1);
15240 			}
15241 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15242 				zval_ptr_dtor_str(op2);
15243 			}
15244 			if (!result) {
15245 				goto is_not_equal_true;
15246 			} else {
15247 				goto is_not_equal_false;
15248 			}
15249 		}
15250 	}
15251 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15252 }
15253 
ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15254 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15255 {
15256 	USE_OPLINE
15257 	zval *op1, *op2;
15258 
15259 	SAVE_OPLINE();
15260 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15261 	op2 = RT_CONSTANT(opline, opline->op2);
15262 	compare_function(EX_VAR(opline->result.var), op1, op2);
15263 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15264 
15265 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15266 }
15267 
ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15268 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15269 {
15270 	USE_OPLINE
15271 	zval *op1, *op2;
15272 
15273 	SAVE_OPLINE();
15274 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15275 	op2 = RT_CONSTANT(opline, opline->op2);
15276 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
15277 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15278 
15279 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15280 }
15281 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15282 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15283 {
15284 	USE_OPLINE
15285 	zval *container, *dim, *value;
15286 
15287 	SAVE_OPLINE();
15288 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15289 	dim = RT_CONSTANT(opline, opline->op2);
15290 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15291 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15292 fetch_dim_r_array:
15293 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
15294 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
15295 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
15296 			container = Z_REFVAL_P(container);
15297 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15298 				goto fetch_dim_r_array;
15299 			} else {
15300 				goto fetch_dim_r_slow;
15301 			}
15302 		} else {
15303 fetch_dim_r_slow:
15304 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
15305 				dim++;
15306 			}
15307 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
15308 		}
15309 	} else {
15310 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
15311 	}
15312 
15313 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15314 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15315 }
15316 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15317 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15318 {
15319 	USE_OPLINE
15320 	zval *container;
15321 
15322 	SAVE_OPLINE();
15323 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15324 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
15325 
15326 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15327 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15328 }
15329 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15330 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15331 {
15332 	USE_OPLINE
15333 	zval *container;
15334 	void **cache_slot = NULL;
15335 
15336 	SAVE_OPLINE();
15337 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15338 
15339 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15340 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15341 	    do {
15342 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15343 				container = Z_REFVAL_P(container);
15344 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
15345 					break;
15346 				}
15347 			}
15348 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15349 				ZVAL_UNDEFINED_OP1();
15350 			}
15351 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
15352 			ZVAL_NULL(EX_VAR(opline->result.var));
15353 			goto fetch_obj_r_finish;
15354 		} while (0);
15355 	}
15356 
15357 	/* here we are sure we are dealing with an object */
15358 	do {
15359 		zend_object *zobj = Z_OBJ_P(container);
15360 		zend_string *name, *tmp_name;
15361 		zval *retval;
15362 
15363 		if (IS_CONST == IS_CONST) {
15364 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
15365 
15366 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
15367 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
15368 
15369 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
15370 					retval = OBJ_PROP(zobj, prop_offset);
15371 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
15372 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15373 							goto fetch_obj_r_copy;
15374 						} else {
15375 fetch_obj_r_fast_copy:
15376 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15377 							ZEND_VM_NEXT_OPCODE();
15378 						}
15379 					}
15380 				} else if (EXPECTED(zobj->properties != NULL)) {
15381 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15382 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
15383 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
15384 
15385 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
15386 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
15387 
15388 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
15389 						        (EXPECTED(p->key == name) ||
15390 						         (EXPECTED(p->h == ZSTR_H(name)) &&
15391 						          EXPECTED(p->key != NULL) &&
15392 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
15393 								retval = &p->val;
15394 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15395 									goto fetch_obj_r_copy;
15396 								} else {
15397 									goto fetch_obj_r_fast_copy;
15398 								}
15399 							}
15400 						}
15401 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
15402 					}
15403 					retval = zend_hash_find_known_hash(zobj->properties, name);
15404 					if (EXPECTED(retval)) {
15405 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
15406 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
15407 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15408 							goto fetch_obj_r_copy;
15409 						} else {
15410 							goto fetch_obj_r_fast_copy;
15411 						}
15412 					}
15413 				}
15414 			}
15415 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15416 		} else {
15417 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
15418 			if (UNEXPECTED(!name)) {
15419 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15420 				break;
15421 			}
15422 		}
15423 
15424 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
15425 #if ZEND_DEBUG
15426 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
15427 			zend_verify_internal_read_property_type(zobj, name, retval);
15428 		}
15429 #endif
15430 
15431 		if (IS_CONST != IS_CONST) {
15432 			zend_tmp_string_release(tmp_name);
15433 		}
15434 
15435 		if (retval != EX_VAR(opline->result.var)) {
15436 fetch_obj_r_copy:
15437 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15438 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
15439 			zend_unwrap_reference(retval);
15440 		}
15441 	} while (0);
15442 
15443 fetch_obj_r_finish:
15444 
15445 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15446 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15447 }
15448 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15449 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15450 {
15451 	USE_OPLINE
15452 	zval *container;
15453 	void **cache_slot = NULL;
15454 
15455 	SAVE_OPLINE();
15456 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15457 
15458 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15459 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15460 		do {
15461 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15462 				container = Z_REFVAL_P(container);
15463 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
15464 					break;
15465 				}
15466 			}
15467 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
15468 				ZVAL_UNDEFINED_OP2();
15469 			}
15470 			ZVAL_NULL(EX_VAR(opline->result.var));
15471 			goto fetch_obj_is_finish;
15472 		} while (0);
15473 	}
15474 
15475 	/* here we are sure we are dealing with an object */
15476 	do {
15477 		zend_object *zobj = Z_OBJ_P(container);
15478 		zend_string *name, *tmp_name;
15479 		zval *retval;
15480 
15481 		if (IS_CONST == IS_CONST) {
15482 			cache_slot = CACHE_ADDR(opline->extended_value);
15483 
15484 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
15485 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
15486 
15487 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
15488 					retval = OBJ_PROP(zobj, prop_offset);
15489 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
15490 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15491 							goto fetch_obj_is_copy;
15492 						} else {
15493 fetch_obj_is_fast_copy:
15494 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15495 							ZEND_VM_NEXT_OPCODE();
15496 						}
15497 					}
15498 				} else if (EXPECTED(zobj->properties != NULL)) {
15499 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15500 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
15501 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
15502 
15503 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
15504 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
15505 
15506 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
15507 						        (EXPECTED(p->key == name) ||
15508 						         (EXPECTED(p->h == ZSTR_H(name)) &&
15509 						          EXPECTED(p->key != NULL) &&
15510 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
15511 								retval = &p->val;
15512 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15513 									goto fetch_obj_is_copy;
15514 								} else {
15515 									goto fetch_obj_is_fast_copy;
15516 								}
15517 							}
15518 						}
15519 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
15520 					}
15521 					retval = zend_hash_find_known_hash(zobj->properties, name);
15522 					if (EXPECTED(retval)) {
15523 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
15524 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
15525 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15526 							goto fetch_obj_is_copy;
15527 						} else {
15528 							goto fetch_obj_is_fast_copy;
15529 						}
15530 					}
15531 				}
15532 			}
15533 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15534 		} else {
15535 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
15536 			if (UNEXPECTED(!name)) {
15537 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15538 				break;
15539 			}
15540 		}
15541 
15542 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
15543 
15544 		if (IS_CONST != IS_CONST) {
15545 			zend_tmp_string_release(tmp_name);
15546 		}
15547 
15548 		if (retval != EX_VAR(opline->result.var)) {
15549 fetch_obj_is_copy:
15550 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15551 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
15552 			zend_unwrap_reference(retval);
15553 		}
15554 	} while (0);
15555 
15556 fetch_obj_is_finish:
15557 
15558 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15559 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15560 }
15561 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15562 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15563 {
15564 	USE_OPLINE
15565 	zval *op1, *op2;
15566 	zend_string *op1_str, *op2_str, *str;
15567 
15568 
15569 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15570 	op2 = RT_CONSTANT(opline, opline->op2);
15571 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
15572 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
15573 		zend_string *op1_str = Z_STR_P(op1);
15574 		zend_string *op2_str = Z_STR_P(op2);
15575 		zend_string *str;
15576 
15577 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
15578 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
15579 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
15580 			} else {
15581 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
15582 			}
15583 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15584 				zend_string_release_ex(op1_str, 0);
15585 			}
15586 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
15587 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
15588 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
15589 			} else {
15590 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
15591 			}
15592 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15593 				zend_string_release_ex(op2_str, 0);
15594 			}
15595 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
15596 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
15597 		    size_t len = ZSTR_LEN(op1_str);
15598 
15599 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
15600 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15601 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15602 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15603 				zend_string_release_ex(op2_str, 0);
15604 			}
15605 		} else {
15606 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
15607 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
15608 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15609 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15610 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15611 				zend_string_release_ex(op1_str, 0);
15612 			}
15613 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15614 				zend_string_release_ex(op2_str, 0);
15615 			}
15616 		}
15617 		ZEND_VM_NEXT_OPCODE();
15618 	}
15619 
15620 	SAVE_OPLINE();
15621 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15622 		op1_str = Z_STR_P(op1);
15623 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15624 		op1_str = zend_string_copy(Z_STR_P(op1));
15625 	} else {
15626 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
15627 			ZVAL_UNDEFINED_OP1();
15628 		}
15629 		op1_str = zval_get_string_func(op1);
15630 	}
15631 	if (IS_CONST == IS_CONST) {
15632 		op2_str = Z_STR_P(op2);
15633 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15634 		op2_str = zend_string_copy(Z_STR_P(op2));
15635 	} else {
15636 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
15637 			ZVAL_UNDEFINED_OP2();
15638 		}
15639 		op2_str = zval_get_string_func(op2);
15640 	}
15641 	do {
15642 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15643 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
15644 				if (IS_CONST == IS_CONST) {
15645 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
15646 						GC_ADDREF(op2_str);
15647 					}
15648 				}
15649 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
15650 				zend_string_release_ex(op1_str, 0);
15651 				break;
15652 			}
15653 		}
15654 		if (IS_CONST != IS_CONST) {
15655 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
15656 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15657 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
15658 						GC_ADDREF(op1_str);
15659 					}
15660 				}
15661 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
15662 				zend_string_release_ex(op2_str, 0);
15663 				break;
15664 			}
15665 		}
15666 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
15667 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
15668 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15669 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15670 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15671 			zend_string_release_ex(op1_str, 0);
15672 		}
15673 		if (IS_CONST != IS_CONST) {
15674 			zend_string_release_ex(op2_str, 0);
15675 		}
15676 	} while (0);
15677 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15678 
15679 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15680 }
15681 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15683 {
15684 	USE_OPLINE
15685 	zval *function_name;
15686 	zval *object;
15687 	zend_function *fbc;
15688 	zend_class_entry *called_scope;
15689 	zend_object *obj;
15690 	zend_execute_data *call;
15691 	uint32_t call_info;
15692 
15693 	SAVE_OPLINE();
15694 
15695 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15696 
15697 	if (IS_CONST != IS_CONST) {
15698 		function_name = RT_CONSTANT(opline, opline->op2);
15699 	}
15700 
15701 	if (IS_CONST != IS_CONST &&
15702 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
15703 		do {
15704 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
15705 				function_name = Z_REFVAL_P(function_name);
15706 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
15707 					break;
15708 				}
15709 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
15710 				ZVAL_UNDEFINED_OP2();
15711 				if (UNEXPECTED(EG(exception) != NULL)) {
15712 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15713 					HANDLE_EXCEPTION();
15714 				}
15715 			}
15716 			zend_throw_error(NULL, "Method name must be a string");
15717 
15718 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15719 			HANDLE_EXCEPTION();
15720 		} while (0);
15721 	}
15722 
15723 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
15724 		obj = Z_OBJ_P(object);
15725 	} else {
15726 		do {
15727 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
15728 				obj = Z_OBJ_P(object);
15729 			} else {
15730 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
15731 					zend_reference *ref = Z_REF_P(object);
15732 
15733 					object = &ref->val;
15734 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
15735 						obj = Z_OBJ_P(object);
15736 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
15737 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
15738 								efree_size(ref, sizeof(zend_reference));
15739 							} else {
15740 								Z_ADDREF_P(object);
15741 							}
15742 						}
15743 						break;
15744 					}
15745 				}
15746 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
15747 					object = ZVAL_UNDEFINED_OP1();
15748 					if (UNEXPECTED(EG(exception) != NULL)) {
15749 						if (IS_CONST != IS_CONST) {
15750 
15751 						}
15752 						HANDLE_EXCEPTION();
15753 					}
15754 				}
15755 				if (IS_CONST == IS_CONST) {
15756 					function_name = RT_CONSTANT(opline, opline->op2);
15757 				}
15758 				zend_invalid_method_call(object, function_name);
15759 
15760 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15761 				HANDLE_EXCEPTION();
15762 			}
15763 		} while (0);
15764 	}
15765 
15766 	called_scope = obj->ce;
15767 
15768 	if (IS_CONST == IS_CONST &&
15769 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
15770 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
15771 	} else {
15772 	    zend_object *orig_obj = obj;
15773 
15774 		if (IS_CONST == IS_CONST) {
15775 			function_name = RT_CONSTANT(opline, opline->op2);
15776 		}
15777 
15778 		/* First, locate the function. */
15779 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
15780 		if (UNEXPECTED(fbc == NULL)) {
15781 			if (EXPECTED(!EG(exception))) {
15782 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
15783 			}
15784 
15785 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
15786 				zend_objects_store_del(orig_obj);
15787 			}
15788 			HANDLE_EXCEPTION();
15789 		}
15790 		if (IS_CONST == IS_CONST &&
15791 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
15792 		    EXPECTED(obj == orig_obj)) {
15793 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
15794 		}
15795 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
15796 			GC_ADDREF(obj); /* For $this pointer */
15797 			if (GC_DELREF(orig_obj) == 0) {
15798 				zend_objects_store_del(orig_obj);
15799 			}
15800 		}
15801 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
15802 			init_func_run_time_cache(&fbc->op_array);
15803 		}
15804 	}
15805 
15806 	if (IS_CONST != IS_CONST) {
15807 
15808 	}
15809 
15810 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
15811 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
15812 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
15813 			zend_objects_store_del(obj);
15814 			if (UNEXPECTED(EG(exception))) {
15815 				HANDLE_EXCEPTION();
15816 			}
15817 		}
15818 		/* call static method */
15819 		obj = (zend_object*)called_scope;
15820 		call_info = ZEND_CALL_NESTED_FUNCTION;
15821 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
15822 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
15823 			GC_ADDREF(obj); /* For $this pointer */
15824 		}
15825 		/* CV may be changed indirectly (e.g. when it's a reference) */
15826 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
15827 	}
15828 
15829 	call = zend_vm_stack_push_call_frame(call_info,
15830 		fbc, opline->extended_value, obj);
15831 	call->prev_execute_data = EX(call);
15832 	EX(call) = call;
15833 
15834 	ZEND_VM_NEXT_OPCODE();
15835 }
15836 
ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15837 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15838 {
15839 	USE_OPLINE
15840 	zval *value, *arg;
15841 
15842 	if (IS_CONST == IS_CONST) {
15843 		SAVE_OPLINE();
15844 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15845 		uint32_t arg_num;
15846 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
15847 		if (UNEXPECTED(!arg)) {
15848 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15849 			HANDLE_EXCEPTION();
15850 		}
15851 	} else {
15852 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15853 	}
15854 
15855 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15856 	ZVAL_COPY_VALUE(arg, value);
15857 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15858 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
15859 			Z_ADDREF_P(arg);
15860 		}
15861 	}
15862 	ZEND_VM_NEXT_OPCODE();
15863 }
15864 
ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15865 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15866 {
15867 	USE_OPLINE
15868 	zval *op1, *op2;
15869 	double d1, d2;
15870 
15871 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15872 	op2 = RT_CONSTANT(opline, opline->op2);
15873 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15874 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15875 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15876 case_true:
15877 				ZEND_VM_SMART_BRANCH_TRUE();
15878 			} else {
15879 case_false:
15880 				ZEND_VM_SMART_BRANCH_FALSE();
15881 			}
15882 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15883 			d1 = (double)Z_LVAL_P(op1);
15884 			d2 = Z_DVAL_P(op2);
15885 			goto case_double;
15886 		}
15887 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15888 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15889 			d1 = Z_DVAL_P(op1);
15890 			d2 = Z_DVAL_P(op2);
15891 case_double:
15892 			if (d1 == d2) {
15893 				goto case_true;
15894 			} else {
15895 				goto case_false;
15896 			}
15897 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15898 			d1 = Z_DVAL_P(op1);
15899 			d2 = (double)Z_LVAL_P(op2);
15900 			goto case_double;
15901 		}
15902 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15903 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15904 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15905 
15906 			if (result) {
15907 				goto case_true;
15908 			} else {
15909 				goto case_false;
15910 			}
15911 		}
15912 	}
15913 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15914 }
15915 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15916 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15917 {
15918 	USE_OPLINE
15919 	zval *container;
15920 	bool result;
15921 	zend_ulong hval;
15922 	zval *offset;
15923 
15924 	SAVE_OPLINE();
15925 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15926 	offset = RT_CONSTANT(opline, opline->op2);
15927 
15928 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15929 		HashTable *ht;
15930 		zval *value;
15931 		zend_string *str;
15932 
15933 isset_dim_obj_array:
15934 		ht = Z_ARRVAL_P(container);
15935 isset_again:
15936 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
15937 			str = Z_STR_P(offset);
15938 			if (IS_CONST != IS_CONST) {
15939 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
15940 					goto num_index_prop;
15941 				}
15942 			}
15943 			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
15944 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
15945 			hval = Z_LVAL_P(offset);
15946 num_index_prop:
15947 			value = zend_hash_index_find(ht, hval);
15948 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
15949 			offset = Z_REFVAL_P(offset);
15950 			goto isset_again;
15951 		} else {
15952 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
15953 			if (UNEXPECTED(EG(exception))) {
15954 				result = 0;
15955 				goto isset_dim_obj_exit;
15956 			}
15957 		}
15958 
15959 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
15960 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
15961 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
15962 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
15963 
15964 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
15965 				/* avoid exception check */
15966 
15967 				ZEND_VM_SMART_BRANCH(result, 0);
15968 			}
15969 		} else {
15970 			result = (value == NULL || !i_zend_is_true(value));
15971 		}
15972 		goto isset_dim_obj_exit;
15973 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
15974 		container = Z_REFVAL_P(container);
15975 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15976 			goto isset_dim_obj_array;
15977 		}
15978 	}
15979 
15980 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
15981 		offset++;
15982 	}
15983 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
15984 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
15985 	} else {
15986 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
15987 	}
15988 
15989 isset_dim_obj_exit:
15990 
15991 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15992 	ZEND_VM_SMART_BRANCH(result, 1);
15993 }
15994 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15995 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15996 {
15997 	USE_OPLINE
15998 	zval *container;
15999 	int result;
16000 	zval *offset;
16001 	zend_string *name, *tmp_name;
16002 
16003 	SAVE_OPLINE();
16004 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16005 	offset = RT_CONSTANT(opline, opline->op2);
16006 
16007 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
16008 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
16009 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
16010 			container = Z_REFVAL_P(container);
16011 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
16012 				result = (opline->extended_value & ZEND_ISEMPTY);
16013 				goto isset_object_finish;
16014 			}
16015 		} else {
16016 			result = (opline->extended_value & ZEND_ISEMPTY);
16017 			goto isset_object_finish;
16018 		}
16019 	}
16020 
16021 	if (IS_CONST == IS_CONST) {
16022 		name = Z_STR_P(offset);
16023 	} else {
16024 		name = zval_try_get_tmp_string(offset, &tmp_name);
16025 		if (UNEXPECTED(!name)) {
16026 			result = 0;
16027 			goto isset_object_finish;
16028 		}
16029 	}
16030 
16031 	result =
16032 		(opline->extended_value & ZEND_ISEMPTY) ^
16033 		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));
16034 
16035 	if (IS_CONST != IS_CONST) {
16036 		zend_tmp_string_release(tmp_name);
16037 	}
16038 
16039 isset_object_finish:
16040 
16041 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16042 	ZEND_VM_SMART_BRANCH(result, 1);
16043 }
16044 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16046 {
16047 	USE_OPLINE
16048 
16049 	zval *key, *subject;
16050 	HashTable *ht;
16051 	bool result;
16052 
16053 	SAVE_OPLINE();
16054 
16055 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16056 	subject = RT_CONSTANT(opline, opline->op2);
16057 
16058 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
16059 array_key_exists_array:
16060 		ht = Z_ARRVAL_P(subject);
16061 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
16062 	} else {
16063 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
16064 			subject = Z_REFVAL_P(subject);
16065 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
16066 				goto array_key_exists_array;
16067 			}
16068 		}
16069 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
16070 		result = 0;
16071 	}
16072 
16073 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16074 	ZEND_VM_SMART_BRANCH(result, 1);
16075 }
16076 
16077 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16078 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16079 {
16080 	USE_OPLINE
16081 	zval *expr;
16082 	bool result;
16083 
16084 	SAVE_OPLINE();
16085 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16086 
16087 try_instanceof:
16088 	if (Z_TYPE_P(expr) == IS_OBJECT) {
16089 		zend_class_entry *ce;
16090 
16091 		if (IS_CONST == IS_CONST) {
16092 			ce = CACHED_PTR(opline->extended_value);
16093 			if (UNEXPECTED(ce == NULL)) {
16094 				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);
16095 				if (EXPECTED(ce)) {
16096 					CACHE_PTR(opline->extended_value, ce);
16097 				}
16098 			}
16099 		} else if (IS_CONST == IS_UNUSED) {
16100 			ce = zend_fetch_class(NULL, opline->op2.num);
16101 			if (UNEXPECTED(ce == NULL)) {
16102 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16103 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16104 				HANDLE_EXCEPTION();
16105 			}
16106 		} else {
16107 			ce = Z_CE_P(EX_VAR(opline->op2.var));
16108 		}
16109 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
16110 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
16111 		expr = Z_REFVAL_P(expr);
16112 		goto try_instanceof;
16113 	} else {
16114 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
16115 			ZVAL_UNDEFINED_OP1();
16116 		}
16117 		result = 0;
16118 	}
16119 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16120 	ZEND_VM_SMART_BRANCH(result, 1);
16121 }
16122 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16123 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16124 {
16125 	USE_OPLINE
16126 	zval *container, *dim, *value;
16127 	zend_long offset;
16128 	HashTable *ht;
16129 
16130 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16131 	dim = RT_CONSTANT(opline, opline->op2);
16132 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16133 fetch_dim_r_index_array:
16134 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
16135 			offset = Z_LVAL_P(dim);
16136 		} else {
16137 			SAVE_OPLINE();
16138 			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
16139 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16140 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16141 		}
16142 		ht = Z_ARRVAL_P(container);
16143 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
16144 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
16145 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16146 			SAVE_OPLINE();
16147 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16148 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16149 		} else {
16150 			ZEND_VM_NEXT_OPCODE();
16151 		}
16152 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
16153 		container = Z_REFVAL_P(container);
16154 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16155 			goto fetch_dim_r_index_array;
16156 		} else {
16157 			goto fetch_dim_r_index_slow;
16158 		}
16159 	} else {
16160 fetch_dim_r_index_slow:
16161 		SAVE_OPLINE();
16162 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
16163 			dim++;
16164 		}
16165 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
16166 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16167 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16168 	}
16169 
16170 fetch_dim_r_index_undef:
16171 	ZVAL_NULL(EX_VAR(opline->result.var));
16172 	SAVE_OPLINE();
16173 	zend_undefined_offset(offset);
16174 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16175 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16176 }
16177 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16178 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16179 {
16180 	USE_OPLINE
16181 	zval *container, *dim, *value;
16182 	zend_long offset;
16183 	HashTable *ht;
16184 
16185 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16186 	dim = EX_VAR(opline->op2.var);
16187 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16188 fetch_dim_r_index_array:
16189 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
16190 			offset = Z_LVAL_P(dim);
16191 		} else {
16192 			SAVE_OPLINE();
16193 			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
16194 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16195 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16196 		}
16197 		ht = Z_ARRVAL_P(container);
16198 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
16199 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
16200 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16201 			SAVE_OPLINE();
16202 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16203 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16204 		} else {
16205 			ZEND_VM_NEXT_OPCODE();
16206 		}
16207 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
16208 		container = Z_REFVAL_P(container);
16209 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16210 			goto fetch_dim_r_index_array;
16211 		} else {
16212 			goto fetch_dim_r_index_slow;
16213 		}
16214 	} else {
16215 fetch_dim_r_index_slow:
16216 		SAVE_OPLINE();
16217 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
16218 			dim++;
16219 		}
16220 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
16221 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16222 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16223 	}
16224 
16225 fetch_dim_r_index_undef:
16226 	ZVAL_NULL(EX_VAR(opline->result.var));
16227 	SAVE_OPLINE();
16228 	zend_undefined_offset(offset);
16229 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16230 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16231 }
16232 
ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16234 {
16235 	USE_OPLINE
16236 	zval *op1, *op2;
16237 
16238 	SAVE_OPLINE();
16239 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16240 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16241 	div_function(EX_VAR(opline->result.var), op1, op2);
16242 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16243 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16244 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16245 }
16246 
ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16247 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16248 {
16249 	USE_OPLINE
16250 	zval *op1, *op2;
16251 
16252 	SAVE_OPLINE();
16253 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16254 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16255 	pow_function(EX_VAR(opline->result.var), op1, op2);
16256 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16257 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16258 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16259 }
16260 
ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16261 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16262 {
16263 	USE_OPLINE
16264 	zval *op1, *op2;
16265 
16266 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16267 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16268 
16269 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
16270 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
16271 		zend_string *op1_str = Z_STR_P(op1);
16272 		zend_string *op2_str = Z_STR_P(op2);
16273 		zend_string *str;
16274 
16275 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16276 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16277 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
16278 			} else {
16279 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16280 			}
16281 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16282 				zend_string_release_ex(op1_str, 0);
16283 			}
16284 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16285 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16286 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
16287 			} else {
16288 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16289 			}
16290 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16291 				zend_string_release_ex(op2_str, 0);
16292 			}
16293 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
16294 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
16295 		    size_t len = ZSTR_LEN(op1_str);
16296 
16297 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
16298 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
16299 			}
16300 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
16301 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16302 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16303 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16304 				zend_string_release_ex(op2_str, 0);
16305 			}
16306 		} else {
16307 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16308 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16309 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16310 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16311 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16312 				zend_string_release_ex(op1_str, 0);
16313 			}
16314 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16315 				zend_string_release_ex(op2_str, 0);
16316 			}
16317 		}
16318 		ZEND_VM_NEXT_OPCODE();
16319 	} else {
16320 		SAVE_OPLINE();
16321 
16322 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16323 			op1 = ZVAL_UNDEFINED_OP1();
16324 		}
16325 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
16326 			op2 = ZVAL_UNDEFINED_OP2();
16327 		}
16328 		concat_function(EX_VAR(opline->result.var), op1, op2);
16329 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16330 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16331 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16332 	}
16333 }
16334 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16335 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16336 {
16337 	USE_OPLINE
16338 	zval *op1, *op2;
16339 	double d1, d2;
16340 
16341 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16342 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16343 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16344 		/* pass */
16345 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16346 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16347 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16348 is_equal_true:
16349 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
16350 			} else {
16351 is_equal_false:
16352 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
16353 			}
16354 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16355 			d1 = (double)Z_LVAL_P(op1);
16356 			d2 = Z_DVAL_P(op2);
16357 			goto is_equal_double;
16358 		}
16359 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16360 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16361 			d1 = Z_DVAL_P(op1);
16362 			d2 = Z_DVAL_P(op2);
16363 is_equal_double:
16364 			if (d1 == d2) {
16365 				goto is_equal_true;
16366 			} else {
16367 				goto is_equal_false;
16368 			}
16369 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16370 			d1 = Z_DVAL_P(op1);
16371 			d2 = (double)Z_LVAL_P(op2);
16372 			goto is_equal_double;
16373 		}
16374 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16375 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16376 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16377 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16378 				zval_ptr_dtor_str(op1);
16379 			}
16380 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16381 				zval_ptr_dtor_str(op2);
16382 			}
16383 			if (result) {
16384 				goto is_equal_true;
16385 			} else {
16386 				goto is_equal_false;
16387 			}
16388 		}
16389 	}
16390 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16391 }
16392 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16394 {
16395 	USE_OPLINE
16396 	zval *op1, *op2;
16397 	double d1, d2;
16398 
16399 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16400 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16401 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16402 		/* pass */
16403 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16404 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16405 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16406 is_equal_true:
16407 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
16408 			} else {
16409 is_equal_false:
16410 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
16411 			}
16412 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16413 			d1 = (double)Z_LVAL_P(op1);
16414 			d2 = Z_DVAL_P(op2);
16415 			goto is_equal_double;
16416 		}
16417 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16418 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16419 			d1 = Z_DVAL_P(op1);
16420 			d2 = Z_DVAL_P(op2);
16421 is_equal_double:
16422 			if (d1 == d2) {
16423 				goto is_equal_true;
16424 			} else {
16425 				goto is_equal_false;
16426 			}
16427 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16428 			d1 = Z_DVAL_P(op1);
16429 			d2 = (double)Z_LVAL_P(op2);
16430 			goto is_equal_double;
16431 		}
16432 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16433 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16434 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16435 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16436 				zval_ptr_dtor_str(op1);
16437 			}
16438 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16439 				zval_ptr_dtor_str(op2);
16440 			}
16441 			if (result) {
16442 				goto is_equal_true;
16443 			} else {
16444 				goto is_equal_false;
16445 			}
16446 		}
16447 	}
16448 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16449 }
16450 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16451 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16452 {
16453 	USE_OPLINE
16454 	zval *op1, *op2;
16455 	double d1, d2;
16456 
16457 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16458 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16459 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16460 		/* pass */
16461 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16462 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16463 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16464 is_equal_true:
16465 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
16466 			} else {
16467 is_equal_false:
16468 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
16469 			}
16470 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16471 			d1 = (double)Z_LVAL_P(op1);
16472 			d2 = Z_DVAL_P(op2);
16473 			goto is_equal_double;
16474 		}
16475 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16476 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16477 			d1 = Z_DVAL_P(op1);
16478 			d2 = Z_DVAL_P(op2);
16479 is_equal_double:
16480 			if (d1 == d2) {
16481 				goto is_equal_true;
16482 			} else {
16483 				goto is_equal_false;
16484 			}
16485 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16486 			d1 = Z_DVAL_P(op1);
16487 			d2 = (double)Z_LVAL_P(op2);
16488 			goto is_equal_double;
16489 		}
16490 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16491 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16492 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16493 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16494 				zval_ptr_dtor_str(op1);
16495 			}
16496 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16497 				zval_ptr_dtor_str(op2);
16498 			}
16499 			if (result) {
16500 				goto is_equal_true;
16501 			} else {
16502 				goto is_equal_false;
16503 			}
16504 		}
16505 	}
16506 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16507 }
16508 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16509 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16510 {
16511 	USE_OPLINE
16512 	zval *op1, *op2;
16513 	double d1, d2;
16514 
16515 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16516 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16517 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16518 		/* pass */
16519 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16520 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16521 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
16522 is_not_equal_true:
16523 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
16524 			} else {
16525 is_not_equal_false:
16526 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
16527 			}
16528 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16529 			d1 = (double)Z_LVAL_P(op1);
16530 			d2 = Z_DVAL_P(op2);
16531 			goto is_not_equal_double;
16532 		}
16533 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16534 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16535 			d1 = Z_DVAL_P(op1);
16536 			d2 = Z_DVAL_P(op2);
16537 is_not_equal_double:
16538 			if (d1 != d2) {
16539 				goto is_not_equal_true;
16540 			} else {
16541 				goto is_not_equal_false;
16542 			}
16543 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16544 			d1 = Z_DVAL_P(op1);
16545 			d2 = (double)Z_LVAL_P(op2);
16546 			goto is_not_equal_double;
16547 		}
16548 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16549 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16550 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16551 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16552 				zval_ptr_dtor_str(op1);
16553 			}
16554 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16555 				zval_ptr_dtor_str(op2);
16556 			}
16557 			if (!result) {
16558 				goto is_not_equal_true;
16559 			} else {
16560 				goto is_not_equal_false;
16561 			}
16562 		}
16563 	}
16564 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16565 }
16566 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16567 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16568 {
16569 	USE_OPLINE
16570 	zval *op1, *op2;
16571 	double d1, d2;
16572 
16573 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16574 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16575 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16576 		/* pass */
16577 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16578 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16579 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
16580 is_not_equal_true:
16581 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
16582 			} else {
16583 is_not_equal_false:
16584 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
16585 			}
16586 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16587 			d1 = (double)Z_LVAL_P(op1);
16588 			d2 = Z_DVAL_P(op2);
16589 			goto is_not_equal_double;
16590 		}
16591 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16592 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16593 			d1 = Z_DVAL_P(op1);
16594 			d2 = Z_DVAL_P(op2);
16595 is_not_equal_double:
16596 			if (d1 != d2) {
16597 				goto is_not_equal_true;
16598 			} else {
16599 				goto is_not_equal_false;
16600 			}
16601 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16602 			d1 = Z_DVAL_P(op1);
16603 			d2 = (double)Z_LVAL_P(op2);
16604 			goto is_not_equal_double;
16605 		}
16606 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16607 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16608 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16609 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16610 				zval_ptr_dtor_str(op1);
16611 			}
16612 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16613 				zval_ptr_dtor_str(op2);
16614 			}
16615 			if (!result) {
16616 				goto is_not_equal_true;
16617 			} else {
16618 				goto is_not_equal_false;
16619 			}
16620 		}
16621 	}
16622 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16623 }
16624 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16625 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16626 {
16627 	USE_OPLINE
16628 	zval *op1, *op2;
16629 	double d1, d2;
16630 
16631 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16632 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16633 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16634 		/* pass */
16635 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16636 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16637 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
16638 is_not_equal_true:
16639 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
16640 			} else {
16641 is_not_equal_false:
16642 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
16643 			}
16644 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16645 			d1 = (double)Z_LVAL_P(op1);
16646 			d2 = Z_DVAL_P(op2);
16647 			goto is_not_equal_double;
16648 		}
16649 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16650 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16651 			d1 = Z_DVAL_P(op1);
16652 			d2 = Z_DVAL_P(op2);
16653 is_not_equal_double:
16654 			if (d1 != d2) {
16655 				goto is_not_equal_true;
16656 			} else {
16657 				goto is_not_equal_false;
16658 			}
16659 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16660 			d1 = Z_DVAL_P(op1);
16661 			d2 = (double)Z_LVAL_P(op2);
16662 			goto is_not_equal_double;
16663 		}
16664 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16665 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16666 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16667 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16668 				zval_ptr_dtor_str(op1);
16669 			}
16670 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16671 				zval_ptr_dtor_str(op2);
16672 			}
16673 			if (!result) {
16674 				goto is_not_equal_true;
16675 			} else {
16676 				goto is_not_equal_false;
16677 			}
16678 		}
16679 	}
16680 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16681 }
16682 
ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16683 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16684 {
16685 	USE_OPLINE
16686 	zval *op1, *op2;
16687 
16688 	SAVE_OPLINE();
16689 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16690 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16691 	compare_function(EX_VAR(opline->result.var), op1, op2);
16692 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16693 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16694 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16695 }
16696 
ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16697 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16698 {
16699 	USE_OPLINE
16700 	zval *op1, *op2;
16701 
16702 	SAVE_OPLINE();
16703 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16704 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16705 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
16706 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16707 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16708 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16709 }
16710 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16711 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16712 {
16713 	USE_OPLINE
16714 	zval *container, *dim, *value;
16715 
16716 	SAVE_OPLINE();
16717 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16718 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16719 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16720 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16721 fetch_dim_r_array:
16722 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
16723 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
16724 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
16725 			container = Z_REFVAL_P(container);
16726 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16727 				goto fetch_dim_r_array;
16728 			} else {
16729 				goto fetch_dim_r_slow;
16730 			}
16731 		} else {
16732 fetch_dim_r_slow:
16733 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
16734 				dim++;
16735 			}
16736 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
16737 		}
16738 	} else {
16739 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
16740 	}
16741 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16742 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16743 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16744 }
16745 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16746 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16747 {
16748 	USE_OPLINE
16749 	zval *container;
16750 
16751 	SAVE_OPLINE();
16752 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16753 	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);
16754 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16755 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16756 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16757 }
16758 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16760 {
16761 	USE_OPLINE
16762 	zval *container;
16763 	void **cache_slot = NULL;
16764 
16765 	SAVE_OPLINE();
16766 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16767 
16768 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
16769 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
16770 	    do {
16771 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
16772 				container = Z_REFVAL_P(container);
16773 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
16774 					break;
16775 				}
16776 			}
16777 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
16778 				ZVAL_UNDEFINED_OP1();
16779 			}
16780 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
16781 			ZVAL_NULL(EX_VAR(opline->result.var));
16782 			goto fetch_obj_r_finish;
16783 		} while (0);
16784 	}
16785 
16786 	/* here we are sure we are dealing with an object */
16787 	do {
16788 		zend_object *zobj = Z_OBJ_P(container);
16789 		zend_string *name, *tmp_name;
16790 		zval *retval;
16791 
16792 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16793 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
16794 
16795 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
16796 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
16797 
16798 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
16799 					retval = OBJ_PROP(zobj, prop_offset);
16800 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
16801 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16802 							goto fetch_obj_r_copy;
16803 						} else {
16804 fetch_obj_r_fast_copy:
16805 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16806 							ZEND_VM_NEXT_OPCODE();
16807 						}
16808 					}
16809 				} else if (EXPECTED(zobj->properties != NULL)) {
16810 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
16811 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
16812 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
16813 
16814 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
16815 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
16816 
16817 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16818 						        (EXPECTED(p->key == name) ||
16819 						         (EXPECTED(p->h == ZSTR_H(name)) &&
16820 						          EXPECTED(p->key != NULL) &&
16821 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
16822 								retval = &p->val;
16823 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16824 									goto fetch_obj_r_copy;
16825 								} else {
16826 									goto fetch_obj_r_fast_copy;
16827 								}
16828 							}
16829 						}
16830 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
16831 					}
16832 					retval = zend_hash_find_known_hash(zobj->properties, name);
16833 					if (EXPECTED(retval)) {
16834 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
16835 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
16836 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16837 							goto fetch_obj_r_copy;
16838 						} else {
16839 							goto fetch_obj_r_fast_copy;
16840 						}
16841 					}
16842 				}
16843 			}
16844 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
16845 		} else {
16846 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
16847 			if (UNEXPECTED(!name)) {
16848 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16849 				break;
16850 			}
16851 		}
16852 
16853 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
16854 #if ZEND_DEBUG
16855 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
16856 			zend_verify_internal_read_property_type(zobj, name, retval);
16857 		}
16858 #endif
16859 
16860 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16861 			zend_tmp_string_release(tmp_name);
16862 		}
16863 
16864 		if (retval != EX_VAR(opline->result.var)) {
16865 fetch_obj_r_copy:
16866 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16867 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
16868 			zend_unwrap_reference(retval);
16869 		}
16870 	} while (0);
16871 
16872 fetch_obj_r_finish:
16873 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16874 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16875 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16876 }
16877 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16878 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16879 {
16880 	USE_OPLINE
16881 	zval *container;
16882 	void **cache_slot = NULL;
16883 
16884 	SAVE_OPLINE();
16885 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16886 
16887 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
16888 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
16889 		do {
16890 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
16891 				container = Z_REFVAL_P(container);
16892 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
16893 					break;
16894 				}
16895 			}
16896 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
16897 				ZVAL_UNDEFINED_OP2();
16898 			}
16899 			ZVAL_NULL(EX_VAR(opline->result.var));
16900 			goto fetch_obj_is_finish;
16901 		} while (0);
16902 	}
16903 
16904 	/* here we are sure we are dealing with an object */
16905 	do {
16906 		zend_object *zobj = Z_OBJ_P(container);
16907 		zend_string *name, *tmp_name;
16908 		zval *retval;
16909 
16910 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16911 			cache_slot = CACHE_ADDR(opline->extended_value);
16912 
16913 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
16914 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
16915 
16916 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
16917 					retval = OBJ_PROP(zobj, prop_offset);
16918 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
16919 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16920 							goto fetch_obj_is_copy;
16921 						} else {
16922 fetch_obj_is_fast_copy:
16923 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16924 							ZEND_VM_NEXT_OPCODE();
16925 						}
16926 					}
16927 				} else if (EXPECTED(zobj->properties != NULL)) {
16928 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
16929 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
16930 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
16931 
16932 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
16933 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
16934 
16935 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16936 						        (EXPECTED(p->key == name) ||
16937 						         (EXPECTED(p->h == ZSTR_H(name)) &&
16938 						          EXPECTED(p->key != NULL) &&
16939 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
16940 								retval = &p->val;
16941 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16942 									goto fetch_obj_is_copy;
16943 								} else {
16944 									goto fetch_obj_is_fast_copy;
16945 								}
16946 							}
16947 						}
16948 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
16949 					}
16950 					retval = zend_hash_find_known_hash(zobj->properties, name);
16951 					if (EXPECTED(retval)) {
16952 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
16953 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
16954 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16955 							goto fetch_obj_is_copy;
16956 						} else {
16957 							goto fetch_obj_is_fast_copy;
16958 						}
16959 					}
16960 				}
16961 			}
16962 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
16963 		} else {
16964 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
16965 			if (UNEXPECTED(!name)) {
16966 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16967 				break;
16968 			}
16969 		}
16970 
16971 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
16972 
16973 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16974 			zend_tmp_string_release(tmp_name);
16975 		}
16976 
16977 		if (retval != EX_VAR(opline->result.var)) {
16978 fetch_obj_is_copy:
16979 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16980 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
16981 			zend_unwrap_reference(retval);
16982 		}
16983 	} while (0);
16984 
16985 fetch_obj_is_finish:
16986 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16987 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16988 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16989 }
16990 
ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16991 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16992 {
16993 	USE_OPLINE
16994 	zval *op1, *op2;
16995 	zend_string *op1_str, *op2_str, *str;
16996 
16997 
16998 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16999 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17000 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
17001 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
17002 		zend_string *op1_str = Z_STR_P(op1);
17003 		zend_string *op2_str = Z_STR_P(op2);
17004 		zend_string *str;
17005 
17006 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17007 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17008 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
17009 			} else {
17010 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17011 			}
17012 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17013 				zend_string_release_ex(op1_str, 0);
17014 			}
17015 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17016 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17017 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
17018 			} else {
17019 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17020 			}
17021 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17022 				zend_string_release_ex(op2_str, 0);
17023 			}
17024 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
17025 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
17026 		    size_t len = ZSTR_LEN(op1_str);
17027 
17028 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
17029 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17030 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17031 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17032 				zend_string_release_ex(op2_str, 0);
17033 			}
17034 		} else {
17035 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17036 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17037 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17038 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17039 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17040 				zend_string_release_ex(op1_str, 0);
17041 			}
17042 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17043 				zend_string_release_ex(op2_str, 0);
17044 			}
17045 		}
17046 		ZEND_VM_NEXT_OPCODE();
17047 	}
17048 
17049 	SAVE_OPLINE();
17050 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17051 		op1_str = Z_STR_P(op1);
17052 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17053 		op1_str = zend_string_copy(Z_STR_P(op1));
17054 	} else {
17055 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17056 			ZVAL_UNDEFINED_OP1();
17057 		}
17058 		op1_str = zval_get_string_func(op1);
17059 	}
17060 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17061 		op2_str = Z_STR_P(op2);
17062 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17063 		op2_str = zend_string_copy(Z_STR_P(op2));
17064 	} else {
17065 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
17066 			ZVAL_UNDEFINED_OP2();
17067 		}
17068 		op2_str = zval_get_string_func(op2);
17069 	}
17070 	do {
17071 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17072 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17073 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17074 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
17075 						GC_ADDREF(op2_str);
17076 					}
17077 				}
17078 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17079 				zend_string_release_ex(op1_str, 0);
17080 				break;
17081 			}
17082 		}
17083 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17084 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17085 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17086 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
17087 						GC_ADDREF(op1_str);
17088 					}
17089 				}
17090 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17091 				zend_string_release_ex(op2_str, 0);
17092 				break;
17093 			}
17094 		}
17095 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17096 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17097 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17098 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17099 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17100 			zend_string_release_ex(op1_str, 0);
17101 		}
17102 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17103 			zend_string_release_ex(op2_str, 0);
17104 		}
17105 	} while (0);
17106 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17107 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17108 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17109 }
17110 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17112 {
17113 	USE_OPLINE
17114 	zval *function_name;
17115 	zval *object;
17116 	zend_function *fbc;
17117 	zend_class_entry *called_scope;
17118 	zend_object *obj;
17119 	zend_execute_data *call;
17120 	uint32_t call_info;
17121 
17122 	SAVE_OPLINE();
17123 
17124 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17125 
17126 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17127 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17128 	}
17129 
17130 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
17131 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
17132 		do {
17133 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
17134 				function_name = Z_REFVAL_P(function_name);
17135 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
17136 					break;
17137 				}
17138 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
17139 				ZVAL_UNDEFINED_OP2();
17140 				if (UNEXPECTED(EG(exception) != NULL)) {
17141 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17142 					HANDLE_EXCEPTION();
17143 				}
17144 			}
17145 			zend_throw_error(NULL, "Method name must be a string");
17146 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17147 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17148 			HANDLE_EXCEPTION();
17149 		} while (0);
17150 	}
17151 
17152 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
17153 		obj = Z_OBJ_P(object);
17154 	} else {
17155 		do {
17156 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
17157 				obj = Z_OBJ_P(object);
17158 			} else {
17159 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
17160 					zend_reference *ref = Z_REF_P(object);
17161 
17162 					object = &ref->val;
17163 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
17164 						obj = Z_OBJ_P(object);
17165 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
17166 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
17167 								efree_size(ref, sizeof(zend_reference));
17168 							} else {
17169 								Z_ADDREF_P(object);
17170 							}
17171 						}
17172 						break;
17173 					}
17174 				}
17175 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
17176 					object = ZVAL_UNDEFINED_OP1();
17177 					if (UNEXPECTED(EG(exception) != NULL)) {
17178 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17179 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17180 						}
17181 						HANDLE_EXCEPTION();
17182 					}
17183 				}
17184 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17185 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17186 				}
17187 				zend_invalid_method_call(object, function_name);
17188 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17189 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17190 				HANDLE_EXCEPTION();
17191 			}
17192 		} while (0);
17193 	}
17194 
17195 	called_scope = obj->ce;
17196 
17197 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
17198 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
17199 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
17200 	} else {
17201 	    zend_object *orig_obj = obj;
17202 
17203 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17204 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17205 		}
17206 
17207 		/* First, locate the function. */
17208 		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));
17209 		if (UNEXPECTED(fbc == NULL)) {
17210 			if (EXPECTED(!EG(exception))) {
17211 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
17212 			}
17213 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17214 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
17215 				zend_objects_store_del(orig_obj);
17216 			}
17217 			HANDLE_EXCEPTION();
17218 		}
17219 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
17220 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
17221 		    EXPECTED(obj == orig_obj)) {
17222 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
17223 		}
17224 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
17225 			GC_ADDREF(obj); /* For $this pointer */
17226 			if (GC_DELREF(orig_obj) == 0) {
17227 				zend_objects_store_del(orig_obj);
17228 			}
17229 		}
17230 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
17231 			init_func_run_time_cache(&fbc->op_array);
17232 		}
17233 	}
17234 
17235 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17236 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17237 	}
17238 
17239 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
17240 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
17241 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
17242 			zend_objects_store_del(obj);
17243 			if (UNEXPECTED(EG(exception))) {
17244 				HANDLE_EXCEPTION();
17245 			}
17246 		}
17247 		/* call static method */
17248 		obj = (zend_object*)called_scope;
17249 		call_info = ZEND_CALL_NESTED_FUNCTION;
17250 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
17251 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
17252 			GC_ADDREF(obj); /* For $this pointer */
17253 		}
17254 		/* CV may be changed indirectly (e.g. when it's a reference) */
17255 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
17256 	}
17257 
17258 	call = zend_vm_stack_push_call_frame(call_info,
17259 		fbc, opline->extended_value, obj);
17260 	call->prev_execute_data = EX(call);
17261 	EX(call) = call;
17262 
17263 	ZEND_VM_NEXT_OPCODE();
17264 }
17265 
ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17267 {
17268 	USE_OPLINE
17269 	zval *op1, *op2;
17270 	double d1, d2;
17271 
17272 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17273 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17274 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17275 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17276 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
17277 case_true:
17278 				ZEND_VM_SMART_BRANCH_TRUE();
17279 			} else {
17280 case_false:
17281 				ZEND_VM_SMART_BRANCH_FALSE();
17282 			}
17283 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17284 			d1 = (double)Z_LVAL_P(op1);
17285 			d2 = Z_DVAL_P(op2);
17286 			goto case_double;
17287 		}
17288 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17289 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17290 			d1 = Z_DVAL_P(op1);
17291 			d2 = Z_DVAL_P(op2);
17292 case_double:
17293 			if (d1 == d2) {
17294 				goto case_true;
17295 			} else {
17296 				goto case_false;
17297 			}
17298 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17299 			d1 = Z_DVAL_P(op1);
17300 			d2 = (double)Z_LVAL_P(op2);
17301 			goto case_double;
17302 		}
17303 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17304 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17305 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17306 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17307 			if (result) {
17308 				goto case_true;
17309 			} else {
17310 				goto case_false;
17311 			}
17312 		}
17313 	}
17314 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17315 }
17316 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17317 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17318 {
17319 	USE_OPLINE
17320 	zval *container;
17321 	bool result;
17322 	zend_ulong hval;
17323 	zval *offset;
17324 
17325 	SAVE_OPLINE();
17326 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17327 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17328 
17329 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17330 		HashTable *ht;
17331 		zval *value;
17332 		zend_string *str;
17333 
17334 isset_dim_obj_array:
17335 		ht = Z_ARRVAL_P(container);
17336 isset_again:
17337 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
17338 			str = Z_STR_P(offset);
17339 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17340 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
17341 					goto num_index_prop;
17342 				}
17343 			}
17344 			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
17345 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
17346 			hval = Z_LVAL_P(offset);
17347 num_index_prop:
17348 			value = zend_hash_index_find(ht, hval);
17349 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
17350 			offset = Z_REFVAL_P(offset);
17351 			goto isset_again;
17352 		} else {
17353 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
17354 			if (UNEXPECTED(EG(exception))) {
17355 				result = 0;
17356 				goto isset_dim_obj_exit;
17357 			}
17358 		}
17359 
17360 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
17361 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
17362 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
17363 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
17364 
17365 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
17366 				/* avoid exception check */
17367 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17368 				ZEND_VM_SMART_BRANCH(result, 0);
17369 			}
17370 		} else {
17371 			result = (value == NULL || !i_zend_is_true(value));
17372 		}
17373 		goto isset_dim_obj_exit;
17374 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
17375 		container = Z_REFVAL_P(container);
17376 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17377 			goto isset_dim_obj_array;
17378 		}
17379 	}
17380 
17381 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
17382 		offset++;
17383 	}
17384 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
17385 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
17386 	} else {
17387 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
17388 	}
17389 
17390 isset_dim_obj_exit:
17391 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17392 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17393 	ZEND_VM_SMART_BRANCH(result, 1);
17394 }
17395 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17396 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17397 {
17398 	USE_OPLINE
17399 	zval *container;
17400 	int result;
17401 	zval *offset;
17402 	zend_string *name, *tmp_name;
17403 
17404 	SAVE_OPLINE();
17405 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17406 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17407 
17408 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17409 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17410 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17411 			container = Z_REFVAL_P(container);
17412 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
17413 				result = (opline->extended_value & ZEND_ISEMPTY);
17414 				goto isset_object_finish;
17415 			}
17416 		} else {
17417 			result = (opline->extended_value & ZEND_ISEMPTY);
17418 			goto isset_object_finish;
17419 		}
17420 	}
17421 
17422 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17423 		name = Z_STR_P(offset);
17424 	} else {
17425 		name = zval_try_get_tmp_string(offset, &tmp_name);
17426 		if (UNEXPECTED(!name)) {
17427 			result = 0;
17428 			goto isset_object_finish;
17429 		}
17430 	}
17431 
17432 	result =
17433 		(opline->extended_value & ZEND_ISEMPTY) ^
17434 		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));
17435 
17436 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17437 		zend_tmp_string_release(tmp_name);
17438 	}
17439 
17440 isset_object_finish:
17441 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17442 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17443 	ZEND_VM_SMART_BRANCH(result, 1);
17444 }
17445 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17446 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17447 {
17448 	USE_OPLINE
17449 
17450 	zval *key, *subject;
17451 	HashTable *ht;
17452 	bool result;
17453 
17454 	SAVE_OPLINE();
17455 
17456 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17457 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17458 
17459 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
17460 array_key_exists_array:
17461 		ht = Z_ARRVAL_P(subject);
17462 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
17463 	} else {
17464 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
17465 			subject = Z_REFVAL_P(subject);
17466 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
17467 				goto array_key_exists_array;
17468 			}
17469 		}
17470 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
17471 		result = 0;
17472 	}
17473 
17474 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17475 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17476 	ZEND_VM_SMART_BRANCH(result, 1);
17477 }
17478 
17479 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17480 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17481 {
17482 	USE_OPLINE
17483 	zval *expr;
17484 	bool result;
17485 
17486 	SAVE_OPLINE();
17487 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17488 
17489 try_instanceof:
17490 	if (Z_TYPE_P(expr) == IS_OBJECT) {
17491 		zend_class_entry *ce;
17492 
17493 		if (IS_VAR == IS_CONST) {
17494 			ce = CACHED_PTR(opline->extended_value);
17495 			if (UNEXPECTED(ce == NULL)) {
17496 				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);
17497 				if (EXPECTED(ce)) {
17498 					CACHE_PTR(opline->extended_value, ce);
17499 				}
17500 			}
17501 		} else if (IS_VAR == IS_UNUSED) {
17502 			ce = zend_fetch_class(NULL, opline->op2.num);
17503 			if (UNEXPECTED(ce == NULL)) {
17504 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17505 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17506 				HANDLE_EXCEPTION();
17507 			}
17508 		} else {
17509 			ce = Z_CE_P(EX_VAR(opline->op2.var));
17510 		}
17511 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
17512 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
17513 		expr = Z_REFVAL_P(expr);
17514 		goto try_instanceof;
17515 	} else {
17516 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
17517 			ZVAL_UNDEFINED_OP1();
17518 		}
17519 		result = 0;
17520 	}
17521 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17522 	ZEND_VM_SMART_BRANCH(result, 1);
17523 }
17524 
zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)17525 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)
17526 {
17527 	USE_OPLINE
17528 	zval *varname;
17529 	zval *retval;
17530 	zend_string *name, *tmp_name;
17531 	HashTable *target_symbol_table;
17532 
17533 	SAVE_OPLINE();
17534 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17535 
17536 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17537 		name = Z_STR_P(varname);
17538 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
17539 		name = Z_STR_P(varname);
17540 		tmp_name = NULL;
17541 	} else {
17542 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
17543 			ZVAL_UNDEFINED_OP1();
17544 		}
17545 		name = zval_try_get_tmp_string(varname, &tmp_name);
17546 		if (UNEXPECTED(!name)) {
17547 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
17548 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17549 			}
17550 			ZVAL_UNDEF(EX_VAR(opline->result.var));
17551 			HANDLE_EXCEPTION();
17552 		}
17553 	}
17554 
17555 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
17556 	retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
17557 	if (retval == NULL) {
17558 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
17559 fetch_this:
17560 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
17561 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17562 				zend_tmp_string_release(tmp_name);
17563 			}
17564 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17565 		}
17566 		if (type == BP_VAR_W) {
17567 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
17568 		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
17569 			retval = &EG(uninitialized_zval);
17570 		} else {
17571 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
17572 				/* Keep name alive in case an error handler tries to free it. */
17573 				zend_string_addref(name);
17574 			}
17575 			zend_error(E_WARNING, "Undefined %svariable $%s",
17576 				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
17577 			if (type == BP_VAR_RW && !EG(exception)) {
17578 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
17579 			} else {
17580 				retval = &EG(uninitialized_zval);
17581 			}
17582 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
17583 				zend_string_release(name);
17584 			}
17585 		}
17586 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
17587 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
17588 		retval = Z_INDIRECT_P(retval);
17589 		if (Z_TYPE_P(retval) == IS_UNDEF) {
17590 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
17591 				goto fetch_this;
17592 			}
17593 			if (type == BP_VAR_W) {
17594 				ZVAL_NULL(retval);
17595 			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
17596 				retval = &EG(uninitialized_zval);
17597 			} else {
17598 				zend_error(E_WARNING, "Undefined %svariable $%s",
17599 					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
17600 				if (type == BP_VAR_RW && !EG(exception)) {
17601 					ZVAL_NULL(retval);
17602 				} else {
17603 					retval = &EG(uninitialized_zval);
17604 				}
17605 			}
17606 		}
17607 	}
17608 
17609 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
17610 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17611 	}
17612 
17613 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17614 		zend_tmp_string_release(tmp_name);
17615 	}
17616 
17617 	ZEND_ASSERT(retval != NULL);
17618 	if (type == BP_VAR_R || type == BP_VAR_IS) {
17619 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17620 	} else {
17621 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
17622 	}
17623 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17624 }
17625 
ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17626 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17627 {
17628 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17629 }
17630 
ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17631 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17632 {
17633 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17634 }
17635 
ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17636 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17637 {
17638 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17639 }
17640 
ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17642 {
17643 	int fetch_type =
17644 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
17645 			BP_VAR_W : BP_VAR_R;
17646 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17647 }
17648 
ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17649 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17650 {
17651 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17652 }
17653 
ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17654 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17655 {
17656 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17657 }
17658 
17659 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17660 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17661 {
17662 	USE_OPLINE
17663 	zval *value, *arg;
17664 
17665 	if (IS_UNUSED == IS_CONST) {
17666 		SAVE_OPLINE();
17667 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
17668 		uint32_t arg_num;
17669 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
17670 		if (UNEXPECTED(!arg)) {
17671 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17672 			HANDLE_EXCEPTION();
17673 		}
17674 	} else {
17675 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
17676 	}
17677 
17678 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17679 	ZVAL_COPY_VALUE(arg, value);
17680 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17681 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
17682 			Z_ADDREF_P(arg);
17683 		}
17684 	}
17685 	ZEND_VM_NEXT_OPCODE();
17686 }
17687 
ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17688 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17689 {
17690 	USE_OPLINE
17691 	zval *varname;
17692 	zend_string *name, *tmp_name;
17693 	HashTable *target_symbol_table;
17694 
17695 	SAVE_OPLINE();
17696 
17697 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17698 
17699 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17700 		name = Z_STR_P(varname);
17701 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
17702 		name = Z_STR_P(varname);
17703 		tmp_name = NULL;
17704 	} else {
17705 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
17706 			varname = ZVAL_UNDEFINED_OP1();
17707 		}
17708 		name = zval_try_get_tmp_string(varname, &tmp_name);
17709 		if (UNEXPECTED(!name)) {
17710 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17711 			HANDLE_EXCEPTION();
17712 		}
17713 	}
17714 
17715 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
17716 	zend_hash_del_ind(target_symbol_table, name);
17717 
17718 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17719 		zend_tmp_string_release(tmp_name);
17720 	}
17721 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17722 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17723 }
17724 
17725 /* 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)17726 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17727 {
17728 	USE_OPLINE
17729 	zval *value;
17730 	/* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
17731 	int result;
17732 	zval *varname;
17733 	zend_string *name, *tmp_name;
17734 	HashTable *target_symbol_table;
17735 
17736 	SAVE_OPLINE();
17737 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17738 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17739 		name = Z_STR_P(varname);
17740 	} else {
17741 		name = zval_get_tmp_string(varname, &tmp_name);
17742 	}
17743 
17744 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
17745 	value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
17746 
17747 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17748 		zend_tmp_string_release(tmp_name);
17749 	}
17750 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17751 
17752 	if (!value) {
17753 		result = (opline->extended_value & ZEND_ISEMPTY);
17754 	} else {
17755 		if (Z_TYPE_P(value) == IS_INDIRECT) {
17756 			value = Z_INDIRECT_P(value);
17757 		}
17758 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
17759 			if (Z_ISREF_P(value)) {
17760 				value = Z_REFVAL_P(value);
17761 			}
17762 			result = Z_TYPE_P(value) > IS_NULL;
17763 		} else {
17764 			result = !i_zend_is_true(value);
17765 		}
17766 	}
17767 
17768 	ZEND_VM_SMART_BRANCH(result, 1);
17769 }
17770 
17771 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17772 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17773 {
17774 	USE_OPLINE
17775 	zval *expr;
17776 	bool result;
17777 
17778 	SAVE_OPLINE();
17779 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17780 
17781 try_instanceof:
17782 	if (Z_TYPE_P(expr) == IS_OBJECT) {
17783 		zend_class_entry *ce;
17784 
17785 		if (IS_UNUSED == IS_CONST) {
17786 			ce = CACHED_PTR(opline->extended_value);
17787 			if (UNEXPECTED(ce == NULL)) {
17788 				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);
17789 				if (EXPECTED(ce)) {
17790 					CACHE_PTR(opline->extended_value, ce);
17791 				}
17792 			}
17793 		} else if (IS_UNUSED == IS_UNUSED) {
17794 			ce = zend_fetch_class(NULL, opline->op2.num);
17795 			if (UNEXPECTED(ce == NULL)) {
17796 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17797 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17798 				HANDLE_EXCEPTION();
17799 			}
17800 		} else {
17801 			ce = Z_CE_P(EX_VAR(opline->op2.var));
17802 		}
17803 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
17804 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
17805 		expr = Z_REFVAL_P(expr);
17806 		goto try_instanceof;
17807 	} else {
17808 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
17809 			ZVAL_UNDEFINED_OP1();
17810 		}
17811 		result = 0;
17812 	}
17813 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17814 	ZEND_VM_SMART_BRANCH(result, 1);
17815 }
17816 
ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17817 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17818 {
17819 	USE_OPLINE
17820 	zval *op1;
17821 	zend_long count;
17822 
17823 	SAVE_OPLINE();
17824 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17825 
17826 	while (1) {
17827 		if (Z_TYPE_P(op1) == IS_ARRAY) {
17828 			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
17829 			break;
17830 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
17831 			zend_object *zobj = Z_OBJ_P(op1);
17832 
17833 			/* first, we check if the handler is defined */
17834 			if (zobj->handlers->count_elements) {
17835 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
17836 					break;
17837 				}
17838 				if (UNEXPECTED(EG(exception))) {
17839 					count = 0;
17840 					break;
17841 				}
17842 			}
17843 
17844 			/* if not and the object implements Countable we call its count() method */
17845 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
17846 				zval retval;
17847 
17848 				zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
17849 				count = zval_get_long(&retval);
17850 				zval_ptr_dtor(&retval);
17851 				break;
17852 			}
17853 
17854 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
17855 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
17856 			op1 = Z_REFVAL_P(op1);
17857 			continue;
17858 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17859 			ZVAL_UNDEFINED_OP1();
17860 		}
17861 		count = 0;
17862 		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_type_name(op1));
17863 		break;
17864 	}
17865 
17866 	ZVAL_LONG(EX_VAR(opline->result.var), count);
17867 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17868 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17869 }
17870 
ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17871 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17872 {
17873 	USE_OPLINE
17874 
17875 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
17876 		if (UNEXPECTED(!EX(func)->common.scope)) {
17877 			SAVE_OPLINE();
17878 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
17879 			ZVAL_UNDEF(EX_VAR(opline->result.var));
17880 			HANDLE_EXCEPTION();
17881 		} else {
17882 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
17883 			ZEND_VM_NEXT_OPCODE();
17884 		}
17885 	} else {
17886 		zval *op1;
17887 
17888 		SAVE_OPLINE();
17889 		op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17890 		while (1) {
17891 			if (Z_TYPE_P(op1) == IS_OBJECT) {
17892 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
17893 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
17894 				op1 = Z_REFVAL_P(op1);
17895 				continue;
17896 			} else {
17897 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17898 					ZVAL_UNDEFINED_OP1();
17899 				}
17900 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
17901 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17902 			}
17903 			break;
17904 		}
17905 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17906 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17907 	}
17908 }
17909 
ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17910 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17911 {
17912 	USE_OPLINE
17913 	zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17914 	zval *result = EX_VAR(opline->result.var);
17915 	ZVAL_COPY(result, value);
17916 	ZEND_VM_NEXT_OPCODE();
17917 }
17918 
ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17919 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17920 {
17921 	USE_OPLINE
17922 	zval *op1, *op2;
17923 
17924 	SAVE_OPLINE();
17925 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17926 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
17927 	div_function(EX_VAR(opline->result.var), op1, op2);
17928 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17929 
17930 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17931 }
17932 
ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17933 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17934 {
17935 	USE_OPLINE
17936 	zval *op1, *op2;
17937 
17938 	SAVE_OPLINE();
17939 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17940 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
17941 	pow_function(EX_VAR(opline->result.var), op1, op2);
17942 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17943 
17944 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17945 }
17946 
ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17947 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17948 {
17949 	USE_OPLINE
17950 	zval *op1, *op2;
17951 
17952 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17953 	op2 = EX_VAR(opline->op2.var);
17954 
17955 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
17956 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
17957 		zend_string *op1_str = Z_STR_P(op1);
17958 		zend_string *op2_str = Z_STR_P(op2);
17959 		zend_string *str;
17960 
17961 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17962 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
17963 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
17964 			} else {
17965 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17966 			}
17967 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17968 				zend_string_release_ex(op1_str, 0);
17969 			}
17970 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17971 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17972 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
17973 			} else {
17974 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17975 			}
17976 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17977 				zend_string_release_ex(op2_str, 0);
17978 			}
17979 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
17980 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
17981 		    size_t len = ZSTR_LEN(op1_str);
17982 
17983 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
17984 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
17985 			}
17986 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
17987 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17988 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17989 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17990 				zend_string_release_ex(op2_str, 0);
17991 			}
17992 		} else {
17993 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17994 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17995 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17996 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17997 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17998 				zend_string_release_ex(op1_str, 0);
17999 			}
18000 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18001 				zend_string_release_ex(op2_str, 0);
18002 			}
18003 		}
18004 		ZEND_VM_NEXT_OPCODE();
18005 	} else {
18006 		SAVE_OPLINE();
18007 
18008 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18009 			op1 = ZVAL_UNDEFINED_OP1();
18010 		}
18011 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
18012 			op2 = ZVAL_UNDEFINED_OP2();
18013 		}
18014 		concat_function(EX_VAR(opline->result.var), op1, op2);
18015 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18016 
18017 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18018 	}
18019 }
18020 
ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18021 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18022 {
18023 	USE_OPLINE
18024 	zval *op1, *op2;
18025 
18026 	SAVE_OPLINE();
18027 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18028 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
18029 	compare_function(EX_VAR(opline->result.var), op1, op2);
18030 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18031 
18032 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18033 }
18034 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18035 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18036 {
18037 	USE_OPLINE
18038 	zval *container, *dim, *value;
18039 
18040 	SAVE_OPLINE();
18041 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18042 	dim = EX_VAR(opline->op2.var);
18043 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18044 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18045 fetch_dim_r_array:
18046 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
18047 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
18048 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
18049 			container = Z_REFVAL_P(container);
18050 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18051 				goto fetch_dim_r_array;
18052 			} else {
18053 				goto fetch_dim_r_slow;
18054 			}
18055 		} else {
18056 fetch_dim_r_slow:
18057 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
18058 				dim++;
18059 			}
18060 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
18061 		}
18062 	} else {
18063 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
18064 	}
18065 
18066 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18067 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18068 }
18069 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18070 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18071 {
18072 	USE_OPLINE
18073 	zval *container;
18074 
18075 	SAVE_OPLINE();
18076 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18077 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
18078 
18079 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18080 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18081 }
18082 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18084 {
18085 	USE_OPLINE
18086 	zval *container;
18087 	void **cache_slot = NULL;
18088 
18089 	SAVE_OPLINE();
18090 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18091 
18092 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
18093 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18094 	    do {
18095 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18096 				container = Z_REFVAL_P(container);
18097 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
18098 					break;
18099 				}
18100 			}
18101 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
18102 				ZVAL_UNDEFINED_OP1();
18103 			}
18104 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18105 			ZVAL_NULL(EX_VAR(opline->result.var));
18106 			goto fetch_obj_r_finish;
18107 		} while (0);
18108 	}
18109 
18110 	/* here we are sure we are dealing with an object */
18111 	do {
18112 		zend_object *zobj = Z_OBJ_P(container);
18113 		zend_string *name, *tmp_name;
18114 		zval *retval;
18115 
18116 		if (IS_CV == IS_CONST) {
18117 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
18118 
18119 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
18120 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
18121 
18122 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
18123 					retval = OBJ_PROP(zobj, prop_offset);
18124 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
18125 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18126 							goto fetch_obj_r_copy;
18127 						} else {
18128 fetch_obj_r_fast_copy:
18129 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18130 							ZEND_VM_NEXT_OPCODE();
18131 						}
18132 					}
18133 				} else if (EXPECTED(zobj->properties != NULL)) {
18134 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18135 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
18136 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
18137 
18138 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
18139 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
18140 
18141 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
18142 						        (EXPECTED(p->key == name) ||
18143 						         (EXPECTED(p->h == ZSTR_H(name)) &&
18144 						          EXPECTED(p->key != NULL) &&
18145 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
18146 								retval = &p->val;
18147 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18148 									goto fetch_obj_r_copy;
18149 								} else {
18150 									goto fetch_obj_r_fast_copy;
18151 								}
18152 							}
18153 						}
18154 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
18155 					}
18156 					retval = zend_hash_find_known_hash(zobj->properties, name);
18157 					if (EXPECTED(retval)) {
18158 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
18159 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
18160 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18161 							goto fetch_obj_r_copy;
18162 						} else {
18163 							goto fetch_obj_r_fast_copy;
18164 						}
18165 					}
18166 				}
18167 			}
18168 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18169 		} else {
18170 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
18171 			if (UNEXPECTED(!name)) {
18172 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18173 				break;
18174 			}
18175 		}
18176 
18177 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
18178 #if ZEND_DEBUG
18179 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
18180 			zend_verify_internal_read_property_type(zobj, name, retval);
18181 		}
18182 #endif
18183 
18184 		if (IS_CV != IS_CONST) {
18185 			zend_tmp_string_release(tmp_name);
18186 		}
18187 
18188 		if (retval != EX_VAR(opline->result.var)) {
18189 fetch_obj_r_copy:
18190 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18191 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
18192 			zend_unwrap_reference(retval);
18193 		}
18194 	} while (0);
18195 
18196 fetch_obj_r_finish:
18197 
18198 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18199 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18200 }
18201 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18203 {
18204 	USE_OPLINE
18205 	zval *container;
18206 	void **cache_slot = NULL;
18207 
18208 	SAVE_OPLINE();
18209 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18210 
18211 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
18212 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18213 		do {
18214 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18215 				container = Z_REFVAL_P(container);
18216 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
18217 					break;
18218 				}
18219 			}
18220 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
18221 				ZVAL_UNDEFINED_OP2();
18222 			}
18223 			ZVAL_NULL(EX_VAR(opline->result.var));
18224 			goto fetch_obj_is_finish;
18225 		} while (0);
18226 	}
18227 
18228 	/* here we are sure we are dealing with an object */
18229 	do {
18230 		zend_object *zobj = Z_OBJ_P(container);
18231 		zend_string *name, *tmp_name;
18232 		zval *retval;
18233 
18234 		if (IS_CV == IS_CONST) {
18235 			cache_slot = CACHE_ADDR(opline->extended_value);
18236 
18237 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
18238 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
18239 
18240 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
18241 					retval = OBJ_PROP(zobj, prop_offset);
18242 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
18243 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18244 							goto fetch_obj_is_copy;
18245 						} else {
18246 fetch_obj_is_fast_copy:
18247 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18248 							ZEND_VM_NEXT_OPCODE();
18249 						}
18250 					}
18251 				} else if (EXPECTED(zobj->properties != NULL)) {
18252 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18253 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
18254 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
18255 
18256 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
18257 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
18258 
18259 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
18260 						        (EXPECTED(p->key == name) ||
18261 						         (EXPECTED(p->h == ZSTR_H(name)) &&
18262 						          EXPECTED(p->key != NULL) &&
18263 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
18264 								retval = &p->val;
18265 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18266 									goto fetch_obj_is_copy;
18267 								} else {
18268 									goto fetch_obj_is_fast_copy;
18269 								}
18270 							}
18271 						}
18272 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
18273 					}
18274 					retval = zend_hash_find_known_hash(zobj->properties, name);
18275 					if (EXPECTED(retval)) {
18276 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
18277 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
18278 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18279 							goto fetch_obj_is_copy;
18280 						} else {
18281 							goto fetch_obj_is_fast_copy;
18282 						}
18283 					}
18284 				}
18285 			}
18286 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18287 		} else {
18288 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
18289 			if (UNEXPECTED(!name)) {
18290 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18291 				break;
18292 			}
18293 		}
18294 
18295 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
18296 
18297 		if (IS_CV != IS_CONST) {
18298 			zend_tmp_string_release(tmp_name);
18299 		}
18300 
18301 		if (retval != EX_VAR(opline->result.var)) {
18302 fetch_obj_is_copy:
18303 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18304 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
18305 			zend_unwrap_reference(retval);
18306 		}
18307 	} while (0);
18308 
18309 fetch_obj_is_finish:
18310 
18311 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18312 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18313 }
18314 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18315 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18316 {
18317 	USE_OPLINE
18318 	zval *op1, *op2;
18319 	zend_string *op1_str, *op2_str, *str;
18320 
18321 
18322 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18323 	op2 = EX_VAR(opline->op2.var);
18324 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
18325 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
18326 		zend_string *op1_str = Z_STR_P(op1);
18327 		zend_string *op2_str = Z_STR_P(op2);
18328 		zend_string *str;
18329 
18330 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
18331 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
18332 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
18333 			} else {
18334 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
18335 			}
18336 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18337 				zend_string_release_ex(op1_str, 0);
18338 			}
18339 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
18340 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
18341 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
18342 			} else {
18343 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
18344 			}
18345 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18346 				zend_string_release_ex(op2_str, 0);
18347 			}
18348 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
18349 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
18350 		    size_t len = ZSTR_LEN(op1_str);
18351 
18352 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
18353 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18354 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18355 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18356 				zend_string_release_ex(op2_str, 0);
18357 			}
18358 		} else {
18359 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
18360 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
18361 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18362 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18363 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18364 				zend_string_release_ex(op1_str, 0);
18365 			}
18366 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18367 				zend_string_release_ex(op2_str, 0);
18368 			}
18369 		}
18370 		ZEND_VM_NEXT_OPCODE();
18371 	}
18372 
18373 	SAVE_OPLINE();
18374 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18375 		op1_str = Z_STR_P(op1);
18376 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
18377 		op1_str = zend_string_copy(Z_STR_P(op1));
18378 	} else {
18379 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18380 			ZVAL_UNDEFINED_OP1();
18381 		}
18382 		op1_str = zval_get_string_func(op1);
18383 	}
18384 	if (IS_CV == IS_CONST) {
18385 		op2_str = Z_STR_P(op2);
18386 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
18387 		op2_str = zend_string_copy(Z_STR_P(op2));
18388 	} else {
18389 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
18390 			ZVAL_UNDEFINED_OP2();
18391 		}
18392 		op2_str = zval_get_string_func(op2);
18393 	}
18394 	do {
18395 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18396 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
18397 				if (IS_CV == IS_CONST) {
18398 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
18399 						GC_ADDREF(op2_str);
18400 					}
18401 				}
18402 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
18403 				zend_string_release_ex(op1_str, 0);
18404 				break;
18405 			}
18406 		}
18407 		if (IS_CV != IS_CONST) {
18408 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
18409 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18410 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
18411 						GC_ADDREF(op1_str);
18412 					}
18413 				}
18414 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
18415 				zend_string_release_ex(op2_str, 0);
18416 				break;
18417 			}
18418 		}
18419 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
18420 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
18421 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18422 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18423 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18424 			zend_string_release_ex(op1_str, 0);
18425 		}
18426 		if (IS_CV != IS_CONST) {
18427 			zend_string_release_ex(op2_str, 0);
18428 		}
18429 	} while (0);
18430 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18431 
18432 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18433 }
18434 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18435 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18436 {
18437 	USE_OPLINE
18438 	zval *function_name;
18439 	zval *object;
18440 	zend_function *fbc;
18441 	zend_class_entry *called_scope;
18442 	zend_object *obj;
18443 	zend_execute_data *call;
18444 	uint32_t call_info;
18445 
18446 	SAVE_OPLINE();
18447 
18448 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18449 
18450 	if (IS_CV != IS_CONST) {
18451 		function_name = EX_VAR(opline->op2.var);
18452 	}
18453 
18454 	if (IS_CV != IS_CONST &&
18455 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
18456 		do {
18457 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
18458 				function_name = Z_REFVAL_P(function_name);
18459 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
18460 					break;
18461 				}
18462 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
18463 				ZVAL_UNDEFINED_OP2();
18464 				if (UNEXPECTED(EG(exception) != NULL)) {
18465 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18466 					HANDLE_EXCEPTION();
18467 				}
18468 			}
18469 			zend_throw_error(NULL, "Method name must be a string");
18470 
18471 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18472 			HANDLE_EXCEPTION();
18473 		} while (0);
18474 	}
18475 
18476 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
18477 		obj = Z_OBJ_P(object);
18478 	} else {
18479 		do {
18480 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
18481 				obj = Z_OBJ_P(object);
18482 			} else {
18483 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
18484 					zend_reference *ref = Z_REF_P(object);
18485 
18486 					object = &ref->val;
18487 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
18488 						obj = Z_OBJ_P(object);
18489 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
18490 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
18491 								efree_size(ref, sizeof(zend_reference));
18492 							} else {
18493 								Z_ADDREF_P(object);
18494 							}
18495 						}
18496 						break;
18497 					}
18498 				}
18499 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
18500 					object = ZVAL_UNDEFINED_OP1();
18501 					if (UNEXPECTED(EG(exception) != NULL)) {
18502 						if (IS_CV != IS_CONST) {
18503 
18504 						}
18505 						HANDLE_EXCEPTION();
18506 					}
18507 				}
18508 				if (IS_CV == IS_CONST) {
18509 					function_name = EX_VAR(opline->op2.var);
18510 				}
18511 				zend_invalid_method_call(object, function_name);
18512 
18513 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18514 				HANDLE_EXCEPTION();
18515 			}
18516 		} while (0);
18517 	}
18518 
18519 	called_scope = obj->ce;
18520 
18521 	if (IS_CV == IS_CONST &&
18522 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
18523 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
18524 	} else {
18525 	    zend_object *orig_obj = obj;
18526 
18527 		if (IS_CV == IS_CONST) {
18528 			function_name = EX_VAR(opline->op2.var);
18529 		}
18530 
18531 		/* First, locate the function. */
18532 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
18533 		if (UNEXPECTED(fbc == NULL)) {
18534 			if (EXPECTED(!EG(exception))) {
18535 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
18536 			}
18537 
18538 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
18539 				zend_objects_store_del(orig_obj);
18540 			}
18541 			HANDLE_EXCEPTION();
18542 		}
18543 		if (IS_CV == IS_CONST &&
18544 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
18545 		    EXPECTED(obj == orig_obj)) {
18546 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
18547 		}
18548 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
18549 			GC_ADDREF(obj); /* For $this pointer */
18550 			if (GC_DELREF(orig_obj) == 0) {
18551 				zend_objects_store_del(orig_obj);
18552 			}
18553 		}
18554 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
18555 			init_func_run_time_cache(&fbc->op_array);
18556 		}
18557 	}
18558 
18559 	if (IS_CV != IS_CONST) {
18560 
18561 	}
18562 
18563 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
18564 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
18565 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
18566 			zend_objects_store_del(obj);
18567 			if (UNEXPECTED(EG(exception))) {
18568 				HANDLE_EXCEPTION();
18569 			}
18570 		}
18571 		/* call static method */
18572 		obj = (zend_object*)called_scope;
18573 		call_info = ZEND_CALL_NESTED_FUNCTION;
18574 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
18575 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
18576 			GC_ADDREF(obj); /* For $this pointer */
18577 		}
18578 		/* CV may be changed indirectly (e.g. when it's a reference) */
18579 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
18580 	}
18581 
18582 	call = zend_vm_stack_push_call_frame(call_info,
18583 		fbc, opline->extended_value, obj);
18584 	call->prev_execute_data = EX(call);
18585 	EX(call) = call;
18586 
18587 	ZEND_VM_NEXT_OPCODE();
18588 }
18589 
ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18590 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18591 {
18592 	USE_OPLINE
18593 	zval *op1, *op2;
18594 	double d1, d2;
18595 
18596 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18597 	op2 = EX_VAR(opline->op2.var);
18598 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
18599 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
18600 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
18601 case_true:
18602 				ZEND_VM_SMART_BRANCH_TRUE();
18603 			} else {
18604 case_false:
18605 				ZEND_VM_SMART_BRANCH_FALSE();
18606 			}
18607 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
18608 			d1 = (double)Z_LVAL_P(op1);
18609 			d2 = Z_DVAL_P(op2);
18610 			goto case_double;
18611 		}
18612 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
18613 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
18614 			d1 = Z_DVAL_P(op1);
18615 			d2 = Z_DVAL_P(op2);
18616 case_double:
18617 			if (d1 == d2) {
18618 				goto case_true;
18619 			} else {
18620 				goto case_false;
18621 			}
18622 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
18623 			d1 = Z_DVAL_P(op1);
18624 			d2 = (double)Z_LVAL_P(op2);
18625 			goto case_double;
18626 		}
18627 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
18628 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
18629 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
18630 
18631 			if (result) {
18632 				goto case_true;
18633 			} else {
18634 				goto case_false;
18635 			}
18636 		}
18637 	}
18638 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18639 }
18640 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18642 {
18643 	USE_OPLINE
18644 	zval *container;
18645 	bool result;
18646 	zend_ulong hval;
18647 	zval *offset;
18648 
18649 	SAVE_OPLINE();
18650 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18651 	offset = EX_VAR(opline->op2.var);
18652 
18653 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18654 		HashTable *ht;
18655 		zval *value;
18656 		zend_string *str;
18657 
18658 isset_dim_obj_array:
18659 		ht = Z_ARRVAL_P(container);
18660 isset_again:
18661 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
18662 			str = Z_STR_P(offset);
18663 			if (IS_CV != IS_CONST) {
18664 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
18665 					goto num_index_prop;
18666 				}
18667 			}
18668 			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
18669 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
18670 			hval = Z_LVAL_P(offset);
18671 num_index_prop:
18672 			value = zend_hash_index_find(ht, hval);
18673 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
18674 			offset = Z_REFVAL_P(offset);
18675 			goto isset_again;
18676 		} else {
18677 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
18678 			if (UNEXPECTED(EG(exception))) {
18679 				result = 0;
18680 				goto isset_dim_obj_exit;
18681 			}
18682 		}
18683 
18684 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
18685 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
18686 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
18687 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
18688 
18689 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
18690 				/* avoid exception check */
18691 
18692 				ZEND_VM_SMART_BRANCH(result, 0);
18693 			}
18694 		} else {
18695 			result = (value == NULL || !i_zend_is_true(value));
18696 		}
18697 		goto isset_dim_obj_exit;
18698 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
18699 		container = Z_REFVAL_P(container);
18700 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18701 			goto isset_dim_obj_array;
18702 		}
18703 	}
18704 
18705 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
18706 		offset++;
18707 	}
18708 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
18709 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
18710 	} else {
18711 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
18712 	}
18713 
18714 isset_dim_obj_exit:
18715 
18716 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18717 	ZEND_VM_SMART_BRANCH(result, 1);
18718 }
18719 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18720 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18721 {
18722 	USE_OPLINE
18723 	zval *container;
18724 	int result;
18725 	zval *offset;
18726 	zend_string *name, *tmp_name;
18727 
18728 	SAVE_OPLINE();
18729 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18730 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
18731 
18732 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
18733 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18734 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18735 			container = Z_REFVAL_P(container);
18736 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
18737 				result = (opline->extended_value & ZEND_ISEMPTY);
18738 				goto isset_object_finish;
18739 			}
18740 		} else {
18741 			result = (opline->extended_value & ZEND_ISEMPTY);
18742 			goto isset_object_finish;
18743 		}
18744 	}
18745 
18746 	if (IS_CV == IS_CONST) {
18747 		name = Z_STR_P(offset);
18748 	} else {
18749 		name = zval_try_get_tmp_string(offset, &tmp_name);
18750 		if (UNEXPECTED(!name)) {
18751 			result = 0;
18752 			goto isset_object_finish;
18753 		}
18754 	}
18755 
18756 	result =
18757 		(opline->extended_value & ZEND_ISEMPTY) ^
18758 		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));
18759 
18760 	if (IS_CV != IS_CONST) {
18761 		zend_tmp_string_release(tmp_name);
18762 	}
18763 
18764 isset_object_finish:
18765 
18766 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18767 	ZEND_VM_SMART_BRANCH(result, 1);
18768 }
18769 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18771 {
18772 	USE_OPLINE
18773 
18774 	zval *key, *subject;
18775 	HashTable *ht;
18776 	bool result;
18777 
18778 	SAVE_OPLINE();
18779 
18780 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18781 	subject = EX_VAR(opline->op2.var);
18782 
18783 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
18784 array_key_exists_array:
18785 		ht = Z_ARRVAL_P(subject);
18786 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
18787 	} else {
18788 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
18789 			subject = Z_REFVAL_P(subject);
18790 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
18791 				goto array_key_exists_array;
18792 			}
18793 		}
18794 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
18795 		result = 0;
18796 	}
18797 
18798 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18799 	ZEND_VM_SMART_BRANCH(result, 1);
18800 }
18801 
18802 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18803 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18804 {
18805 	USE_OPLINE
18806 	zval *retval_ptr;
18807 	zval *return_value;
18808 
18809 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18810 	return_value = EX(return_value);
18811 
18812 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
18813 		SAVE_OPLINE();
18814 		retval_ptr = ZVAL_UNDEFINED_OP1();
18815 		if (return_value) {
18816 			ZVAL_NULL(return_value);
18817 		}
18818 	} else if (!return_value) {
18819 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
18820 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
18821 				SAVE_OPLINE();
18822 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
18823 			}
18824 		}
18825 	} else {
18826 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
18827 			ZVAL_COPY_VALUE(return_value, retval_ptr);
18828 			if (IS_TMP_VAR == IS_CONST) {
18829 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
18830 					Z_ADDREF_P(return_value);
18831 				}
18832 			}
18833 		} else if (IS_TMP_VAR == IS_CV) {
18834 			do {
18835 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
18836 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
18837 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
18838 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
18839 							ZVAL_COPY_VALUE(return_value, retval_ptr);
18840 							if (GC_MAY_LEAK(ref)) {
18841 								SAVE_OPLINE();
18842 								gc_possible_root(ref);
18843 							}
18844 							ZVAL_NULL(retval_ptr);
18845 							break;
18846 						} else {
18847 							Z_ADDREF_P(retval_ptr);
18848 						}
18849 					} else {
18850 						retval_ptr = Z_REFVAL_P(retval_ptr);
18851 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
18852 							Z_ADDREF_P(retval_ptr);
18853 						}
18854 					}
18855 				}
18856 				ZVAL_COPY_VALUE(return_value, retval_ptr);
18857 			} while (0);
18858 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
18859 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
18860 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
18861 
18862 				retval_ptr = Z_REFVAL_P(retval_ptr);
18863 				ZVAL_COPY_VALUE(return_value, retval_ptr);
18864 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
18865 					efree_size(ref, sizeof(zend_reference));
18866 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
18867 					Z_ADDREF_P(retval_ptr);
18868 				}
18869 			} else {
18870 				ZVAL_COPY_VALUE(return_value, retval_ptr);
18871 			}
18872 		}
18873 	}
18874 
18875 
18876 
18877 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18878 }
18879 
ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18880 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18881 {
18882 	USE_OPLINE
18883 	zval *retval_ptr;
18884 	zval *return_value;
18885 
18886 	SAVE_OPLINE();
18887 
18888 	return_value = EX(return_value);
18889 
18890 	do {
18891 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
18892 		    (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
18893 			/* Not supposed to happen, but we'll allow it */
18894 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
18895 
18896 			retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18897 			if (!return_value) {
18898 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18899 			} else {
18900 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
18901 					ZVAL_COPY_VALUE(return_value, retval_ptr);
18902 					break;
18903 				}
18904 
18905 				ZVAL_NEW_REF(return_value, retval_ptr);
18906 				if (IS_TMP_VAR == IS_CONST) {
18907 					Z_TRY_ADDREF_P(retval_ptr);
18908 				}
18909 			}
18910 			break;
18911 		}
18912 
18913 		retval_ptr = NULL;
18914 
18915 		if (IS_TMP_VAR == IS_VAR) {
18916 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
18917 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
18918 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
18919 				if (return_value) {
18920 					ZVAL_NEW_REF(return_value, retval_ptr);
18921 				} else {
18922 
18923 				}
18924 				break;
18925 			}
18926 		}
18927 
18928 		if (return_value) {
18929 			if (Z_ISREF_P(retval_ptr)) {
18930 				Z_ADDREF_P(retval_ptr);
18931 			} else {
18932 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
18933 			}
18934 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
18935 		}
18936 
18937 	} while (0);
18938 
18939 
18940 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18941 }
18942 
ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18943 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18944 {
18945 	USE_OPLINE
18946 	zval *retval;
18947 
18948 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
18949 
18950 	SAVE_OPLINE();
18951 	retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18952 
18953 	/* Copy return value into generator->retval */
18954 	if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
18955 		ZVAL_COPY_VALUE(&generator->retval, retval);
18956 		if (IS_TMP_VAR == IS_CONST) {
18957 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
18958 				Z_ADDREF(generator->retval);
18959 			}
18960 		}
18961 	} else if (IS_TMP_VAR == IS_CV) {
18962 		ZVAL_COPY_DEREF(&generator->retval, retval);
18963 	} else /* if (IS_TMP_VAR == IS_VAR) */ {
18964 		if (UNEXPECTED(Z_ISREF_P(retval))) {
18965 			zend_refcounted *ref = Z_COUNTED_P(retval);
18966 
18967 			retval = Z_REFVAL_P(retval);
18968 			ZVAL_COPY_VALUE(&generator->retval, retval);
18969 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
18970 				efree_size(ref, sizeof(zend_reference));
18971 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
18972 				Z_ADDREF_P(retval);
18973 			}
18974 		} else {
18975 			ZVAL_COPY_VALUE(&generator->retval, retval);
18976 		}
18977 	}
18978 
18979 	EG(current_execute_data) = EX(prev_execute_data);
18980 
18981 	/* Close the generator to free up resources */
18982 	zend_generator_close(generator, 1);
18983 
18984 	/* Pass execution back to handling code */
18985 	ZEND_VM_RETURN();
18986 }
18987 
ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18988 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18989 {
18990 	USE_OPLINE
18991 	zval *arg, *param;
18992 
18993 	SAVE_OPLINE();
18994 
18995 	arg = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18996 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
18997 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
18998 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
18999 		Z_TRY_ADDREF_P(arg);
19000 		ZVAL_NEW_REF(param, arg);
19001 	} else {
19002 		ZVAL_COPY(param, arg);
19003 	}
19004 
19005 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19006 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19007 }
19008 
ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19009 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19010 {
19011 	USE_OPLINE
19012 	zval *expr;
19013 	zval *result = EX_VAR(opline->result.var);
19014 	HashTable *ht;
19015 
19016 	SAVE_OPLINE();
19017 	expr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19018 
19019 	switch (opline->extended_value) {
19020 		case IS_LONG:
19021 			ZVAL_LONG(result, zval_get_long(expr));
19022 			break;
19023 		case IS_DOUBLE:
19024 			ZVAL_DOUBLE(result, zval_get_double(expr));
19025 			break;
19026 		case IS_STRING:
19027 			ZVAL_STR(result, zval_get_string(expr));
19028 			break;
19029 		default:
19030 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
19031 			if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
19032 				ZVAL_DEREF(expr);
19033 			}
19034 			/* If value is already of correct type, return it directly */
19035 			if (Z_TYPE_P(expr) == opline->extended_value) {
19036 				ZVAL_COPY_VALUE(result, expr);
19037 				if (IS_TMP_VAR == IS_CONST) {
19038 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19039 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
19040 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19041 				}
19042 
19043 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19044 			}
19045 
19046 			if (opline->extended_value == IS_ARRAY) {
19047 				if (IS_TMP_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
19048 					if (Z_TYPE_P(expr) != IS_NULL) {
19049 						ZVAL_ARR(result, zend_new_array(1));
19050 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
19051 						if (IS_TMP_VAR == IS_CONST) {
19052 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
19053 						} else {
19054 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
19055 						}
19056 					} else {
19057 						ZVAL_EMPTY_ARRAY(result);
19058 					}
19059 				} else if (Z_OBJ_P(expr)->properties == NULL
19060 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
19061 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
19062 					/* Optimized version without rebuilding properties HashTable */
19063 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
19064 				} else {
19065 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
19066 					if (obj_ht) {
19067 						/* fast copy */
19068 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
19069 							(Z_OBJCE_P(expr)->default_properties_count ||
19070 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
19071 							 GC_IS_RECURSIVE(obj_ht))));
19072 						zend_release_properties(obj_ht);
19073 					} else {
19074 						ZVAL_EMPTY_ARRAY(result);
19075 					}
19076 				}
19077 			} else {
19078 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
19079 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
19080 				if (Z_TYPE_P(expr) == IS_ARRAY) {
19081 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
19082 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
19083 						/* TODO: try not to duplicate immutable arrays as well ??? */
19084 						ht = zend_array_dup(ht);
19085 					}
19086 					Z_OBJ_P(result)->properties = ht;
19087 				} else if (Z_TYPE_P(expr) != IS_NULL) {
19088 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
19089 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
19090 					if (IS_TMP_VAR == IS_CONST) {
19091 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
19092 					} else {
19093 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
19094 					}
19095 				}
19096 			}
19097 	}
19098 
19099 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19100 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19101 }
19102 
ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19103 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19104 {
19105 	USE_OPLINE
19106 	zval *array_ptr, *result;
19107 
19108 	SAVE_OPLINE();
19109 
19110 	array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19111 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
19112 		result = EX_VAR(opline->result.var);
19113 		ZVAL_COPY_VALUE(result, array_ptr);
19114 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
19115 			Z_ADDREF_P(array_ptr);
19116 		}
19117 		Z_FE_POS_P(result) = 0;
19118 
19119 		ZEND_VM_NEXT_OPCODE();
19120 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
19121 		zend_object *zobj = Z_OBJ_P(array_ptr);
19122 		if (!zobj->ce->get_iterator) {
19123 			HashTable *properties = zobj->properties;
19124 			if (properties) {
19125 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
19126 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
19127 						GC_DELREF(properties);
19128 					}
19129 					properties = zobj->properties = zend_array_dup(properties);
19130 				}
19131 			} else {
19132 				properties = zobj->handlers->get_properties(zobj);
19133 			}
19134 
19135 			result = EX_VAR(opline->result.var);
19136 			ZVAL_COPY_VALUE(result, array_ptr);
19137 			if (IS_TMP_VAR != IS_TMP_VAR) {
19138 				Z_ADDREF_P(array_ptr);
19139 			}
19140 
19141 			if (zend_hash_num_elements(properties) == 0) {
19142 				Z_FE_ITER_P(result) = (uint32_t) -1;
19143 
19144 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19145 			}
19146 
19147 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
19148 
19149 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19150 		} else {
19151 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
19152 
19153 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19154 			if (UNEXPECTED(EG(exception))) {
19155 				HANDLE_EXCEPTION();
19156 			} else if (is_empty) {
19157 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19158 			} else {
19159 				ZEND_VM_NEXT_OPCODE();
19160 			}
19161 		}
19162 	} else {
19163 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
19164 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19165 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
19166 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19167 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19168 	}
19169 }
19170 
ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19171 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19172 {
19173 	USE_OPLINE
19174 	zval *array_ptr, *array_ref;
19175 
19176 	SAVE_OPLINE();
19177 
19178 	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
19179 		array_ref = array_ptr = NULL;
19180 		if (Z_ISREF_P(array_ref)) {
19181 			array_ptr = Z_REFVAL_P(array_ref);
19182 		}
19183 	} else {
19184 		array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19185 	}
19186 
19187 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
19188 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
19189 			if (array_ptr == array_ref) {
19190 				ZVAL_NEW_REF(array_ref, array_ref);
19191 				array_ptr = Z_REFVAL_P(array_ref);
19192 			}
19193 			Z_ADDREF_P(array_ref);
19194 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
19195 		} else {
19196 			array_ref = EX_VAR(opline->result.var);
19197 			ZVAL_NEW_REF(array_ref, array_ptr);
19198 			array_ptr = Z_REFVAL_P(array_ref);
19199 		}
19200 		if (IS_TMP_VAR == IS_CONST) {
19201 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
19202 		} else {
19203 			SEPARATE_ARRAY(array_ptr);
19204 		}
19205 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
19206 
19207 		if (IS_TMP_VAR == IS_VAR) {
19208 
19209 		}
19210 		ZEND_VM_NEXT_OPCODE();
19211 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
19212 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
19213 			HashTable *properties;
19214 			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
19215 				if (array_ptr == array_ref) {
19216 					ZVAL_NEW_REF(array_ref, array_ref);
19217 					array_ptr = Z_REFVAL_P(array_ref);
19218 				}
19219 				Z_ADDREF_P(array_ref);
19220 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
19221 			} else {
19222 				array_ptr = EX_VAR(opline->result.var);
19223 				ZVAL_COPY_VALUE(array_ptr, array_ref);
19224 			}
19225 			if (Z_OBJ_P(array_ptr)->properties
19226 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
19227 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
19228 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
19229 				}
19230 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
19231 			}
19232 
19233 			properties = Z_OBJPROP_P(array_ptr);
19234 			if (zend_hash_num_elements(properties) == 0) {
19235 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
19236 
19237 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19238 			}
19239 
19240 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
19241 
19242 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19243 		} else {
19244 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
19245 
19246 			if (IS_TMP_VAR == IS_VAR) {
19247 
19248 			} else {
19249 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19250 			}
19251 			if (UNEXPECTED(EG(exception))) {
19252 				HANDLE_EXCEPTION();
19253 			} else if (is_empty) {
19254 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19255 			} else {
19256 				ZEND_VM_NEXT_OPCODE();
19257 			}
19258 		}
19259 	} else {
19260 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
19261 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19262 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
19263 		if (IS_TMP_VAR == IS_VAR) {
19264 
19265 		} else {
19266 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19267 		}
19268 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19269 	}
19270 }
19271 
ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19273 {
19274 	USE_OPLINE
19275 
19276 	if (E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))
19277 			&& !E_HAS_ONLY_FATAL_ERRORS(Z_LVAL_P(EX_VAR(opline->op1.var)))) {
19278 		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
19279 	}
19280 	ZEND_VM_NEXT_OPCODE();
19281 }
19282 
ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19283 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19284 {
19285 	USE_OPLINE
19286 	zval *value;
19287 	zend_reference *ref = NULL;
19288 	bool ret;
19289 
19290 	SAVE_OPLINE();
19291 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19292 
19293 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
19294 		if (IS_TMP_VAR == IS_VAR) {
19295 			ref = Z_REF_P(value);
19296 		}
19297 		value = Z_REFVAL_P(value);
19298 	}
19299 
19300 	ret = i_zend_is_true(value);
19301 
19302 	if (UNEXPECTED(EG(exception))) {
19303 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19304 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19305 		HANDLE_EXCEPTION();
19306 	}
19307 
19308 	if (ret) {
19309 		zval *result = EX_VAR(opline->result.var);
19310 
19311 		ZVAL_COPY_VALUE(result, value);
19312 		if (IS_TMP_VAR == IS_CONST) {
19313 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19314 		} else if (IS_TMP_VAR == IS_CV) {
19315 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19316 		} else if (IS_TMP_VAR == IS_VAR && ref) {
19317 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19318 				efree_size(ref, sizeof(zend_reference));
19319 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19320 				Z_ADDREF_P(result);
19321 			}
19322 		}
19323 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19324 	}
19325 
19326 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19327 	ZEND_VM_NEXT_OPCODE();
19328 }
19329 
ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19330 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19331 {
19332 	USE_OPLINE
19333 	zval *value;
19334 	zend_reference *ref = NULL;
19335 
19336 	SAVE_OPLINE();
19337 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19338 
19339 	if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19340 		if (IS_TMP_VAR & IS_VAR) {
19341 			ref = Z_REF_P(value);
19342 		}
19343 		value = Z_REFVAL_P(value);
19344 	}
19345 
19346 	if (Z_TYPE_P(value) > IS_NULL) {
19347 		zval *result = EX_VAR(opline->result.var);
19348 		ZVAL_COPY_VALUE(result, value);
19349 		if (IS_TMP_VAR == IS_CONST) {
19350 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19351 		} else if (IS_TMP_VAR == IS_CV) {
19352 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19353 		} else if ((IS_TMP_VAR & IS_VAR) && ref) {
19354 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19355 				efree_size(ref, sizeof(zend_reference));
19356 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19357 				Z_ADDREF_P(result);
19358 			}
19359 		}
19360 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19361 	}
19362 
19363 	if ((IS_TMP_VAR & IS_VAR) && ref) {
19364 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19365 			efree_size(ref, sizeof(zend_reference));
19366 		}
19367 	}
19368 	ZEND_VM_NEXT_OPCODE();
19369 }
19370 
ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19371 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19372 {
19373 	USE_OPLINE
19374 	zval *val, *result;
19375 
19376 	val = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19377 
19378 	if (Z_TYPE_P(val) > IS_NULL) {
19379 		do {
19380 			if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
19381 				val = Z_REFVAL_P(val);
19382 				if (Z_TYPE_P(val) <= IS_NULL) {
19383 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19384 					break;
19385 				}
19386 			}
19387 			ZEND_VM_NEXT_OPCODE();
19388 		} while (0);
19389 	}
19390 
19391 	result = EX_VAR(opline->result.var);
19392 	if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
19393 		ZVAL_NULL(result);
19394 		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
19395 			SAVE_OPLINE();
19396 			ZVAL_UNDEFINED_OP1();
19397 			if (UNEXPECTED(EG(exception) != NULL)) {
19398 				HANDLE_EXCEPTION();
19399 			}
19400 		}
19401 	} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
19402 		ZVAL_FALSE(result);
19403 	} else {
19404 		ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
19405 		ZVAL_TRUE(result);
19406 	}
19407 
19408 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19409 }
19410 
ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19411 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19412 {
19413 	USE_OPLINE
19414 	zval *value;
19415 	zval *result = EX_VAR(opline->result.var);
19416 
19417 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19418 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
19419 		SAVE_OPLINE();
19420 		ZVAL_UNDEFINED_OP1();
19421 		ZVAL_NULL(result);
19422 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19423 	}
19424 
19425 	if (IS_TMP_VAR == IS_CV) {
19426 		ZVAL_COPY_DEREF(result, value);
19427 	} else if (IS_TMP_VAR == IS_VAR) {
19428 		if (UNEXPECTED(Z_ISREF_P(value))) {
19429 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
19430 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
19431 				efree_size(Z_REF_P(value), sizeof(zend_reference));
19432 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19433 				Z_ADDREF_P(result);
19434 			}
19435 		} else {
19436 			ZVAL_COPY_VALUE(result, value);
19437 		}
19438 	} else {
19439 		ZVAL_COPY_VALUE(result, value);
19440 		if (IS_TMP_VAR == IS_CONST) {
19441 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
19442 				Z_ADDREF_P(result);
19443 			}
19444 		}
19445 	}
19446 	ZEND_VM_NEXT_OPCODE();
19447 }
19448 
ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19449 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19450 {
19451 	USE_OPLINE
19452 	zval *op1, *op2;
19453 	bool result;
19454 
19455 	SAVE_OPLINE();
19456 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19457 	op2 = RT_CONSTANT(opline, opline->op2);
19458 	result = fast_is_identical_function(op1, op2);
19459 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19460 
19461 	ZEND_VM_SMART_BRANCH(result, 1);
19462 }
19463 
ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19464 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19465 {
19466 	USE_OPLINE
19467 	zval *op1, *op2;
19468 	bool result;
19469 
19470 	SAVE_OPLINE();
19471 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19472 	op2 = RT_CONSTANT(opline, opline->op2);
19473 	result = fast_is_identical_function(op1, op2);
19474 
19475 	ZEND_VM_SMART_BRANCH(result, 1);
19476 }
19477 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19479 {
19480 	USE_OPLINE
19481 	zval *op1, *op2;
19482 	bool result;
19483 
19484 	SAVE_OPLINE();
19485 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19486 	op2 = RT_CONSTANT(opline, opline->op2);
19487 	result = fast_is_not_identical_function(op1, op2);
19488 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19489 
19490 	ZEND_VM_SMART_BRANCH(result, 1);
19491 }
19492 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19493 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19494 {
19495 #if 0
19496 	USE_OPLINE
19497 #endif
19498 
19499 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19500         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19501 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19502         }
19503 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19504 	} else {
19505 		if (IS_CONST == IS_UNUSED) {
19506 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19507 		}
19508 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19509 	}
19510 }
19511 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19512 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19513 {
19514 #if 0
19515 	USE_OPLINE
19516 #endif
19517 
19518 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19519 		/* Behave like FETCH_OBJ_W */
19520 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19521 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19522 		}
19523 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19524 	} else {
19525 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19526 	}
19527 }
19528 
ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19530 {
19531 	USE_OPLINE
19532 	zend_string **rope;
19533 	zval *var;
19534 
19535 	/* op1 and result are the same */
19536 	rope = (zend_string**)EX_VAR(opline->op1.var);
19537 	if (IS_CONST == IS_CONST) {
19538 		var = RT_CONSTANT(opline, opline->op2);
19539 		rope[opline->extended_value] = Z_STR_P(var);
19540 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19541 			Z_ADDREF_P(var);
19542 		}
19543 	} else {
19544 		var = RT_CONSTANT(opline, opline->op2);
19545 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19546 			if (IS_CONST == IS_CV) {
19547 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19548 			} else {
19549 				rope[opline->extended_value] = Z_STR_P(var);
19550 			}
19551 		} else {
19552 			SAVE_OPLINE();
19553 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19554 				ZVAL_UNDEFINED_OP2();
19555 			}
19556 			rope[opline->extended_value] = zval_get_string_func(var);
19557 
19558 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19559 		}
19560 	}
19561 	ZEND_VM_NEXT_OPCODE();
19562 }
19563 
ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19564 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19565 {
19566 	USE_OPLINE
19567 	zend_string **rope;
19568 	zval *var, *ret;
19569 	uint32_t i;
19570 	size_t len = 0;
19571 	char *target;
19572 
19573 	rope = (zend_string**)EX_VAR(opline->op1.var);
19574 	if (IS_CONST == IS_CONST) {
19575 		var = RT_CONSTANT(opline, opline->op2);
19576 		rope[opline->extended_value] = Z_STR_P(var);
19577 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19578 			Z_ADDREF_P(var);
19579 		}
19580 	} else {
19581 		var = RT_CONSTANT(opline, opline->op2);
19582 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19583 			if (IS_CONST == IS_CV) {
19584 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19585 			} else {
19586 				rope[opline->extended_value] = Z_STR_P(var);
19587 			}
19588 		} else {
19589 			SAVE_OPLINE();
19590 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19591 				ZVAL_UNDEFINED_OP2();
19592 			}
19593 			rope[opline->extended_value] = zval_get_string_func(var);
19594 
19595 			if (UNEXPECTED(EG(exception))) {
19596 				for (i = 0; i <= opline->extended_value; i++) {
19597 					zend_string_release_ex(rope[i], 0);
19598 				}
19599 				ZVAL_UNDEF(EX_VAR(opline->result.var));
19600 				HANDLE_EXCEPTION();
19601 			}
19602 		}
19603 	}
19604 	for (i = 0; i <= opline->extended_value; i++) {
19605 		len += ZSTR_LEN(rope[i]);
19606 	}
19607 	ret = EX_VAR(opline->result.var);
19608 	ZVAL_STR(ret, zend_string_alloc(len, 0));
19609 	target = Z_STRVAL_P(ret);
19610 	for (i = 0; i <= opline->extended_value; i++) {
19611 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
19612 		target += ZSTR_LEN(rope[i]);
19613 		zend_string_release_ex(rope[i], 0);
19614 	}
19615 	*target = '\0';
19616 
19617 	ZEND_VM_NEXT_OPCODE();
19618 }
19619 
ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19620 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19621 {
19622 	USE_OPLINE
19623 	zval *value, *arg;
19624 	uint32_t arg_num;
19625 
19626 	if (IS_CONST == IS_CONST) {
19627 		SAVE_OPLINE();
19628 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
19629 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
19630 		if (UNEXPECTED(!arg)) {
19631 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19632 			HANDLE_EXCEPTION();
19633 		}
19634 	} else {
19635 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
19636 		arg_num = opline->op2.num;
19637 	}
19638 
19639 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
19640 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
19641 			goto send_val_by_ref;
19642 		}
19643 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
19644 send_val_by_ref:
19645 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19646 	}
19647 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19648 	ZVAL_COPY_VALUE(arg, value);
19649 	if (IS_TMP_VAR == IS_CONST) {
19650 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
19651 			Z_ADDREF_P(arg);
19652 		}
19653 	}
19654 	ZEND_VM_NEXT_OPCODE();
19655 }
19656 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19657 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19658 {
19659 	USE_OPLINE
19660 	zval *expr_ptr, new_expr;
19661 
19662 	SAVE_OPLINE();
19663 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
19664 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
19665 		expr_ptr = NULL;
19666 		if (Z_ISREF_P(expr_ptr)) {
19667 			Z_ADDREF_P(expr_ptr);
19668 		} else {
19669 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
19670 		}
19671 
19672 	} else {
19673 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19674 		if (IS_TMP_VAR == IS_TMP_VAR) {
19675 			/* pass */
19676 		} else if (IS_TMP_VAR == IS_CONST) {
19677 			Z_TRY_ADDREF_P(expr_ptr);
19678 		} else if (IS_TMP_VAR == IS_CV) {
19679 			ZVAL_DEREF(expr_ptr);
19680 			Z_TRY_ADDREF_P(expr_ptr);
19681 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
19682 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
19683 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
19684 
19685 				expr_ptr = Z_REFVAL_P(expr_ptr);
19686 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19687 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
19688 					expr_ptr = &new_expr;
19689 					efree_size(ref, sizeof(zend_reference));
19690 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
19691 					Z_ADDREF_P(expr_ptr);
19692 				}
19693 			}
19694 		}
19695 	}
19696 
19697 	if (IS_CONST != IS_UNUSED) {
19698 		zval *offset = RT_CONSTANT(opline, opline->op2);
19699 		zend_string *str;
19700 		zend_ulong hval;
19701 
19702 add_again:
19703 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
19704 			str = Z_STR_P(offset);
19705 			if (IS_CONST != IS_CONST) {
19706 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
19707 					goto num_index;
19708 				}
19709 			}
19710 str_index:
19711 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
19712 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
19713 			hval = Z_LVAL_P(offset);
19714 num_index:
19715 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
19716 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
19717 			offset = Z_REFVAL_P(offset);
19718 			goto add_again;
19719 		} else if (Z_TYPE_P(offset) == IS_NULL) {
19720 			str = ZSTR_EMPTY_ALLOC();
19721 			goto str_index;
19722 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
19723 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
19724 			goto num_index;
19725 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
19726 			hval = 0;
19727 			goto num_index;
19728 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
19729 			hval = 1;
19730 			goto num_index;
19731 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
19732 			zend_use_resource_as_offset(offset);
19733 			hval = Z_RES_HANDLE_P(offset);
19734 			goto num_index;
19735 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
19736 			ZVAL_UNDEFINED_OP2();
19737 			str = ZSTR_EMPTY_ALLOC();
19738 			goto str_index;
19739 		} else {
19740 			zend_illegal_offset();
19741 			zval_ptr_dtor_nogc(expr_ptr);
19742 		}
19743 
19744 	} else {
19745 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
19746 			zend_cannot_add_element();
19747 			zval_ptr_dtor_nogc(expr_ptr);
19748 		}
19749 	}
19750 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19751 }
19752 
ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19753 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19754 {
19755 	zval *array;
19756 	uint32_t size;
19757 	USE_OPLINE
19758 
19759 	array = EX_VAR(opline->result.var);
19760 	if (IS_TMP_VAR != IS_UNUSED) {
19761 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
19762 		ZVAL_ARR(array, zend_new_array(size));
19763 		/* Explicitly initialize array as not-packed if flag is set */
19764 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
19765 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
19766 		}
19767 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19768 	} else {
19769 		ZVAL_ARR(array, zend_new_array(0));
19770 		ZEND_VM_NEXT_OPCODE();
19771 	}
19772 }
19773 
ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19774 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19775 {
19776 	USE_OPLINE
19777 
19778 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
19779 
19780 	SAVE_OPLINE();
19781 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
19782 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19783 	}
19784 
19785 	/* Destroy the previously yielded value */
19786 	zval_ptr_dtor(&generator->value);
19787 
19788 	/* Destroy the previously yielded key */
19789 	zval_ptr_dtor(&generator->key);
19790 
19791 	/* Set the new yielded value */
19792 	if (IS_TMP_VAR != IS_UNUSED) {
19793 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
19794 			/* Constants and temporary variables aren't yieldable by reference,
19795 			 * but we still allow them with a notice. */
19796 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
19797 				zval *value;
19798 
19799 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19800 
19801 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19802 				ZVAL_COPY_VALUE(&generator->value, value);
19803 				if (IS_TMP_VAR == IS_CONST) {
19804 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19805 						Z_ADDREF(generator->value);
19806 					}
19807 				}
19808 			} else {
19809 				zval *value_ptr = NULL;
19810 
19811 				/* If a function call result is yielded and the function did
19812 				 * not return by reference we throw a notice. */
19813 				do {
19814 					if (IS_TMP_VAR == IS_VAR) {
19815 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
19816 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
19817 						 && !Z_ISREF_P(value_ptr)) {
19818 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19819 							ZVAL_COPY(&generator->value, value_ptr);
19820 							break;
19821 						}
19822 					}
19823 					if (Z_ISREF_P(value_ptr)) {
19824 						Z_ADDREF_P(value_ptr);
19825 					} else {
19826 						ZVAL_MAKE_REF_EX(value_ptr, 2);
19827 					}
19828 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
19829 				} while (0);
19830 
19831 			}
19832 		} else {
19833 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19834 
19835 			/* Consts, temporary variables and references need copying */
19836 			if (IS_TMP_VAR == IS_CONST) {
19837 				ZVAL_COPY_VALUE(&generator->value, value);
19838 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19839 					Z_ADDREF(generator->value);
19840 				}
19841 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
19842 				ZVAL_COPY_VALUE(&generator->value, value);
19843             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19844 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
19845 
19846 			} else {
19847 				ZVAL_COPY_VALUE(&generator->value, value);
19848 				if (IS_TMP_VAR == IS_CV) {
19849 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
19850 				}
19851 			}
19852 		}
19853 	} else {
19854 		/* If no value was specified yield null */
19855 		ZVAL_NULL(&generator->value);
19856 	}
19857 
19858 	/* Set the new yielded key */
19859 	if (IS_CONST != IS_UNUSED) {
19860 		zval *key = RT_CONSTANT(opline, opline->op2);
19861 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
19862 			key = Z_REFVAL_P(key);
19863 		}
19864 		ZVAL_COPY(&generator->key, key);
19865 
19866 		if (Z_TYPE(generator->key) == IS_LONG
19867 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
19868 		) {
19869 			generator->largest_used_integer_key = Z_LVAL(generator->key);
19870 		}
19871 	} else {
19872 		/* If no key was specified we use auto-increment keys */
19873 		generator->largest_used_integer_key++;
19874 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
19875 	}
19876 
19877 	if (RETURN_VALUE_USED(opline)) {
19878 		/* If the return value of yield is used set the send
19879 		 * target and initialize it to NULL */
19880 		generator->send_target = EX_VAR(opline->result.var);
19881 		ZVAL_NULL(generator->send_target);
19882 	} else {
19883 		generator->send_target = NULL;
19884 	}
19885 
19886 	/* We increment to the next op, so we are at the correct position when the
19887 	 * generator is resumed. */
19888 	ZEND_VM_INC_OPCODE();
19889 
19890 	/* The GOTO VM uses a local opline variable. We need to set the opline
19891 	 * variable in execute_data so we don't resume at an old position. */
19892 	SAVE_OPLINE();
19893 
19894 	ZEND_VM_RETURN();
19895 }
19896 
ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19897 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19898 {
19899 	USE_OPLINE
19900 	zval *op1;
19901 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
19902 	zval *result;
19903 
19904 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19905 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
19906 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_TMP_VAR == IS_CONST);
19907 		if (IS_TMP_VAR & (IS_TMP_VAR|IS_VAR)) {
19908 			zval_ptr_dtor_str(op1);
19909 		}
19910 		ZEND_VM_SMART_BRANCH(result, 0);
19911 	}
19912 
19913 	if (opline->extended_value) {
19914 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
19915 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
19916 			ZEND_VM_SMART_BRANCH(result, 0);
19917 		}
19918 		SAVE_OPLINE();
19919 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
19920 			op1 = Z_REFVAL_P(op1);
19921 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
19922 				result = zend_hash_find(ht, Z_STR_P(op1));
19923 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19924 				ZEND_VM_SMART_BRANCH(result, 0);
19925 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
19926 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
19927 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19928 				ZEND_VM_SMART_BRANCH(result, 0);
19929 			}
19930 		} else if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
19931 			ZVAL_UNDEFINED_OP1();
19932 		}
19933 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
19934 		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
19935 			SAVE_OPLINE();
19936 			ZVAL_UNDEFINED_OP1();
19937 			if (UNEXPECTED(EG(exception) != NULL)) {
19938 				HANDLE_EXCEPTION();
19939 			}
19940 		}
19941 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
19942 		ZEND_VM_SMART_BRANCH(result, 0);
19943 	} else {
19944 		zend_string *key;
19945 		zval key_tmp;
19946 
19947 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
19948 			op1 = Z_REFVAL_P(op1);
19949 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
19950 				result = zend_hash_find(ht, Z_STR_P(op1));
19951 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19952 				ZEND_VM_SMART_BRANCH(result, 0);
19953 			}
19954 		}
19955 
19956 		SAVE_OPLINE();
19957 		ZEND_HASH_FOREACH_STR_KEY(ht, key) {
19958 			ZVAL_STR(&key_tmp, key);
19959 			if (zend_compare(op1, &key_tmp) == 0) {
19960 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19961 				ZEND_VM_SMART_BRANCH(1, 1);
19962 			}
19963 		} ZEND_HASH_FOREACH_END();
19964 	}
19965 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19966 	ZEND_VM_SMART_BRANCH(0, 1);
19967 }
19968 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19969 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19970 {
19971 #if 0
19972 	USE_OPLINE
19973 #endif
19974 
19975 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19976         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19977 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19978         }
19979 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19980 	} else {
19981 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
19982 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19983 		}
19984 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19985 	}
19986 }
19987 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19988 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19989 {
19990 #if 0
19991 	USE_OPLINE
19992 #endif
19993 
19994 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19995 		/* Behave like FETCH_OBJ_W */
19996 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19997 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19998 		}
19999 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20000 	} else {
20001 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20002 	}
20003 }
20004 
ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20005 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20006 {
20007 	USE_OPLINE
20008 	zend_string **rope;
20009 	zval *var;
20010 
20011 	/* op1 and result are the same */
20012 	rope = (zend_string**)EX_VAR(opline->op1.var);
20013 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
20014 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20015 		rope[opline->extended_value] = Z_STR_P(var);
20016 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20017 			Z_ADDREF_P(var);
20018 		}
20019 	} else {
20020 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20021 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20022 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
20023 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20024 			} else {
20025 				rope[opline->extended_value] = Z_STR_P(var);
20026 			}
20027 		} else {
20028 			SAVE_OPLINE();
20029 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20030 				ZVAL_UNDEFINED_OP2();
20031 			}
20032 			rope[opline->extended_value] = zval_get_string_func(var);
20033 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20034 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20035 		}
20036 	}
20037 	ZEND_VM_NEXT_OPCODE();
20038 }
20039 
ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20040 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20041 {
20042 	USE_OPLINE
20043 	zend_string **rope;
20044 	zval *var, *ret;
20045 	uint32_t i;
20046 	size_t len = 0;
20047 	char *target;
20048 
20049 	rope = (zend_string**)EX_VAR(opline->op1.var);
20050 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
20051 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20052 		rope[opline->extended_value] = Z_STR_P(var);
20053 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20054 			Z_ADDREF_P(var);
20055 		}
20056 	} else {
20057 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20058 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20059 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
20060 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20061 			} else {
20062 				rope[opline->extended_value] = Z_STR_P(var);
20063 			}
20064 		} else {
20065 			SAVE_OPLINE();
20066 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20067 				ZVAL_UNDEFINED_OP2();
20068 			}
20069 			rope[opline->extended_value] = zval_get_string_func(var);
20070 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20071 			if (UNEXPECTED(EG(exception))) {
20072 				for (i = 0; i <= opline->extended_value; i++) {
20073 					zend_string_release_ex(rope[i], 0);
20074 				}
20075 				ZVAL_UNDEF(EX_VAR(opline->result.var));
20076 				HANDLE_EXCEPTION();
20077 			}
20078 		}
20079 	}
20080 	for (i = 0; i <= opline->extended_value; i++) {
20081 		len += ZSTR_LEN(rope[i]);
20082 	}
20083 	ret = EX_VAR(opline->result.var);
20084 	ZVAL_STR(ret, zend_string_alloc(len, 0));
20085 	target = Z_STRVAL_P(ret);
20086 	for (i = 0; i <= opline->extended_value; i++) {
20087 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
20088 		target += ZSTR_LEN(rope[i]);
20089 		zend_string_release_ex(rope[i], 0);
20090 	}
20091 	*target = '\0';
20092 
20093 	ZEND_VM_NEXT_OPCODE();
20094 }
20095 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20096 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20097 {
20098 	USE_OPLINE
20099 	zval *expr_ptr, new_expr;
20100 
20101 	SAVE_OPLINE();
20102 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20103 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20104 		expr_ptr = NULL;
20105 		if (Z_ISREF_P(expr_ptr)) {
20106 			Z_ADDREF_P(expr_ptr);
20107 		} else {
20108 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20109 		}
20110 
20111 	} else {
20112 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20113 		if (IS_TMP_VAR == IS_TMP_VAR) {
20114 			/* pass */
20115 		} else if (IS_TMP_VAR == IS_CONST) {
20116 			Z_TRY_ADDREF_P(expr_ptr);
20117 		} else if (IS_TMP_VAR == IS_CV) {
20118 			ZVAL_DEREF(expr_ptr);
20119 			Z_TRY_ADDREF_P(expr_ptr);
20120 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20121 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20122 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20123 
20124 				expr_ptr = Z_REFVAL_P(expr_ptr);
20125 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20126 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20127 					expr_ptr = &new_expr;
20128 					efree_size(ref, sizeof(zend_reference));
20129 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20130 					Z_ADDREF_P(expr_ptr);
20131 				}
20132 			}
20133 		}
20134 	}
20135 
20136 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
20137 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20138 		zend_string *str;
20139 		zend_ulong hval;
20140 
20141 add_again:
20142 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20143 			str = Z_STR_P(offset);
20144 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
20145 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20146 					goto num_index;
20147 				}
20148 			}
20149 str_index:
20150 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20151 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20152 			hval = Z_LVAL_P(offset);
20153 num_index:
20154 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20155 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20156 			offset = Z_REFVAL_P(offset);
20157 			goto add_again;
20158 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20159 			str = ZSTR_EMPTY_ALLOC();
20160 			goto str_index;
20161 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20162 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
20163 			goto num_index;
20164 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20165 			hval = 0;
20166 			goto num_index;
20167 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20168 			hval = 1;
20169 			goto num_index;
20170 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20171 			zend_use_resource_as_offset(offset);
20172 			hval = Z_RES_HANDLE_P(offset);
20173 			goto num_index;
20174 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20175 			ZVAL_UNDEFINED_OP2();
20176 			str = ZSTR_EMPTY_ALLOC();
20177 			goto str_index;
20178 		} else {
20179 			zend_illegal_offset();
20180 			zval_ptr_dtor_nogc(expr_ptr);
20181 		}
20182 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20183 	} else {
20184 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20185 			zend_cannot_add_element();
20186 			zval_ptr_dtor_nogc(expr_ptr);
20187 		}
20188 	}
20189 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20190 }
20191 
ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20193 {
20194 	zval *array;
20195 	uint32_t size;
20196 	USE_OPLINE
20197 
20198 	array = EX_VAR(opline->result.var);
20199 	if (IS_TMP_VAR != IS_UNUSED) {
20200 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20201 		ZVAL_ARR(array, zend_new_array(size));
20202 		/* Explicitly initialize array as not-packed if flag is set */
20203 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20204 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
20205 		}
20206 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20207 	} else {
20208 		ZVAL_ARR(array, zend_new_array(0));
20209 		ZEND_VM_NEXT_OPCODE();
20210 	}
20211 }
20212 
ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20213 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20214 {
20215 	USE_OPLINE
20216 
20217 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20218 
20219 	SAVE_OPLINE();
20220 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20221 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20222 	}
20223 
20224 	/* Destroy the previously yielded value */
20225 	zval_ptr_dtor(&generator->value);
20226 
20227 	/* Destroy the previously yielded key */
20228 	zval_ptr_dtor(&generator->key);
20229 
20230 	/* Set the new yielded value */
20231 	if (IS_TMP_VAR != IS_UNUSED) {
20232 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20233 			/* Constants and temporary variables aren't yieldable by reference,
20234 			 * but we still allow them with a notice. */
20235 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
20236 				zval *value;
20237 
20238 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20239 
20240 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20241 				ZVAL_COPY_VALUE(&generator->value, value);
20242 				if (IS_TMP_VAR == IS_CONST) {
20243 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20244 						Z_ADDREF(generator->value);
20245 					}
20246 				}
20247 			} else {
20248 				zval *value_ptr = NULL;
20249 
20250 				/* If a function call result is yielded and the function did
20251 				 * not return by reference we throw a notice. */
20252 				do {
20253 					if (IS_TMP_VAR == IS_VAR) {
20254 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
20255 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
20256 						 && !Z_ISREF_P(value_ptr)) {
20257 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20258 							ZVAL_COPY(&generator->value, value_ptr);
20259 							break;
20260 						}
20261 					}
20262 					if (Z_ISREF_P(value_ptr)) {
20263 						Z_ADDREF_P(value_ptr);
20264 					} else {
20265 						ZVAL_MAKE_REF_EX(value_ptr, 2);
20266 					}
20267 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
20268 				} while (0);
20269 
20270 			}
20271 		} else {
20272 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20273 
20274 			/* Consts, temporary variables and references need copying */
20275 			if (IS_TMP_VAR == IS_CONST) {
20276 				ZVAL_COPY_VALUE(&generator->value, value);
20277 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20278 					Z_ADDREF(generator->value);
20279 				}
20280 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20281 				ZVAL_COPY_VALUE(&generator->value, value);
20282             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20283 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20284 
20285 			} else {
20286 				ZVAL_COPY_VALUE(&generator->value, value);
20287 				if (IS_TMP_VAR == IS_CV) {
20288 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20289 				}
20290 			}
20291 		}
20292 	} else {
20293 		/* If no value was specified yield null */
20294 		ZVAL_NULL(&generator->value);
20295 	}
20296 
20297 	/* Set the new yielded key */
20298 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
20299 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20300 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
20301 			key = Z_REFVAL_P(key);
20302 		}
20303 		ZVAL_COPY(&generator->key, key);
20304 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20305 
20306 		if (Z_TYPE(generator->key) == IS_LONG
20307 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20308 		) {
20309 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20310 		}
20311 	} else {
20312 		/* If no key was specified we use auto-increment keys */
20313 		generator->largest_used_integer_key++;
20314 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20315 	}
20316 
20317 	if (RETURN_VALUE_USED(opline)) {
20318 		/* If the return value of yield is used set the send
20319 		 * target and initialize it to NULL */
20320 		generator->send_target = EX_VAR(opline->result.var);
20321 		ZVAL_NULL(generator->send_target);
20322 	} else {
20323 		generator->send_target = NULL;
20324 	}
20325 
20326 	/* We increment to the next op, so we are at the correct position when the
20327 	 * generator is resumed. */
20328 	ZEND_VM_INC_OPCODE();
20329 
20330 	/* The GOTO VM uses a local opline variable. We need to set the opline
20331 	 * variable in execute_data so we don't resume at an old position. */
20332 	SAVE_OPLINE();
20333 
20334 	ZEND_VM_RETURN();
20335 }
20336 
ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20337 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20338 {
20339 	USE_OPLINE
20340 	zval *op1, *op2;
20341 	bool result;
20342 
20343 	SAVE_OPLINE();
20344 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20345 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
20346 	result = fast_is_identical_function(op1, op2);
20347 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20348 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20349 	ZEND_VM_SMART_BRANCH(result, 1);
20350 }
20351 
ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20352 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20353 {
20354 	USE_OPLINE
20355 	zval *op1, *op2;
20356 	bool result;
20357 
20358 	SAVE_OPLINE();
20359 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20360 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
20361 	result = fast_is_identical_function(op1, op2);
20362 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20363 	ZEND_VM_SMART_BRANCH(result, 1);
20364 }
20365 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20366 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20367 {
20368 	USE_OPLINE
20369 	zval *op1, *op2;
20370 	bool result;
20371 
20372 	SAVE_OPLINE();
20373 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20374 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
20375 	result = fast_is_not_identical_function(op1, op2);
20376 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20377 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20378 	ZEND_VM_SMART_BRANCH(result, 1);
20379 }
20380 
ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20381 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20382 {
20383 	USE_OPLINE
20384 	zval *op1, *op2;
20385 	bool result;
20386 
20387 	SAVE_OPLINE();
20388 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20389 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
20390 	result = fast_is_identical_function(op1, op2);
20391 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20392 	ZEND_VM_SMART_BRANCH(result, 1);
20393 }
20394 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20395 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20396 {
20397 #if 0
20398 	USE_OPLINE
20399 #endif
20400 
20401 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20402         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20403 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20404         }
20405 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20406 	} else {
20407 		if (IS_UNUSED == IS_UNUSED) {
20408 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20409 		}
20410 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20411 	}
20412 }
20413 
ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20414 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20415 {
20416 	if (IS_TMP_VAR == IS_UNUSED) {
20417 		SAVE_OPLINE();
20418 		zend_verify_missing_return_type(EX(func));
20419 		HANDLE_EXCEPTION();
20420 	} else {
20421 /* prevents "undefined variable opline" errors */
20422 #if 0 || (IS_TMP_VAR != IS_UNUSED)
20423 		USE_OPLINE
20424 		zval *retval_ref, *retval_ptr;
20425 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
20426 		retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20427 
20428 		if (IS_TMP_VAR == IS_CONST) {
20429 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
20430 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
20431 		} else if (IS_TMP_VAR == IS_VAR) {
20432 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
20433 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
20434 			}
20435 			ZVAL_DEREF(retval_ptr);
20436 		} else if (IS_TMP_VAR == IS_CV) {
20437 			ZVAL_DEREF(retval_ptr);
20438 		}
20439 
20440 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
20441 			ZEND_VM_NEXT_OPCODE();
20442 		}
20443 
20444 		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
20445 			SAVE_OPLINE();
20446 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
20447 			if (UNEXPECTED(EG(exception))) {
20448 				HANDLE_EXCEPTION();
20449 			}
20450 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
20451 				ZEND_VM_NEXT_OPCODE();
20452 			}
20453 		}
20454 
20455 		zend_reference *ref = NULL;
20456 		void *cache_slot = CACHE_ADDR(opline->op2.num);
20457 		if (UNEXPECTED(retval_ref != retval_ptr)) {
20458 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20459 				ref = Z_REF_P(retval_ref);
20460 			} else {
20461 				/* A cast might happen - unwrap the reference if this is a by-value return */
20462 				if (Z_REFCOUNT_P(retval_ref) == 1) {
20463 					ZVAL_UNREF(retval_ref);
20464 				} else {
20465 					Z_DELREF_P(retval_ref);
20466 					ZVAL_COPY(retval_ref, retval_ptr);
20467 				}
20468 				retval_ptr = retval_ref;
20469 			}
20470 		}
20471 
20472 		SAVE_OPLINE();
20473 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
20474 			zend_verify_return_error(EX(func), retval_ptr);
20475 			HANDLE_EXCEPTION();
20476 		}
20477 		ZEND_VM_NEXT_OPCODE();
20478 #endif
20479 	}
20480 }
20481 
ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20482 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20483 {
20484 	USE_OPLINE
20485 	zval *value, *arg;
20486 	uint32_t arg_num;
20487 
20488 	if (IS_UNUSED == IS_CONST) {
20489 		SAVE_OPLINE();
20490 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
20491 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
20492 		if (UNEXPECTED(!arg)) {
20493 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20494 			HANDLE_EXCEPTION();
20495 		}
20496 	} else {
20497 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20498 		arg_num = opline->op2.num;
20499 	}
20500 
20501 	if (EXPECTED(0)) {
20502 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20503 			goto send_val_by_ref;
20504 		}
20505 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20506 send_val_by_ref:
20507 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20508 	}
20509 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20510 	ZVAL_COPY_VALUE(arg, value);
20511 	if (IS_TMP_VAR == IS_CONST) {
20512 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
20513 			Z_ADDREF_P(arg);
20514 		}
20515 	}
20516 	ZEND_VM_NEXT_OPCODE();
20517 }
20518 
ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20519 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20520 {
20521 	USE_OPLINE
20522 	zval *value, *arg;
20523 	uint32_t arg_num;
20524 
20525 	if (IS_UNUSED == IS_CONST) {
20526 		SAVE_OPLINE();
20527 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
20528 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
20529 		if (UNEXPECTED(!arg)) {
20530 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20531 			HANDLE_EXCEPTION();
20532 		}
20533 	} else {
20534 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20535 		arg_num = opline->op2.num;
20536 	}
20537 
20538 	if (EXPECTED(1)) {
20539 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20540 			goto send_val_by_ref;
20541 		}
20542 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20543 send_val_by_ref:
20544 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20545 	}
20546 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20547 	ZVAL_COPY_VALUE(arg, value);
20548 	if (IS_TMP_VAR == IS_CONST) {
20549 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
20550 			Z_ADDREF_P(arg);
20551 		}
20552 	}
20553 	ZEND_VM_NEXT_OPCODE();
20554 }
20555 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20556 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20557 {
20558 	USE_OPLINE
20559 	zval *expr_ptr, new_expr;
20560 
20561 	SAVE_OPLINE();
20562 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20563 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20564 		expr_ptr = NULL;
20565 		if (Z_ISREF_P(expr_ptr)) {
20566 			Z_ADDREF_P(expr_ptr);
20567 		} else {
20568 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20569 		}
20570 
20571 	} else {
20572 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20573 		if (IS_TMP_VAR == IS_TMP_VAR) {
20574 			/* pass */
20575 		} else if (IS_TMP_VAR == IS_CONST) {
20576 			Z_TRY_ADDREF_P(expr_ptr);
20577 		} else if (IS_TMP_VAR == IS_CV) {
20578 			ZVAL_DEREF(expr_ptr);
20579 			Z_TRY_ADDREF_P(expr_ptr);
20580 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20581 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20582 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20583 
20584 				expr_ptr = Z_REFVAL_P(expr_ptr);
20585 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20586 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20587 					expr_ptr = &new_expr;
20588 					efree_size(ref, sizeof(zend_reference));
20589 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20590 					Z_ADDREF_P(expr_ptr);
20591 				}
20592 			}
20593 		}
20594 	}
20595 
20596 	if (IS_UNUSED != IS_UNUSED) {
20597 		zval *offset = NULL;
20598 		zend_string *str;
20599 		zend_ulong hval;
20600 
20601 add_again:
20602 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20603 			str = Z_STR_P(offset);
20604 			if (IS_UNUSED != IS_CONST) {
20605 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20606 					goto num_index;
20607 				}
20608 			}
20609 str_index:
20610 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20611 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20612 			hval = Z_LVAL_P(offset);
20613 num_index:
20614 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20615 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20616 			offset = Z_REFVAL_P(offset);
20617 			goto add_again;
20618 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20619 			str = ZSTR_EMPTY_ALLOC();
20620 			goto str_index;
20621 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20622 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
20623 			goto num_index;
20624 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20625 			hval = 0;
20626 			goto num_index;
20627 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20628 			hval = 1;
20629 			goto num_index;
20630 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20631 			zend_use_resource_as_offset(offset);
20632 			hval = Z_RES_HANDLE_P(offset);
20633 			goto num_index;
20634 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20635 			ZVAL_UNDEFINED_OP2();
20636 			str = ZSTR_EMPTY_ALLOC();
20637 			goto str_index;
20638 		} else {
20639 			zend_illegal_offset();
20640 			zval_ptr_dtor_nogc(expr_ptr);
20641 		}
20642 
20643 	} else {
20644 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20645 			zend_cannot_add_element();
20646 			zval_ptr_dtor_nogc(expr_ptr);
20647 		}
20648 	}
20649 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20650 }
20651 
ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20652 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20653 {
20654 	zval *array;
20655 	uint32_t size;
20656 	USE_OPLINE
20657 
20658 	array = EX_VAR(opline->result.var);
20659 	if (IS_TMP_VAR != IS_UNUSED) {
20660 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20661 		ZVAL_ARR(array, zend_new_array(size));
20662 		/* Explicitly initialize array as not-packed if flag is set */
20663 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20664 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
20665 		}
20666 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20667 	} else {
20668 		ZVAL_ARR(array, zend_new_array(0));
20669 		ZEND_VM_NEXT_OPCODE();
20670 	}
20671 }
20672 
ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20673 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20674 {
20675 	USE_OPLINE
20676 
20677 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20678 
20679 	SAVE_OPLINE();
20680 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20681 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20682 	}
20683 
20684 	/* Destroy the previously yielded value */
20685 	zval_ptr_dtor(&generator->value);
20686 
20687 	/* Destroy the previously yielded key */
20688 	zval_ptr_dtor(&generator->key);
20689 
20690 	/* Set the new yielded value */
20691 	if (IS_TMP_VAR != IS_UNUSED) {
20692 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20693 			/* Constants and temporary variables aren't yieldable by reference,
20694 			 * but we still allow them with a notice. */
20695 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
20696 				zval *value;
20697 
20698 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20699 
20700 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20701 				ZVAL_COPY_VALUE(&generator->value, value);
20702 				if (IS_TMP_VAR == IS_CONST) {
20703 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20704 						Z_ADDREF(generator->value);
20705 					}
20706 				}
20707 			} else {
20708 				zval *value_ptr = NULL;
20709 
20710 				/* If a function call result is yielded and the function did
20711 				 * not return by reference we throw a notice. */
20712 				do {
20713 					if (IS_TMP_VAR == IS_VAR) {
20714 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
20715 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
20716 						 && !Z_ISREF_P(value_ptr)) {
20717 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20718 							ZVAL_COPY(&generator->value, value_ptr);
20719 							break;
20720 						}
20721 					}
20722 					if (Z_ISREF_P(value_ptr)) {
20723 						Z_ADDREF_P(value_ptr);
20724 					} else {
20725 						ZVAL_MAKE_REF_EX(value_ptr, 2);
20726 					}
20727 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
20728 				} while (0);
20729 
20730 			}
20731 		} else {
20732 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20733 
20734 			/* Consts, temporary variables and references need copying */
20735 			if (IS_TMP_VAR == IS_CONST) {
20736 				ZVAL_COPY_VALUE(&generator->value, value);
20737 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20738 					Z_ADDREF(generator->value);
20739 				}
20740 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20741 				ZVAL_COPY_VALUE(&generator->value, value);
20742             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20743 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20744 
20745 			} else {
20746 				ZVAL_COPY_VALUE(&generator->value, value);
20747 				if (IS_TMP_VAR == IS_CV) {
20748 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20749 				}
20750 			}
20751 		}
20752 	} else {
20753 		/* If no value was specified yield null */
20754 		ZVAL_NULL(&generator->value);
20755 	}
20756 
20757 	/* Set the new yielded key */
20758 	if (IS_UNUSED != IS_UNUSED) {
20759 		zval *key = NULL;
20760 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
20761 			key = Z_REFVAL_P(key);
20762 		}
20763 		ZVAL_COPY(&generator->key, key);
20764 
20765 		if (Z_TYPE(generator->key) == IS_LONG
20766 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20767 		) {
20768 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20769 		}
20770 	} else {
20771 		/* If no key was specified we use auto-increment keys */
20772 		generator->largest_used_integer_key++;
20773 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20774 	}
20775 
20776 	if (RETURN_VALUE_USED(opline)) {
20777 		/* If the return value of yield is used set the send
20778 		 * target and initialize it to NULL */
20779 		generator->send_target = EX_VAR(opline->result.var);
20780 		ZVAL_NULL(generator->send_target);
20781 	} else {
20782 		generator->send_target = NULL;
20783 	}
20784 
20785 	/* We increment to the next op, so we are at the correct position when the
20786 	 * generator is resumed. */
20787 	ZEND_VM_INC_OPCODE();
20788 
20789 	/* The GOTO VM uses a local opline variable. We need to set the opline
20790 	 * variable in execute_data so we don't resume at an old position. */
20791 	SAVE_OPLINE();
20792 
20793 	ZEND_VM_RETURN();
20794 }
20795 
ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20796 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20797 {
20798 	USE_OPLINE
20799 	zval *op1;
20800 	zend_string *type;
20801 
20802 	SAVE_OPLINE();
20803 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20804 	type = zend_zval_get_legacy_type(op1);
20805 	if (EXPECTED(type)) {
20806 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
20807 	} else {
20808 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
20809 	}
20810 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20811 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20812 }
20813 
ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20814 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20815 {
20816 	USE_OPLINE
20817 	zval *op1, *op2;
20818 	bool result;
20819 
20820 	SAVE_OPLINE();
20821 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20822 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20823 	result = fast_is_identical_function(op1, op2);
20824 
20825 	ZEND_VM_SMART_BRANCH(result, 1);
20826 }
20827 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20829 {
20830 #if 0
20831 	USE_OPLINE
20832 #endif
20833 
20834 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20835         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20836 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20837         }
20838 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20839 	} else {
20840 		if (IS_CV == IS_UNUSED) {
20841 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20842 		}
20843 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20844 	}
20845 }
20846 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20847 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20848 {
20849 #if 0
20850 	USE_OPLINE
20851 #endif
20852 
20853 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20854 		/* Behave like FETCH_OBJ_W */
20855 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20856 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20857 		}
20858 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20859 	} else {
20860 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20861 	}
20862 }
20863 
ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20865 {
20866 	USE_OPLINE
20867 	zend_string **rope;
20868 	zval *var;
20869 
20870 	/* op1 and result are the same */
20871 	rope = (zend_string**)EX_VAR(opline->op1.var);
20872 	if (IS_CV == IS_CONST) {
20873 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20874 		rope[opline->extended_value] = Z_STR_P(var);
20875 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20876 			Z_ADDREF_P(var);
20877 		}
20878 	} else {
20879 		var = EX_VAR(opline->op2.var);
20880 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20881 			if (IS_CV == IS_CV) {
20882 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20883 			} else {
20884 				rope[opline->extended_value] = Z_STR_P(var);
20885 			}
20886 		} else {
20887 			SAVE_OPLINE();
20888 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20889 				ZVAL_UNDEFINED_OP2();
20890 			}
20891 			rope[opline->extended_value] = zval_get_string_func(var);
20892 
20893 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20894 		}
20895 	}
20896 	ZEND_VM_NEXT_OPCODE();
20897 }
20898 
ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20899 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20900 {
20901 	USE_OPLINE
20902 	zend_string **rope;
20903 	zval *var, *ret;
20904 	uint32_t i;
20905 	size_t len = 0;
20906 	char *target;
20907 
20908 	rope = (zend_string**)EX_VAR(opline->op1.var);
20909 	if (IS_CV == IS_CONST) {
20910 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20911 		rope[opline->extended_value] = Z_STR_P(var);
20912 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20913 			Z_ADDREF_P(var);
20914 		}
20915 	} else {
20916 		var = EX_VAR(opline->op2.var);
20917 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20918 			if (IS_CV == IS_CV) {
20919 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20920 			} else {
20921 				rope[opline->extended_value] = Z_STR_P(var);
20922 			}
20923 		} else {
20924 			SAVE_OPLINE();
20925 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20926 				ZVAL_UNDEFINED_OP2();
20927 			}
20928 			rope[opline->extended_value] = zval_get_string_func(var);
20929 
20930 			if (UNEXPECTED(EG(exception))) {
20931 				for (i = 0; i <= opline->extended_value; i++) {
20932 					zend_string_release_ex(rope[i], 0);
20933 				}
20934 				ZVAL_UNDEF(EX_VAR(opline->result.var));
20935 				HANDLE_EXCEPTION();
20936 			}
20937 		}
20938 	}
20939 	for (i = 0; i <= opline->extended_value; i++) {
20940 		len += ZSTR_LEN(rope[i]);
20941 	}
20942 	ret = EX_VAR(opline->result.var);
20943 	ZVAL_STR(ret, zend_string_alloc(len, 0));
20944 	target = Z_STRVAL_P(ret);
20945 	for (i = 0; i <= opline->extended_value; i++) {
20946 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
20947 		target += ZSTR_LEN(rope[i]);
20948 		zend_string_release_ex(rope[i], 0);
20949 	}
20950 	*target = '\0';
20951 
20952 	ZEND_VM_NEXT_OPCODE();
20953 }
20954 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20955 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20956 {
20957 	USE_OPLINE
20958 	zval *expr_ptr, new_expr;
20959 
20960 	SAVE_OPLINE();
20961 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20962 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20963 		expr_ptr = NULL;
20964 		if (Z_ISREF_P(expr_ptr)) {
20965 			Z_ADDREF_P(expr_ptr);
20966 		} else {
20967 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20968 		}
20969 
20970 	} else {
20971 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20972 		if (IS_TMP_VAR == IS_TMP_VAR) {
20973 			/* pass */
20974 		} else if (IS_TMP_VAR == IS_CONST) {
20975 			Z_TRY_ADDREF_P(expr_ptr);
20976 		} else if (IS_TMP_VAR == IS_CV) {
20977 			ZVAL_DEREF(expr_ptr);
20978 			Z_TRY_ADDREF_P(expr_ptr);
20979 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20980 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20981 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20982 
20983 				expr_ptr = Z_REFVAL_P(expr_ptr);
20984 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20985 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20986 					expr_ptr = &new_expr;
20987 					efree_size(ref, sizeof(zend_reference));
20988 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20989 					Z_ADDREF_P(expr_ptr);
20990 				}
20991 			}
20992 		}
20993 	}
20994 
20995 	if (IS_CV != IS_UNUSED) {
20996 		zval *offset = EX_VAR(opline->op2.var);
20997 		zend_string *str;
20998 		zend_ulong hval;
20999 
21000 add_again:
21001 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
21002 			str = Z_STR_P(offset);
21003 			if (IS_CV != IS_CONST) {
21004 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
21005 					goto num_index;
21006 				}
21007 			}
21008 str_index:
21009 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
21010 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
21011 			hval = Z_LVAL_P(offset);
21012 num_index:
21013 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
21014 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
21015 			offset = Z_REFVAL_P(offset);
21016 			goto add_again;
21017 		} else if (Z_TYPE_P(offset) == IS_NULL) {
21018 			str = ZSTR_EMPTY_ALLOC();
21019 			goto str_index;
21020 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
21021 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
21022 			goto num_index;
21023 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
21024 			hval = 0;
21025 			goto num_index;
21026 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
21027 			hval = 1;
21028 			goto num_index;
21029 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
21030 			zend_use_resource_as_offset(offset);
21031 			hval = Z_RES_HANDLE_P(offset);
21032 			goto num_index;
21033 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
21034 			ZVAL_UNDEFINED_OP2();
21035 			str = ZSTR_EMPTY_ALLOC();
21036 			goto str_index;
21037 		} else {
21038 			zend_illegal_offset();
21039 			zval_ptr_dtor_nogc(expr_ptr);
21040 		}
21041 
21042 	} else {
21043 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
21044 			zend_cannot_add_element();
21045 			zval_ptr_dtor_nogc(expr_ptr);
21046 		}
21047 	}
21048 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21049 }
21050 
ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21051 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21052 {
21053 	zval *array;
21054 	uint32_t size;
21055 	USE_OPLINE
21056 
21057 	array = EX_VAR(opline->result.var);
21058 	if (IS_TMP_VAR != IS_UNUSED) {
21059 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
21060 		ZVAL_ARR(array, zend_new_array(size));
21061 		/* Explicitly initialize array as not-packed if flag is set */
21062 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
21063 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
21064 		}
21065 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21066 	} else {
21067 		ZVAL_ARR(array, zend_new_array(0));
21068 		ZEND_VM_NEXT_OPCODE();
21069 	}
21070 }
21071 
ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21073 {
21074 	USE_OPLINE
21075 
21076 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
21077 
21078 	SAVE_OPLINE();
21079 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
21080 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21081 	}
21082 
21083 	/* Destroy the previously yielded value */
21084 	zval_ptr_dtor(&generator->value);
21085 
21086 	/* Destroy the previously yielded key */
21087 	zval_ptr_dtor(&generator->key);
21088 
21089 	/* Set the new yielded value */
21090 	if (IS_TMP_VAR != IS_UNUSED) {
21091 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
21092 			/* Constants and temporary variables aren't yieldable by reference,
21093 			 * but we still allow them with a notice. */
21094 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
21095 				zval *value;
21096 
21097 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21098 
21099 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21100 				ZVAL_COPY_VALUE(&generator->value, value);
21101 				if (IS_TMP_VAR == IS_CONST) {
21102 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21103 						Z_ADDREF(generator->value);
21104 					}
21105 				}
21106 			} else {
21107 				zval *value_ptr = NULL;
21108 
21109 				/* If a function call result is yielded and the function did
21110 				 * not return by reference we throw a notice. */
21111 				do {
21112 					if (IS_TMP_VAR == IS_VAR) {
21113 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
21114 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
21115 						 && !Z_ISREF_P(value_ptr)) {
21116 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21117 							ZVAL_COPY(&generator->value, value_ptr);
21118 							break;
21119 						}
21120 					}
21121 					if (Z_ISREF_P(value_ptr)) {
21122 						Z_ADDREF_P(value_ptr);
21123 					} else {
21124 						ZVAL_MAKE_REF_EX(value_ptr, 2);
21125 					}
21126 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
21127 				} while (0);
21128 
21129 			}
21130 		} else {
21131 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21132 
21133 			/* Consts, temporary variables and references need copying */
21134 			if (IS_TMP_VAR == IS_CONST) {
21135 				ZVAL_COPY_VALUE(&generator->value, value);
21136 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21137 					Z_ADDREF(generator->value);
21138 				}
21139 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
21140 				ZVAL_COPY_VALUE(&generator->value, value);
21141             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
21142 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
21143 
21144 			} else {
21145 				ZVAL_COPY_VALUE(&generator->value, value);
21146 				if (IS_TMP_VAR == IS_CV) {
21147 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
21148 				}
21149 			}
21150 		}
21151 	} else {
21152 		/* If no value was specified yield null */
21153 		ZVAL_NULL(&generator->value);
21154 	}
21155 
21156 	/* Set the new yielded key */
21157 	if (IS_CV != IS_UNUSED) {
21158 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21159 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
21160 			key = Z_REFVAL_P(key);
21161 		}
21162 		ZVAL_COPY(&generator->key, key);
21163 
21164 		if (Z_TYPE(generator->key) == IS_LONG
21165 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
21166 		) {
21167 			generator->largest_used_integer_key = Z_LVAL(generator->key);
21168 		}
21169 	} else {
21170 		/* If no key was specified we use auto-increment keys */
21171 		generator->largest_used_integer_key++;
21172 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
21173 	}
21174 
21175 	if (RETURN_VALUE_USED(opline)) {
21176 		/* If the return value of yield is used set the send
21177 		 * target and initialize it to NULL */
21178 		generator->send_target = EX_VAR(opline->result.var);
21179 		ZVAL_NULL(generator->send_target);
21180 	} else {
21181 		generator->send_target = NULL;
21182 	}
21183 
21184 	/* We increment to the next op, so we are at the correct position when the
21185 	 * generator is resumed. */
21186 	ZEND_VM_INC_OPCODE();
21187 
21188 	/* The GOTO VM uses a local opline variable. We need to set the opline
21189 	 * variable in execute_data so we don't resume at an old position. */
21190 	SAVE_OPLINE();
21191 
21192 	ZEND_VM_RETURN();
21193 }
21194 
ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21195 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21196 {
21197 	USE_OPLINE
21198 	zval *closure, *var;
21199 
21200 	closure = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21201 	if (opline->extended_value & ZEND_BIND_REF) {
21202 		/* By-ref binding */
21203 		var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
21204 		if (Z_ISREF_P(var)) {
21205 			Z_ADDREF_P(var);
21206 		} else {
21207 			ZVAL_MAKE_REF_EX(var, 2);
21208 		}
21209 	} else {
21210 		var = EX_VAR(opline->op2.var);
21211 		if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
21212 			SAVE_OPLINE();
21213 			var = ZVAL_UNDEFINED_OP2();
21214 			if (UNEXPECTED(EG(exception))) {
21215 				HANDLE_EXCEPTION();
21216 			}
21217 		}
21218 		ZVAL_DEREF(var);
21219 		Z_TRY_ADDREF_P(var);
21220 	}
21221 
21222 	zend_closure_bind_var_ex(closure,
21223 		(opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
21224 	ZEND_VM_NEXT_OPCODE();
21225 }
21226 
zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21227 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21228 {
21229 	USE_OPLINE
21230 	zval *var_ptr;
21231 
21232 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21233 
21234 	SAVE_OPLINE();
21235 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21236 		ZVAL_UNDEFINED_OP1();
21237 		ZVAL_NULL(var_ptr);
21238 	}
21239 
21240 	do {
21241 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21242 			zend_reference *ref = Z_REF_P(var_ptr);
21243 			var_ptr = Z_REFVAL_P(var_ptr);
21244 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21245 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
21246 				break;
21247 			}
21248 		}
21249 		increment_function(var_ptr);
21250 	} while (0);
21251 
21252 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21253 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21254 	}
21255 
21256 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21257 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21258 }
21259 
ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21260 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21261 {
21262 	USE_OPLINE
21263 	zval *var_ptr;
21264 
21265 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21266 
21267 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21268 		fast_long_increment_function(var_ptr);
21269 		if (UNEXPECTED(0)) {
21270 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21271 		}
21272 		ZEND_VM_NEXT_OPCODE();
21273 	}
21274 
21275 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21276 }
21277 
ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21278 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21279 {
21280 	USE_OPLINE
21281 	zval *var_ptr;
21282 
21283 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21284 
21285 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21286 		fast_long_increment_function(var_ptr);
21287 		if (UNEXPECTED(1)) {
21288 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21289 		}
21290 		ZEND_VM_NEXT_OPCODE();
21291 	}
21292 
21293 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21294 }
21295 
zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21296 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21297 {
21298 	USE_OPLINE
21299 	zval *var_ptr;
21300 
21301 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21302 
21303 	SAVE_OPLINE();
21304 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21305 		ZVAL_UNDEFINED_OP1();
21306 		ZVAL_NULL(var_ptr);
21307 	}
21308 
21309 	do {
21310 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21311 			zend_reference *ref = Z_REF_P(var_ptr);
21312 			var_ptr = Z_REFVAL_P(var_ptr);
21313 
21314 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21315 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
21316 				break;
21317 			}
21318 		}
21319 		decrement_function(var_ptr);
21320 	} while (0);
21321 
21322 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21323 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21324 	}
21325 
21326 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21327 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21328 }
21329 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21330 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21331 {
21332 	USE_OPLINE
21333 	zval *var_ptr;
21334 
21335 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21336 
21337 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21338 		fast_long_decrement_function(var_ptr);
21339 		if (UNEXPECTED(0)) {
21340 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21341 		}
21342 		ZEND_VM_NEXT_OPCODE();
21343 	}
21344 
21345 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21346 }
21347 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21348 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21349 {
21350 	USE_OPLINE
21351 	zval *var_ptr;
21352 
21353 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21354 
21355 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21356 		fast_long_decrement_function(var_ptr);
21357 		if (UNEXPECTED(1)) {
21358 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21359 		}
21360 		ZEND_VM_NEXT_OPCODE();
21361 	}
21362 
21363 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21364 }
21365 
zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21366 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21367 {
21368 	USE_OPLINE
21369 	zval *var_ptr;
21370 
21371 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21372 
21373 	SAVE_OPLINE();
21374 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21375 		ZVAL_UNDEFINED_OP1();
21376 		ZVAL_NULL(var_ptr);
21377 	}
21378 
21379 	do {
21380 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21381 			zend_reference *ref = Z_REF_P(var_ptr);
21382 			var_ptr = Z_REFVAL_P(var_ptr);
21383 
21384 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21385 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
21386 				break;
21387 			}
21388 		}
21389 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21390 
21391 		increment_function(var_ptr);
21392 	} while (0);
21393 
21394 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21395 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21396 }
21397 
ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21398 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21399 {
21400 	USE_OPLINE
21401 	zval *var_ptr;
21402 
21403 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21404 
21405 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21406 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
21407 		fast_long_increment_function(var_ptr);
21408 		ZEND_VM_NEXT_OPCODE();
21409 	}
21410 
21411 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21412 }
21413 
zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21414 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21415 {
21416 	USE_OPLINE
21417 	zval *var_ptr;
21418 
21419 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21420 
21421 	SAVE_OPLINE();
21422 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21423 		ZVAL_UNDEFINED_OP1();
21424 		ZVAL_NULL(var_ptr);
21425 	}
21426 
21427 	do {
21428 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21429 			zend_reference *ref = Z_REF_P(var_ptr);
21430 			var_ptr = Z_REFVAL_P(var_ptr);
21431 
21432 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21433 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
21434 				break;
21435 			}
21436 		}
21437 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21438 
21439 		decrement_function(var_ptr);
21440 	} while (0);
21441 
21442 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21443 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21444 }
21445 
ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21446 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21447 {
21448 	USE_OPLINE
21449 	zval *var_ptr;
21450 
21451 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21452 
21453 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21454 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
21455 		fast_long_decrement_function(var_ptr);
21456 		ZEND_VM_NEXT_OPCODE();
21457 	}
21458 
21459 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21460 }
21461 
ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21462 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21463 {
21464 	USE_OPLINE
21465 	zval *retval_ptr;
21466 	zval *return_value;
21467 
21468 	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21469 	return_value = EX(return_value);
21470 
21471 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
21472 		SAVE_OPLINE();
21473 		retval_ptr = ZVAL_UNDEFINED_OP1();
21474 		if (return_value) {
21475 			ZVAL_NULL(return_value);
21476 		}
21477 	} else if (!return_value) {
21478 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
21479 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
21480 				SAVE_OPLINE();
21481 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
21482 			}
21483 		}
21484 	} else {
21485 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
21486 			ZVAL_COPY_VALUE(return_value, retval_ptr);
21487 			if (IS_VAR == IS_CONST) {
21488 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
21489 					Z_ADDREF_P(return_value);
21490 				}
21491 			}
21492 		} else if (IS_VAR == IS_CV) {
21493 			do {
21494 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
21495 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
21496 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
21497 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
21498 							ZVAL_COPY_VALUE(return_value, retval_ptr);
21499 							if (GC_MAY_LEAK(ref)) {
21500 								SAVE_OPLINE();
21501 								gc_possible_root(ref);
21502 							}
21503 							ZVAL_NULL(retval_ptr);
21504 							break;
21505 						} else {
21506 							Z_ADDREF_P(retval_ptr);
21507 						}
21508 					} else {
21509 						retval_ptr = Z_REFVAL_P(retval_ptr);
21510 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
21511 							Z_ADDREF_P(retval_ptr);
21512 						}
21513 					}
21514 				}
21515 				ZVAL_COPY_VALUE(return_value, retval_ptr);
21516 			} while (0);
21517 		} else /* if (IS_VAR == IS_VAR) */ {
21518 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
21519 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
21520 
21521 				retval_ptr = Z_REFVAL_P(retval_ptr);
21522 				ZVAL_COPY_VALUE(return_value, retval_ptr);
21523 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21524 					efree_size(ref, sizeof(zend_reference));
21525 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
21526 					Z_ADDREF_P(retval_ptr);
21527 				}
21528 			} else {
21529 				ZVAL_COPY_VALUE(return_value, retval_ptr);
21530 			}
21531 		}
21532 	}
21533 
21534 
21535 
21536 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21537 }
21538 
ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21539 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21540 {
21541 	USE_OPLINE
21542 	zval *retval_ptr;
21543 	zval *return_value;
21544 
21545 	SAVE_OPLINE();
21546 
21547 	return_value = EX(return_value);
21548 
21549 	do {
21550 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
21551 		    (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
21552 			/* Not supposed to happen, but we'll allow it */
21553 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
21554 
21555 			retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21556 			if (!return_value) {
21557 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21558 			} else {
21559 				if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
21560 					ZVAL_COPY_VALUE(return_value, retval_ptr);
21561 					break;
21562 				}
21563 
21564 				ZVAL_NEW_REF(return_value, retval_ptr);
21565 				if (IS_VAR == IS_CONST) {
21566 					Z_TRY_ADDREF_P(retval_ptr);
21567 				}
21568 			}
21569 			break;
21570 		}
21571 
21572 		retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21573 
21574 		if (IS_VAR == IS_VAR) {
21575 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
21576 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
21577 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
21578 				if (return_value) {
21579 					ZVAL_NEW_REF(return_value, retval_ptr);
21580 				} else {
21581 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21582 				}
21583 				break;
21584 			}
21585 		}
21586 
21587 		if (return_value) {
21588 			if (Z_ISREF_P(retval_ptr)) {
21589 				Z_ADDREF_P(retval_ptr);
21590 			} else {
21591 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
21592 			}
21593 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
21594 		}
21595 
21596 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21597 	} while (0);
21598 
21599 
21600 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21601 }
21602 
ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21603 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21604 {
21605 	USE_OPLINE
21606 	zval *retval;
21607 
21608 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
21609 
21610 	SAVE_OPLINE();
21611 	retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21612 
21613 	/* Copy return value into generator->retval */
21614 	if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
21615 		ZVAL_COPY_VALUE(&generator->retval, retval);
21616 		if (IS_VAR == IS_CONST) {
21617 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
21618 				Z_ADDREF(generator->retval);
21619 			}
21620 		}
21621 	} else if (IS_VAR == IS_CV) {
21622 		ZVAL_COPY_DEREF(&generator->retval, retval);
21623 	} else /* if (IS_VAR == IS_VAR) */ {
21624 		if (UNEXPECTED(Z_ISREF_P(retval))) {
21625 			zend_refcounted *ref = Z_COUNTED_P(retval);
21626 
21627 			retval = Z_REFVAL_P(retval);
21628 			ZVAL_COPY_VALUE(&generator->retval, retval);
21629 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21630 				efree_size(ref, sizeof(zend_reference));
21631 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
21632 				Z_ADDREF_P(retval);
21633 			}
21634 		} else {
21635 			ZVAL_COPY_VALUE(&generator->retval, retval);
21636 		}
21637 	}
21638 
21639 	EG(current_execute_data) = EX(prev_execute_data);
21640 
21641 	/* Close the generator to free up resources */
21642 	zend_generator_close(generator, 1);
21643 
21644 	/* Pass execution back to handling code */
21645 	ZEND_VM_RETURN();
21646 }
21647 
ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21648 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21649 {
21650 	USE_OPLINE
21651 	zval *arg, *param;
21652 
21653 	SAVE_OPLINE();
21654 
21655 	arg = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
21656 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
21657 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
21658 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
21659 		Z_TRY_ADDREF_P(arg);
21660 		ZVAL_NEW_REF(param, arg);
21661 	} else {
21662 		ZVAL_COPY(param, arg);
21663 	}
21664 
21665 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21666 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21667 }
21668 
ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21669 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21670 {
21671 	USE_OPLINE
21672 	zval *expr;
21673 	zval *result = EX_VAR(opline->result.var);
21674 	HashTable *ht;
21675 
21676 	SAVE_OPLINE();
21677 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21678 
21679 	switch (opline->extended_value) {
21680 		case IS_LONG:
21681 			ZVAL_LONG(result, zval_get_long(expr));
21682 			break;
21683 		case IS_DOUBLE:
21684 			ZVAL_DOUBLE(result, zval_get_double(expr));
21685 			break;
21686 		case IS_STRING:
21687 			ZVAL_STR(result, zval_get_string(expr));
21688 			break;
21689 		default:
21690 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
21691 			if (IS_VAR & (IS_VAR|IS_CV)) {
21692 				ZVAL_DEREF(expr);
21693 			}
21694 			/* If value is already of correct type, return it directly */
21695 			if (Z_TYPE_P(expr) == opline->extended_value) {
21696 				ZVAL_COPY_VALUE(result, expr);
21697 				if (IS_VAR == IS_CONST) {
21698 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
21699 				} else if (IS_VAR != IS_TMP_VAR) {
21700 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
21701 				}
21702 
21703 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21704 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21705 			}
21706 
21707 			if (opline->extended_value == IS_ARRAY) {
21708 				if (IS_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
21709 					if (Z_TYPE_P(expr) != IS_NULL) {
21710 						ZVAL_ARR(result, zend_new_array(1));
21711 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
21712 						if (IS_VAR == IS_CONST) {
21713 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
21714 						} else {
21715 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
21716 						}
21717 					} else {
21718 						ZVAL_EMPTY_ARRAY(result);
21719 					}
21720 				} else if (Z_OBJ_P(expr)->properties == NULL
21721 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
21722 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
21723 					/* Optimized version without rebuilding properties HashTable */
21724 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
21725 				} else {
21726 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
21727 					if (obj_ht) {
21728 						/* fast copy */
21729 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
21730 							(Z_OBJCE_P(expr)->default_properties_count ||
21731 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
21732 							 GC_IS_RECURSIVE(obj_ht))));
21733 						zend_release_properties(obj_ht);
21734 					} else {
21735 						ZVAL_EMPTY_ARRAY(result);
21736 					}
21737 				}
21738 			} else {
21739 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
21740 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
21741 				if (Z_TYPE_P(expr) == IS_ARRAY) {
21742 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
21743 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
21744 						/* TODO: try not to duplicate immutable arrays as well ??? */
21745 						ht = zend_array_dup(ht);
21746 					}
21747 					Z_OBJ_P(result)->properties = ht;
21748 				} else if (Z_TYPE_P(expr) != IS_NULL) {
21749 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
21750 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
21751 					if (IS_VAR == IS_CONST) {
21752 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
21753 					} else {
21754 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
21755 					}
21756 				}
21757 			}
21758 	}
21759 
21760 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21761 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21762 }
21763 
ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21764 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21765 {
21766 	USE_OPLINE
21767 	zval *array_ptr, *result;
21768 
21769 	SAVE_OPLINE();
21770 
21771 	array_ptr = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
21772 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
21773 		result = EX_VAR(opline->result.var);
21774 		ZVAL_COPY_VALUE(result, array_ptr);
21775 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
21776 			Z_ADDREF_P(array_ptr);
21777 		}
21778 		Z_FE_POS_P(result) = 0;
21779 
21780 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21781 		ZEND_VM_NEXT_OPCODE();
21782 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
21783 		zend_object *zobj = Z_OBJ_P(array_ptr);
21784 		if (!zobj->ce->get_iterator) {
21785 			HashTable *properties = zobj->properties;
21786 			if (properties) {
21787 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
21788 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
21789 						GC_DELREF(properties);
21790 					}
21791 					properties = zobj->properties = zend_array_dup(properties);
21792 				}
21793 			} else {
21794 				properties = zobj->handlers->get_properties(zobj);
21795 			}
21796 
21797 			result = EX_VAR(opline->result.var);
21798 			ZVAL_COPY_VALUE(result, array_ptr);
21799 			if (IS_VAR != IS_TMP_VAR) {
21800 				Z_ADDREF_P(array_ptr);
21801 			}
21802 
21803 			if (zend_hash_num_elements(properties) == 0) {
21804 				Z_FE_ITER_P(result) = (uint32_t) -1;
21805 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21806 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21807 			}
21808 
21809 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
21810 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21811 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21812 		} else {
21813 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
21814 
21815 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21816 			if (UNEXPECTED(EG(exception))) {
21817 				HANDLE_EXCEPTION();
21818 			} else if (is_empty) {
21819 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
21820 			} else {
21821 				ZEND_VM_NEXT_OPCODE();
21822 			}
21823 		}
21824 	} else {
21825 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
21826 		ZVAL_UNDEF(EX_VAR(opline->result.var));
21827 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
21828 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21829 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21830 	}
21831 }
21832 
ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21833 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21834 {
21835 	USE_OPLINE
21836 	zval *array_ptr, *array_ref;
21837 
21838 	SAVE_OPLINE();
21839 
21840 	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
21841 		array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21842 		if (Z_ISREF_P(array_ref)) {
21843 			array_ptr = Z_REFVAL_P(array_ref);
21844 		}
21845 	} else {
21846 		array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21847 	}
21848 
21849 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
21850 		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
21851 			if (array_ptr == array_ref) {
21852 				ZVAL_NEW_REF(array_ref, array_ref);
21853 				array_ptr = Z_REFVAL_P(array_ref);
21854 			}
21855 			Z_ADDREF_P(array_ref);
21856 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
21857 		} else {
21858 			array_ref = EX_VAR(opline->result.var);
21859 			ZVAL_NEW_REF(array_ref, array_ptr);
21860 			array_ptr = Z_REFVAL_P(array_ref);
21861 		}
21862 		if (IS_VAR == IS_CONST) {
21863 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
21864 		} else {
21865 			SEPARATE_ARRAY(array_ptr);
21866 		}
21867 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
21868 
21869 		if (IS_VAR == IS_VAR) {
21870 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21871 		}
21872 		ZEND_VM_NEXT_OPCODE();
21873 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
21874 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
21875 			HashTable *properties;
21876 			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
21877 				if (array_ptr == array_ref) {
21878 					ZVAL_NEW_REF(array_ref, array_ref);
21879 					array_ptr = Z_REFVAL_P(array_ref);
21880 				}
21881 				Z_ADDREF_P(array_ref);
21882 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
21883 			} else {
21884 				array_ptr = EX_VAR(opline->result.var);
21885 				ZVAL_COPY_VALUE(array_ptr, array_ref);
21886 			}
21887 			if (Z_OBJ_P(array_ptr)->properties
21888 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
21889 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
21890 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
21891 				}
21892 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
21893 			}
21894 
21895 			properties = Z_OBJPROP_P(array_ptr);
21896 			if (zend_hash_num_elements(properties) == 0) {
21897 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
21898 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21899 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21900 			}
21901 
21902 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
21903 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21904 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21905 		} else {
21906 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
21907 
21908 			if (IS_VAR == IS_VAR) {
21909 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21910 			} else {
21911 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21912 			}
21913 			if (UNEXPECTED(EG(exception))) {
21914 				HANDLE_EXCEPTION();
21915 			} else if (is_empty) {
21916 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
21917 			} else {
21918 				ZEND_VM_NEXT_OPCODE();
21919 			}
21920 		}
21921 	} else {
21922 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
21923 		ZVAL_UNDEF(EX_VAR(opline->result.var));
21924 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
21925 		if (IS_VAR == IS_VAR) {
21926 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21927 		} else {
21928 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21929 		}
21930 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21931 	}
21932 }
21933 
ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21934 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21935 {
21936 	USE_OPLINE
21937 	zval *array;
21938 	zval *value;
21939 	uint32_t value_type;
21940 	HashTable *fe_ht;
21941 	HashPosition pos;
21942 	Bucket *p;
21943 
21944 	array = EX_VAR(opline->op1.var);
21945 	if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
21946 		ZEND_VM_TAIL_CALL(zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21947 	}
21948 	fe_ht = Z_ARRVAL_P(array);
21949 	pos = Z_FE_POS_P(array);
21950 	p = fe_ht->arData + pos;
21951 	while (1) {
21952 		if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
21953 			/* reached end of iteration */
21954 			ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
21955 			ZEND_VM_CONTINUE();
21956 		}
21957 		pos++;
21958 		value = &p->val;
21959 		value_type = Z_TYPE_INFO_P(value);
21960 		ZEND_ASSERT(value_type != IS_INDIRECT);
21961 		if (EXPECTED(value_type != IS_UNDEF)) {
21962 			break;
21963 		}
21964 		p++;
21965 	}
21966 	Z_FE_POS_P(array) = pos;
21967 	if (RETURN_VALUE_USED(opline)) {
21968 		if (!p->key) {
21969 			ZVAL_LONG(EX_VAR(opline->result.var), p->h);
21970 		} else {
21971 			ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
21972 		}
21973 	}
21974 
21975 	if (EXPECTED(opline->op2_type == IS_CV)) {
21976 		zval *variable_ptr = EX_VAR(opline->op2.var);
21977 		SAVE_OPLINE();
21978 		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
21979 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21980 	} else {
21981 		zval *res = EX_VAR(opline->op2.var);
21982 		zend_refcounted *gc = Z_COUNTED_P(value);
21983 
21984 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
21985 		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
21986 			GC_ADDREF(gc);
21987 		}
21988 		ZEND_VM_NEXT_OPCODE();
21989 	}
21990 }
21991 
ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21992 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21993 {
21994 	USE_OPLINE
21995 	zval *array;
21996 	zval *value;
21997 	uint32_t value_type;
21998 	HashTable *fe_ht;
21999 	HashPosition pos;
22000 	Bucket *p;
22001 
22002 	array = EX_VAR(opline->op1.var);
22003 	SAVE_OPLINE();
22004 
22005 	ZVAL_DEREF(array);
22006 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
22007 		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
22008 		fe_ht = Z_ARRVAL_P(array);
22009 		p = fe_ht->arData + pos;
22010 		while (1) {
22011 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22012 				/* reached end of iteration */
22013 				goto fe_fetch_w_exit;
22014 			}
22015 			pos++;
22016 			value = &p->val;
22017 			value_type = Z_TYPE_INFO_P(value);
22018 			ZEND_ASSERT(value_type != IS_INDIRECT);
22019 			if (EXPECTED(value_type != IS_UNDEF)) {
22020 				break;
22021 			}
22022 			p++;
22023 		}
22024 		EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
22025 		if (RETURN_VALUE_USED(opline)) {
22026 			if (!p->key) {
22027 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
22028 			} else {
22029 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
22030 			}
22031 		}
22032 	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
22033 		zend_object_iterator *iter;
22034 
22035 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
22036 			/* plain object */
22037 
22038 			fe_ht = Z_OBJPROP_P(array);
22039 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
22040 			p = fe_ht->arData + pos;
22041 			while (1) {
22042 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22043 					/* reached end of iteration */
22044 					goto fe_fetch_w_exit;
22045 				}
22046 				pos++;
22047 				value = &p->val;
22048 				value_type = Z_TYPE_INFO_P(value);
22049 				if (EXPECTED(value_type != IS_UNDEF)) {
22050 					if (UNEXPECTED(value_type == IS_INDIRECT)) {
22051 						value = Z_INDIRECT_P(value);
22052 						value_type = Z_TYPE_INFO_P(value);
22053 						if (EXPECTED(value_type != IS_UNDEF)
22054 						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
22055 							if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
22056 								zend_property_info *prop_info =
22057 									zend_get_property_info_for_slot(Z_OBJ_P(array), value);
22058 								if (UNEXPECTED(prop_info)) {
22059 									if (UNEXPECTED(prop_info->flags & ZEND_ACC_READONLY)) {
22060 										zend_throw_error(NULL,
22061 											"Cannot acquire reference to readonly property %s::$%s",
22062 											ZSTR_VAL(prop_info->ce->name), ZSTR_VAL(p->key));
22063 										UNDEF_RESULT();
22064 										HANDLE_EXCEPTION();
22065 									}
22066 									if (ZEND_TYPE_IS_SET(prop_info->type)) {
22067 										ZVAL_NEW_REF(value, value);
22068 										ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
22069 										value_type = IS_REFERENCE_EX;
22070 									}
22071 								}
22072 							}
22073 							break;
22074 						}
22075 					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
22076 							|| !p->key
22077 							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
22078 						break;
22079 					}
22080 				}
22081 				p++;
22082 			}
22083 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
22084 			if (RETURN_VALUE_USED(opline)) {
22085 				if (UNEXPECTED(!p->key)) {
22086 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
22087 				} else if (ZSTR_VAL(p->key)[0]) {
22088 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
22089 				} else {
22090 					const char *class_name, *prop_name;
22091 					size_t prop_name_len;
22092 					zend_unmangle_property_name_ex(
22093 						p->key, &class_name, &prop_name, &prop_name_len);
22094 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
22095 				}
22096 			}
22097 		} else {
22098 			const zend_object_iterator_funcs *funcs = iter->funcs;
22099 			if (++iter->index > 0) {
22100 				/* This could cause an endless loop if index becomes zero again.
22101 				 * In case that ever happens we need an additional flag. */
22102 				funcs->move_forward(iter);
22103 				if (UNEXPECTED(EG(exception) != NULL)) {
22104 					UNDEF_RESULT();
22105 					HANDLE_EXCEPTION();
22106 				}
22107 				if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
22108 					/* reached end of iteration */
22109 					if (UNEXPECTED(EG(exception) != NULL)) {
22110 						UNDEF_RESULT();
22111 						HANDLE_EXCEPTION();
22112 					}
22113 					goto fe_fetch_w_exit;
22114 				}
22115 			}
22116 			value = funcs->get_current_data(iter);
22117 			if (UNEXPECTED(EG(exception) != NULL)) {
22118 				UNDEF_RESULT();
22119 				HANDLE_EXCEPTION();
22120 			}
22121 			if (!value) {
22122 				/* failure in get_current_data */
22123 				goto fe_fetch_w_exit;
22124 			}
22125 			if (RETURN_VALUE_USED(opline)) {
22126 				if (funcs->get_current_key) {
22127 					funcs->get_current_key(iter, EX_VAR(opline->result.var));
22128 					if (UNEXPECTED(EG(exception) != NULL)) {
22129 						UNDEF_RESULT();
22130 						HANDLE_EXCEPTION();
22131 					}
22132 				} else {
22133 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
22134 				}
22135 			}
22136 			value_type = Z_TYPE_INFO_P(value);
22137 		}
22138 	} else {
22139 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array));
22140 		if (UNEXPECTED(EG(exception))) {
22141 			UNDEF_RESULT();
22142 			HANDLE_EXCEPTION();
22143 		}
22144 fe_fetch_w_exit:
22145 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
22146 		ZEND_VM_CONTINUE();
22147 	}
22148 
22149 	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
22150 		zend_refcounted *gc = Z_COUNTED_P(value);
22151 		zval *ref;
22152 		ZVAL_NEW_EMPTY_REF(value);
22153 		ref = Z_REFVAL_P(value);
22154 		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
22155 	}
22156 	if (EXPECTED(opline->op2_type == IS_CV)) {
22157 		zval *variable_ptr = EX_VAR(opline->op2.var);
22158 		if (EXPECTED(variable_ptr != value)) {
22159 			zend_reference *ref;
22160 
22161 			ref = Z_REF_P(value);
22162 			GC_ADDREF(ref);
22163 			i_zval_ptr_dtor(variable_ptr);
22164 			ZVAL_REF(variable_ptr, ref);
22165 		}
22166 	} else {
22167 		Z_ADDREF_P(value);
22168 		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
22169 	}
22170 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22171 }
22172 
ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22173 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22174 {
22175 	USE_OPLINE
22176 	zval *value;
22177 	zend_reference *ref = NULL;
22178 	bool ret;
22179 
22180 	SAVE_OPLINE();
22181 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22182 
22183 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
22184 		if (IS_VAR == IS_VAR) {
22185 			ref = Z_REF_P(value);
22186 		}
22187 		value = Z_REFVAL_P(value);
22188 	}
22189 
22190 	ret = i_zend_is_true(value);
22191 
22192 	if (UNEXPECTED(EG(exception))) {
22193 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22194 		ZVAL_UNDEF(EX_VAR(opline->result.var));
22195 		HANDLE_EXCEPTION();
22196 	}
22197 
22198 	if (ret) {
22199 		zval *result = EX_VAR(opline->result.var);
22200 
22201 		ZVAL_COPY_VALUE(result, value);
22202 		if (IS_VAR == IS_CONST) {
22203 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22204 		} else if (IS_VAR == IS_CV) {
22205 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22206 		} else if (IS_VAR == IS_VAR && ref) {
22207 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22208 				efree_size(ref, sizeof(zend_reference));
22209 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22210 				Z_ADDREF_P(result);
22211 			}
22212 		}
22213 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22214 	}
22215 
22216 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22217 	ZEND_VM_NEXT_OPCODE();
22218 }
22219 
ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22220 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22221 {
22222 	USE_OPLINE
22223 	zval *value;
22224 	zend_reference *ref = NULL;
22225 
22226 	SAVE_OPLINE();
22227 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22228 
22229 	if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
22230 		if (IS_VAR & IS_VAR) {
22231 			ref = Z_REF_P(value);
22232 		}
22233 		value = Z_REFVAL_P(value);
22234 	}
22235 
22236 	if (Z_TYPE_P(value) > IS_NULL) {
22237 		zval *result = EX_VAR(opline->result.var);
22238 		ZVAL_COPY_VALUE(result, value);
22239 		if (IS_VAR == IS_CONST) {
22240 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22241 		} else if (IS_VAR == IS_CV) {
22242 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22243 		} else if ((IS_VAR & IS_VAR) && ref) {
22244 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22245 				efree_size(ref, sizeof(zend_reference));
22246 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22247 				Z_ADDREF_P(result);
22248 			}
22249 		}
22250 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22251 	}
22252 
22253 	if ((IS_VAR & IS_VAR) && ref) {
22254 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22255 			efree_size(ref, sizeof(zend_reference));
22256 		}
22257 	}
22258 	ZEND_VM_NEXT_OPCODE();
22259 }
22260 
ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22261 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22262 {
22263 	USE_OPLINE
22264 	zval *val, *result;
22265 
22266 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22267 
22268 	if (Z_TYPE_P(val) > IS_NULL) {
22269 		do {
22270 			if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
22271 				val = Z_REFVAL_P(val);
22272 				if (Z_TYPE_P(val) <= IS_NULL) {
22273 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22274 					break;
22275 				}
22276 			}
22277 			ZEND_VM_NEXT_OPCODE();
22278 		} while (0);
22279 	}
22280 
22281 	result = EX_VAR(opline->result.var);
22282 	if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
22283 		ZVAL_NULL(result);
22284 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
22285 			SAVE_OPLINE();
22286 			ZVAL_UNDEFINED_OP1();
22287 			if (UNEXPECTED(EG(exception) != NULL)) {
22288 				HANDLE_EXCEPTION();
22289 			}
22290 		}
22291 	} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
22292 		ZVAL_FALSE(result);
22293 	} else {
22294 		ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
22295 		ZVAL_TRUE(result);
22296 	}
22297 
22298 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22299 }
22300 
ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22301 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22302 {
22303 	USE_OPLINE
22304 	zval *value;
22305 	zval *result = EX_VAR(opline->result.var);
22306 
22307 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22308 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
22309 		SAVE_OPLINE();
22310 		ZVAL_UNDEFINED_OP1();
22311 		ZVAL_NULL(result);
22312 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22313 	}
22314 
22315 	if (IS_VAR == IS_CV) {
22316 		ZVAL_COPY_DEREF(result, value);
22317 	} else if (IS_VAR == IS_VAR) {
22318 		if (UNEXPECTED(Z_ISREF_P(value))) {
22319 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
22320 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
22321 				efree_size(Z_REF_P(value), sizeof(zend_reference));
22322 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22323 				Z_ADDREF_P(result);
22324 			}
22325 		} else {
22326 			ZVAL_COPY_VALUE(result, value);
22327 		}
22328 	} else {
22329 		ZVAL_COPY_VALUE(result, value);
22330 		if (IS_VAR == IS_CONST) {
22331 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
22332 				Z_ADDREF_P(result);
22333 			}
22334 		}
22335 	}
22336 	ZEND_VM_NEXT_OPCODE();
22337 }
22338 
ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22339 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22340 {
22341 	USE_OPLINE
22342 	zval *varptr, *arg;
22343 
22344 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22345 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
22346 
22347 	if (IS_VAR == IS_CV) {
22348 		ZVAL_COPY(arg, varptr);
22349 	} else /* if (IS_VAR == IS_VAR) */ {
22350 		ZVAL_COPY_VALUE(arg, varptr);
22351 	}
22352 
22353 	ZEND_VM_NEXT_OPCODE();
22354 }
22355 
ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22356 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22357 {
22358 	USE_OPLINE
22359 	zval *op1, *op2;
22360 	bool result;
22361 
22362 	SAVE_OPLINE();
22363 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22364 	op2 = RT_CONSTANT(opline, opline->op2);
22365 	result = fast_is_identical_function(op1, op2);
22366 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22367 
22368 	ZEND_VM_SMART_BRANCH(result, 1);
22369 }
22370 
ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22371 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22372 {
22373 	USE_OPLINE
22374 	zval *op1, *op2;
22375 	bool result;
22376 
22377 	SAVE_OPLINE();
22378 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22379 	op2 = RT_CONSTANT(opline, opline->op2);
22380 	result = fast_is_identical_function(op1, op2);
22381 
22382 	ZEND_VM_SMART_BRANCH(result, 1);
22383 }
22384 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22385 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22386 {
22387 	USE_OPLINE
22388 	zval *op1, *op2;
22389 	bool result;
22390 
22391 	SAVE_OPLINE();
22392 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22393 	op2 = RT_CONSTANT(opline, opline->op2);
22394 	result = fast_is_not_identical_function(op1, op2);
22395 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22396 
22397 	ZEND_VM_SMART_BRANCH(result, 1);
22398 }
22399 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22400 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22401 {
22402 	USE_OPLINE
22403 	zval *object;
22404 	zval *property;
22405 	zval *value;
22406 	zval *zptr;
22407 	void **cache_slot;
22408 	zend_property_info *prop_info;
22409 	zend_object *zobj;
22410 	zend_string *name, *tmp_name;
22411 
22412 	SAVE_OPLINE();
22413 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22414 	property = RT_CONSTANT(opline, opline->op2);
22415 
22416 	do {
22417 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
22418 
22419 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22420 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22421 				object = Z_REFVAL_P(object);
22422 				goto assign_op_object;
22423 			}
22424 			if (IS_VAR == IS_CV
22425 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22426 				ZVAL_UNDEFINED_OP1();
22427 			}
22428 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
22429 			break;
22430 		}
22431 
22432 assign_op_object:
22433 		/* here we are sure we are dealing with an object */
22434 		zobj = Z_OBJ_P(object);
22435 		if (IS_CONST == IS_CONST) {
22436 			name = Z_STR_P(property);
22437 		} else {
22438 			name = zval_try_get_tmp_string(property, &tmp_name);
22439 			if (UNEXPECTED(!name)) {
22440 				UNDEF_RESULT();
22441 				break;
22442 			}
22443 		}
22444 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
22445 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
22446 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22447 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22448 					ZVAL_NULL(EX_VAR(opline->result.var));
22449 				}
22450 			} else {
22451 				zval *orig_zptr = zptr;
22452 				zend_reference *ref;
22453 
22454 				do {
22455 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
22456 						ref = Z_REF_P(zptr);
22457 						zptr = Z_REFVAL_P(zptr);
22458 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22459 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22460 							break;
22461 						}
22462 					}
22463 
22464 					if (IS_CONST == IS_CONST) {
22465 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
22466 					} else {
22467 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
22468 					}
22469 					if (UNEXPECTED(prop_info)) {
22470 						/* special case for typed properties */
22471 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
22472 					} else {
22473 						zend_binary_op(zptr, zptr, value OPLINE_CC);
22474 					}
22475 				} while (0);
22476 
22477 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22478 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
22479 				}
22480 			}
22481 		} else {
22482 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
22483 		}
22484 		if (IS_CONST != IS_CONST) {
22485 			zend_tmp_string_release(tmp_name);
22486 		}
22487 	} while (0);
22488 
22489 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
22490 
22491 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22492 	/* assign_obj has two opcodes! */
22493 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22494 }
22495 
22496 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22497 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22498 {
22499 	USE_OPLINE
22500 	zval *var_ptr;
22501 	zval *value, *container, *dim;
22502 	HashTable *ht;
22503 
22504 	SAVE_OPLINE();
22505 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22506 
22507 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22508 assign_dim_op_array:
22509 		SEPARATE_ARRAY(container);
22510 		ht = Z_ARRVAL_P(container);
22511 assign_dim_op_new_array:
22512 		dim = RT_CONSTANT(opline, opline->op2);
22513 		if (IS_CONST == IS_UNUSED) {
22514 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
22515 			if (UNEXPECTED(!var_ptr)) {
22516 				zend_cannot_add_element();
22517 				goto assign_dim_op_ret_null;
22518 			}
22519 		} else {
22520 			if (IS_CONST == IS_CONST) {
22521 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
22522 			} else {
22523 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
22524 			}
22525 			if (UNEXPECTED(!var_ptr)) {
22526 				goto assign_dim_op_ret_null;
22527 			}
22528 		}
22529 
22530 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
22531 
22532 		do {
22533 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
22534 				zend_reference *ref = Z_REF_P(var_ptr);
22535 				var_ptr = Z_REFVAL_P(var_ptr);
22536 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22537 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22538 					break;
22539 				}
22540 			}
22541 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
22542 		} while (0);
22543 
22544 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22545 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22546 		}
22547 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
22548 	} else {
22549 		if (EXPECTED(Z_ISREF_P(container))) {
22550 			container = Z_REFVAL_P(container);
22551 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22552 				goto assign_dim_op_array;
22553 			}
22554 		}
22555 
22556 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
22557 			zend_object *obj = Z_OBJ_P(container);
22558 
22559 			dim = RT_CONSTANT(opline, opline->op2);
22560 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
22561 				dim++;
22562 			}
22563 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
22564 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
22565 			zend_uchar old_type;
22566 
22567 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
22568 				ZVAL_UNDEFINED_OP1();
22569 			}
22570 			ht = zend_new_array(8);
22571 			old_type = Z_TYPE_P(container);
22572 			ZVAL_ARR(container, ht);
22573 			if (UNEXPECTED(old_type == IS_FALSE)) {
22574 				GC_ADDREF(ht);
22575 				zend_false_to_array_deprecated();
22576 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
22577 					zend_array_destroy(ht);
22578 					goto assign_dim_op_ret_null;
22579 				}
22580 			}
22581 			goto assign_dim_op_new_array;
22582 		} else {
22583 			dim = RT_CONSTANT(opline, opline->op2);
22584 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
22585 assign_dim_op_ret_null:
22586 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
22587 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22588 				ZVAL_NULL(EX_VAR(opline->result.var));
22589 			}
22590 		}
22591 	}
22592 
22593 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22594 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22595 }
22596 
ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22597 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22598 {
22599 	USE_OPLINE
22600 	zval *var_ptr;
22601 	zval *value;
22602 
22603 	SAVE_OPLINE();
22604 	value = RT_CONSTANT(opline, opline->op2);
22605 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22606 
22607 	do {
22608 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
22609 			zend_reference *ref = Z_REF_P(var_ptr);
22610 			var_ptr = Z_REFVAL_P(var_ptr);
22611 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22612 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22613 				break;
22614 			}
22615 		}
22616 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
22617 	} while (0);
22618 
22619 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22620 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22621 	}
22622 
22623 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22624 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22625 }
22626 
ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22627 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22628 {
22629 	USE_OPLINE
22630 	zval *object;
22631 	zval *property;
22632 	zval *zptr;
22633 	void **cache_slot;
22634 	zend_property_info *prop_info;
22635 	zend_object *zobj;
22636 	zend_string *name, *tmp_name;
22637 
22638 	SAVE_OPLINE();
22639 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22640 	property = RT_CONSTANT(opline, opline->op2);
22641 
22642 	do {
22643 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22644 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22645 				object = Z_REFVAL_P(object);
22646 				goto pre_incdec_object;
22647 			}
22648 			if (IS_VAR == IS_CV
22649 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22650 				ZVAL_UNDEFINED_OP1();
22651 			}
22652 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
22653 			break;
22654 		}
22655 
22656 pre_incdec_object:
22657 		/* here we are sure we are dealing with an object */
22658 		zobj = Z_OBJ_P(object);
22659 		if (IS_CONST == IS_CONST) {
22660 			name = Z_STR_P(property);
22661 		} else {
22662 			name = zval_try_get_tmp_string(property, &tmp_name);
22663 			if (UNEXPECTED(!name)) {
22664 				UNDEF_RESULT();
22665 				break;
22666 			}
22667 		}
22668 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
22669 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
22670 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22671 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22672 					ZVAL_NULL(EX_VAR(opline->result.var));
22673 				}
22674 			} else {
22675 				if (IS_CONST == IS_CONST) {
22676 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
22677 				} else {
22678 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
22679 				}
22680 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
22681 			}
22682 		} else {
22683 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
22684 		}
22685 		if (IS_CONST != IS_CONST) {
22686 			zend_tmp_string_release(tmp_name);
22687 		}
22688 	} while (0);
22689 
22690 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22691 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22692 }
22693 
ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22694 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22695 {
22696 	USE_OPLINE
22697 	zval *object;
22698 	zval *property;
22699 	zval *zptr;
22700 	void **cache_slot;
22701 	zend_property_info *prop_info;
22702 	zend_object *zobj;
22703 	zend_string *name, *tmp_name;
22704 
22705 	SAVE_OPLINE();
22706 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22707 	property = RT_CONSTANT(opline, opline->op2);
22708 
22709 	do {
22710 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22711 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22712 				object = Z_REFVAL_P(object);
22713 				goto post_incdec_object;
22714 			}
22715 			if (IS_VAR == IS_CV
22716 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22717 				ZVAL_UNDEFINED_OP1();
22718 			}
22719 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
22720 			break;
22721 		}
22722 
22723 post_incdec_object:
22724 		/* here we are sure we are dealing with an object */
22725 		zobj = Z_OBJ_P(object);
22726 		if (IS_CONST == IS_CONST) {
22727 			name = Z_STR_P(property);
22728 		} else {
22729 			name = zval_try_get_tmp_string(property, &tmp_name);
22730 			if (UNEXPECTED(!name)) {
22731 				ZVAL_UNDEF(EX_VAR(opline->result.var));
22732 				break;
22733 			}
22734 		}
22735 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
22736 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
22737 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22738 				ZVAL_NULL(EX_VAR(opline->result.var));
22739 			} else {
22740 				if (IS_CONST == IS_CONST) {
22741 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
22742 				} else {
22743 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
22744 				}
22745 
22746 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
22747 			}
22748 		} else {
22749 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
22750 		}
22751 		if (IS_CONST != IS_CONST) {
22752 			zend_tmp_string_release(tmp_name);
22753 		}
22754 	} while (0);
22755 
22756 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22757 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22758 }
22759 
ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22760 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22761 {
22762 	USE_OPLINE
22763 	zval *container;
22764 
22765 	SAVE_OPLINE();
22766 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22767 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22768 
22769 	if (IS_VAR == IS_VAR) {
22770 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22771 	}
22772 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22773 }
22774 
ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22775 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22776 {
22777 	USE_OPLINE
22778 	zval *container;
22779 
22780 	SAVE_OPLINE();
22781 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22782 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22783 
22784 	if (IS_VAR == IS_VAR) {
22785 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22786 	}
22787 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22788 }
22789 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22790 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22791 {
22792 #if 0
22793 	USE_OPLINE
22794 #endif
22795 
22796 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
22797         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
22798 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22799         }
22800 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22801 	} else {
22802 		if (IS_CONST == IS_UNUSED) {
22803 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22804 		}
22805 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22806 	}
22807 }
22808 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22809 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22810 {
22811 	USE_OPLINE
22812 	zval *container;
22813 
22814 	SAVE_OPLINE();
22815 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22816 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22817 
22818 	if (IS_VAR == IS_VAR) {
22819 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22820 	}
22821 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22822 }
22823 
ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22825 {
22826 	USE_OPLINE
22827 	zval *property, *container, *result;
22828 
22829 	SAVE_OPLINE();
22830 
22831 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22832 	property = RT_CONSTANT(opline, opline->op2);
22833 	result = EX_VAR(opline->result.var);
22834 	zend_fetch_property_address(
22835 		result, container, IS_VAR, property, IS_CONST,
22836 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
22837 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC);
22838 
22839 	if (IS_VAR == IS_VAR) {
22840 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22841 	}
22842 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22843 }
22844 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22846 {
22847 	USE_OPLINE
22848 	zval *property, *container, *result;
22849 
22850 	SAVE_OPLINE();
22851 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22852 	property = RT_CONSTANT(opline, opline->op2);
22853 	result = EX_VAR(opline->result.var);
22854 	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);
22855 
22856 	if (IS_VAR == IS_VAR) {
22857 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22858 	}
22859 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22860 }
22861 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22863 {
22864 #if 0
22865 	USE_OPLINE
22866 #endif
22867 
22868 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
22869 		/* Behave like FETCH_OBJ_W */
22870 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
22871 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22872 		}
22873 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22874 	} else {
22875 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22876 	}
22877 }
22878 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22879 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22880 {
22881 	USE_OPLINE
22882 	zval *container, *property, *result;
22883 
22884 	SAVE_OPLINE();
22885 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22886 	property = RT_CONSTANT(opline, opline->op2);
22887 	result = EX_VAR(opline->result.var);
22888 	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);
22889 
22890 	if (IS_VAR == IS_VAR) {
22891 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22892 	}
22893 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22894 }
22895 
ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22896 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22897 {
22898 	USE_OPLINE
22899 	zval *container, *dim;
22900 
22901 	SAVE_OPLINE();
22902 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22903 	dim = RT_CONSTANT(opline, opline->op2);
22904 
22905 	if (IS_VAR == IS_VAR
22906 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
22907 		&& UNEXPECTED(!Z_ISREF_P(container))
22908 	) {
22909 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
22910 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22911 	} else {
22912 		zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22913 	}
22914 
22915 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22916 }
22917 
ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22918 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22919 {
22920 	USE_OPLINE
22921 	zval *object, *value, tmp;
22922 	zend_object *zobj;
22923 	zend_string *name, *tmp_name;
22924 
22925 	SAVE_OPLINE();
22926 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22927 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
22928 
22929 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22930 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22931 			object = Z_REFVAL_P(object);
22932 			goto assign_object;
22933 		}
22934 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
22935 		value = &EG(uninitialized_zval);
22936 		goto free_and_exit_assign_obj;
22937 	}
22938 
22939 assign_object:
22940 	zobj = Z_OBJ_P(object);
22941 	if (IS_CONST == IS_CONST) {
22942 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
22943 			void **cache_slot = CACHE_ADDR(opline->extended_value);
22944 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
22945 			zend_object *zobj = Z_OBJ_P(object);
22946 			zval *property_val;
22947 
22948 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
22949 				property_val = OBJ_PROP(zobj, prop_offset);
22950 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
22951 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
22952 
22953 					if (UNEXPECTED(prop_info != NULL)) {
22954 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
22955 						goto free_and_exit_assign_obj;
22956 					} else {
22957 fast_assign_obj:
22958 						value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
22959 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22960 							ZVAL_COPY(EX_VAR(opline->result.var), value);
22961 						}
22962 						goto exit_assign_obj;
22963 					}
22964 				}
22965 			} else {
22966 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
22967 				if (EXPECTED(zobj->properties != NULL)) {
22968 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
22969 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
22970 							GC_DELREF(zobj->properties);
22971 						}
22972 						zobj->properties = zend_array_dup(zobj->properties);
22973 					}
22974 					property_val = zend_hash_find_known_hash(zobj->properties, name);
22975 					if (property_val) {
22976 						goto fast_assign_obj;
22977 					}
22978 				}
22979 
22980 				if (!zobj->ce->__set) {
22981 					if (EXPECTED(zobj->properties == NULL)) {
22982 						rebuild_object_properties(zobj);
22983 					}
22984 					if (IS_CONST == IS_CONST) {
22985 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
22986 							Z_ADDREF_P(value);
22987 						}
22988 					} else if (IS_CONST != IS_TMP_VAR) {
22989 						if (Z_ISREF_P(value)) {
22990 							if (IS_CONST == IS_VAR) {
22991 								zend_reference *ref = Z_REF_P(value);
22992 								if (GC_DELREF(ref) == 0) {
22993 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
22994 									efree_size(ref, sizeof(zend_reference));
22995 									value = &tmp;
22996 								} else {
22997 									value = Z_REFVAL_P(value);
22998 									Z_TRY_ADDREF_P(value);
22999 								}
23000 							} else {
23001 								value = Z_REFVAL_P(value);
23002 								Z_TRY_ADDREF_P(value);
23003 							}
23004 						} else if (IS_CONST == IS_CV) {
23005 							Z_TRY_ADDREF_P(value);
23006 						}
23007 						}
23008 					zend_hash_add_new(zobj->properties, name, value);
23009 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23010 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23011 					}
23012 					goto exit_assign_obj;
23013 				}
23014 			}
23015 		}
23016 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23017 	} else {
23018 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23019 		if (UNEXPECTED(!name)) {
23020 
23021 			UNDEF_RESULT();
23022 			goto exit_assign_obj;
23023 		}
23024 	}
23025 
23026 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
23027 		ZVAL_DEREF(value);
23028 	}
23029 
23030 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23031 
23032 	if (IS_CONST != IS_CONST) {
23033 		zend_tmp_string_release(tmp_name);
23034 	}
23035 
23036 free_and_exit_assign_obj:
23037 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23038 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23039 	}
23040 
23041 exit_assign_obj:
23042 
23043 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23044 	/* assign_obj has two opcodes! */
23045 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23046 }
23047 
23048 /* 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)23049 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23050 {
23051 	USE_OPLINE
23052 	zval *object, *value, tmp;
23053 	zend_object *zobj;
23054 	zend_string *name, *tmp_name;
23055 
23056 	SAVE_OPLINE();
23057 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23058 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23059 
23060 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23061 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23062 			object = Z_REFVAL_P(object);
23063 			goto assign_object;
23064 		}
23065 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23066 		value = &EG(uninitialized_zval);
23067 		goto free_and_exit_assign_obj;
23068 	}
23069 
23070 assign_object:
23071 	zobj = Z_OBJ_P(object);
23072 	if (IS_CONST == IS_CONST) {
23073 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23074 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23075 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23076 			zend_object *zobj = Z_OBJ_P(object);
23077 			zval *property_val;
23078 
23079 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23080 				property_val = OBJ_PROP(zobj, prop_offset);
23081 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23082 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23083 
23084 					if (UNEXPECTED(prop_info != NULL)) {
23085 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
23086 						goto free_and_exit_assign_obj;
23087 					} else {
23088 fast_assign_obj:
23089 						value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
23090 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23091 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23092 						}
23093 						goto exit_assign_obj;
23094 					}
23095 				}
23096 			} else {
23097 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23098 				if (EXPECTED(zobj->properties != NULL)) {
23099 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23100 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23101 							GC_DELREF(zobj->properties);
23102 						}
23103 						zobj->properties = zend_array_dup(zobj->properties);
23104 					}
23105 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23106 					if (property_val) {
23107 						goto fast_assign_obj;
23108 					}
23109 				}
23110 
23111 				if (!zobj->ce->__set) {
23112 					if (EXPECTED(zobj->properties == NULL)) {
23113 						rebuild_object_properties(zobj);
23114 					}
23115 					if (IS_TMP_VAR == IS_CONST) {
23116 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23117 							Z_ADDREF_P(value);
23118 						}
23119 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
23120 						if (Z_ISREF_P(value)) {
23121 							if (IS_TMP_VAR == IS_VAR) {
23122 								zend_reference *ref = Z_REF_P(value);
23123 								if (GC_DELREF(ref) == 0) {
23124 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23125 									efree_size(ref, sizeof(zend_reference));
23126 									value = &tmp;
23127 								} else {
23128 									value = Z_REFVAL_P(value);
23129 									Z_TRY_ADDREF_P(value);
23130 								}
23131 							} else {
23132 								value = Z_REFVAL_P(value);
23133 								Z_TRY_ADDREF_P(value);
23134 							}
23135 						} else if (IS_TMP_VAR == IS_CV) {
23136 							Z_TRY_ADDREF_P(value);
23137 						}
23138 						}
23139 					zend_hash_add_new(zobj->properties, name, value);
23140 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23141 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23142 					}
23143 					goto exit_assign_obj;
23144 				}
23145 			}
23146 		}
23147 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23148 	} else {
23149 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23150 		if (UNEXPECTED(!name)) {
23151 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23152 			UNDEF_RESULT();
23153 			goto exit_assign_obj;
23154 		}
23155 	}
23156 
23157 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
23158 		ZVAL_DEREF(value);
23159 	}
23160 
23161 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23162 
23163 	if (IS_CONST != IS_CONST) {
23164 		zend_tmp_string_release(tmp_name);
23165 	}
23166 
23167 free_and_exit_assign_obj:
23168 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23169 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23170 	}
23171 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23172 exit_assign_obj:
23173 
23174 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23175 	/* assign_obj has two opcodes! */
23176 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23177 }
23178 
23179 /* 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)23180 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23181 {
23182 	USE_OPLINE
23183 	zval *object, *value, tmp;
23184 	zend_object *zobj;
23185 	zend_string *name, *tmp_name;
23186 
23187 	SAVE_OPLINE();
23188 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23189 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23190 
23191 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23192 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23193 			object = Z_REFVAL_P(object);
23194 			goto assign_object;
23195 		}
23196 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23197 		value = &EG(uninitialized_zval);
23198 		goto free_and_exit_assign_obj;
23199 	}
23200 
23201 assign_object:
23202 	zobj = Z_OBJ_P(object);
23203 	if (IS_CONST == IS_CONST) {
23204 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23205 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23206 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23207 			zend_object *zobj = Z_OBJ_P(object);
23208 			zval *property_val;
23209 
23210 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23211 				property_val = OBJ_PROP(zobj, prop_offset);
23212 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23213 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23214 
23215 					if (UNEXPECTED(prop_info != NULL)) {
23216 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
23217 						goto free_and_exit_assign_obj;
23218 					} else {
23219 fast_assign_obj:
23220 						value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
23221 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23222 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23223 						}
23224 						goto exit_assign_obj;
23225 					}
23226 				}
23227 			} else {
23228 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23229 				if (EXPECTED(zobj->properties != NULL)) {
23230 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23231 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23232 							GC_DELREF(zobj->properties);
23233 						}
23234 						zobj->properties = zend_array_dup(zobj->properties);
23235 					}
23236 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23237 					if (property_val) {
23238 						goto fast_assign_obj;
23239 					}
23240 				}
23241 
23242 				if (!zobj->ce->__set) {
23243 					if (EXPECTED(zobj->properties == NULL)) {
23244 						rebuild_object_properties(zobj);
23245 					}
23246 					if (IS_VAR == IS_CONST) {
23247 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23248 							Z_ADDREF_P(value);
23249 						}
23250 					} else if (IS_VAR != IS_TMP_VAR) {
23251 						if (Z_ISREF_P(value)) {
23252 							if (IS_VAR == IS_VAR) {
23253 								zend_reference *ref = Z_REF_P(value);
23254 								if (GC_DELREF(ref) == 0) {
23255 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23256 									efree_size(ref, sizeof(zend_reference));
23257 									value = &tmp;
23258 								} else {
23259 									value = Z_REFVAL_P(value);
23260 									Z_TRY_ADDREF_P(value);
23261 								}
23262 							} else {
23263 								value = Z_REFVAL_P(value);
23264 								Z_TRY_ADDREF_P(value);
23265 							}
23266 						} else if (IS_VAR == IS_CV) {
23267 							Z_TRY_ADDREF_P(value);
23268 						}
23269 						}
23270 					zend_hash_add_new(zobj->properties, name, value);
23271 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23272 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23273 					}
23274 					goto exit_assign_obj;
23275 				}
23276 			}
23277 		}
23278 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23279 	} else {
23280 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23281 		if (UNEXPECTED(!name)) {
23282 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23283 			UNDEF_RESULT();
23284 			goto exit_assign_obj;
23285 		}
23286 	}
23287 
23288 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
23289 		ZVAL_DEREF(value);
23290 	}
23291 
23292 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23293 
23294 	if (IS_CONST != IS_CONST) {
23295 		zend_tmp_string_release(tmp_name);
23296 	}
23297 
23298 free_and_exit_assign_obj:
23299 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23300 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23301 	}
23302 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23303 exit_assign_obj:
23304 
23305 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23306 	/* assign_obj has two opcodes! */
23307 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23308 }
23309 
23310 /* 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)23311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23312 {
23313 	USE_OPLINE
23314 	zval *object, *value, tmp;
23315 	zend_object *zobj;
23316 	zend_string *name, *tmp_name;
23317 
23318 	SAVE_OPLINE();
23319 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23320 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
23321 
23322 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23323 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23324 			object = Z_REFVAL_P(object);
23325 			goto assign_object;
23326 		}
23327 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23328 		value = &EG(uninitialized_zval);
23329 		goto free_and_exit_assign_obj;
23330 	}
23331 
23332 assign_object:
23333 	zobj = Z_OBJ_P(object);
23334 	if (IS_CONST == IS_CONST) {
23335 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23336 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23337 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23338 			zend_object *zobj = Z_OBJ_P(object);
23339 			zval *property_val;
23340 
23341 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23342 				property_val = OBJ_PROP(zobj, prop_offset);
23343 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23344 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23345 
23346 					if (UNEXPECTED(prop_info != NULL)) {
23347 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
23348 						goto free_and_exit_assign_obj;
23349 					} else {
23350 fast_assign_obj:
23351 						value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
23352 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23353 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23354 						}
23355 						goto exit_assign_obj;
23356 					}
23357 				}
23358 			} else {
23359 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23360 				if (EXPECTED(zobj->properties != NULL)) {
23361 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23362 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23363 							GC_DELREF(zobj->properties);
23364 						}
23365 						zobj->properties = zend_array_dup(zobj->properties);
23366 					}
23367 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23368 					if (property_val) {
23369 						goto fast_assign_obj;
23370 					}
23371 				}
23372 
23373 				if (!zobj->ce->__set) {
23374 					if (EXPECTED(zobj->properties == NULL)) {
23375 						rebuild_object_properties(zobj);
23376 					}
23377 					if (IS_CV == IS_CONST) {
23378 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23379 							Z_ADDREF_P(value);
23380 						}
23381 					} else if (IS_CV != IS_TMP_VAR) {
23382 						if (Z_ISREF_P(value)) {
23383 							if (IS_CV == IS_VAR) {
23384 								zend_reference *ref = Z_REF_P(value);
23385 								if (GC_DELREF(ref) == 0) {
23386 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23387 									efree_size(ref, sizeof(zend_reference));
23388 									value = &tmp;
23389 								} else {
23390 									value = Z_REFVAL_P(value);
23391 									Z_TRY_ADDREF_P(value);
23392 								}
23393 							} else {
23394 								value = Z_REFVAL_P(value);
23395 								Z_TRY_ADDREF_P(value);
23396 							}
23397 						} else if (IS_CV == IS_CV) {
23398 							Z_TRY_ADDREF_P(value);
23399 						}
23400 						}
23401 					zend_hash_add_new(zobj->properties, name, value);
23402 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23403 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23404 					}
23405 					goto exit_assign_obj;
23406 				}
23407 			}
23408 		}
23409 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23410 	} else {
23411 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23412 		if (UNEXPECTED(!name)) {
23413 
23414 			UNDEF_RESULT();
23415 			goto exit_assign_obj;
23416 		}
23417 	}
23418 
23419 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
23420 		ZVAL_DEREF(value);
23421 	}
23422 
23423 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23424 
23425 	if (IS_CONST != IS_CONST) {
23426 		zend_tmp_string_release(tmp_name);
23427 	}
23428 
23429 free_and_exit_assign_obj:
23430 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23431 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23432 	}
23433 
23434 exit_assign_obj:
23435 
23436 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23437 	/* assign_obj has two opcodes! */
23438 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23439 }
23440 
23441 /* 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)23442 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23443 {
23444 	USE_OPLINE
23445 	zval *object_ptr, *orig_object_ptr;
23446 	zval *value;
23447 	zval *variable_ptr;
23448 	zval *dim;
23449 
23450 	SAVE_OPLINE();
23451 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23452 
23453 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23454 try_assign_dim_array:
23455 		SEPARATE_ARRAY(object_ptr);
23456 		if (IS_CONST == IS_UNUSED) {
23457 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23458 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23459 				HashTable *ht = Z_ARRVAL_P(object_ptr);
23460 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
23461 					GC_ADDREF(ht);
23462 				}
23463 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23464 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
23465 					zend_array_destroy(ht);
23466 					goto assign_dim_error;
23467 				}
23468 			}
23469 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
23470 				ZVAL_DEREF(value);
23471 			}
23472 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23473 			if (UNEXPECTED(value == NULL)) {
23474 				zend_cannot_add_element();
23475 				goto assign_dim_error;
23476 			} else if (IS_CONST == IS_CV) {
23477 				if (Z_REFCOUNTED_P(value)) {
23478 					Z_ADDREF_P(value);
23479 				}
23480 			} else if (IS_CONST == IS_VAR) {
23481 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
23482 				if (Z_ISREF_P(free_op_data)) {
23483 					if (Z_REFCOUNTED_P(value)) {
23484 						Z_ADDREF_P(value);
23485 					}
23486 					zval_ptr_dtor_nogc(free_op_data);
23487 				}
23488 			} else if (IS_CONST == IS_CONST) {
23489 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23490 					Z_ADDREF_P(value);
23491 				}
23492 			}
23493 		} else {
23494 			dim = RT_CONSTANT(opline, opline->op2);
23495 			if (IS_CONST == IS_CONST) {
23496 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23497 			} else {
23498 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23499 			}
23500 			if (UNEXPECTED(variable_ptr == NULL)) {
23501 				goto assign_dim_error;
23502 			}
23503 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23504 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
23505 		}
23506 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23507 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23508 		}
23509 	} else {
23510 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23511 			object_ptr = Z_REFVAL_P(object_ptr);
23512 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23513 				goto try_assign_dim_array;
23514 			}
23515 		}
23516 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23517 			zend_object *obj = Z_OBJ_P(object_ptr);
23518 
23519 			GC_ADDREF(obj);
23520 			dim = RT_CONSTANT(opline, opline->op2);
23521 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
23522 				dim = ZVAL_UNDEFINED_OP2();
23523 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23524 				dim++;
23525 			}
23526 
23527 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23528 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
23529 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23530 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
23531 				ZVAL_DEREF(value);
23532 			}
23533 
23534 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
23535 
23536 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
23537 				zend_objects_store_del(obj);
23538 			}
23539 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23540 			if (IS_CONST == IS_UNUSED) {
23541 				zend_use_new_element_for_string();
23542 
23543 				UNDEF_RESULT();
23544 			} else {
23545 				dim = RT_CONSTANT(opline, opline->op2);
23546 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
23547 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23548 
23549 			}
23550 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23551 			if (Z_ISREF_P(orig_object_ptr)
23552 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23553 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23554 				dim = RT_CONSTANT(opline, opline->op2);
23555 
23556 				UNDEF_RESULT();
23557 			} else {
23558 				HashTable *ht = zend_new_array(8);
23559 				zend_uchar old_type = Z_TYPE_P(object_ptr);
23560 
23561 				ZVAL_ARR(object_ptr, ht);
23562 				if (UNEXPECTED(old_type == IS_FALSE)) {
23563 					GC_ADDREF(ht);
23564 					zend_false_to_array_deprecated();
23565 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
23566 						zend_array_destroy(ht);
23567 						goto assign_dim_error;
23568 					}
23569 				}
23570 				goto try_assign_dim_array;
23571 			}
23572 		} else {
23573 			zend_use_scalar_as_array();
23574 			dim = RT_CONSTANT(opline, opline->op2);
23575 assign_dim_error:
23576 
23577 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23578 				ZVAL_NULL(EX_VAR(opline->result.var));
23579 			}
23580 		}
23581 	}
23582 	if (IS_CONST != IS_UNUSED) {
23583 
23584 	}
23585 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23586 	/* assign_dim has two opcodes! */
23587 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23588 }
23589 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23590 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23591 {
23592 	USE_OPLINE
23593 	zval *object_ptr, *orig_object_ptr;
23594 	zval *value;
23595 	zval *variable_ptr;
23596 	zval *dim;
23597 
23598 	SAVE_OPLINE();
23599 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23600 
23601 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23602 try_assign_dim_array:
23603 		SEPARATE_ARRAY(object_ptr);
23604 		if (IS_CONST == IS_UNUSED) {
23605 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23606 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23607 				HashTable *ht = Z_ARRVAL_P(object_ptr);
23608 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
23609 					GC_ADDREF(ht);
23610 				}
23611 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23612 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
23613 					zend_array_destroy(ht);
23614 					goto assign_dim_error;
23615 				}
23616 			}
23617 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
23618 				ZVAL_DEREF(value);
23619 			}
23620 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23621 			if (UNEXPECTED(value == NULL)) {
23622 				zend_cannot_add_element();
23623 				goto assign_dim_error;
23624 			} else if (IS_TMP_VAR == IS_CV) {
23625 				if (Z_REFCOUNTED_P(value)) {
23626 					Z_ADDREF_P(value);
23627 				}
23628 			} else if (IS_TMP_VAR == IS_VAR) {
23629 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
23630 				if (Z_ISREF_P(free_op_data)) {
23631 					if (Z_REFCOUNTED_P(value)) {
23632 						Z_ADDREF_P(value);
23633 					}
23634 					zval_ptr_dtor_nogc(free_op_data);
23635 				}
23636 			} else if (IS_TMP_VAR == IS_CONST) {
23637 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23638 					Z_ADDREF_P(value);
23639 				}
23640 			}
23641 		} else {
23642 			dim = RT_CONSTANT(opline, opline->op2);
23643 			if (IS_CONST == IS_CONST) {
23644 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23645 			} else {
23646 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23647 			}
23648 			if (UNEXPECTED(variable_ptr == NULL)) {
23649 				goto assign_dim_error;
23650 			}
23651 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23652 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
23653 		}
23654 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23655 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23656 		}
23657 	} else {
23658 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23659 			object_ptr = Z_REFVAL_P(object_ptr);
23660 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23661 				goto try_assign_dim_array;
23662 			}
23663 		}
23664 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23665 			zend_object *obj = Z_OBJ_P(object_ptr);
23666 
23667 			GC_ADDREF(obj);
23668 			dim = RT_CONSTANT(opline, opline->op2);
23669 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
23670 				dim = ZVAL_UNDEFINED_OP2();
23671 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23672 				dim++;
23673 			}
23674 
23675 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23676 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
23677 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23678 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
23679 				ZVAL_DEREF(value);
23680 			}
23681 
23682 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
23683 
23684 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23685 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
23686 				zend_objects_store_del(obj);
23687 			}
23688 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23689 			if (IS_CONST == IS_UNUSED) {
23690 				zend_use_new_element_for_string();
23691 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23692 				UNDEF_RESULT();
23693 			} else {
23694 				dim = RT_CONSTANT(opline, opline->op2);
23695 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23696 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23697 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23698 			}
23699 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23700 			if (Z_ISREF_P(orig_object_ptr)
23701 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23702 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23703 				dim = RT_CONSTANT(opline, opline->op2);
23704 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23705 				UNDEF_RESULT();
23706 			} else {
23707 				HashTable *ht = zend_new_array(8);
23708 				zend_uchar old_type = Z_TYPE_P(object_ptr);
23709 
23710 				ZVAL_ARR(object_ptr, ht);
23711 				if (UNEXPECTED(old_type == IS_FALSE)) {
23712 					GC_ADDREF(ht);
23713 					zend_false_to_array_deprecated();
23714 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
23715 						zend_array_destroy(ht);
23716 						goto assign_dim_error;
23717 					}
23718 				}
23719 				goto try_assign_dim_array;
23720 			}
23721 		} else {
23722 			zend_use_scalar_as_array();
23723 			dim = RT_CONSTANT(opline, opline->op2);
23724 assign_dim_error:
23725 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23726 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23727 				ZVAL_NULL(EX_VAR(opline->result.var));
23728 			}
23729 		}
23730 	}
23731 	if (IS_CONST != IS_UNUSED) {
23732 
23733 	}
23734 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23735 	/* assign_dim has two opcodes! */
23736 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23737 }
23738 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23739 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23740 {
23741 	USE_OPLINE
23742 	zval *object_ptr, *orig_object_ptr;
23743 	zval *value;
23744 	zval *variable_ptr;
23745 	zval *dim;
23746 
23747 	SAVE_OPLINE();
23748 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23749 
23750 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23751 try_assign_dim_array:
23752 		SEPARATE_ARRAY(object_ptr);
23753 		if (IS_CONST == IS_UNUSED) {
23754 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23755 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23756 				HashTable *ht = Z_ARRVAL_P(object_ptr);
23757 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
23758 					GC_ADDREF(ht);
23759 				}
23760 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23761 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
23762 					zend_array_destroy(ht);
23763 					goto assign_dim_error;
23764 				}
23765 			}
23766 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
23767 				ZVAL_DEREF(value);
23768 			}
23769 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23770 			if (UNEXPECTED(value == NULL)) {
23771 				zend_cannot_add_element();
23772 				goto assign_dim_error;
23773 			} else if (IS_VAR == IS_CV) {
23774 				if (Z_REFCOUNTED_P(value)) {
23775 					Z_ADDREF_P(value);
23776 				}
23777 			} else if (IS_VAR == IS_VAR) {
23778 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
23779 				if (Z_ISREF_P(free_op_data)) {
23780 					if (Z_REFCOUNTED_P(value)) {
23781 						Z_ADDREF_P(value);
23782 					}
23783 					zval_ptr_dtor_nogc(free_op_data);
23784 				}
23785 			} else if (IS_VAR == IS_CONST) {
23786 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23787 					Z_ADDREF_P(value);
23788 				}
23789 			}
23790 		} else {
23791 			dim = RT_CONSTANT(opline, opline->op2);
23792 			if (IS_CONST == IS_CONST) {
23793 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23794 			} else {
23795 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23796 			}
23797 			if (UNEXPECTED(variable_ptr == NULL)) {
23798 				goto assign_dim_error;
23799 			}
23800 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23801 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
23802 		}
23803 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23804 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23805 		}
23806 	} else {
23807 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23808 			object_ptr = Z_REFVAL_P(object_ptr);
23809 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23810 				goto try_assign_dim_array;
23811 			}
23812 		}
23813 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23814 			zend_object *obj = Z_OBJ_P(object_ptr);
23815 
23816 			GC_ADDREF(obj);
23817 			dim = RT_CONSTANT(opline, opline->op2);
23818 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
23819 				dim = ZVAL_UNDEFINED_OP2();
23820 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23821 				dim++;
23822 			}
23823 
23824 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23825 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
23826 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23827 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
23828 				ZVAL_DEREF(value);
23829 			}
23830 
23831 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
23832 
23833 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23834 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
23835 				zend_objects_store_del(obj);
23836 			}
23837 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23838 			if (IS_CONST == IS_UNUSED) {
23839 				zend_use_new_element_for_string();
23840 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23841 				UNDEF_RESULT();
23842 			} else {
23843 				dim = RT_CONSTANT(opline, opline->op2);
23844 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23845 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23846 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23847 			}
23848 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23849 			if (Z_ISREF_P(orig_object_ptr)
23850 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23851 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23852 				dim = RT_CONSTANT(opline, opline->op2);
23853 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23854 				UNDEF_RESULT();
23855 			} else {
23856 				HashTable *ht = zend_new_array(8);
23857 				zend_uchar old_type = Z_TYPE_P(object_ptr);
23858 
23859 				ZVAL_ARR(object_ptr, ht);
23860 				if (UNEXPECTED(old_type == IS_FALSE)) {
23861 					GC_ADDREF(ht);
23862 					zend_false_to_array_deprecated();
23863 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
23864 						zend_array_destroy(ht);
23865 						goto assign_dim_error;
23866 					}
23867 				}
23868 				goto try_assign_dim_array;
23869 			}
23870 		} else {
23871 			zend_use_scalar_as_array();
23872 			dim = RT_CONSTANT(opline, opline->op2);
23873 assign_dim_error:
23874 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23875 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23876 				ZVAL_NULL(EX_VAR(opline->result.var));
23877 			}
23878 		}
23879 	}
23880 	if (IS_CONST != IS_UNUSED) {
23881 
23882 	}
23883 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23884 	/* assign_dim has two opcodes! */
23885 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23886 }
23887 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23888 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23889 {
23890 	USE_OPLINE
23891 	zval *object_ptr, *orig_object_ptr;
23892 	zval *value;
23893 	zval *variable_ptr;
23894 	zval *dim;
23895 
23896 	SAVE_OPLINE();
23897 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23898 
23899 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23900 try_assign_dim_array:
23901 		SEPARATE_ARRAY(object_ptr);
23902 		if (IS_CONST == IS_UNUSED) {
23903 			value = EX_VAR((opline+1)->op1.var);
23904 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23905 				HashTable *ht = Z_ARRVAL_P(object_ptr);
23906 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
23907 					GC_ADDREF(ht);
23908 				}
23909 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23910 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
23911 					zend_array_destroy(ht);
23912 					goto assign_dim_error;
23913 				}
23914 			}
23915 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
23916 				ZVAL_DEREF(value);
23917 			}
23918 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23919 			if (UNEXPECTED(value == NULL)) {
23920 				zend_cannot_add_element();
23921 				goto assign_dim_error;
23922 			} else if (IS_CV == IS_CV) {
23923 				if (Z_REFCOUNTED_P(value)) {
23924 					Z_ADDREF_P(value);
23925 				}
23926 			} else if (IS_CV == IS_VAR) {
23927 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
23928 				if (Z_ISREF_P(free_op_data)) {
23929 					if (Z_REFCOUNTED_P(value)) {
23930 						Z_ADDREF_P(value);
23931 					}
23932 					zval_ptr_dtor_nogc(free_op_data);
23933 				}
23934 			} else if (IS_CV == IS_CONST) {
23935 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23936 					Z_ADDREF_P(value);
23937 				}
23938 			}
23939 		} else {
23940 			dim = RT_CONSTANT(opline, opline->op2);
23941 			if (IS_CONST == IS_CONST) {
23942 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23943 			} else {
23944 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23945 			}
23946 			if (UNEXPECTED(variable_ptr == NULL)) {
23947 				goto assign_dim_error;
23948 			}
23949 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
23950 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
23951 		}
23952 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23953 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23954 		}
23955 	} else {
23956 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23957 			object_ptr = Z_REFVAL_P(object_ptr);
23958 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23959 				goto try_assign_dim_array;
23960 			}
23961 		}
23962 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23963 			zend_object *obj = Z_OBJ_P(object_ptr);
23964 
23965 			GC_ADDREF(obj);
23966 			dim = RT_CONSTANT(opline, opline->op2);
23967 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
23968 				dim = ZVAL_UNDEFINED_OP2();
23969 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23970 				dim++;
23971 			}
23972 
23973 			value = EX_VAR((opline+1)->op1.var);
23974 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
23975 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23976 			} else if (IS_CV & (IS_CV|IS_VAR)) {
23977 				ZVAL_DEREF(value);
23978 			}
23979 
23980 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
23981 
23982 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
23983 				zend_objects_store_del(obj);
23984 			}
23985 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23986 			if (IS_CONST == IS_UNUSED) {
23987 				zend_use_new_element_for_string();
23988 
23989 				UNDEF_RESULT();
23990 			} else {
23991 				dim = RT_CONSTANT(opline, opline->op2);
23992 				value = EX_VAR((opline+1)->op1.var);
23993 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23994 
23995 			}
23996 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23997 			if (Z_ISREF_P(orig_object_ptr)
23998 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23999 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
24000 				dim = RT_CONSTANT(opline, opline->op2);
24001 
24002 				UNDEF_RESULT();
24003 			} else {
24004 				HashTable *ht = zend_new_array(8);
24005 				zend_uchar old_type = Z_TYPE_P(object_ptr);
24006 
24007 				ZVAL_ARR(object_ptr, ht);
24008 				if (UNEXPECTED(old_type == IS_FALSE)) {
24009 					GC_ADDREF(ht);
24010 					zend_false_to_array_deprecated();
24011 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
24012 						zend_array_destroy(ht);
24013 						goto assign_dim_error;
24014 					}
24015 				}
24016 				goto try_assign_dim_array;
24017 			}
24018 		} else {
24019 			zend_use_scalar_as_array();
24020 			dim = RT_CONSTANT(opline, opline->op2);
24021 assign_dim_error:
24022 
24023 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24024 				ZVAL_NULL(EX_VAR(opline->result.var));
24025 			}
24026 		}
24027 	}
24028 	if (IS_CONST != IS_UNUSED) {
24029 
24030 	}
24031 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24032 	/* assign_dim has two opcodes! */
24033 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24034 }
24035 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24036 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24037 {
24038 	USE_OPLINE
24039 	zval *value;
24040 	zval *variable_ptr;
24041 
24042 	SAVE_OPLINE();
24043 	value = RT_CONSTANT(opline, opline->op2);
24044 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24045 
24046 	value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
24047 	if (UNEXPECTED(0)) {
24048 		ZVAL_COPY(EX_VAR(opline->result.var), value);
24049 	}
24050 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24051 	/* zend_assign_to_variable() always takes care of op2, never free it! */
24052 
24053 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24054 }
24055 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24056 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24057 {
24058 	USE_OPLINE
24059 	zval *value;
24060 	zval *variable_ptr;
24061 
24062 	SAVE_OPLINE();
24063 	value = RT_CONSTANT(opline, opline->op2);
24064 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24065 
24066 	value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
24067 	if (UNEXPECTED(1)) {
24068 		ZVAL_COPY(EX_VAR(opline->result.var), value);
24069 	}
24070 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24071 	/* zend_assign_to_variable() always takes care of op2, never free it! */
24072 
24073 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24074 }
24075 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24077 {
24078 	USE_OPLINE
24079 	zval *property, *container, *value_ptr;
24080 
24081 	SAVE_OPLINE();
24082 
24083 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24084 	property = RT_CONSTANT(opline, opline->op2);
24085 
24086 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24087 
24088 	if (1) {
24089 		if (IS_VAR == IS_UNUSED) {
24090 			if (IS_CONST == IS_CONST) {
24091 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24092 			} else {
24093 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24094 			}
24095 		} else {
24096 			if (IS_CONST == IS_CONST) {
24097 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24098 			} else {
24099 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24100 			}
24101 		}
24102 	} else {
24103 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24104 	}
24105 
24106 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24107 
24108 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
24109 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24110 }
24111 
24112 /* 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)24113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24114 {
24115 	USE_OPLINE
24116 	zval *property, *container, *value_ptr;
24117 
24118 	SAVE_OPLINE();
24119 
24120 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24121 	property = RT_CONSTANT(opline, opline->op2);
24122 
24123 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
24124 
24125 	if (1) {
24126 		if (IS_VAR == IS_UNUSED) {
24127 			if (IS_CONST == IS_CONST) {
24128 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24129 			} else {
24130 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24131 			}
24132 		} else {
24133 			if (IS_CONST == IS_CONST) {
24134 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24135 			} else {
24136 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24137 			}
24138 		}
24139 	} else {
24140 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24141 	}
24142 
24143 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24144 
24145 
24146 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24147 }
24148 
24149 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24150 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24151 {
24152 	USE_OPLINE
24153 	zval *function_name;
24154 	zend_class_entry *ce;
24155 	uint32_t call_info;
24156 	zend_function *fbc;
24157 	zend_execute_data *call;
24158 
24159 	SAVE_OPLINE();
24160 
24161 	if (IS_VAR == IS_CONST) {
24162 		/* no function found. try a static method in class */
24163 		ce = CACHED_PTR(opline->result.num);
24164 		if (UNEXPECTED(ce == NULL)) {
24165 			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);
24166 			if (UNEXPECTED(ce == NULL)) {
24167 
24168 				HANDLE_EXCEPTION();
24169 			}
24170 			if (IS_CONST != IS_CONST) {
24171 				CACHE_PTR(opline->result.num, ce);
24172 			}
24173 		}
24174 	} else if (IS_VAR == IS_UNUSED) {
24175 		ce = zend_fetch_class(NULL, opline->op1.num);
24176 		if (UNEXPECTED(ce == NULL)) {
24177 
24178 			HANDLE_EXCEPTION();
24179 		}
24180 	} else {
24181 		ce = Z_CE_P(EX_VAR(opline->op1.var));
24182 	}
24183 
24184 	if (IS_VAR == IS_CONST &&
24185 	    IS_CONST == IS_CONST &&
24186 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
24187 		/* nothing to do */
24188 	} else if (IS_VAR != IS_CONST &&
24189 	           IS_CONST == IS_CONST &&
24190 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
24191 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
24192 	} else if (IS_CONST != IS_UNUSED) {
24193 		function_name = RT_CONSTANT(opline, opline->op2);
24194 		if (IS_CONST != IS_CONST) {
24195 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
24196 				do {
24197 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
24198 						function_name = Z_REFVAL_P(function_name);
24199 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
24200 							break;
24201 						}
24202 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
24203 						ZVAL_UNDEFINED_OP2();
24204 						if (UNEXPECTED(EG(exception) != NULL)) {
24205 							HANDLE_EXCEPTION();
24206 						}
24207 					}
24208 					zend_throw_error(NULL, "Method name must be a string");
24209 
24210 					HANDLE_EXCEPTION();
24211 				} while (0);
24212 			}
24213 		}
24214 
24215 		if (ce->get_static_method) {
24216 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
24217 		} else {
24218 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
24219 		}
24220 		if (UNEXPECTED(fbc == NULL)) {
24221 			if (EXPECTED(!EG(exception))) {
24222 				zend_undefined_method(ce, Z_STR_P(function_name));
24223 			}
24224 
24225 			HANDLE_EXCEPTION();
24226 		}
24227 		if (IS_CONST == IS_CONST &&
24228 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
24229 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
24230 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
24231 		}
24232 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
24233 			init_func_run_time_cache(&fbc->op_array);
24234 		}
24235 		if (IS_CONST != IS_CONST) {
24236 
24237 		}
24238 	} else {
24239 		if (UNEXPECTED(ce->constructor == NULL)) {
24240 			zend_throw_error(NULL, "Cannot call constructor");
24241 			HANDLE_EXCEPTION();
24242 		}
24243 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
24244 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
24245 			HANDLE_EXCEPTION();
24246 		}
24247 		fbc = ce->constructor;
24248 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
24249 			init_func_run_time_cache(&fbc->op_array);
24250 		}
24251 	}
24252 
24253 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
24254 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
24255 			ce = (zend_class_entry*)Z_OBJ(EX(This));
24256 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
24257 		} else {
24258 			zend_non_static_method_call(fbc);
24259 			HANDLE_EXCEPTION();
24260 		}
24261 	} else {
24262 		/* previous opcode is ZEND_FETCH_CLASS */
24263 		if (IS_VAR == IS_UNUSED
24264 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
24265 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
24266 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
24267 				ce = Z_OBJCE(EX(This));
24268 			} else {
24269 				ce = Z_CE(EX(This));
24270 			}
24271 		}
24272 		call_info = ZEND_CALL_NESTED_FUNCTION;
24273 	}
24274 
24275 	call = zend_vm_stack_push_call_frame(call_info,
24276 		fbc, opline->extended_value, ce);
24277 	call->prev_execute_data = EX(call);
24278 	EX(call) = call;
24279 
24280 	ZEND_VM_NEXT_OPCODE();
24281 }
24282 
ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24283 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24284 {
24285 	USE_OPLINE
24286 	zval *varptr, *arg;
24287 
24288 	if (IS_CONST == IS_CONST) {
24289 		SAVE_OPLINE();
24290 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24291 		uint32_t arg_num;
24292 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24293 		if (UNEXPECTED(!arg)) {
24294 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24295 			HANDLE_EXCEPTION();
24296 		}
24297 	} else {
24298 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24299 	}
24300 
24301 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24302 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
24303 		SAVE_OPLINE();
24304 		ZVAL_UNDEFINED_OP1();
24305 		ZVAL_NULL(arg);
24306 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24307 	}
24308 
24309 	if (IS_VAR == IS_CV) {
24310 		ZVAL_COPY_DEREF(arg, varptr);
24311 	} else /* if (IS_VAR == IS_VAR) */ {
24312 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
24313 			zend_refcounted *ref = Z_COUNTED_P(varptr);
24314 
24315 			varptr = Z_REFVAL_P(varptr);
24316 			ZVAL_COPY_VALUE(arg, varptr);
24317 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24318 				efree_size(ref, sizeof(zend_reference));
24319 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
24320 				Z_ADDREF_P(arg);
24321 			}
24322 		} else {
24323 			ZVAL_COPY_VALUE(arg, varptr);
24324 		}
24325 	}
24326 
24327 	ZEND_VM_NEXT_OPCODE();
24328 }
24329 
ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24330 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24331 {
24332 	USE_OPLINE
24333 	zval *varptr, *arg;
24334 
24335 	if (IS_CONST == IS_CONST) {
24336 		SAVE_OPLINE();
24337 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24338 		uint32_t arg_num;
24339 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24340 		if (UNEXPECTED(!arg)) {
24341 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24342 			HANDLE_EXCEPTION();
24343 		}
24344 	} else {
24345 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24346 	}
24347 
24348 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24349 	ZVAL_COPY_VALUE(arg, varptr);
24350 
24351 	if (EXPECTED(Z_ISREF_P(varptr))) {
24352 		ZEND_VM_NEXT_OPCODE();
24353 	}
24354 
24355 	SAVE_OPLINE();
24356 	ZVAL_NEW_REF(arg, arg);
24357 	zend_error(E_NOTICE, "Only variables should be passed by reference");
24358 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24359 }
24360 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24361 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24362 {
24363 	USE_OPLINE
24364 	zval *varptr, *arg;
24365 	uint32_t arg_num;
24366 
24367 	if (IS_CONST == IS_CONST) {
24368 		SAVE_OPLINE();
24369 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24370 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24371 		if (UNEXPECTED(!arg)) {
24372 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24373 			HANDLE_EXCEPTION();
24374 		}
24375 	} else {
24376 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24377 		arg_num = opline->op2.num;
24378 	}
24379 
24380 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
24381 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24382 			goto send_var;
24383 		}
24384 
24385 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24386 		ZVAL_COPY_VALUE(arg, varptr);
24387 
24388 		if (EXPECTED(Z_ISREF_P(varptr) ||
24389 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
24390 			ZEND_VM_NEXT_OPCODE();
24391 		}
24392 	} else {
24393 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24394 			goto send_var;
24395 		}
24396 
24397 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24398 		ZVAL_COPY_VALUE(arg, varptr);
24399 
24400 		if (EXPECTED(Z_ISREF_P(varptr) ||
24401 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
24402 			ZEND_VM_NEXT_OPCODE();
24403 		}
24404 	}
24405 
24406 	SAVE_OPLINE();
24407 	ZVAL_NEW_REF(arg, arg);
24408 	zend_error(E_NOTICE, "Only variables should be passed by reference");
24409 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24410 
24411 send_var:
24412 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24413 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
24414 		zend_refcounted *ref = Z_COUNTED_P(varptr);
24415 
24416 		varptr = Z_REFVAL_P(varptr);
24417 		ZVAL_COPY_VALUE(arg, varptr);
24418 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24419 			efree_size(ref, sizeof(zend_reference));
24420 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
24421 			Z_ADDREF_P(arg);
24422 		}
24423 	} else {
24424 		ZVAL_COPY_VALUE(arg, varptr);
24425 	}
24426 	ZEND_VM_NEXT_OPCODE();
24427 }
24428 
ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24429 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24430 {
24431 	USE_OPLINE
24432 	zval *varptr, *arg;
24433 
24434 	SAVE_OPLINE();
24435 	if (IS_CONST == IS_CONST) {
24436 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24437 		uint32_t arg_num;
24438 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24439 		if (UNEXPECTED(!arg)) {
24440 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24441 			HANDLE_EXCEPTION();
24442 		}
24443 	} else {
24444 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24445 	}
24446 
24447 	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24448 	if (Z_ISREF_P(varptr)) {
24449 		Z_ADDREF_P(varptr);
24450 	} else {
24451 		ZVAL_MAKE_REF_EX(varptr, 2);
24452 	}
24453 	ZVAL_REF(arg, Z_REF_P(varptr));
24454 
24455 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24456 	ZEND_VM_NEXT_OPCODE();
24457 }
24458 
ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24460 {
24461 	USE_OPLINE
24462 	zval *varptr, *arg;
24463 	uint32_t arg_num;
24464 
24465 	if (IS_CONST == IS_CONST) {
24466 		SAVE_OPLINE();
24467 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24468 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24469 		if (UNEXPECTED(!arg)) {
24470 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24471 			HANDLE_EXCEPTION();
24472 		}
24473 	} else {
24474 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24475 		arg_num = opline->op2.num;
24476 	}
24477 
24478 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
24479 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24480 			goto send_var_by_ref;
24481 		}
24482 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24483 send_var_by_ref:
24484 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24485 		if (Z_ISREF_P(varptr)) {
24486 			Z_ADDREF_P(varptr);
24487 		} else {
24488 			ZVAL_MAKE_REF_EX(varptr, 2);
24489 		}
24490 		ZVAL_REF(arg, Z_REF_P(varptr));
24491 
24492 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24493 		ZEND_VM_NEXT_OPCODE();
24494 	}
24495 
24496 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24497 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
24498 		SAVE_OPLINE();
24499 		ZVAL_UNDEFINED_OP1();
24500 		ZVAL_NULL(arg);
24501 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24502 	}
24503 
24504 	if (IS_VAR == IS_CV) {
24505 		ZVAL_COPY_DEREF(arg, varptr);
24506 	} else /* if (IS_VAR == IS_VAR) */ {
24507 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
24508 			zend_refcounted *ref = Z_COUNTED_P(varptr);
24509 
24510 			varptr = Z_REFVAL_P(varptr);
24511 			ZVAL_COPY_VALUE(arg, varptr);
24512 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24513 				efree_size(ref, sizeof(zend_reference));
24514 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
24515 				Z_ADDREF_P(arg);
24516 			}
24517 		} else {
24518 			ZVAL_COPY_VALUE(arg, varptr);
24519 		}
24520 	}
24521 
24522 	ZEND_VM_NEXT_OPCODE();
24523 }
24524 
ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24525 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24526 {
24527 	USE_OPLINE
24528 	zval *varptr, *arg;
24529 
24530 	if (IS_CONST == IS_CONST) {
24531 		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
24532 		SAVE_OPLINE();
24533 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24534 		uint32_t arg_num;
24535 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24536 		if (UNEXPECTED(!arg)) {
24537 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24538 			HANDLE_EXCEPTION();
24539 		}
24540 	} else {
24541 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24542 	}
24543 
24544 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
24545 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24546 		if (Z_ISREF_P(varptr)) {
24547 			Z_ADDREF_P(varptr);
24548 		} else {
24549 			ZVAL_MAKE_REF_EX(varptr, 2);
24550 		}
24551 		ZVAL_REF(arg, Z_REF_P(varptr));
24552 
24553 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24554 		ZEND_VM_NEXT_OPCODE();
24555 	}
24556 
24557 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24558 
24559 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
24560 		zend_refcounted *ref = Z_COUNTED_P(varptr);
24561 
24562 		varptr = Z_REFVAL_P(varptr);
24563 		ZVAL_COPY_VALUE(arg, varptr);
24564 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24565 			efree_size(ref, sizeof(zend_reference));
24566 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
24567 			Z_ADDREF_P(arg);
24568 		}
24569 	} else {
24570 		ZVAL_COPY_VALUE(arg, varptr);
24571 	}
24572 
24573 	ZEND_VM_NEXT_OPCODE();
24574 }
24575 
ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24576 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24577 {
24578 	zend_class_entry *ce, *scope;
24579 	zend_class_constant *c;
24580 	zval *value, *zv;
24581 	USE_OPLINE
24582 
24583 	SAVE_OPLINE();
24584 
24585 	do {
24586 		if (IS_VAR == IS_CONST) {
24587 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
24588 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
24589 				break;
24590 			} else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
24591 				ce = CACHED_PTR(opline->extended_value);
24592 			} else {
24593 				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);
24594 				if (UNEXPECTED(ce == NULL)) {
24595 					ZVAL_UNDEF(EX_VAR(opline->result.var));
24596 					HANDLE_EXCEPTION();
24597 				}
24598 			}
24599 		} else {
24600 			if (IS_VAR == IS_UNUSED) {
24601 				ce = zend_fetch_class(NULL, opline->op1.num);
24602 				if (UNEXPECTED(ce == NULL)) {
24603 					ZVAL_UNDEF(EX_VAR(opline->result.var));
24604 					HANDLE_EXCEPTION();
24605 				}
24606 			} else {
24607 				ce = Z_CE_P(EX_VAR(opline->op1.var));
24608 			}
24609 			if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
24610 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
24611 				break;
24612 			}
24613 		}
24614 
24615 		zv = zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
24616 		if (EXPECTED(zv != NULL)) {
24617 			c = Z_PTR_P(zv);
24618 			scope = EX(func)->op_array.scope;
24619 			if (!zend_verify_const_access(c, scope)) {
24620 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
24621 				ZVAL_UNDEF(EX_VAR(opline->result.var));
24622 				HANDLE_EXCEPTION();
24623 			}
24624 			value = &c->value;
24625 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
24626 				zval_update_constant_ex(value, c->ce);
24627 				if (UNEXPECTED(EG(exception) != NULL)) {
24628 					ZVAL_UNDEF(EX_VAR(opline->result.var));
24629 					HANDLE_EXCEPTION();
24630 				}
24631 			}
24632 			CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
24633 		} else {
24634 			zend_throw_error(NULL, "Undefined constant %s::%s",
24635 				ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
24636 			ZVAL_UNDEF(EX_VAR(opline->result.var));
24637 			HANDLE_EXCEPTION();
24638 		}
24639 	} while (0);
24640 
24641 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
24642 
24643 	ZEND_VM_NEXT_OPCODE();
24644 }
24645 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24646 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24647 {
24648 	USE_OPLINE
24649 	zval *expr_ptr, new_expr;
24650 
24651 	SAVE_OPLINE();
24652 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
24653 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
24654 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24655 		if (Z_ISREF_P(expr_ptr)) {
24656 			Z_ADDREF_P(expr_ptr);
24657 		} else {
24658 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
24659 		}
24660 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24661 	} else {
24662 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24663 		if (IS_VAR == IS_TMP_VAR) {
24664 			/* pass */
24665 		} else if (IS_VAR == IS_CONST) {
24666 			Z_TRY_ADDREF_P(expr_ptr);
24667 		} else if (IS_VAR == IS_CV) {
24668 			ZVAL_DEREF(expr_ptr);
24669 			Z_TRY_ADDREF_P(expr_ptr);
24670 		} else /* if (IS_VAR == IS_VAR) */ {
24671 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
24672 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
24673 
24674 				expr_ptr = Z_REFVAL_P(expr_ptr);
24675 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24676 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
24677 					expr_ptr = &new_expr;
24678 					efree_size(ref, sizeof(zend_reference));
24679 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
24680 					Z_ADDREF_P(expr_ptr);
24681 				}
24682 			}
24683 		}
24684 	}
24685 
24686 	if (IS_CONST != IS_UNUSED) {
24687 		zval *offset = RT_CONSTANT(opline, opline->op2);
24688 		zend_string *str;
24689 		zend_ulong hval;
24690 
24691 add_again:
24692 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24693 			str = Z_STR_P(offset);
24694 			if (IS_CONST != IS_CONST) {
24695 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
24696 					goto num_index;
24697 				}
24698 			}
24699 str_index:
24700 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
24701 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24702 			hval = Z_LVAL_P(offset);
24703 num_index:
24704 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
24705 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
24706 			offset = Z_REFVAL_P(offset);
24707 			goto add_again;
24708 		} else if (Z_TYPE_P(offset) == IS_NULL) {
24709 			str = ZSTR_EMPTY_ALLOC();
24710 			goto str_index;
24711 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24712 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
24713 			goto num_index;
24714 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
24715 			hval = 0;
24716 			goto num_index;
24717 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
24718 			hval = 1;
24719 			goto num_index;
24720 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
24721 			zend_use_resource_as_offset(offset);
24722 			hval = Z_RES_HANDLE_P(offset);
24723 			goto num_index;
24724 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
24725 			ZVAL_UNDEFINED_OP2();
24726 			str = ZSTR_EMPTY_ALLOC();
24727 			goto str_index;
24728 		} else {
24729 			zend_illegal_offset();
24730 			zval_ptr_dtor_nogc(expr_ptr);
24731 		}
24732 
24733 	} else {
24734 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
24735 			zend_cannot_add_element();
24736 			zval_ptr_dtor_nogc(expr_ptr);
24737 		}
24738 	}
24739 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24740 }
24741 
ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24743 {
24744 	zval *array;
24745 	uint32_t size;
24746 	USE_OPLINE
24747 
24748 	array = EX_VAR(opline->result.var);
24749 	if (IS_VAR != IS_UNUSED) {
24750 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
24751 		ZVAL_ARR(array, zend_new_array(size));
24752 		/* Explicitly initialize array as not-packed if flag is set */
24753 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
24754 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
24755 		}
24756 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24757 	} else {
24758 		ZVAL_ARR(array, zend_new_array(0));
24759 		ZEND_VM_NEXT_OPCODE();
24760 	}
24761 }
24762 
ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24763 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24764 {
24765 	USE_OPLINE
24766 	zval *container;
24767 	zval *offset;
24768 	zend_ulong hval;
24769 	zend_string *key;
24770 
24771 	SAVE_OPLINE();
24772 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24773 	offset = RT_CONSTANT(opline, opline->op2);
24774 
24775 	do {
24776 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24777 			HashTable *ht;
24778 
24779 unset_dim_array:
24780 			SEPARATE_ARRAY(container);
24781 			ht = Z_ARRVAL_P(container);
24782 offset_again:
24783 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24784 				key = Z_STR_P(offset);
24785 				if (IS_CONST != IS_CONST) {
24786 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
24787 						goto num_index_dim;
24788 					}
24789 				}
24790 str_index_dim:
24791 				ZEND_ASSERT(ht != &EG(symbol_table));
24792 				zend_hash_del(ht, key);
24793 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24794 				hval = Z_LVAL_P(offset);
24795 num_index_dim:
24796 				zend_hash_index_del(ht, hval);
24797 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
24798 				offset = Z_REFVAL_P(offset);
24799 				goto offset_again;
24800 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24801 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
24802 				goto num_index_dim;
24803 			} else if (Z_TYPE_P(offset) == IS_NULL) {
24804 				key = ZSTR_EMPTY_ALLOC();
24805 				goto str_index_dim;
24806 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
24807 				hval = 0;
24808 				goto num_index_dim;
24809 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
24810 				hval = 1;
24811 				goto num_index_dim;
24812 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
24813 				zend_use_resource_as_offset(offset);
24814 				hval = Z_RES_HANDLE_P(offset);
24815 				goto num_index_dim;
24816 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
24817 				ZVAL_UNDEFINED_OP2();
24818 				key = ZSTR_EMPTY_ALLOC();
24819 				goto str_index_dim;
24820 			} else {
24821 				zend_type_error("Illegal offset type in unset");
24822 			}
24823 			break;
24824 		} else if (Z_ISREF_P(container)) {
24825 			container = Z_REFVAL_P(container);
24826 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24827 				goto unset_dim_array;
24828 			}
24829 		}
24830 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24831 			container = ZVAL_UNDEFINED_OP1();
24832 		}
24833 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
24834 			offset = ZVAL_UNDEFINED_OP2();
24835 		}
24836 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
24837 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
24838 				offset++;
24839 			}
24840 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
24841 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
24842 			zend_throw_error(NULL, "Cannot unset string offsets");
24843 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
24844 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
24845 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
24846 			zend_false_to_array_deprecated();
24847 		}
24848 	} while (0);
24849 
24850 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24851 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24852 }
24853 
ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24854 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24855 {
24856 	USE_OPLINE
24857 	zval *container;
24858 	zval *offset;
24859 	zend_string *name, *tmp_name;
24860 
24861 	SAVE_OPLINE();
24862 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24863 	offset = RT_CONSTANT(opline, opline->op2);
24864 
24865 	do {
24866 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
24867 			if (Z_ISREF_P(container)) {
24868 				container = Z_REFVAL_P(container);
24869 				if (Z_TYPE_P(container) != IS_OBJECT) {
24870 					if (IS_VAR == IS_CV
24871 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24872 						ZVAL_UNDEFINED_OP1();
24873 					}
24874 					break;
24875 				}
24876 			} else {
24877 				break;
24878 			}
24879 		}
24880 		if (IS_CONST == IS_CONST) {
24881 			name = Z_STR_P(offset);
24882 		} else {
24883 			name = zval_try_get_tmp_string(offset, &tmp_name);
24884 			if (UNEXPECTED(!name)) {
24885 				break;
24886 			}
24887 		}
24888 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
24889 		if (IS_CONST != IS_CONST) {
24890 			zend_tmp_string_release(tmp_name);
24891 		}
24892 	} while (0);
24893 
24894 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24895 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24896 }
24897 
ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24898 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24899 {
24900 	USE_OPLINE
24901 
24902 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
24903 
24904 	SAVE_OPLINE();
24905 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
24906 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24907 	}
24908 
24909 	/* Destroy the previously yielded value */
24910 	zval_ptr_dtor(&generator->value);
24911 
24912 	/* Destroy the previously yielded key */
24913 	zval_ptr_dtor(&generator->key);
24914 
24915 	/* Set the new yielded value */
24916 	if (IS_VAR != IS_UNUSED) {
24917 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
24918 			/* Constants and temporary variables aren't yieldable by reference,
24919 			 * but we still allow them with a notice. */
24920 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
24921 				zval *value;
24922 
24923 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24924 
24925 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24926 				ZVAL_COPY_VALUE(&generator->value, value);
24927 				if (IS_VAR == IS_CONST) {
24928 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
24929 						Z_ADDREF(generator->value);
24930 					}
24931 				}
24932 			} else {
24933 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24934 
24935 				/* If a function call result is yielded and the function did
24936 				 * not return by reference we throw a notice. */
24937 				do {
24938 					if (IS_VAR == IS_VAR) {
24939 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
24940 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
24941 						 && !Z_ISREF_P(value_ptr)) {
24942 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24943 							ZVAL_COPY(&generator->value, value_ptr);
24944 							break;
24945 						}
24946 					}
24947 					if (Z_ISREF_P(value_ptr)) {
24948 						Z_ADDREF_P(value_ptr);
24949 					} else {
24950 						ZVAL_MAKE_REF_EX(value_ptr, 2);
24951 					}
24952 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
24953 				} while (0);
24954 
24955 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24956 			}
24957 		} else {
24958 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24959 
24960 			/* Consts, temporary variables and references need copying */
24961 			if (IS_VAR == IS_CONST) {
24962 				ZVAL_COPY_VALUE(&generator->value, value);
24963 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
24964 					Z_ADDREF(generator->value);
24965 				}
24966 			} else if (IS_VAR == IS_TMP_VAR) {
24967 				ZVAL_COPY_VALUE(&generator->value, value);
24968             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
24969 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
24970 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24971 			} else {
24972 				ZVAL_COPY_VALUE(&generator->value, value);
24973 				if (IS_VAR == IS_CV) {
24974 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
24975 				}
24976 			}
24977 		}
24978 	} else {
24979 		/* If no value was specified yield null */
24980 		ZVAL_NULL(&generator->value);
24981 	}
24982 
24983 	/* Set the new yielded key */
24984 	if (IS_CONST != IS_UNUSED) {
24985 		zval *key = RT_CONSTANT(opline, opline->op2);
24986 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
24987 			key = Z_REFVAL_P(key);
24988 		}
24989 		ZVAL_COPY(&generator->key, key);
24990 
24991 		if (Z_TYPE(generator->key) == IS_LONG
24992 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
24993 		) {
24994 			generator->largest_used_integer_key = Z_LVAL(generator->key);
24995 		}
24996 	} else {
24997 		/* If no key was specified we use auto-increment keys */
24998 		generator->largest_used_integer_key++;
24999 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
25000 	}
25001 
25002 	if (RETURN_VALUE_USED(opline)) {
25003 		/* If the return value of yield is used set the send
25004 		 * target and initialize it to NULL */
25005 		generator->send_target = EX_VAR(opline->result.var);
25006 		ZVAL_NULL(generator->send_target);
25007 	} else {
25008 		generator->send_target = NULL;
25009 	}
25010 
25011 	/* We increment to the next op, so we are at the correct position when the
25012 	 * generator is resumed. */
25013 	ZEND_VM_INC_OPCODE();
25014 
25015 	/* The GOTO VM uses a local opline variable. We need to set the opline
25016 	 * variable in execute_data so we don't resume at an old position. */
25017 	SAVE_OPLINE();
25018 
25019 	ZEND_VM_RETURN();
25020 }
25021 
ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25022 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25023 {
25024 	USE_OPLINE
25025 	zval *op1;
25026 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
25027 	zval *result;
25028 
25029 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25030 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
25031 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_VAR == IS_CONST);
25032 		if (IS_VAR & (IS_TMP_VAR|IS_VAR)) {
25033 			zval_ptr_dtor_str(op1);
25034 		}
25035 		ZEND_VM_SMART_BRANCH(result, 0);
25036 	}
25037 
25038 	if (opline->extended_value) {
25039 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
25040 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
25041 			ZEND_VM_SMART_BRANCH(result, 0);
25042 		}
25043 		SAVE_OPLINE();
25044 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
25045 			op1 = Z_REFVAL_P(op1);
25046 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
25047 				result = zend_hash_find(ht, Z_STR_P(op1));
25048 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25049 				ZEND_VM_SMART_BRANCH(result, 0);
25050 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
25051 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
25052 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25053 				ZEND_VM_SMART_BRANCH(result, 0);
25054 			}
25055 		} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
25056 			ZVAL_UNDEFINED_OP1();
25057 		}
25058 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
25059 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
25060 			SAVE_OPLINE();
25061 			ZVAL_UNDEFINED_OP1();
25062 			if (UNEXPECTED(EG(exception) != NULL)) {
25063 				HANDLE_EXCEPTION();
25064 			}
25065 		}
25066 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
25067 		ZEND_VM_SMART_BRANCH(result, 0);
25068 	} else {
25069 		zend_string *key;
25070 		zval key_tmp;
25071 
25072 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
25073 			op1 = Z_REFVAL_P(op1);
25074 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
25075 				result = zend_hash_find(ht, Z_STR_P(op1));
25076 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25077 				ZEND_VM_SMART_BRANCH(result, 0);
25078 			}
25079 		}
25080 
25081 		SAVE_OPLINE();
25082 		ZEND_HASH_FOREACH_STR_KEY(ht, key) {
25083 			ZVAL_STR(&key_tmp, key);
25084 			if (zend_compare(op1, &key_tmp) == 0) {
25085 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25086 				ZEND_VM_SMART_BRANCH(1, 1);
25087 			}
25088 		} ZEND_HASH_FOREACH_END();
25089 	}
25090 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25091 	ZEND_VM_SMART_BRANCH(0, 1);
25092 }
25093 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25094 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25095 {
25096 	USE_OPLINE
25097 	zval *object;
25098 	zval *property;
25099 	zval *value;
25100 	zval *zptr;
25101 	void **cache_slot;
25102 	zend_property_info *prop_info;
25103 	zend_object *zobj;
25104 	zend_string *name, *tmp_name;
25105 
25106 	SAVE_OPLINE();
25107 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25108 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25109 
25110 	do {
25111 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
25112 
25113 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25114 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25115 				object = Z_REFVAL_P(object);
25116 				goto assign_op_object;
25117 			}
25118 			if (IS_VAR == IS_CV
25119 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25120 				ZVAL_UNDEFINED_OP1();
25121 			}
25122 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25123 			break;
25124 		}
25125 
25126 assign_op_object:
25127 		/* here we are sure we are dealing with an object */
25128 		zobj = Z_OBJ_P(object);
25129 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25130 			name = Z_STR_P(property);
25131 		} else {
25132 			name = zval_try_get_tmp_string(property, &tmp_name);
25133 			if (UNEXPECTED(!name)) {
25134 				UNDEF_RESULT();
25135 				break;
25136 			}
25137 		}
25138 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
25139 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
25140 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
25141 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25142 					ZVAL_NULL(EX_VAR(opline->result.var));
25143 				}
25144 			} else {
25145 				zval *orig_zptr = zptr;
25146 				zend_reference *ref;
25147 
25148 				do {
25149 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
25150 						ref = Z_REF_P(zptr);
25151 						zptr = Z_REFVAL_P(zptr);
25152 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
25153 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
25154 							break;
25155 						}
25156 					}
25157 
25158 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25159 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
25160 					} else {
25161 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
25162 					}
25163 					if (UNEXPECTED(prop_info)) {
25164 						/* special case for typed properties */
25165 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
25166 					} else {
25167 						zend_binary_op(zptr, zptr, value OPLINE_CC);
25168 					}
25169 				} while (0);
25170 
25171 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25172 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
25173 				}
25174 			}
25175 		} else {
25176 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
25177 		}
25178 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25179 			zend_tmp_string_release(tmp_name);
25180 		}
25181 	} while (0);
25182 
25183 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
25184 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25185 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25186 	/* assign_obj has two opcodes! */
25187 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25188 }
25189 
25190 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25191 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25192 {
25193 	USE_OPLINE
25194 	zval *var_ptr;
25195 	zval *value, *container, *dim;
25196 	HashTable *ht;
25197 
25198 	SAVE_OPLINE();
25199 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25200 
25201 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25202 assign_dim_op_array:
25203 		SEPARATE_ARRAY(container);
25204 		ht = Z_ARRVAL_P(container);
25205 assign_dim_op_new_array:
25206 		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25207 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25208 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
25209 			if (UNEXPECTED(!var_ptr)) {
25210 				zend_cannot_add_element();
25211 				goto assign_dim_op_ret_null;
25212 			}
25213 		} else {
25214 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25215 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
25216 			} else {
25217 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
25218 			}
25219 			if (UNEXPECTED(!var_ptr)) {
25220 				goto assign_dim_op_ret_null;
25221 			}
25222 		}
25223 
25224 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
25225 
25226 		do {
25227 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
25228 				zend_reference *ref = Z_REF_P(var_ptr);
25229 				var_ptr = Z_REFVAL_P(var_ptr);
25230 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
25231 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
25232 					break;
25233 				}
25234 			}
25235 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
25236 		} while (0);
25237 
25238 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25239 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
25240 		}
25241 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
25242 	} else {
25243 		if (EXPECTED(Z_ISREF_P(container))) {
25244 			container = Z_REFVAL_P(container);
25245 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25246 				goto assign_dim_op_array;
25247 			}
25248 		}
25249 
25250 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
25251 			zend_object *obj = Z_OBJ_P(container);
25252 
25253 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25254 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
25255 				dim++;
25256 			}
25257 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
25258 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
25259 			zend_uchar old_type;
25260 
25261 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
25262 				ZVAL_UNDEFINED_OP1();
25263 			}
25264 			ht = zend_new_array(8);
25265 			old_type = Z_TYPE_P(container);
25266 			ZVAL_ARR(container, ht);
25267 			if (UNEXPECTED(old_type == IS_FALSE)) {
25268 				GC_ADDREF(ht);
25269 				zend_false_to_array_deprecated();
25270 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
25271 					zend_array_destroy(ht);
25272 					goto assign_dim_op_ret_null;
25273 				}
25274 			}
25275 			goto assign_dim_op_new_array;
25276 		} else {
25277 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25278 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
25279 assign_dim_op_ret_null:
25280 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
25281 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25282 				ZVAL_NULL(EX_VAR(opline->result.var));
25283 			}
25284 		}
25285 	}
25286 
25287 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25288 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25289 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25290 }
25291 
ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25292 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25293 {
25294 	USE_OPLINE
25295 	zval *var_ptr;
25296 	zval *value;
25297 
25298 	SAVE_OPLINE();
25299 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25300 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25301 
25302 	do {
25303 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
25304 			zend_reference *ref = Z_REF_P(var_ptr);
25305 			var_ptr = Z_REFVAL_P(var_ptr);
25306 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
25307 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
25308 				break;
25309 			}
25310 		}
25311 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
25312 	} while (0);
25313 
25314 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25315 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
25316 	}
25317 
25318 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25319 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25320 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25321 }
25322 
ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25323 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25324 {
25325 	USE_OPLINE
25326 	zval *object;
25327 	zval *property;
25328 	zval *zptr;
25329 	void **cache_slot;
25330 	zend_property_info *prop_info;
25331 	zend_object *zobj;
25332 	zend_string *name, *tmp_name;
25333 
25334 	SAVE_OPLINE();
25335 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25336 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25337 
25338 	do {
25339 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25340 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25341 				object = Z_REFVAL_P(object);
25342 				goto pre_incdec_object;
25343 			}
25344 			if (IS_VAR == IS_CV
25345 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25346 				ZVAL_UNDEFINED_OP1();
25347 			}
25348 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25349 			break;
25350 		}
25351 
25352 pre_incdec_object:
25353 		/* here we are sure we are dealing with an object */
25354 		zobj = Z_OBJ_P(object);
25355 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25356 			name = Z_STR_P(property);
25357 		} else {
25358 			name = zval_try_get_tmp_string(property, &tmp_name);
25359 			if (UNEXPECTED(!name)) {
25360 				UNDEF_RESULT();
25361 				break;
25362 			}
25363 		}
25364 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
25365 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
25366 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
25367 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25368 					ZVAL_NULL(EX_VAR(opline->result.var));
25369 				}
25370 			} else {
25371 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25372 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
25373 				} else {
25374 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
25375 				}
25376 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
25377 			}
25378 		} else {
25379 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
25380 		}
25381 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25382 			zend_tmp_string_release(tmp_name);
25383 		}
25384 	} while (0);
25385 
25386 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25387 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25388 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25389 }
25390 
ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25391 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25392 {
25393 	USE_OPLINE
25394 	zval *object;
25395 	zval *property;
25396 	zval *zptr;
25397 	void **cache_slot;
25398 	zend_property_info *prop_info;
25399 	zend_object *zobj;
25400 	zend_string *name, *tmp_name;
25401 
25402 	SAVE_OPLINE();
25403 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25404 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25405 
25406 	do {
25407 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25408 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25409 				object = Z_REFVAL_P(object);
25410 				goto post_incdec_object;
25411 			}
25412 			if (IS_VAR == IS_CV
25413 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25414 				ZVAL_UNDEFINED_OP1();
25415 			}
25416 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25417 			break;
25418 		}
25419 
25420 post_incdec_object:
25421 		/* here we are sure we are dealing with an object */
25422 		zobj = Z_OBJ_P(object);
25423 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25424 			name = Z_STR_P(property);
25425 		} else {
25426 			name = zval_try_get_tmp_string(property, &tmp_name);
25427 			if (UNEXPECTED(!name)) {
25428 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25429 				break;
25430 			}
25431 		}
25432 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
25433 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
25434 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
25435 				ZVAL_NULL(EX_VAR(opline->result.var));
25436 			} else {
25437 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25438 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
25439 				} else {
25440 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
25441 				}
25442 
25443 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
25444 			}
25445 		} else {
25446 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
25447 		}
25448 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25449 			zend_tmp_string_release(tmp_name);
25450 		}
25451 	} while (0);
25452 
25453 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25454 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25455 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25456 }
25457 
ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25458 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25459 {
25460 	USE_OPLINE
25461 	zval *container;
25462 
25463 	SAVE_OPLINE();
25464 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25465 	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);
25466 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25467 	if (IS_VAR == IS_VAR) {
25468 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25469 	}
25470 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25471 }
25472 
ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25473 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25474 {
25475 	USE_OPLINE
25476 	zval *container;
25477 
25478 	SAVE_OPLINE();
25479 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25480 	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);
25481 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25482 	if (IS_VAR == IS_VAR) {
25483 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25484 	}
25485 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25486 }
25487 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25488 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25489 {
25490 #if 0
25491 	USE_OPLINE
25492 #endif
25493 
25494 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
25495         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
25496 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25497         }
25498 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25499 	} else {
25500 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25501 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25502 		}
25503 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25504 	}
25505 }
25506 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25507 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25508 {
25509 	USE_OPLINE
25510 	zval *container;
25511 
25512 	SAVE_OPLINE();
25513 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25514 	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);
25515 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25516 	if (IS_VAR == IS_VAR) {
25517 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25518 	}
25519 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25520 }
25521 
ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25522 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25523 {
25524 	USE_OPLINE
25525 	zval *property, *container, *result;
25526 
25527 	SAVE_OPLINE();
25528 
25529 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25530 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25531 	result = EX_VAR(opline->result.var);
25532 	zend_fetch_property_address(
25533 		result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
25534 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
25535 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC);
25536 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25537 	if (IS_VAR == IS_VAR) {
25538 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25539 	}
25540 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25541 }
25542 
ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25543 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25544 {
25545 	USE_OPLINE
25546 	zval *property, *container, *result;
25547 
25548 	SAVE_OPLINE();
25549 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25550 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25551 	result = EX_VAR(opline->result.var);
25552 	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);
25553 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25554 	if (IS_VAR == IS_VAR) {
25555 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25556 	}
25557 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25558 }
25559 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25560 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25561 {
25562 #if 0
25563 	USE_OPLINE
25564 #endif
25565 
25566 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
25567 		/* Behave like FETCH_OBJ_W */
25568 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
25569 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25570 		}
25571 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25572 	} else {
25573 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25574 	}
25575 }
25576 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25577 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25578 {
25579 	USE_OPLINE
25580 	zval *container, *property, *result;
25581 
25582 	SAVE_OPLINE();
25583 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25584 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25585 	result = EX_VAR(opline->result.var);
25586 	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);
25587 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25588 	if (IS_VAR == IS_VAR) {
25589 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25590 	}
25591 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25592 }
25593 
ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25594 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25595 {
25596 	USE_OPLINE
25597 	zval *container, *dim;
25598 
25599 	SAVE_OPLINE();
25600 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25601 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25602 
25603 	if (IS_VAR == IS_VAR
25604 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
25605 		&& UNEXPECTED(!Z_ISREF_P(container))
25606 	) {
25607 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
25608 		zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
25609 	} else {
25610 		zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
25611 	}
25612 
25613 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25614 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25615 }
25616 
ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25617 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25618 {
25619 	USE_OPLINE
25620 	zval *object, *value, tmp;
25621 	zend_object *zobj;
25622 	zend_string *name, *tmp_name;
25623 
25624 	SAVE_OPLINE();
25625 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25626 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
25627 
25628 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25629 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25630 			object = Z_REFVAL_P(object);
25631 			goto assign_object;
25632 		}
25633 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
25634 		value = &EG(uninitialized_zval);
25635 		goto free_and_exit_assign_obj;
25636 	}
25637 
25638 assign_object:
25639 	zobj = Z_OBJ_P(object);
25640 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25641 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
25642 			void **cache_slot = CACHE_ADDR(opline->extended_value);
25643 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25644 			zend_object *zobj = Z_OBJ_P(object);
25645 			zval *property_val;
25646 
25647 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25648 				property_val = OBJ_PROP(zobj, prop_offset);
25649 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
25650 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25651 
25652 					if (UNEXPECTED(prop_info != NULL)) {
25653 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25654 						goto free_and_exit_assign_obj;
25655 					} else {
25656 fast_assign_obj:
25657 						value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
25658 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25659 							ZVAL_COPY(EX_VAR(opline->result.var), value);
25660 						}
25661 						goto exit_assign_obj;
25662 					}
25663 				}
25664 			} else {
25665 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
25666 				if (EXPECTED(zobj->properties != NULL)) {
25667 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25668 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25669 							GC_DELREF(zobj->properties);
25670 						}
25671 						zobj->properties = zend_array_dup(zobj->properties);
25672 					}
25673 					property_val = zend_hash_find_known_hash(zobj->properties, name);
25674 					if (property_val) {
25675 						goto fast_assign_obj;
25676 					}
25677 				}
25678 
25679 				if (!zobj->ce->__set) {
25680 					if (EXPECTED(zobj->properties == NULL)) {
25681 						rebuild_object_properties(zobj);
25682 					}
25683 					if (IS_CONST == IS_CONST) {
25684 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25685 							Z_ADDREF_P(value);
25686 						}
25687 					} else if (IS_CONST != IS_TMP_VAR) {
25688 						if (Z_ISREF_P(value)) {
25689 							if (IS_CONST == IS_VAR) {
25690 								zend_reference *ref = Z_REF_P(value);
25691 								if (GC_DELREF(ref) == 0) {
25692 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25693 									efree_size(ref, sizeof(zend_reference));
25694 									value = &tmp;
25695 								} else {
25696 									value = Z_REFVAL_P(value);
25697 									Z_TRY_ADDREF_P(value);
25698 								}
25699 							} else {
25700 								value = Z_REFVAL_P(value);
25701 								Z_TRY_ADDREF_P(value);
25702 							}
25703 						} else if (IS_CONST == IS_CV) {
25704 							Z_TRY_ADDREF_P(value);
25705 						}
25706 						}
25707 					zend_hash_add_new(zobj->properties, name, value);
25708 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25709 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25710 					}
25711 					goto exit_assign_obj;
25712 				}
25713 			}
25714 		}
25715 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
25716 	} else {
25717 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
25718 		if (UNEXPECTED(!name)) {
25719 
25720 			UNDEF_RESULT();
25721 			goto exit_assign_obj;
25722 		}
25723 	}
25724 
25725 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
25726 		ZVAL_DEREF(value);
25727 	}
25728 
25729 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25730 
25731 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25732 		zend_tmp_string_release(tmp_name);
25733 	}
25734 
25735 free_and_exit_assign_obj:
25736 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25737 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
25738 	}
25739 
25740 exit_assign_obj:
25741 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25742 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25743 	/* assign_obj has two opcodes! */
25744 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25745 }
25746 
25747 /* 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)25748 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25749 {
25750 	USE_OPLINE
25751 	zval *object, *value, tmp;
25752 	zend_object *zobj;
25753 	zend_string *name, *tmp_name;
25754 
25755 	SAVE_OPLINE();
25756 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25757 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
25758 
25759 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25760 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25761 			object = Z_REFVAL_P(object);
25762 			goto assign_object;
25763 		}
25764 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
25765 		value = &EG(uninitialized_zval);
25766 		goto free_and_exit_assign_obj;
25767 	}
25768 
25769 assign_object:
25770 	zobj = Z_OBJ_P(object);
25771 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25772 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
25773 			void **cache_slot = CACHE_ADDR(opline->extended_value);
25774 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25775 			zend_object *zobj = Z_OBJ_P(object);
25776 			zval *property_val;
25777 
25778 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25779 				property_val = OBJ_PROP(zobj, prop_offset);
25780 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
25781 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25782 
25783 					if (UNEXPECTED(prop_info != NULL)) {
25784 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25785 						goto free_and_exit_assign_obj;
25786 					} else {
25787 fast_assign_obj:
25788 						value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
25789 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25790 							ZVAL_COPY(EX_VAR(opline->result.var), value);
25791 						}
25792 						goto exit_assign_obj;
25793 					}
25794 				}
25795 			} else {
25796 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
25797 				if (EXPECTED(zobj->properties != NULL)) {
25798 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25799 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25800 							GC_DELREF(zobj->properties);
25801 						}
25802 						zobj->properties = zend_array_dup(zobj->properties);
25803 					}
25804 					property_val = zend_hash_find_known_hash(zobj->properties, name);
25805 					if (property_val) {
25806 						goto fast_assign_obj;
25807 					}
25808 				}
25809 
25810 				if (!zobj->ce->__set) {
25811 					if (EXPECTED(zobj->properties == NULL)) {
25812 						rebuild_object_properties(zobj);
25813 					}
25814 					if (IS_TMP_VAR == IS_CONST) {
25815 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25816 							Z_ADDREF_P(value);
25817 						}
25818 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
25819 						if (Z_ISREF_P(value)) {
25820 							if (IS_TMP_VAR == IS_VAR) {
25821 								zend_reference *ref = Z_REF_P(value);
25822 								if (GC_DELREF(ref) == 0) {
25823 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25824 									efree_size(ref, sizeof(zend_reference));
25825 									value = &tmp;
25826 								} else {
25827 									value = Z_REFVAL_P(value);
25828 									Z_TRY_ADDREF_P(value);
25829 								}
25830 							} else {
25831 								value = Z_REFVAL_P(value);
25832 								Z_TRY_ADDREF_P(value);
25833 							}
25834 						} else if (IS_TMP_VAR == IS_CV) {
25835 							Z_TRY_ADDREF_P(value);
25836 						}
25837 						}
25838 					zend_hash_add_new(zobj->properties, name, value);
25839 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25840 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25841 					}
25842 					goto exit_assign_obj;
25843 				}
25844 			}
25845 		}
25846 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
25847 	} else {
25848 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
25849 		if (UNEXPECTED(!name)) {
25850 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25851 			UNDEF_RESULT();
25852 			goto exit_assign_obj;
25853 		}
25854 	}
25855 
25856 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
25857 		ZVAL_DEREF(value);
25858 	}
25859 
25860 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25861 
25862 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25863 		zend_tmp_string_release(tmp_name);
25864 	}
25865 
25866 free_and_exit_assign_obj:
25867 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25868 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
25869 	}
25870 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25871 exit_assign_obj:
25872 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25873 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25874 	/* assign_obj has two opcodes! */
25875 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25876 }
25877 
25878 /* 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)25879 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25880 {
25881 	USE_OPLINE
25882 	zval *object, *value, tmp;
25883 	zend_object *zobj;
25884 	zend_string *name, *tmp_name;
25885 
25886 	SAVE_OPLINE();
25887 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25888 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
25889 
25890 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25891 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25892 			object = Z_REFVAL_P(object);
25893 			goto assign_object;
25894 		}
25895 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
25896 		value = &EG(uninitialized_zval);
25897 		goto free_and_exit_assign_obj;
25898 	}
25899 
25900 assign_object:
25901 	zobj = Z_OBJ_P(object);
25902 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25903 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
25904 			void **cache_slot = CACHE_ADDR(opline->extended_value);
25905 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25906 			zend_object *zobj = Z_OBJ_P(object);
25907 			zval *property_val;
25908 
25909 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25910 				property_val = OBJ_PROP(zobj, prop_offset);
25911 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
25912 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25913 
25914 					if (UNEXPECTED(prop_info != NULL)) {
25915 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25916 						goto free_and_exit_assign_obj;
25917 					} else {
25918 fast_assign_obj:
25919 						value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
25920 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25921 							ZVAL_COPY(EX_VAR(opline->result.var), value);
25922 						}
25923 						goto exit_assign_obj;
25924 					}
25925 				}
25926 			} else {
25927 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
25928 				if (EXPECTED(zobj->properties != NULL)) {
25929 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25930 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25931 							GC_DELREF(zobj->properties);
25932 						}
25933 						zobj->properties = zend_array_dup(zobj->properties);
25934 					}
25935 					property_val = zend_hash_find_known_hash(zobj->properties, name);
25936 					if (property_val) {
25937 						goto fast_assign_obj;
25938 					}
25939 				}
25940 
25941 				if (!zobj->ce->__set) {
25942 					if (EXPECTED(zobj->properties == NULL)) {
25943 						rebuild_object_properties(zobj);
25944 					}
25945 					if (IS_VAR == IS_CONST) {
25946 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25947 							Z_ADDREF_P(value);
25948 						}
25949 					} else if (IS_VAR != IS_TMP_VAR) {
25950 						if (Z_ISREF_P(value)) {
25951 							if (IS_VAR == IS_VAR) {
25952 								zend_reference *ref = Z_REF_P(value);
25953 								if (GC_DELREF(ref) == 0) {
25954 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25955 									efree_size(ref, sizeof(zend_reference));
25956 									value = &tmp;
25957 								} else {
25958 									value = Z_REFVAL_P(value);
25959 									Z_TRY_ADDREF_P(value);
25960 								}
25961 							} else {
25962 								value = Z_REFVAL_P(value);
25963 								Z_TRY_ADDREF_P(value);
25964 							}
25965 						} else if (IS_VAR == IS_CV) {
25966 							Z_TRY_ADDREF_P(value);
25967 						}
25968 						}
25969 					zend_hash_add_new(zobj->properties, name, value);
25970 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25971 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25972 					}
25973 					goto exit_assign_obj;
25974 				}
25975 			}
25976 		}
25977 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
25978 	} else {
25979 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
25980 		if (UNEXPECTED(!name)) {
25981 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25982 			UNDEF_RESULT();
25983 			goto exit_assign_obj;
25984 		}
25985 	}
25986 
25987 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
25988 		ZVAL_DEREF(value);
25989 	}
25990 
25991 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25992 
25993 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25994 		zend_tmp_string_release(tmp_name);
25995 	}
25996 
25997 free_and_exit_assign_obj:
25998 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25999 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
26000 	}
26001 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26002 exit_assign_obj:
26003 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26004 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26005 	/* assign_obj has two opcodes! */
26006 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26007 }
26008 
26009 /* 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)26010 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26011 {
26012 	USE_OPLINE
26013 	zval *object, *value, tmp;
26014 	zend_object *zobj;
26015 	zend_string *name, *tmp_name;
26016 
26017 	SAVE_OPLINE();
26018 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26019 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
26020 
26021 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26022 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26023 			object = Z_REFVAL_P(object);
26024 			goto assign_object;
26025 		}
26026 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
26027 		value = &EG(uninitialized_zval);
26028 		goto free_and_exit_assign_obj;
26029 	}
26030 
26031 assign_object:
26032 	zobj = Z_OBJ_P(object);
26033 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26034 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
26035 			void **cache_slot = CACHE_ADDR(opline->extended_value);
26036 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
26037 			zend_object *zobj = Z_OBJ_P(object);
26038 			zval *property_val;
26039 
26040 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
26041 				property_val = OBJ_PROP(zobj, prop_offset);
26042 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
26043 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
26044 
26045 					if (UNEXPECTED(prop_info != NULL)) {
26046 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
26047 						goto free_and_exit_assign_obj;
26048 					} else {
26049 fast_assign_obj:
26050 						value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
26051 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26052 							ZVAL_COPY(EX_VAR(opline->result.var), value);
26053 						}
26054 						goto exit_assign_obj;
26055 					}
26056 				}
26057 			} else {
26058 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26059 				if (EXPECTED(zobj->properties != NULL)) {
26060 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26061 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26062 							GC_DELREF(zobj->properties);
26063 						}
26064 						zobj->properties = zend_array_dup(zobj->properties);
26065 					}
26066 					property_val = zend_hash_find_known_hash(zobj->properties, name);
26067 					if (property_val) {
26068 						goto fast_assign_obj;
26069 					}
26070 				}
26071 
26072 				if (!zobj->ce->__set) {
26073 					if (EXPECTED(zobj->properties == NULL)) {
26074 						rebuild_object_properties(zobj);
26075 					}
26076 					if (IS_CV == IS_CONST) {
26077 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26078 							Z_ADDREF_P(value);
26079 						}
26080 					} else if (IS_CV != IS_TMP_VAR) {
26081 						if (Z_ISREF_P(value)) {
26082 							if (IS_CV == IS_VAR) {
26083 								zend_reference *ref = Z_REF_P(value);
26084 								if (GC_DELREF(ref) == 0) {
26085 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26086 									efree_size(ref, sizeof(zend_reference));
26087 									value = &tmp;
26088 								} else {
26089 									value = Z_REFVAL_P(value);
26090 									Z_TRY_ADDREF_P(value);
26091 								}
26092 							} else {
26093 								value = Z_REFVAL_P(value);
26094 								Z_TRY_ADDREF_P(value);
26095 							}
26096 						} else if (IS_CV == IS_CV) {
26097 							Z_TRY_ADDREF_P(value);
26098 						}
26099 						}
26100 					zend_hash_add_new(zobj->properties, name, value);
26101 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26102 						ZVAL_COPY(EX_VAR(opline->result.var), value);
26103 					}
26104 					goto exit_assign_obj;
26105 				}
26106 			}
26107 		}
26108 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26109 	} else {
26110 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
26111 		if (UNEXPECTED(!name)) {
26112 
26113 			UNDEF_RESULT();
26114 			goto exit_assign_obj;
26115 		}
26116 	}
26117 
26118 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
26119 		ZVAL_DEREF(value);
26120 	}
26121 
26122 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
26123 
26124 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26125 		zend_tmp_string_release(tmp_name);
26126 	}
26127 
26128 free_and_exit_assign_obj:
26129 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26130 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
26131 	}
26132 
26133 exit_assign_obj:
26134 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26135 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26136 	/* assign_obj has two opcodes! */
26137 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26138 }
26139 
26140 /* 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)26141 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26142 {
26143 	USE_OPLINE
26144 	zval *object_ptr, *orig_object_ptr;
26145 	zval *value;
26146 	zval *variable_ptr;
26147 	zval *dim;
26148 
26149 	SAVE_OPLINE();
26150 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26151 
26152 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26153 try_assign_dim_array:
26154 		SEPARATE_ARRAY(object_ptr);
26155 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26156 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
26157 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
26158 				HashTable *ht = Z_ARRVAL_P(object_ptr);
26159 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
26160 					GC_ADDREF(ht);
26161 				}
26162 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26163 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
26164 					zend_array_destroy(ht);
26165 					goto assign_dim_error;
26166 				}
26167 			}
26168 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
26169 				ZVAL_DEREF(value);
26170 			}
26171 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
26172 			if (UNEXPECTED(value == NULL)) {
26173 				zend_cannot_add_element();
26174 				goto assign_dim_error;
26175 			} else if (IS_CONST == IS_CV) {
26176 				if (Z_REFCOUNTED_P(value)) {
26177 					Z_ADDREF_P(value);
26178 				}
26179 			} else if (IS_CONST == IS_VAR) {
26180 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
26181 				if (Z_ISREF_P(free_op_data)) {
26182 					if (Z_REFCOUNTED_P(value)) {
26183 						Z_ADDREF_P(value);
26184 					}
26185 					zval_ptr_dtor_nogc(free_op_data);
26186 				}
26187 			} else if (IS_CONST == IS_CONST) {
26188 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
26189 					Z_ADDREF_P(value);
26190 				}
26191 			}
26192 		} else {
26193 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26194 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26195 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26196 			} else {
26197 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26198 			}
26199 			if (UNEXPECTED(variable_ptr == NULL)) {
26200 				goto assign_dim_error;
26201 			}
26202 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
26203 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
26204 		}
26205 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26206 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26207 		}
26208 	} else {
26209 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
26210 			object_ptr = Z_REFVAL_P(object_ptr);
26211 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26212 				goto try_assign_dim_array;
26213 			}
26214 		}
26215 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
26216 			zend_object *obj = Z_OBJ_P(object_ptr);
26217 
26218 			GC_ADDREF(obj);
26219 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26220 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
26221 				dim = ZVAL_UNDEFINED_OP2();
26222 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26223 				dim++;
26224 			}
26225 
26226 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
26227 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
26228 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26229 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
26230 				ZVAL_DEREF(value);
26231 			}
26232 
26233 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
26234 
26235 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
26236 				zend_objects_store_del(obj);
26237 			}
26238 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
26239 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26240 				zend_use_new_element_for_string();
26241 
26242 				UNDEF_RESULT();
26243 			} else {
26244 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26245 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
26246 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
26247 
26248 			}
26249 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
26250 			if (Z_ISREF_P(orig_object_ptr)
26251 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
26252 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
26253 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26254 
26255 				UNDEF_RESULT();
26256 			} else {
26257 				HashTable *ht = zend_new_array(8);
26258 				zend_uchar old_type = Z_TYPE_P(object_ptr);
26259 
26260 				ZVAL_ARR(object_ptr, ht);
26261 				if (UNEXPECTED(old_type == IS_FALSE)) {
26262 					GC_ADDREF(ht);
26263 					zend_false_to_array_deprecated();
26264 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
26265 						zend_array_destroy(ht);
26266 						goto assign_dim_error;
26267 					}
26268 				}
26269 				goto try_assign_dim_array;
26270 			}
26271 		} else {
26272 			zend_use_scalar_as_array();
26273 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26274 assign_dim_error:
26275 
26276 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26277 				ZVAL_NULL(EX_VAR(opline->result.var));
26278 			}
26279 		}
26280 	}
26281 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26282 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26283 	}
26284 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26285 	/* assign_dim has two opcodes! */
26286 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26287 }
26288 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26289 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26290 {
26291 	USE_OPLINE
26292 	zval *object_ptr, *orig_object_ptr;
26293 	zval *value;
26294 	zval *variable_ptr;
26295 	zval *dim;
26296 
26297 	SAVE_OPLINE();
26298 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26299 
26300 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26301 try_assign_dim_array:
26302 		SEPARATE_ARRAY(object_ptr);
26303 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26304 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26305 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
26306 				HashTable *ht = Z_ARRVAL_P(object_ptr);
26307 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
26308 					GC_ADDREF(ht);
26309 				}
26310 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26311 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
26312 					zend_array_destroy(ht);
26313 					goto assign_dim_error;
26314 				}
26315 			}
26316 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
26317 				ZVAL_DEREF(value);
26318 			}
26319 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
26320 			if (UNEXPECTED(value == NULL)) {
26321 				zend_cannot_add_element();
26322 				goto assign_dim_error;
26323 			} else if (IS_TMP_VAR == IS_CV) {
26324 				if (Z_REFCOUNTED_P(value)) {
26325 					Z_ADDREF_P(value);
26326 				}
26327 			} else if (IS_TMP_VAR == IS_VAR) {
26328 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
26329 				if (Z_ISREF_P(free_op_data)) {
26330 					if (Z_REFCOUNTED_P(value)) {
26331 						Z_ADDREF_P(value);
26332 					}
26333 					zval_ptr_dtor_nogc(free_op_data);
26334 				}
26335 			} else if (IS_TMP_VAR == IS_CONST) {
26336 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
26337 					Z_ADDREF_P(value);
26338 				}
26339 			}
26340 		} else {
26341 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26342 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26343 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26344 			} else {
26345 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26346 			}
26347 			if (UNEXPECTED(variable_ptr == NULL)) {
26348 				goto assign_dim_error;
26349 			}
26350 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26351 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
26352 		}
26353 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26354 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26355 		}
26356 	} else {
26357 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
26358 			object_ptr = Z_REFVAL_P(object_ptr);
26359 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26360 				goto try_assign_dim_array;
26361 			}
26362 		}
26363 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
26364 			zend_object *obj = Z_OBJ_P(object_ptr);
26365 
26366 			GC_ADDREF(obj);
26367 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26368 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
26369 				dim = ZVAL_UNDEFINED_OP2();
26370 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26371 				dim++;
26372 			}
26373 
26374 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26375 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
26376 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26377 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
26378 				ZVAL_DEREF(value);
26379 			}
26380 
26381 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
26382 
26383 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26384 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
26385 				zend_objects_store_del(obj);
26386 			}
26387 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
26388 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26389 				zend_use_new_element_for_string();
26390 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26391 				UNDEF_RESULT();
26392 			} else {
26393 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26394 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26395 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
26396 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26397 			}
26398 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
26399 			if (Z_ISREF_P(orig_object_ptr)
26400 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
26401 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
26402 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26403 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26404 				UNDEF_RESULT();
26405 			} else {
26406 				HashTable *ht = zend_new_array(8);
26407 				zend_uchar old_type = Z_TYPE_P(object_ptr);
26408 
26409 				ZVAL_ARR(object_ptr, ht);
26410 				if (UNEXPECTED(old_type == IS_FALSE)) {
26411 					GC_ADDREF(ht);
26412 					zend_false_to_array_deprecated();
26413 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
26414 						zend_array_destroy(ht);
26415 						goto assign_dim_error;
26416 					}
26417 				}
26418 				goto try_assign_dim_array;
26419 			}
26420 		} else {
26421 			zend_use_scalar_as_array();
26422 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26423 assign_dim_error:
26424 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26425 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26426 				ZVAL_NULL(EX_VAR(opline->result.var));
26427 			}
26428 		}
26429 	}
26430 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26431 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26432 	}
26433 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26434 	/* assign_dim has two opcodes! */
26435 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26436 }
26437 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26438 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26439 {
26440 	USE_OPLINE
26441 	zval *object_ptr, *orig_object_ptr;
26442 	zval *value;
26443 	zval *variable_ptr;
26444 	zval *dim;
26445 
26446 	SAVE_OPLINE();
26447 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26448 
26449 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26450 try_assign_dim_array:
26451 		SEPARATE_ARRAY(object_ptr);
26452 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26453 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26454 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
26455 				HashTable *ht = Z_ARRVAL_P(object_ptr);
26456 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
26457 					GC_ADDREF(ht);
26458 				}
26459 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26460 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
26461 					zend_array_destroy(ht);
26462 					goto assign_dim_error;
26463 				}
26464 			}
26465 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
26466 				ZVAL_DEREF(value);
26467 			}
26468 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
26469 			if (UNEXPECTED(value == NULL)) {
26470 				zend_cannot_add_element();
26471 				goto assign_dim_error;
26472 			} else if (IS_VAR == IS_CV) {
26473 				if (Z_REFCOUNTED_P(value)) {
26474 					Z_ADDREF_P(value);
26475 				}
26476 			} else if (IS_VAR == IS_VAR) {
26477 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
26478 				if (Z_ISREF_P(free_op_data)) {
26479 					if (Z_REFCOUNTED_P(value)) {
26480 						Z_ADDREF_P(value);
26481 					}
26482 					zval_ptr_dtor_nogc(free_op_data);
26483 				}
26484 			} else if (IS_VAR == IS_CONST) {
26485 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
26486 					Z_ADDREF_P(value);
26487 				}
26488 			}
26489 		} else {
26490 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26491 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26492 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26493 			} else {
26494 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26495 			}
26496 			if (UNEXPECTED(variable_ptr == NULL)) {
26497 				goto assign_dim_error;
26498 			}
26499 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26500 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
26501 		}
26502 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26503 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26504 		}
26505 	} else {
26506 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
26507 			object_ptr = Z_REFVAL_P(object_ptr);
26508 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26509 				goto try_assign_dim_array;
26510 			}
26511 		}
26512 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
26513 			zend_object *obj = Z_OBJ_P(object_ptr);
26514 
26515 			GC_ADDREF(obj);
26516 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26517 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
26518 				dim = ZVAL_UNDEFINED_OP2();
26519 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26520 				dim++;
26521 			}
26522 
26523 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26524 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
26525 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26526 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
26527 				ZVAL_DEREF(value);
26528 			}
26529 
26530 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
26531 
26532 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26533 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
26534 				zend_objects_store_del(obj);
26535 			}
26536 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
26537 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26538 				zend_use_new_element_for_string();
26539 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26540 				UNDEF_RESULT();
26541 			} else {
26542 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26543 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26544 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
26545 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26546 			}
26547 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
26548 			if (Z_ISREF_P(orig_object_ptr)
26549 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
26550 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
26551 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26552 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26553 				UNDEF_RESULT();
26554 			} else {
26555 				HashTable *ht = zend_new_array(8);
26556 				zend_uchar old_type = Z_TYPE_P(object_ptr);
26557 
26558 				ZVAL_ARR(object_ptr, ht);
26559 				if (UNEXPECTED(old_type == IS_FALSE)) {
26560 					GC_ADDREF(ht);
26561 					zend_false_to_array_deprecated();
26562 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
26563 						zend_array_destroy(ht);
26564 						goto assign_dim_error;
26565 					}
26566 				}
26567 				goto try_assign_dim_array;
26568 			}
26569 		} else {
26570 			zend_use_scalar_as_array();
26571 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26572 assign_dim_error:
26573 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26574 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26575 				ZVAL_NULL(EX_VAR(opline->result.var));
26576 			}
26577 		}
26578 	}
26579 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26580 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26581 	}
26582 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26583 	/* assign_dim has two opcodes! */
26584 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26585 }
26586 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26587 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26588 {
26589 	USE_OPLINE
26590 	zval *object_ptr, *orig_object_ptr;
26591 	zval *value;
26592 	zval *variable_ptr;
26593 	zval *dim;
26594 
26595 	SAVE_OPLINE();
26596 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26597 
26598 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26599 try_assign_dim_array:
26600 		SEPARATE_ARRAY(object_ptr);
26601 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26602 			value = EX_VAR((opline+1)->op1.var);
26603 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
26604 				HashTable *ht = Z_ARRVAL_P(object_ptr);
26605 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
26606 					GC_ADDREF(ht);
26607 				}
26608 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26609 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
26610 					zend_array_destroy(ht);
26611 					goto assign_dim_error;
26612 				}
26613 			}
26614 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
26615 				ZVAL_DEREF(value);
26616 			}
26617 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
26618 			if (UNEXPECTED(value == NULL)) {
26619 				zend_cannot_add_element();
26620 				goto assign_dim_error;
26621 			} else if (IS_CV == IS_CV) {
26622 				if (Z_REFCOUNTED_P(value)) {
26623 					Z_ADDREF_P(value);
26624 				}
26625 			} else if (IS_CV == IS_VAR) {
26626 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
26627 				if (Z_ISREF_P(free_op_data)) {
26628 					if (Z_REFCOUNTED_P(value)) {
26629 						Z_ADDREF_P(value);
26630 					}
26631 					zval_ptr_dtor_nogc(free_op_data);
26632 				}
26633 			} else if (IS_CV == IS_CONST) {
26634 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
26635 					Z_ADDREF_P(value);
26636 				}
26637 			}
26638 		} else {
26639 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26640 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26641 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26642 			} else {
26643 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26644 			}
26645 			if (UNEXPECTED(variable_ptr == NULL)) {
26646 				goto assign_dim_error;
26647 			}
26648 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
26649 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
26650 		}
26651 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26652 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26653 		}
26654 	} else {
26655 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
26656 			object_ptr = Z_REFVAL_P(object_ptr);
26657 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26658 				goto try_assign_dim_array;
26659 			}
26660 		}
26661 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
26662 			zend_object *obj = Z_OBJ_P(object_ptr);
26663 
26664 			GC_ADDREF(obj);
26665 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26666 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
26667 				dim = ZVAL_UNDEFINED_OP2();
26668 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26669 				dim++;
26670 			}
26671 
26672 			value = EX_VAR((opline+1)->op1.var);
26673 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
26674 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26675 			} else if (IS_CV & (IS_CV|IS_VAR)) {
26676 				ZVAL_DEREF(value);
26677 			}
26678 
26679 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
26680 
26681 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
26682 				zend_objects_store_del(obj);
26683 			}
26684 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
26685 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26686 				zend_use_new_element_for_string();
26687 
26688 				UNDEF_RESULT();
26689 			} else {
26690 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26691 				value = EX_VAR((opline+1)->op1.var);
26692 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
26693 
26694 			}
26695 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
26696 			if (Z_ISREF_P(orig_object_ptr)
26697 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
26698 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
26699 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26700 
26701 				UNDEF_RESULT();
26702 			} else {
26703 				HashTable *ht = zend_new_array(8);
26704 				zend_uchar old_type = Z_TYPE_P(object_ptr);
26705 
26706 				ZVAL_ARR(object_ptr, ht);
26707 				if (UNEXPECTED(old_type == IS_FALSE)) {
26708 					GC_ADDREF(ht);
26709 					zend_false_to_array_deprecated();
26710 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
26711 						zend_array_destroy(ht);
26712 						goto assign_dim_error;
26713 					}
26714 				}
26715 				goto try_assign_dim_array;
26716 			}
26717 		} else {
26718 			zend_use_scalar_as_array();
26719 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26720 assign_dim_error:
26721 
26722 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26723 				ZVAL_NULL(EX_VAR(opline->result.var));
26724 			}
26725 		}
26726 	}
26727 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26728 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26729 	}
26730 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26731 	/* assign_dim has two opcodes! */
26732 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26733 }
26734 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26735 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26736 {
26737 	USE_OPLINE
26738 	zval *property, *container, *value_ptr;
26739 
26740 	SAVE_OPLINE();
26741 
26742 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26743 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26744 
26745 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26746 
26747 	if (1) {
26748 		if (IS_VAR == IS_UNUSED) {
26749 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26750 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26751 			} else {
26752 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26753 			}
26754 		} else {
26755 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26756 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26757 			} else {
26758 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26759 			}
26760 		}
26761 	} else {
26762 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
26763 	}
26764 
26765 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26766 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26767 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
26768 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26769 }
26770 
26771 /* 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)26772 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26773 {
26774 	USE_OPLINE
26775 	zval *property, *container, *value_ptr;
26776 
26777 	SAVE_OPLINE();
26778 
26779 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26780 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26781 
26782 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
26783 
26784 	if (1) {
26785 		if (IS_VAR == IS_UNUSED) {
26786 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26787 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26788 			} else {
26789 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26790 			}
26791 		} else {
26792 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26793 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26794 			} else {
26795 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26796 			}
26797 		}
26798 	} else {
26799 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
26800 	}
26801 
26802 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26803 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26804 
26805 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26806 }
26807 
26808 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26809 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26810 {
26811 	USE_OPLINE
26812 	zval *function_name;
26813 	zend_class_entry *ce;
26814 	uint32_t call_info;
26815 	zend_function *fbc;
26816 	zend_execute_data *call;
26817 
26818 	SAVE_OPLINE();
26819 
26820 	if (IS_VAR == IS_CONST) {
26821 		/* no function found. try a static method in class */
26822 		ce = CACHED_PTR(opline->result.num);
26823 		if (UNEXPECTED(ce == NULL)) {
26824 			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);
26825 			if (UNEXPECTED(ce == NULL)) {
26826 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26827 				HANDLE_EXCEPTION();
26828 			}
26829 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26830 				CACHE_PTR(opline->result.num, ce);
26831 			}
26832 		}
26833 	} else if (IS_VAR == IS_UNUSED) {
26834 		ce = zend_fetch_class(NULL, opline->op1.num);
26835 		if (UNEXPECTED(ce == NULL)) {
26836 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26837 			HANDLE_EXCEPTION();
26838 		}
26839 	} else {
26840 		ce = Z_CE_P(EX_VAR(opline->op1.var));
26841 	}
26842 
26843 	if (IS_VAR == IS_CONST &&
26844 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
26845 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
26846 		/* nothing to do */
26847 	} else if (IS_VAR != IS_CONST &&
26848 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
26849 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
26850 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
26851 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26852 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26853 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26854 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
26855 				do {
26856 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
26857 						function_name = Z_REFVAL_P(function_name);
26858 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
26859 							break;
26860 						}
26861 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
26862 						ZVAL_UNDEFINED_OP2();
26863 						if (UNEXPECTED(EG(exception) != NULL)) {
26864 							HANDLE_EXCEPTION();
26865 						}
26866 					}
26867 					zend_throw_error(NULL, "Method name must be a string");
26868 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26869 					HANDLE_EXCEPTION();
26870 				} while (0);
26871 			}
26872 		}
26873 
26874 		if (ce->get_static_method) {
26875 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
26876 		} else {
26877 			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));
26878 		}
26879 		if (UNEXPECTED(fbc == NULL)) {
26880 			if (EXPECTED(!EG(exception))) {
26881 				zend_undefined_method(ce, Z_STR_P(function_name));
26882 			}
26883 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26884 			HANDLE_EXCEPTION();
26885 		}
26886 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
26887 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
26888 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
26889 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
26890 		}
26891 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
26892 			init_func_run_time_cache(&fbc->op_array);
26893 		}
26894 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26895 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26896 		}
26897 	} else {
26898 		if (UNEXPECTED(ce->constructor == NULL)) {
26899 			zend_throw_error(NULL, "Cannot call constructor");
26900 			HANDLE_EXCEPTION();
26901 		}
26902 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
26903 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
26904 			HANDLE_EXCEPTION();
26905 		}
26906 		fbc = ce->constructor;
26907 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
26908 			init_func_run_time_cache(&fbc->op_array);
26909 		}
26910 	}
26911 
26912 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
26913 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
26914 			ce = (zend_class_entry*)Z_OBJ(EX(This));
26915 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
26916 		} else {
26917 			zend_non_static_method_call(fbc);
26918 			HANDLE_EXCEPTION();
26919 		}
26920 	} else {
26921 		/* previous opcode is ZEND_FETCH_CLASS */
26922 		if (IS_VAR == IS_UNUSED
26923 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
26924 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
26925 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
26926 				ce = Z_OBJCE(EX(This));
26927 			} else {
26928 				ce = Z_CE(EX(This));
26929 			}
26930 		}
26931 		call_info = ZEND_CALL_NESTED_FUNCTION;
26932 	}
26933 
26934 	call = zend_vm_stack_push_call_frame(call_info,
26935 		fbc, opline->extended_value, ce);
26936 	call->prev_execute_data = EX(call);
26937 	EX(call) = call;
26938 
26939 	ZEND_VM_NEXT_OPCODE();
26940 }
26941 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26942 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26943 {
26944 	USE_OPLINE
26945 	zval *expr_ptr, new_expr;
26946 
26947 	SAVE_OPLINE();
26948 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
26949 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
26950 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26951 		if (Z_ISREF_P(expr_ptr)) {
26952 			Z_ADDREF_P(expr_ptr);
26953 		} else {
26954 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
26955 		}
26956 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26957 	} else {
26958 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26959 		if (IS_VAR == IS_TMP_VAR) {
26960 			/* pass */
26961 		} else if (IS_VAR == IS_CONST) {
26962 			Z_TRY_ADDREF_P(expr_ptr);
26963 		} else if (IS_VAR == IS_CV) {
26964 			ZVAL_DEREF(expr_ptr);
26965 			Z_TRY_ADDREF_P(expr_ptr);
26966 		} else /* if (IS_VAR == IS_VAR) */ {
26967 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
26968 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
26969 
26970 				expr_ptr = Z_REFVAL_P(expr_ptr);
26971 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
26972 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
26973 					expr_ptr = &new_expr;
26974 					efree_size(ref, sizeof(zend_reference));
26975 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
26976 					Z_ADDREF_P(expr_ptr);
26977 				}
26978 			}
26979 		}
26980 	}
26981 
26982 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26983 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26984 		zend_string *str;
26985 		zend_ulong hval;
26986 
26987 add_again:
26988 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
26989 			str = Z_STR_P(offset);
26990 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26991 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
26992 					goto num_index;
26993 				}
26994 			}
26995 str_index:
26996 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
26997 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
26998 			hval = Z_LVAL_P(offset);
26999 num_index:
27000 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
27001 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
27002 			offset = Z_REFVAL_P(offset);
27003 			goto add_again;
27004 		} else if (Z_TYPE_P(offset) == IS_NULL) {
27005 			str = ZSTR_EMPTY_ALLOC();
27006 			goto str_index;
27007 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
27008 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
27009 			goto num_index;
27010 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
27011 			hval = 0;
27012 			goto num_index;
27013 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
27014 			hval = 1;
27015 			goto num_index;
27016 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
27017 			zend_use_resource_as_offset(offset);
27018 			hval = Z_RES_HANDLE_P(offset);
27019 			goto num_index;
27020 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
27021 			ZVAL_UNDEFINED_OP2();
27022 			str = ZSTR_EMPTY_ALLOC();
27023 			goto str_index;
27024 		} else {
27025 			zend_illegal_offset();
27026 			zval_ptr_dtor_nogc(expr_ptr);
27027 		}
27028 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27029 	} else {
27030 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
27031 			zend_cannot_add_element();
27032 			zval_ptr_dtor_nogc(expr_ptr);
27033 		}
27034 	}
27035 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27036 }
27037 
ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27038 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27039 {
27040 	zval *array;
27041 	uint32_t size;
27042 	USE_OPLINE
27043 
27044 	array = EX_VAR(opline->result.var);
27045 	if (IS_VAR != IS_UNUSED) {
27046 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
27047 		ZVAL_ARR(array, zend_new_array(size));
27048 		/* Explicitly initialize array as not-packed if flag is set */
27049 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
27050 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
27051 		}
27052 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27053 	} else {
27054 		ZVAL_ARR(array, zend_new_array(0));
27055 		ZEND_VM_NEXT_OPCODE();
27056 	}
27057 }
27058 
ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27060 {
27061 	USE_OPLINE
27062 	zval *container;
27063 	zval *offset;
27064 	zend_ulong hval;
27065 	zend_string *key;
27066 
27067 	SAVE_OPLINE();
27068 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27069 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27070 
27071 	do {
27072 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27073 			HashTable *ht;
27074 
27075 unset_dim_array:
27076 			SEPARATE_ARRAY(container);
27077 			ht = Z_ARRVAL_P(container);
27078 offset_again:
27079 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
27080 				key = Z_STR_P(offset);
27081 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27082 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
27083 						goto num_index_dim;
27084 					}
27085 				}
27086 str_index_dim:
27087 				ZEND_ASSERT(ht != &EG(symbol_table));
27088 				zend_hash_del(ht, key);
27089 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
27090 				hval = Z_LVAL_P(offset);
27091 num_index_dim:
27092 				zend_hash_index_del(ht, hval);
27093 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
27094 				offset = Z_REFVAL_P(offset);
27095 				goto offset_again;
27096 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
27097 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
27098 				goto num_index_dim;
27099 			} else if (Z_TYPE_P(offset) == IS_NULL) {
27100 				key = ZSTR_EMPTY_ALLOC();
27101 				goto str_index_dim;
27102 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
27103 				hval = 0;
27104 				goto num_index_dim;
27105 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
27106 				hval = 1;
27107 				goto num_index_dim;
27108 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
27109 				zend_use_resource_as_offset(offset);
27110 				hval = Z_RES_HANDLE_P(offset);
27111 				goto num_index_dim;
27112 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
27113 				ZVAL_UNDEFINED_OP2();
27114 				key = ZSTR_EMPTY_ALLOC();
27115 				goto str_index_dim;
27116 			} else {
27117 				zend_type_error("Illegal offset type in unset");
27118 			}
27119 			break;
27120 		} else if (Z_ISREF_P(container)) {
27121 			container = Z_REFVAL_P(container);
27122 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27123 				goto unset_dim_array;
27124 			}
27125 		}
27126 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
27127 			container = ZVAL_UNDEFINED_OP1();
27128 		}
27129 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
27130 			offset = ZVAL_UNDEFINED_OP2();
27131 		}
27132 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
27133 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
27134 				offset++;
27135 			}
27136 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
27137 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
27138 			zend_throw_error(NULL, "Cannot unset string offsets");
27139 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
27140 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
27141 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
27142 			zend_false_to_array_deprecated();
27143 		}
27144 	} while (0);
27145 
27146 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27147 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27148 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27149 }
27150 
ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27151 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27152 {
27153 	USE_OPLINE
27154 	zval *container;
27155 	zval *offset;
27156 	zend_string *name, *tmp_name;
27157 
27158 	SAVE_OPLINE();
27159 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27160 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27161 
27162 	do {
27163 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
27164 			if (Z_ISREF_P(container)) {
27165 				container = Z_REFVAL_P(container);
27166 				if (Z_TYPE_P(container) != IS_OBJECT) {
27167 					if (IS_VAR == IS_CV
27168 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
27169 						ZVAL_UNDEFINED_OP1();
27170 					}
27171 					break;
27172 				}
27173 			} else {
27174 				break;
27175 			}
27176 		}
27177 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27178 			name = Z_STR_P(offset);
27179 		} else {
27180 			name = zval_try_get_tmp_string(offset, &tmp_name);
27181 			if (UNEXPECTED(!name)) {
27182 				break;
27183 			}
27184 		}
27185 		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));
27186 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27187 			zend_tmp_string_release(tmp_name);
27188 		}
27189 	} while (0);
27190 
27191 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27192 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27193 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27194 }
27195 
ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27196 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27197 {
27198 	USE_OPLINE
27199 
27200 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
27201 
27202 	SAVE_OPLINE();
27203 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
27204 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27205 	}
27206 
27207 	/* Destroy the previously yielded value */
27208 	zval_ptr_dtor(&generator->value);
27209 
27210 	/* Destroy the previously yielded key */
27211 	zval_ptr_dtor(&generator->key);
27212 
27213 	/* Set the new yielded value */
27214 	if (IS_VAR != IS_UNUSED) {
27215 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
27216 			/* Constants and temporary variables aren't yieldable by reference,
27217 			 * but we still allow them with a notice. */
27218 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
27219 				zval *value;
27220 
27221 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
27222 
27223 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27224 				ZVAL_COPY_VALUE(&generator->value, value);
27225 				if (IS_VAR == IS_CONST) {
27226 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
27227 						Z_ADDREF(generator->value);
27228 					}
27229 				}
27230 			} else {
27231 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27232 
27233 				/* If a function call result is yielded and the function did
27234 				 * not return by reference we throw a notice. */
27235 				do {
27236 					if (IS_VAR == IS_VAR) {
27237 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
27238 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
27239 						 && !Z_ISREF_P(value_ptr)) {
27240 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
27241 							ZVAL_COPY(&generator->value, value_ptr);
27242 							break;
27243 						}
27244 					}
27245 					if (Z_ISREF_P(value_ptr)) {
27246 						Z_ADDREF_P(value_ptr);
27247 					} else {
27248 						ZVAL_MAKE_REF_EX(value_ptr, 2);
27249 					}
27250 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
27251 				} while (0);
27252 
27253 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27254 			}
27255 		} else {
27256 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27257 
27258 			/* Consts, temporary variables and references need copying */
27259 			if (IS_VAR == IS_CONST) {
27260 				ZVAL_COPY_VALUE(&generator->value, value);
27261 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
27262 					Z_ADDREF(generator->value);
27263 				}
27264 			} else if (IS_VAR == IS_TMP_VAR) {
27265 				ZVAL_COPY_VALUE(&generator->value, value);
27266             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
27267 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
27268 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27269 			} else {
27270 				ZVAL_COPY_VALUE(&generator->value, value);
27271 				if (IS_VAR == IS_CV) {
27272 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
27273 				}
27274 			}
27275 		}
27276 	} else {
27277 		/* If no value was specified yield null */
27278 		ZVAL_NULL(&generator->value);
27279 	}
27280 
27281 	/* Set the new yielded key */
27282 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27283 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27284 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
27285 			key = Z_REFVAL_P(key);
27286 		}
27287 		ZVAL_COPY(&generator->key, key);
27288 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27289 
27290 		if (Z_TYPE(generator->key) == IS_LONG
27291 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
27292 		) {
27293 			generator->largest_used_integer_key = Z_LVAL(generator->key);
27294 		}
27295 	} else {
27296 		/* If no key was specified we use auto-increment keys */
27297 		generator->largest_used_integer_key++;
27298 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
27299 	}
27300 
27301 	if (RETURN_VALUE_USED(opline)) {
27302 		/* If the return value of yield is used set the send
27303 		 * target and initialize it to NULL */
27304 		generator->send_target = EX_VAR(opline->result.var);
27305 		ZVAL_NULL(generator->send_target);
27306 	} else {
27307 		generator->send_target = NULL;
27308 	}
27309 
27310 	/* We increment to the next op, so we are at the correct position when the
27311 	 * generator is resumed. */
27312 	ZEND_VM_INC_OPCODE();
27313 
27314 	/* The GOTO VM uses a local opline variable. We need to set the opline
27315 	 * variable in execute_data so we don't resume at an old position. */
27316 	SAVE_OPLINE();
27317 
27318 	ZEND_VM_RETURN();
27319 }
27320 
ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27321 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27322 {
27323 	USE_OPLINE
27324 	zval *op1, *op2;
27325 	bool result;
27326 
27327 	SAVE_OPLINE();
27328 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27329 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27330 	result = fast_is_identical_function(op1, op2);
27331 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27332 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27333 	ZEND_VM_SMART_BRANCH(result, 1);
27334 }
27335 
ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27336 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27337 {
27338 	USE_OPLINE
27339 	zval *op1, *op2;
27340 	bool result;
27341 
27342 	SAVE_OPLINE();
27343 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27344 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27345 	result = fast_is_identical_function(op1, op2);
27346 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27347 	ZEND_VM_SMART_BRANCH(result, 1);
27348 }
27349 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27350 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27351 {
27352 	USE_OPLINE
27353 	zval *op1, *op2;
27354 	bool result;
27355 
27356 	SAVE_OPLINE();
27357 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27358 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27359 	result = fast_is_not_identical_function(op1, op2);
27360 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27361 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27362 	ZEND_VM_SMART_BRANCH(result, 1);
27363 }
27364 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27365 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27366 {
27367 	USE_OPLINE
27368 	zval *value;
27369 	zval *variable_ptr;
27370 
27371 	SAVE_OPLINE();
27372 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27373 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27374 
27375 	value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
27376 	if (UNEXPECTED(0)) {
27377 		ZVAL_COPY(EX_VAR(opline->result.var), value);
27378 	}
27379 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27380 	/* zend_assign_to_variable() always takes care of op2, never free it! */
27381 
27382 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27383 }
27384 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27385 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27386 {
27387 	USE_OPLINE
27388 	zval *value;
27389 	zval *variable_ptr;
27390 
27391 	SAVE_OPLINE();
27392 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27393 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27394 
27395 	value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
27396 	if (UNEXPECTED(1)) {
27397 		ZVAL_COPY(EX_VAR(opline->result.var), value);
27398 	}
27399 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27400 	/* zend_assign_to_variable() always takes care of op2, never free it! */
27401 
27402 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27403 }
27404 
ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27405 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27406 {
27407 	USE_OPLINE
27408 	zval *op1, *op2;
27409 	bool result;
27410 
27411 	SAVE_OPLINE();
27412 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27413 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
27414 	result = fast_is_identical_function(op1, op2);
27415 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27416 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27417 	ZEND_VM_SMART_BRANCH(result, 1);
27418 }
27419 
ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27420 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27421 {
27422 	USE_OPLINE
27423 	zval *op1, *op2;
27424 	bool result;
27425 
27426 	SAVE_OPLINE();
27427 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27428 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
27429 	result = fast_is_identical_function(op1, op2);
27430 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27431 	ZEND_VM_SMART_BRANCH(result, 1);
27432 }
27433 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27434 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27435 {
27436 	USE_OPLINE
27437 	zval *op1, *op2;
27438 	bool result;
27439 
27440 	SAVE_OPLINE();
27441 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27442 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
27443 	result = fast_is_not_identical_function(op1, op2);
27444 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27445 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27446 	ZEND_VM_SMART_BRANCH(result, 1);
27447 }
27448 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27449 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27450 {
27451 	USE_OPLINE
27452 	zval *value;
27453 	zval *variable_ptr;
27454 
27455 	SAVE_OPLINE();
27456 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27457 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27458 
27459 	value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
27460 	if (UNEXPECTED(0)) {
27461 		ZVAL_COPY(EX_VAR(opline->result.var), value);
27462 	}
27463 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27464 	/* zend_assign_to_variable() always takes care of op2, never free it! */
27465 
27466 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27467 }
27468 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27469 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27470 {
27471 	USE_OPLINE
27472 	zval *value;
27473 	zval *variable_ptr;
27474 
27475 	SAVE_OPLINE();
27476 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27477 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27478 
27479 	value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
27480 	if (UNEXPECTED(1)) {
27481 		ZVAL_COPY(EX_VAR(opline->result.var), value);
27482 	}
27483 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27484 	/* zend_assign_to_variable() always takes care of op2, never free it! */
27485 
27486 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27487 }
27488 
ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27489 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27490 {
27491 	USE_OPLINE
27492 	zval *variable_ptr;
27493 	zval *value_ptr;
27494 
27495 	SAVE_OPLINE();
27496 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27497 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27498 
27499 	if (IS_VAR == IS_VAR &&
27500 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
27501 
27502 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
27503 		variable_ptr = &EG(uninitialized_zval);
27504 	} else if (IS_VAR == IS_VAR &&
27505 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
27506 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
27507 
27508 		variable_ptr = zend_wrong_assign_to_variable_reference(
27509 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27510 	} else {
27511 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
27512 	}
27513 
27514 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27515 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
27516 	}
27517 
27518 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27519 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27520 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27521 }
27522 
ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27523 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27524 {
27525 	USE_OPLINE
27526 	zval *var_ptr;
27527 	zval *value, *container, *dim;
27528 	HashTable *ht;
27529 
27530 	SAVE_OPLINE();
27531 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27532 
27533 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27534 assign_dim_op_array:
27535 		SEPARATE_ARRAY(container);
27536 		ht = Z_ARRVAL_P(container);
27537 assign_dim_op_new_array:
27538 		dim = NULL;
27539 		if (IS_UNUSED == IS_UNUSED) {
27540 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
27541 			if (UNEXPECTED(!var_ptr)) {
27542 				zend_cannot_add_element();
27543 				goto assign_dim_op_ret_null;
27544 			}
27545 		} else {
27546 			if (IS_UNUSED == IS_CONST) {
27547 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
27548 			} else {
27549 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
27550 			}
27551 			if (UNEXPECTED(!var_ptr)) {
27552 				goto assign_dim_op_ret_null;
27553 			}
27554 		}
27555 
27556 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
27557 
27558 		do {
27559 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
27560 				zend_reference *ref = Z_REF_P(var_ptr);
27561 				var_ptr = Z_REFVAL_P(var_ptr);
27562 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
27563 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
27564 					break;
27565 				}
27566 			}
27567 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
27568 		} while (0);
27569 
27570 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27571 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
27572 		}
27573 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
27574 	} else {
27575 		if (EXPECTED(Z_ISREF_P(container))) {
27576 			container = Z_REFVAL_P(container);
27577 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27578 				goto assign_dim_op_array;
27579 			}
27580 		}
27581 
27582 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
27583 			zend_object *obj = Z_OBJ_P(container);
27584 
27585 			dim = NULL;
27586 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27587 				dim++;
27588 			}
27589 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
27590 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
27591 			zend_uchar old_type;
27592 
27593 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
27594 				ZVAL_UNDEFINED_OP1();
27595 			}
27596 			ht = zend_new_array(8);
27597 			old_type = Z_TYPE_P(container);
27598 			ZVAL_ARR(container, ht);
27599 			if (UNEXPECTED(old_type == IS_FALSE)) {
27600 				GC_ADDREF(ht);
27601 				zend_false_to_array_deprecated();
27602 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27603 					zend_array_destroy(ht);
27604 					goto assign_dim_op_ret_null;
27605 				}
27606 			}
27607 			goto assign_dim_op_new_array;
27608 		} else {
27609 			dim = NULL;
27610 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
27611 assign_dim_op_ret_null:
27612 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
27613 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27614 				ZVAL_NULL(EX_VAR(opline->result.var));
27615 			}
27616 		}
27617 	}
27618 
27619 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27620 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27621 }
27622 
ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27623 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27624 {
27625 	USE_OPLINE
27626 	zval *container;
27627 
27628 	SAVE_OPLINE();
27629 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27630 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
27631 
27632 	if (IS_VAR == IS_VAR) {
27633 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
27634 	}
27635 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27636 }
27637 
ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27638 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27639 {
27640 	USE_OPLINE
27641 	zval *container;
27642 
27643 	SAVE_OPLINE();
27644 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27645 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
27646 
27647 	if (IS_VAR == IS_VAR) {
27648 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
27649 	}
27650 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27651 }
27652 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27653 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27654 {
27655 #if 0
27656 	USE_OPLINE
27657 #endif
27658 
27659 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
27660         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
27661 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27662         }
27663 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27664 	} else {
27665 		if (IS_UNUSED == IS_UNUSED) {
27666 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27667 		}
27668 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27669 	}
27670 }
27671 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27673 {
27674 	USE_OPLINE
27675 	zval *object_ptr, *orig_object_ptr;
27676 	zval *value;
27677 	zval *variable_ptr;
27678 	zval *dim;
27679 
27680 	SAVE_OPLINE();
27681 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27682 
27683 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27684 try_assign_dim_array:
27685 		SEPARATE_ARRAY(object_ptr);
27686 		if (IS_UNUSED == IS_UNUSED) {
27687 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27688 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27689 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27690 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27691 					GC_ADDREF(ht);
27692 				}
27693 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27694 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27695 					zend_array_destroy(ht);
27696 					goto assign_dim_error;
27697 				}
27698 			}
27699 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
27700 				ZVAL_DEREF(value);
27701 			}
27702 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27703 			if (UNEXPECTED(value == NULL)) {
27704 				zend_cannot_add_element();
27705 				goto assign_dim_error;
27706 			} else if (IS_CONST == IS_CV) {
27707 				if (Z_REFCOUNTED_P(value)) {
27708 					Z_ADDREF_P(value);
27709 				}
27710 			} else if (IS_CONST == IS_VAR) {
27711 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27712 				if (Z_ISREF_P(free_op_data)) {
27713 					if (Z_REFCOUNTED_P(value)) {
27714 						Z_ADDREF_P(value);
27715 					}
27716 					zval_ptr_dtor_nogc(free_op_data);
27717 				}
27718 			} else if (IS_CONST == IS_CONST) {
27719 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27720 					Z_ADDREF_P(value);
27721 				}
27722 			}
27723 		} else {
27724 			dim = NULL;
27725 			if (IS_UNUSED == IS_CONST) {
27726 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27727 			} else {
27728 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27729 			}
27730 			if (UNEXPECTED(variable_ptr == NULL)) {
27731 				goto assign_dim_error;
27732 			}
27733 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27734 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
27735 		}
27736 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27737 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27738 		}
27739 	} else {
27740 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27741 			object_ptr = Z_REFVAL_P(object_ptr);
27742 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27743 				goto try_assign_dim_array;
27744 			}
27745 		}
27746 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27747 			zend_object *obj = Z_OBJ_P(object_ptr);
27748 
27749 			GC_ADDREF(obj);
27750 			dim = NULL;
27751 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27752 				dim = ZVAL_UNDEFINED_OP2();
27753 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27754 				dim++;
27755 			}
27756 
27757 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27758 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27759 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27760 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
27761 				ZVAL_DEREF(value);
27762 			}
27763 
27764 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27765 
27766 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27767 				zend_objects_store_del(obj);
27768 			}
27769 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27770 			if (IS_UNUSED == IS_UNUSED) {
27771 				zend_use_new_element_for_string();
27772 
27773 				UNDEF_RESULT();
27774 			} else {
27775 				dim = NULL;
27776 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
27777 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27778 
27779 			}
27780 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27781 			if (Z_ISREF_P(orig_object_ptr)
27782 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27783 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27784 				dim = NULL;
27785 
27786 				UNDEF_RESULT();
27787 			} else {
27788 				HashTable *ht = zend_new_array(8);
27789 				zend_uchar old_type = Z_TYPE_P(object_ptr);
27790 
27791 				ZVAL_ARR(object_ptr, ht);
27792 				if (UNEXPECTED(old_type == IS_FALSE)) {
27793 					GC_ADDREF(ht);
27794 					zend_false_to_array_deprecated();
27795 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27796 						zend_array_destroy(ht);
27797 						goto assign_dim_error;
27798 					}
27799 				}
27800 				goto try_assign_dim_array;
27801 			}
27802 		} else {
27803 			zend_use_scalar_as_array();
27804 			dim = NULL;
27805 assign_dim_error:
27806 
27807 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27808 				ZVAL_NULL(EX_VAR(opline->result.var));
27809 			}
27810 		}
27811 	}
27812 	if (IS_UNUSED != IS_UNUSED) {
27813 
27814 	}
27815 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27816 	/* assign_dim has two opcodes! */
27817 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27818 }
27819 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27820 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27821 {
27822 	USE_OPLINE
27823 	zval *object_ptr, *orig_object_ptr;
27824 	zval *value;
27825 	zval *variable_ptr;
27826 	zval *dim;
27827 
27828 	SAVE_OPLINE();
27829 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27830 
27831 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27832 try_assign_dim_array:
27833 		SEPARATE_ARRAY(object_ptr);
27834 		if (IS_UNUSED == IS_UNUSED) {
27835 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27836 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27837 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27838 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27839 					GC_ADDREF(ht);
27840 				}
27841 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27842 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27843 					zend_array_destroy(ht);
27844 					goto assign_dim_error;
27845 				}
27846 			}
27847 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
27848 				ZVAL_DEREF(value);
27849 			}
27850 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27851 			if (UNEXPECTED(value == NULL)) {
27852 				zend_cannot_add_element();
27853 				goto assign_dim_error;
27854 			} else if (IS_TMP_VAR == IS_CV) {
27855 				if (Z_REFCOUNTED_P(value)) {
27856 					Z_ADDREF_P(value);
27857 				}
27858 			} else if (IS_TMP_VAR == IS_VAR) {
27859 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27860 				if (Z_ISREF_P(free_op_data)) {
27861 					if (Z_REFCOUNTED_P(value)) {
27862 						Z_ADDREF_P(value);
27863 					}
27864 					zval_ptr_dtor_nogc(free_op_data);
27865 				}
27866 			} else if (IS_TMP_VAR == IS_CONST) {
27867 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27868 					Z_ADDREF_P(value);
27869 				}
27870 			}
27871 		} else {
27872 			dim = NULL;
27873 			if (IS_UNUSED == IS_CONST) {
27874 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27875 			} else {
27876 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27877 			}
27878 			if (UNEXPECTED(variable_ptr == NULL)) {
27879 				goto assign_dim_error;
27880 			}
27881 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27882 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
27883 		}
27884 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27885 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27886 		}
27887 	} else {
27888 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27889 			object_ptr = Z_REFVAL_P(object_ptr);
27890 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27891 				goto try_assign_dim_array;
27892 			}
27893 		}
27894 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27895 			zend_object *obj = Z_OBJ_P(object_ptr);
27896 
27897 			GC_ADDREF(obj);
27898 			dim = NULL;
27899 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27900 				dim = ZVAL_UNDEFINED_OP2();
27901 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27902 				dim++;
27903 			}
27904 
27905 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27906 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27907 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27908 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
27909 				ZVAL_DEREF(value);
27910 			}
27911 
27912 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27913 
27914 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27915 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27916 				zend_objects_store_del(obj);
27917 			}
27918 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27919 			if (IS_UNUSED == IS_UNUSED) {
27920 				zend_use_new_element_for_string();
27921 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27922 				UNDEF_RESULT();
27923 			} else {
27924 				dim = NULL;
27925 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27926 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27927 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27928 			}
27929 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27930 			if (Z_ISREF_P(orig_object_ptr)
27931 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27932 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27933 				dim = NULL;
27934 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27935 				UNDEF_RESULT();
27936 			} else {
27937 				HashTable *ht = zend_new_array(8);
27938 				zend_uchar old_type = Z_TYPE_P(object_ptr);
27939 
27940 				ZVAL_ARR(object_ptr, ht);
27941 				if (UNEXPECTED(old_type == IS_FALSE)) {
27942 					GC_ADDREF(ht);
27943 					zend_false_to_array_deprecated();
27944 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27945 						zend_array_destroy(ht);
27946 						goto assign_dim_error;
27947 					}
27948 				}
27949 				goto try_assign_dim_array;
27950 			}
27951 		} else {
27952 			zend_use_scalar_as_array();
27953 			dim = NULL;
27954 assign_dim_error:
27955 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27956 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27957 				ZVAL_NULL(EX_VAR(opline->result.var));
27958 			}
27959 		}
27960 	}
27961 	if (IS_UNUSED != IS_UNUSED) {
27962 
27963 	}
27964 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27965 	/* assign_dim has two opcodes! */
27966 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27967 }
27968 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27969 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27970 {
27971 	USE_OPLINE
27972 	zval *object_ptr, *orig_object_ptr;
27973 	zval *value;
27974 	zval *variable_ptr;
27975 	zval *dim;
27976 
27977 	SAVE_OPLINE();
27978 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27979 
27980 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27981 try_assign_dim_array:
27982 		SEPARATE_ARRAY(object_ptr);
27983 		if (IS_UNUSED == IS_UNUSED) {
27984 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27985 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27986 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27987 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27988 					GC_ADDREF(ht);
27989 				}
27990 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27991 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27992 					zend_array_destroy(ht);
27993 					goto assign_dim_error;
27994 				}
27995 			}
27996 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
27997 				ZVAL_DEREF(value);
27998 			}
27999 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
28000 			if (UNEXPECTED(value == NULL)) {
28001 				zend_cannot_add_element();
28002 				goto assign_dim_error;
28003 			} else if (IS_VAR == IS_CV) {
28004 				if (Z_REFCOUNTED_P(value)) {
28005 					Z_ADDREF_P(value);
28006 				}
28007 			} else if (IS_VAR == IS_VAR) {
28008 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
28009 				if (Z_ISREF_P(free_op_data)) {
28010 					if (Z_REFCOUNTED_P(value)) {
28011 						Z_ADDREF_P(value);
28012 					}
28013 					zval_ptr_dtor_nogc(free_op_data);
28014 				}
28015 			} else if (IS_VAR == IS_CONST) {
28016 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
28017 					Z_ADDREF_P(value);
28018 				}
28019 			}
28020 		} else {
28021 			dim = NULL;
28022 			if (IS_UNUSED == IS_CONST) {
28023 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28024 			} else {
28025 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28026 			}
28027 			if (UNEXPECTED(variable_ptr == NULL)) {
28028 				goto assign_dim_error;
28029 			}
28030 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
28031 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
28032 		}
28033 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28034 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28035 		}
28036 	} else {
28037 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
28038 			object_ptr = Z_REFVAL_P(object_ptr);
28039 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28040 				goto try_assign_dim_array;
28041 			}
28042 		}
28043 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
28044 			zend_object *obj = Z_OBJ_P(object_ptr);
28045 
28046 			GC_ADDREF(obj);
28047 			dim = NULL;
28048 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
28049 				dim = ZVAL_UNDEFINED_OP2();
28050 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28051 				dim++;
28052 			}
28053 
28054 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
28055 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
28056 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28057 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
28058 				ZVAL_DEREF(value);
28059 			}
28060 
28061 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
28062 
28063 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28064 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28065 				zend_objects_store_del(obj);
28066 			}
28067 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
28068 			if (IS_UNUSED == IS_UNUSED) {
28069 				zend_use_new_element_for_string();
28070 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28071 				UNDEF_RESULT();
28072 			} else {
28073 				dim = NULL;
28074 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
28075 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
28076 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28077 			}
28078 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
28079 			if (Z_ISREF_P(orig_object_ptr)
28080 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
28081 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
28082 				dim = NULL;
28083 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28084 				UNDEF_RESULT();
28085 			} else {
28086 				HashTable *ht = zend_new_array(8);
28087 				zend_uchar old_type = Z_TYPE_P(object_ptr);
28088 
28089 				ZVAL_ARR(object_ptr, ht);
28090 				if (UNEXPECTED(old_type == IS_FALSE)) {
28091 					GC_ADDREF(ht);
28092 					zend_false_to_array_deprecated();
28093 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
28094 						zend_array_destroy(ht);
28095 						goto assign_dim_error;
28096 					}
28097 				}
28098 				goto try_assign_dim_array;
28099 			}
28100 		} else {
28101 			zend_use_scalar_as_array();
28102 			dim = NULL;
28103 assign_dim_error:
28104 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28105 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28106 				ZVAL_NULL(EX_VAR(opline->result.var));
28107 			}
28108 		}
28109 	}
28110 	if (IS_UNUSED != IS_UNUSED) {
28111 
28112 	}
28113 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28114 	/* assign_dim has two opcodes! */
28115 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28116 }
28117 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28119 {
28120 	USE_OPLINE
28121 	zval *object_ptr, *orig_object_ptr;
28122 	zval *value;
28123 	zval *variable_ptr;
28124 	zval *dim;
28125 
28126 	SAVE_OPLINE();
28127 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28128 
28129 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28130 try_assign_dim_array:
28131 		SEPARATE_ARRAY(object_ptr);
28132 		if (IS_UNUSED == IS_UNUSED) {
28133 			value = EX_VAR((opline+1)->op1.var);
28134 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
28135 				HashTable *ht = Z_ARRVAL_P(object_ptr);
28136 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
28137 					GC_ADDREF(ht);
28138 				}
28139 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28140 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
28141 					zend_array_destroy(ht);
28142 					goto assign_dim_error;
28143 				}
28144 			}
28145 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
28146 				ZVAL_DEREF(value);
28147 			}
28148 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
28149 			if (UNEXPECTED(value == NULL)) {
28150 				zend_cannot_add_element();
28151 				goto assign_dim_error;
28152 			} else if (IS_CV == IS_CV) {
28153 				if (Z_REFCOUNTED_P(value)) {
28154 					Z_ADDREF_P(value);
28155 				}
28156 			} else if (IS_CV == IS_VAR) {
28157 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
28158 				if (Z_ISREF_P(free_op_data)) {
28159 					if (Z_REFCOUNTED_P(value)) {
28160 						Z_ADDREF_P(value);
28161 					}
28162 					zval_ptr_dtor_nogc(free_op_data);
28163 				}
28164 			} else if (IS_CV == IS_CONST) {
28165 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
28166 					Z_ADDREF_P(value);
28167 				}
28168 			}
28169 		} else {
28170 			dim = NULL;
28171 			if (IS_UNUSED == IS_CONST) {
28172 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28173 			} else {
28174 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28175 			}
28176 			if (UNEXPECTED(variable_ptr == NULL)) {
28177 				goto assign_dim_error;
28178 			}
28179 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
28180 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
28181 		}
28182 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28183 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28184 		}
28185 	} else {
28186 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
28187 			object_ptr = Z_REFVAL_P(object_ptr);
28188 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28189 				goto try_assign_dim_array;
28190 			}
28191 		}
28192 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
28193 			zend_object *obj = Z_OBJ_P(object_ptr);
28194 
28195 			GC_ADDREF(obj);
28196 			dim = NULL;
28197 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
28198 				dim = ZVAL_UNDEFINED_OP2();
28199 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28200 				dim++;
28201 			}
28202 
28203 			value = EX_VAR((opline+1)->op1.var);
28204 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
28205 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28206 			} else if (IS_CV & (IS_CV|IS_VAR)) {
28207 				ZVAL_DEREF(value);
28208 			}
28209 
28210 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
28211 
28212 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28213 				zend_objects_store_del(obj);
28214 			}
28215 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
28216 			if (IS_UNUSED == IS_UNUSED) {
28217 				zend_use_new_element_for_string();
28218 
28219 				UNDEF_RESULT();
28220 			} else {
28221 				dim = NULL;
28222 				value = EX_VAR((opline+1)->op1.var);
28223 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
28224 
28225 			}
28226 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
28227 			if (Z_ISREF_P(orig_object_ptr)
28228 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
28229 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
28230 				dim = NULL;
28231 
28232 				UNDEF_RESULT();
28233 			} else {
28234 				HashTable *ht = zend_new_array(8);
28235 				zend_uchar old_type = Z_TYPE_P(object_ptr);
28236 
28237 				ZVAL_ARR(object_ptr, ht);
28238 				if (UNEXPECTED(old_type == IS_FALSE)) {
28239 					GC_ADDREF(ht);
28240 					zend_false_to_array_deprecated();
28241 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
28242 						zend_array_destroy(ht);
28243 						goto assign_dim_error;
28244 					}
28245 				}
28246 				goto try_assign_dim_array;
28247 			}
28248 		} else {
28249 			zend_use_scalar_as_array();
28250 			dim = NULL;
28251 assign_dim_error:
28252 
28253 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28254 				ZVAL_NULL(EX_VAR(opline->result.var));
28255 			}
28256 		}
28257 	}
28258 	if (IS_UNUSED != IS_UNUSED) {
28259 
28260 	}
28261 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28262 	/* assign_dim has two opcodes! */
28263 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28264 }
28265 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28267 {
28268 	USE_OPLINE
28269 	zval *function_name;
28270 	zend_class_entry *ce;
28271 	uint32_t call_info;
28272 	zend_function *fbc;
28273 	zend_execute_data *call;
28274 
28275 	SAVE_OPLINE();
28276 
28277 	if (IS_VAR == IS_CONST) {
28278 		/* no function found. try a static method in class */
28279 		ce = CACHED_PTR(opline->result.num);
28280 		if (UNEXPECTED(ce == NULL)) {
28281 			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);
28282 			if (UNEXPECTED(ce == NULL)) {
28283 
28284 				HANDLE_EXCEPTION();
28285 			}
28286 			if (IS_UNUSED != IS_CONST) {
28287 				CACHE_PTR(opline->result.num, ce);
28288 			}
28289 		}
28290 	} else if (IS_VAR == IS_UNUSED) {
28291 		ce = zend_fetch_class(NULL, opline->op1.num);
28292 		if (UNEXPECTED(ce == NULL)) {
28293 
28294 			HANDLE_EXCEPTION();
28295 		}
28296 	} else {
28297 		ce = Z_CE_P(EX_VAR(opline->op1.var));
28298 	}
28299 
28300 	if (IS_VAR == IS_CONST &&
28301 	    IS_UNUSED == IS_CONST &&
28302 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
28303 		/* nothing to do */
28304 	} else if (IS_VAR != IS_CONST &&
28305 	           IS_UNUSED == IS_CONST &&
28306 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
28307 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
28308 	} else if (IS_UNUSED != IS_UNUSED) {
28309 		function_name = NULL;
28310 		if (IS_UNUSED != IS_CONST) {
28311 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
28312 				do {
28313 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
28314 						function_name = Z_REFVAL_P(function_name);
28315 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
28316 							break;
28317 						}
28318 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
28319 						ZVAL_UNDEFINED_OP2();
28320 						if (UNEXPECTED(EG(exception) != NULL)) {
28321 							HANDLE_EXCEPTION();
28322 						}
28323 					}
28324 					zend_throw_error(NULL, "Method name must be a string");
28325 
28326 					HANDLE_EXCEPTION();
28327 				} while (0);
28328 			}
28329 		}
28330 
28331 		if (ce->get_static_method) {
28332 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
28333 		} else {
28334 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
28335 		}
28336 		if (UNEXPECTED(fbc == NULL)) {
28337 			if (EXPECTED(!EG(exception))) {
28338 				zend_undefined_method(ce, Z_STR_P(function_name));
28339 			}
28340 
28341 			HANDLE_EXCEPTION();
28342 		}
28343 		if (IS_UNUSED == IS_CONST &&
28344 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
28345 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
28346 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
28347 		}
28348 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
28349 			init_func_run_time_cache(&fbc->op_array);
28350 		}
28351 		if (IS_UNUSED != IS_CONST) {
28352 
28353 		}
28354 	} else {
28355 		if (UNEXPECTED(ce->constructor == NULL)) {
28356 			zend_throw_error(NULL, "Cannot call constructor");
28357 			HANDLE_EXCEPTION();
28358 		}
28359 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
28360 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
28361 			HANDLE_EXCEPTION();
28362 		}
28363 		fbc = ce->constructor;
28364 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
28365 			init_func_run_time_cache(&fbc->op_array);
28366 		}
28367 	}
28368 
28369 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
28370 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
28371 			ce = (zend_class_entry*)Z_OBJ(EX(This));
28372 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
28373 		} else {
28374 			zend_non_static_method_call(fbc);
28375 			HANDLE_EXCEPTION();
28376 		}
28377 	} else {
28378 		/* previous opcode is ZEND_FETCH_CLASS */
28379 		if (IS_VAR == IS_UNUSED
28380 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
28381 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
28382 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
28383 				ce = Z_OBJCE(EX(This));
28384 			} else {
28385 				ce = Z_CE(EX(This));
28386 			}
28387 		}
28388 		call_info = ZEND_CALL_NESTED_FUNCTION;
28389 	}
28390 
28391 	call = zend_vm_stack_push_call_frame(call_info,
28392 		fbc, opline->extended_value, ce);
28393 	call->prev_execute_data = EX(call);
28394 	EX(call) = call;
28395 
28396 	ZEND_VM_NEXT_OPCODE();
28397 }
28398 
ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28399 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28400 {
28401 	if (IS_VAR == IS_UNUSED) {
28402 		SAVE_OPLINE();
28403 		zend_verify_missing_return_type(EX(func));
28404 		HANDLE_EXCEPTION();
28405 	} else {
28406 /* prevents "undefined variable opline" errors */
28407 #if 0 || (IS_VAR != IS_UNUSED)
28408 		USE_OPLINE
28409 		zval *retval_ref, *retval_ptr;
28410 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
28411 		retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28412 
28413 		if (IS_VAR == IS_CONST) {
28414 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
28415 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
28416 		} else if (IS_VAR == IS_VAR) {
28417 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
28418 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
28419 			}
28420 			ZVAL_DEREF(retval_ptr);
28421 		} else if (IS_VAR == IS_CV) {
28422 			ZVAL_DEREF(retval_ptr);
28423 		}
28424 
28425 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
28426 			ZEND_VM_NEXT_OPCODE();
28427 		}
28428 
28429 		if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
28430 			SAVE_OPLINE();
28431 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
28432 			if (UNEXPECTED(EG(exception))) {
28433 				HANDLE_EXCEPTION();
28434 			}
28435 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
28436 				ZEND_VM_NEXT_OPCODE();
28437 			}
28438 		}
28439 
28440 		zend_reference *ref = NULL;
28441 		void *cache_slot = CACHE_ADDR(opline->op2.num);
28442 		if (UNEXPECTED(retval_ref != retval_ptr)) {
28443 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
28444 				ref = Z_REF_P(retval_ref);
28445 			} else {
28446 				/* A cast might happen - unwrap the reference if this is a by-value return */
28447 				if (Z_REFCOUNT_P(retval_ref) == 1) {
28448 					ZVAL_UNREF(retval_ref);
28449 				} else {
28450 					Z_DELREF_P(retval_ref);
28451 					ZVAL_COPY(retval_ref, retval_ptr);
28452 				}
28453 				retval_ptr = retval_ref;
28454 			}
28455 		}
28456 
28457 		SAVE_OPLINE();
28458 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
28459 			zend_verify_return_error(EX(func), retval_ptr);
28460 			HANDLE_EXCEPTION();
28461 		}
28462 		ZEND_VM_NEXT_OPCODE();
28463 #endif
28464 	}
28465 }
28466 
ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28467 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28468 {
28469 	USE_OPLINE
28470 	zval *varptr, *arg;
28471 
28472 	if (IS_UNUSED == IS_CONST) {
28473 		SAVE_OPLINE();
28474 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28475 		uint32_t arg_num;
28476 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28477 		if (UNEXPECTED(!arg)) {
28478 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28479 			HANDLE_EXCEPTION();
28480 		}
28481 	} else {
28482 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28483 	}
28484 
28485 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28486 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
28487 		SAVE_OPLINE();
28488 		ZVAL_UNDEFINED_OP1();
28489 		ZVAL_NULL(arg);
28490 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28491 	}
28492 
28493 	if (IS_VAR == IS_CV) {
28494 		ZVAL_COPY_DEREF(arg, varptr);
28495 	} else /* if (IS_VAR == IS_VAR) */ {
28496 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
28497 			zend_refcounted *ref = Z_COUNTED_P(varptr);
28498 
28499 			varptr = Z_REFVAL_P(varptr);
28500 			ZVAL_COPY_VALUE(arg, varptr);
28501 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28502 				efree_size(ref, sizeof(zend_reference));
28503 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
28504 				Z_ADDREF_P(arg);
28505 			}
28506 		} else {
28507 			ZVAL_COPY_VALUE(arg, varptr);
28508 		}
28509 	}
28510 
28511 	ZEND_VM_NEXT_OPCODE();
28512 }
28513 
ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28514 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28515 {
28516 	USE_OPLINE
28517 	zval *varptr, *arg;
28518 
28519 	if (IS_UNUSED == IS_CONST) {
28520 		SAVE_OPLINE();
28521 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28522 		uint32_t arg_num;
28523 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28524 		if (UNEXPECTED(!arg)) {
28525 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28526 			HANDLE_EXCEPTION();
28527 		}
28528 	} else {
28529 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28530 	}
28531 
28532 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28533 	ZVAL_COPY_VALUE(arg, varptr);
28534 
28535 	if (EXPECTED(Z_ISREF_P(varptr))) {
28536 		ZEND_VM_NEXT_OPCODE();
28537 	}
28538 
28539 	SAVE_OPLINE();
28540 	ZVAL_NEW_REF(arg, arg);
28541 	zend_error(E_NOTICE, "Only variables should be passed by reference");
28542 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28543 }
28544 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28545 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28546 {
28547 	USE_OPLINE
28548 	zval *varptr, *arg;
28549 	uint32_t arg_num;
28550 
28551 	if (IS_UNUSED == IS_CONST) {
28552 		SAVE_OPLINE();
28553 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28554 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28555 		if (UNEXPECTED(!arg)) {
28556 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28557 			HANDLE_EXCEPTION();
28558 		}
28559 	} else {
28560 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28561 		arg_num = opline->op2.num;
28562 	}
28563 
28564 	if (EXPECTED(0)) {
28565 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28566 			goto send_var;
28567 		}
28568 
28569 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28570 		ZVAL_COPY_VALUE(arg, varptr);
28571 
28572 		if (EXPECTED(Z_ISREF_P(varptr) ||
28573 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
28574 			ZEND_VM_NEXT_OPCODE();
28575 		}
28576 	} else {
28577 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28578 			goto send_var;
28579 		}
28580 
28581 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28582 		ZVAL_COPY_VALUE(arg, varptr);
28583 
28584 		if (EXPECTED(Z_ISREF_P(varptr) ||
28585 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
28586 			ZEND_VM_NEXT_OPCODE();
28587 		}
28588 	}
28589 
28590 	SAVE_OPLINE();
28591 	ZVAL_NEW_REF(arg, arg);
28592 	zend_error(E_NOTICE, "Only variables should be passed by reference");
28593 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28594 
28595 send_var:
28596 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28597 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
28598 		zend_refcounted *ref = Z_COUNTED_P(varptr);
28599 
28600 		varptr = Z_REFVAL_P(varptr);
28601 		ZVAL_COPY_VALUE(arg, varptr);
28602 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28603 			efree_size(ref, sizeof(zend_reference));
28604 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
28605 			Z_ADDREF_P(arg);
28606 		}
28607 	} else {
28608 		ZVAL_COPY_VALUE(arg, varptr);
28609 	}
28610 	ZEND_VM_NEXT_OPCODE();
28611 }
28612 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28613 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)
28614 {
28615 	USE_OPLINE
28616 	zval *varptr, *arg;
28617 	uint32_t arg_num;
28618 
28619 	if (IS_UNUSED == IS_CONST) {
28620 		SAVE_OPLINE();
28621 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28622 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28623 		if (UNEXPECTED(!arg)) {
28624 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28625 			HANDLE_EXCEPTION();
28626 		}
28627 	} else {
28628 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28629 		arg_num = opline->op2.num;
28630 	}
28631 
28632 	if (EXPECTED(1)) {
28633 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28634 			goto send_var;
28635 		}
28636 
28637 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28638 		ZVAL_COPY_VALUE(arg, varptr);
28639 
28640 		if (EXPECTED(Z_ISREF_P(varptr) ||
28641 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
28642 			ZEND_VM_NEXT_OPCODE();
28643 		}
28644 	} else {
28645 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28646 			goto send_var;
28647 		}
28648 
28649 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28650 		ZVAL_COPY_VALUE(arg, varptr);
28651 
28652 		if (EXPECTED(Z_ISREF_P(varptr) ||
28653 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
28654 			ZEND_VM_NEXT_OPCODE();
28655 		}
28656 	}
28657 
28658 	SAVE_OPLINE();
28659 	ZVAL_NEW_REF(arg, arg);
28660 	zend_error(E_NOTICE, "Only variables should be passed by reference");
28661 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28662 
28663 send_var:
28664 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28665 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
28666 		zend_refcounted *ref = Z_COUNTED_P(varptr);
28667 
28668 		varptr = Z_REFVAL_P(varptr);
28669 		ZVAL_COPY_VALUE(arg, varptr);
28670 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28671 			efree_size(ref, sizeof(zend_reference));
28672 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
28673 			Z_ADDREF_P(arg);
28674 		}
28675 	} else {
28676 		ZVAL_COPY_VALUE(arg, varptr);
28677 	}
28678 	ZEND_VM_NEXT_OPCODE();
28679 }
28680 
ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28681 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28682 {
28683 	USE_OPLINE
28684 	zval *varptr, *arg;
28685 
28686 	SAVE_OPLINE();
28687 	if (IS_UNUSED == IS_CONST) {
28688 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28689 		uint32_t arg_num;
28690 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28691 		if (UNEXPECTED(!arg)) {
28692 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28693 			HANDLE_EXCEPTION();
28694 		}
28695 	} else {
28696 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28697 	}
28698 
28699 	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28700 	if (Z_ISREF_P(varptr)) {
28701 		Z_ADDREF_P(varptr);
28702 	} else {
28703 		ZVAL_MAKE_REF_EX(varptr, 2);
28704 	}
28705 	ZVAL_REF(arg, Z_REF_P(varptr));
28706 
28707 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28708 	ZEND_VM_NEXT_OPCODE();
28709 }
28710 
ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28711 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28712 {
28713 	USE_OPLINE
28714 	zval *varptr, *arg;
28715 	uint32_t arg_num;
28716 
28717 	if (IS_UNUSED == IS_CONST) {
28718 		SAVE_OPLINE();
28719 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28720 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28721 		if (UNEXPECTED(!arg)) {
28722 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28723 			HANDLE_EXCEPTION();
28724 		}
28725 	} else {
28726 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28727 		arg_num = opline->op2.num;
28728 	}
28729 
28730 	if (EXPECTED(0)) {
28731 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28732 			goto send_var_by_ref;
28733 		}
28734 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28735 send_var_by_ref:
28736 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28737 		if (Z_ISREF_P(varptr)) {
28738 			Z_ADDREF_P(varptr);
28739 		} else {
28740 			ZVAL_MAKE_REF_EX(varptr, 2);
28741 		}
28742 		ZVAL_REF(arg, Z_REF_P(varptr));
28743 
28744 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28745 		ZEND_VM_NEXT_OPCODE();
28746 	}
28747 
28748 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28749 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
28750 		SAVE_OPLINE();
28751 		ZVAL_UNDEFINED_OP1();
28752 		ZVAL_NULL(arg);
28753 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28754 	}
28755 
28756 	if (IS_VAR == IS_CV) {
28757 		ZVAL_COPY_DEREF(arg, varptr);
28758 	} else /* if (IS_VAR == IS_VAR) */ {
28759 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
28760 			zend_refcounted *ref = Z_COUNTED_P(varptr);
28761 
28762 			varptr = Z_REFVAL_P(varptr);
28763 			ZVAL_COPY_VALUE(arg, varptr);
28764 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28765 				efree_size(ref, sizeof(zend_reference));
28766 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
28767 				Z_ADDREF_P(arg);
28768 			}
28769 		} else {
28770 			ZVAL_COPY_VALUE(arg, varptr);
28771 		}
28772 	}
28773 
28774 	ZEND_VM_NEXT_OPCODE();
28775 }
28776 
ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28777 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28778 {
28779 	USE_OPLINE
28780 	zval *varptr, *arg;
28781 	uint32_t arg_num;
28782 
28783 	if (IS_UNUSED == IS_CONST) {
28784 		SAVE_OPLINE();
28785 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28786 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28787 		if (UNEXPECTED(!arg)) {
28788 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28789 			HANDLE_EXCEPTION();
28790 		}
28791 	} else {
28792 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28793 		arg_num = opline->op2.num;
28794 	}
28795 
28796 	if (EXPECTED(1)) {
28797 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28798 			goto send_var_by_ref;
28799 		}
28800 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28801 send_var_by_ref:
28802 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28803 		if (Z_ISREF_P(varptr)) {
28804 			Z_ADDREF_P(varptr);
28805 		} else {
28806 			ZVAL_MAKE_REF_EX(varptr, 2);
28807 		}
28808 		ZVAL_REF(arg, Z_REF_P(varptr));
28809 
28810 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28811 		ZEND_VM_NEXT_OPCODE();
28812 	}
28813 
28814 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28815 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
28816 		SAVE_OPLINE();
28817 		ZVAL_UNDEFINED_OP1();
28818 		ZVAL_NULL(arg);
28819 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28820 	}
28821 
28822 	if (IS_VAR == IS_CV) {
28823 		ZVAL_COPY_DEREF(arg, varptr);
28824 	} else /* if (IS_VAR == IS_VAR) */ {
28825 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
28826 			zend_refcounted *ref = Z_COUNTED_P(varptr);
28827 
28828 			varptr = Z_REFVAL_P(varptr);
28829 			ZVAL_COPY_VALUE(arg, varptr);
28830 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28831 				efree_size(ref, sizeof(zend_reference));
28832 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
28833 				Z_ADDREF_P(arg);
28834 			}
28835 		} else {
28836 			ZVAL_COPY_VALUE(arg, varptr);
28837 		}
28838 	}
28839 
28840 	ZEND_VM_NEXT_OPCODE();
28841 }
28842 
ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28843 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28844 {
28845 	USE_OPLINE
28846 	zval *varptr, *arg;
28847 
28848 	if (IS_UNUSED == IS_CONST) {
28849 		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
28850 		SAVE_OPLINE();
28851 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28852 		uint32_t arg_num;
28853 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28854 		if (UNEXPECTED(!arg)) {
28855 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28856 			HANDLE_EXCEPTION();
28857 		}
28858 	} else {
28859 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28860 	}
28861 
28862 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
28863 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28864 		if (Z_ISREF_P(varptr)) {
28865 			Z_ADDREF_P(varptr);
28866 		} else {
28867 			ZVAL_MAKE_REF_EX(varptr, 2);
28868 		}
28869 		ZVAL_REF(arg, Z_REF_P(varptr));
28870 
28871 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28872 		ZEND_VM_NEXT_OPCODE();
28873 	}
28874 
28875 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28876 
28877 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
28878 		zend_refcounted *ref = Z_COUNTED_P(varptr);
28879 
28880 		varptr = Z_REFVAL_P(varptr);
28881 		ZVAL_COPY_VALUE(arg, varptr);
28882 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28883 			efree_size(ref, sizeof(zend_reference));
28884 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
28885 			Z_ADDREF_P(arg);
28886 		}
28887 	} else {
28888 		ZVAL_COPY_VALUE(arg, varptr);
28889 	}
28890 
28891 	ZEND_VM_NEXT_OPCODE();
28892 }
28893 
ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28894 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28895 {
28896 	USE_OPLINE
28897 	zval *result;
28898 	zend_function *constructor;
28899 	zend_class_entry *ce;
28900 	zend_execute_data *call;
28901 
28902 	SAVE_OPLINE();
28903 	if (IS_VAR == IS_CONST) {
28904 		ce = CACHED_PTR(opline->op2.num);
28905 		if (UNEXPECTED(ce == NULL)) {
28906 			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);
28907 			if (UNEXPECTED(ce == NULL)) {
28908 				ZVAL_UNDEF(EX_VAR(opline->result.var));
28909 				HANDLE_EXCEPTION();
28910 			}
28911 			CACHE_PTR(opline->op2.num, ce);
28912 		}
28913 	} else if (IS_VAR == IS_UNUSED) {
28914 		ce = zend_fetch_class(NULL, opline->op1.num);
28915 		if (UNEXPECTED(ce == NULL)) {
28916 			ZVAL_UNDEF(EX_VAR(opline->result.var));
28917 			HANDLE_EXCEPTION();
28918 		}
28919 	} else {
28920 		ce = Z_CE_P(EX_VAR(opline->op1.var));
28921 	}
28922 
28923 	result = EX_VAR(opline->result.var);
28924 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
28925 		ZVAL_UNDEF(result);
28926 		HANDLE_EXCEPTION();
28927 	}
28928 
28929 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
28930 	if (constructor == NULL) {
28931 		if (UNEXPECTED(EG(exception))) {
28932 			HANDLE_EXCEPTION();
28933 		}
28934 
28935 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
28936 		 * opcode is DO_FCALL in case EXT instructions are used. */
28937 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
28938 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
28939 		}
28940 
28941 		/* Perform a dummy function call */
28942 		call = zend_vm_stack_push_call_frame(
28943 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
28944 			opline->extended_value, NULL);
28945 	} else {
28946 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
28947 			init_func_run_time_cache(&constructor->op_array);
28948 		}
28949 		/* We are not handling overloaded classes right now */
28950 		call = zend_vm_stack_push_call_frame(
28951 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
28952 			constructor,
28953 			opline->extended_value,
28954 			Z_OBJ_P(result));
28955 		Z_ADDREF_P(result);
28956 	}
28957 
28958 	call->prev_execute_data = EX(call);
28959 	EX(call) = call;
28960 	ZEND_VM_NEXT_OPCODE();
28961 }
28962 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28963 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28964 {
28965 	USE_OPLINE
28966 	zval *expr_ptr, new_expr;
28967 
28968 	SAVE_OPLINE();
28969 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
28970 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
28971 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28972 		if (Z_ISREF_P(expr_ptr)) {
28973 			Z_ADDREF_P(expr_ptr);
28974 		} else {
28975 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
28976 		}
28977 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28978 	} else {
28979 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28980 		if (IS_VAR == IS_TMP_VAR) {
28981 			/* pass */
28982 		} else if (IS_VAR == IS_CONST) {
28983 			Z_TRY_ADDREF_P(expr_ptr);
28984 		} else if (IS_VAR == IS_CV) {
28985 			ZVAL_DEREF(expr_ptr);
28986 			Z_TRY_ADDREF_P(expr_ptr);
28987 		} else /* if (IS_VAR == IS_VAR) */ {
28988 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
28989 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
28990 
28991 				expr_ptr = Z_REFVAL_P(expr_ptr);
28992 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28993 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
28994 					expr_ptr = &new_expr;
28995 					efree_size(ref, sizeof(zend_reference));
28996 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
28997 					Z_ADDREF_P(expr_ptr);
28998 				}
28999 			}
29000 		}
29001 	}
29002 
29003 	if (IS_UNUSED != IS_UNUSED) {
29004 		zval *offset = NULL;
29005 		zend_string *str;
29006 		zend_ulong hval;
29007 
29008 add_again:
29009 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
29010 			str = Z_STR_P(offset);
29011 			if (IS_UNUSED != IS_CONST) {
29012 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
29013 					goto num_index;
29014 				}
29015 			}
29016 str_index:
29017 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
29018 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
29019 			hval = Z_LVAL_P(offset);
29020 num_index:
29021 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
29022 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
29023 			offset = Z_REFVAL_P(offset);
29024 			goto add_again;
29025 		} else if (Z_TYPE_P(offset) == IS_NULL) {
29026 			str = ZSTR_EMPTY_ALLOC();
29027 			goto str_index;
29028 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
29029 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
29030 			goto num_index;
29031 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
29032 			hval = 0;
29033 			goto num_index;
29034 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
29035 			hval = 1;
29036 			goto num_index;
29037 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
29038 			zend_use_resource_as_offset(offset);
29039 			hval = Z_RES_HANDLE_P(offset);
29040 			goto num_index;
29041 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
29042 			ZVAL_UNDEFINED_OP2();
29043 			str = ZSTR_EMPTY_ALLOC();
29044 			goto str_index;
29045 		} else {
29046 			zend_illegal_offset();
29047 			zval_ptr_dtor_nogc(expr_ptr);
29048 		}
29049 
29050 	} else {
29051 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
29052 			zend_cannot_add_element();
29053 			zval_ptr_dtor_nogc(expr_ptr);
29054 		}
29055 	}
29056 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29057 }
29058 
ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29060 {
29061 	zval *array;
29062 	uint32_t size;
29063 	USE_OPLINE
29064 
29065 	array = EX_VAR(opline->result.var);
29066 	if (IS_VAR != IS_UNUSED) {
29067 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
29068 		ZVAL_ARR(array, zend_new_array(size));
29069 		/* Explicitly initialize array as not-packed if flag is set */
29070 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
29071 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
29072 		}
29073 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29074 	} else {
29075 		ZVAL_ARR(array, zend_new_array(0));
29076 		ZEND_VM_NEXT_OPCODE();
29077 	}
29078 }
29079 
ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29080 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29081 {
29082 	USE_OPLINE
29083 	zval *var_ptr;
29084 
29085 	var_ptr = EX_VAR(opline->op1.var);
29086 	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
29087 		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
29088 			ZVAL_UNREF(var_ptr);
29089 		}
29090 	}
29091 
29092 	ZEND_VM_NEXT_OPCODE();
29093 }
29094 
ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29095 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29096 {
29097 	USE_OPLINE
29098 
29099 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
29100 
29101 	SAVE_OPLINE();
29102 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
29103 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29104 	}
29105 
29106 	/* Destroy the previously yielded value */
29107 	zval_ptr_dtor(&generator->value);
29108 
29109 	/* Destroy the previously yielded key */
29110 	zval_ptr_dtor(&generator->key);
29111 
29112 	/* Set the new yielded value */
29113 	if (IS_VAR != IS_UNUSED) {
29114 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
29115 			/* Constants and temporary variables aren't yieldable by reference,
29116 			 * but we still allow them with a notice. */
29117 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
29118 				zval *value;
29119 
29120 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
29121 
29122 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29123 				ZVAL_COPY_VALUE(&generator->value, value);
29124 				if (IS_VAR == IS_CONST) {
29125 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
29126 						Z_ADDREF(generator->value);
29127 					}
29128 				}
29129 			} else {
29130 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29131 
29132 				/* If a function call result is yielded and the function did
29133 				 * not return by reference we throw a notice. */
29134 				do {
29135 					if (IS_VAR == IS_VAR) {
29136 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
29137 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
29138 						 && !Z_ISREF_P(value_ptr)) {
29139 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
29140 							ZVAL_COPY(&generator->value, value_ptr);
29141 							break;
29142 						}
29143 					}
29144 					if (Z_ISREF_P(value_ptr)) {
29145 						Z_ADDREF_P(value_ptr);
29146 					} else {
29147 						ZVAL_MAKE_REF_EX(value_ptr, 2);
29148 					}
29149 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
29150 				} while (0);
29151 
29152 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29153 			}
29154 		} else {
29155 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29156 
29157 			/* Consts, temporary variables and references need copying */
29158 			if (IS_VAR == IS_CONST) {
29159 				ZVAL_COPY_VALUE(&generator->value, value);
29160 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
29161 					Z_ADDREF(generator->value);
29162 				}
29163 			} else if (IS_VAR == IS_TMP_VAR) {
29164 				ZVAL_COPY_VALUE(&generator->value, value);
29165             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
29166 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
29167 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29168 			} else {
29169 				ZVAL_COPY_VALUE(&generator->value, value);
29170 				if (IS_VAR == IS_CV) {
29171 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
29172 				}
29173 			}
29174 		}
29175 	} else {
29176 		/* If no value was specified yield null */
29177 		ZVAL_NULL(&generator->value);
29178 	}
29179 
29180 	/* Set the new yielded key */
29181 	if (IS_UNUSED != IS_UNUSED) {
29182 		zval *key = NULL;
29183 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
29184 			key = Z_REFVAL_P(key);
29185 		}
29186 		ZVAL_COPY(&generator->key, key);
29187 
29188 		if (Z_TYPE(generator->key) == IS_LONG
29189 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
29190 		) {
29191 			generator->largest_used_integer_key = Z_LVAL(generator->key);
29192 		}
29193 	} else {
29194 		/* If no key was specified we use auto-increment keys */
29195 		generator->largest_used_integer_key++;
29196 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
29197 	}
29198 
29199 	if (RETURN_VALUE_USED(opline)) {
29200 		/* If the return value of yield is used set the send
29201 		 * target and initialize it to NULL */
29202 		generator->send_target = EX_VAR(opline->result.var);
29203 		ZVAL_NULL(generator->send_target);
29204 	} else {
29205 		generator->send_target = NULL;
29206 	}
29207 
29208 	/* We increment to the next op, so we are at the correct position when the
29209 	 * generator is resumed. */
29210 	ZEND_VM_INC_OPCODE();
29211 
29212 	/* The GOTO VM uses a local opline variable. We need to set the opline
29213 	 * variable in execute_data so we don't resume at an old position. */
29214 	SAVE_OPLINE();
29215 
29216 	ZEND_VM_RETURN();
29217 }
29218 
ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29220 {
29221 	USE_OPLINE
29222 	zval *op1 = EX_VAR(opline->op1.var);
29223 
29224 	if (IS_VAR == IS_CV) {
29225 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
29226 			ZVAL_NEW_EMPTY_REF(op1);
29227 			Z_SET_REFCOUNT_P(op1, 2);
29228 			ZVAL_NULL(Z_REFVAL_P(op1));
29229 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
29230 		} else {
29231 			if (Z_ISREF_P(op1)) {
29232 				Z_ADDREF_P(op1);
29233 			} else {
29234 				ZVAL_MAKE_REF_EX(op1, 2);
29235 			}
29236 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
29237 		}
29238 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
29239 		op1 = Z_INDIRECT_P(op1);
29240 		if (EXPECTED(!Z_ISREF_P(op1))) {
29241 			ZVAL_MAKE_REF_EX(op1, 2);
29242 		} else {
29243 			GC_ADDREF(Z_REF_P(op1));
29244 		}
29245 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
29246 	} else {
29247 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
29248 	}
29249 	ZEND_VM_NEXT_OPCODE();
29250 }
29251 
ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29252 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29253 {
29254 	USE_OPLINE
29255 	zval *op1;
29256 	zend_string *type;
29257 
29258 	SAVE_OPLINE();
29259 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
29260 	type = zend_zval_get_legacy_type(op1);
29261 	if (EXPECTED(type)) {
29262 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
29263 	} else {
29264 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
29265 	}
29266 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29267 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29268 }
29269 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29270 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29271 {
29272 	USE_OPLINE
29273 	zval *varptr, *arg;
29274 	uint32_t arg_num = opline->op2.num;
29275 
29276 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29277 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29278 	}
29279 
29280 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29281 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29282 
29283 	if (IS_VAR == IS_CV) {
29284 		ZVAL_COPY(arg, varptr);
29285 	} else /* if (IS_VAR == IS_VAR) */ {
29286 		ZVAL_COPY_VALUE(arg, varptr);
29287 	}
29288 
29289 	ZEND_VM_NEXT_OPCODE();
29290 }
29291 
ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29292 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29293 {
29294 	USE_OPLINE
29295 	zval *op1, *op2;
29296 	bool result;
29297 
29298 	SAVE_OPLINE();
29299 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
29300 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29301 	result = fast_is_identical_function(op1, op2);
29302 
29303 	ZEND_VM_SMART_BRANCH(result, 1);
29304 }
29305 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29306 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29307 {
29308 	USE_OPLINE
29309 	zval *object;
29310 	zval *property;
29311 	zval *value;
29312 	zval *zptr;
29313 	void **cache_slot;
29314 	zend_property_info *prop_info;
29315 	zend_object *zobj;
29316 	zend_string *name, *tmp_name;
29317 
29318 	SAVE_OPLINE();
29319 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29320 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29321 
29322 	do {
29323 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
29324 
29325 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29326 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29327 				object = Z_REFVAL_P(object);
29328 				goto assign_op_object;
29329 			}
29330 			if (IS_VAR == IS_CV
29331 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
29332 				ZVAL_UNDEFINED_OP1();
29333 			}
29334 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
29335 			break;
29336 		}
29337 
29338 assign_op_object:
29339 		/* here we are sure we are dealing with an object */
29340 		zobj = Z_OBJ_P(object);
29341 		if (IS_CV == IS_CONST) {
29342 			name = Z_STR_P(property);
29343 		} else {
29344 			name = zval_try_get_tmp_string(property, &tmp_name);
29345 			if (UNEXPECTED(!name)) {
29346 				UNDEF_RESULT();
29347 				break;
29348 			}
29349 		}
29350 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
29351 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
29352 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
29353 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29354 					ZVAL_NULL(EX_VAR(opline->result.var));
29355 				}
29356 			} else {
29357 				zval *orig_zptr = zptr;
29358 				zend_reference *ref;
29359 
29360 				do {
29361 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
29362 						ref = Z_REF_P(zptr);
29363 						zptr = Z_REFVAL_P(zptr);
29364 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
29365 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
29366 							break;
29367 						}
29368 					}
29369 
29370 					if (IS_CV == IS_CONST) {
29371 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
29372 					} else {
29373 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
29374 					}
29375 					if (UNEXPECTED(prop_info)) {
29376 						/* special case for typed properties */
29377 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
29378 					} else {
29379 						zend_binary_op(zptr, zptr, value OPLINE_CC);
29380 					}
29381 				} while (0);
29382 
29383 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29384 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
29385 				}
29386 			}
29387 		} else {
29388 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
29389 		}
29390 		if (IS_CV != IS_CONST) {
29391 			zend_tmp_string_release(tmp_name);
29392 		}
29393 	} while (0);
29394 
29395 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
29396 
29397 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29398 	/* assign_obj has two opcodes! */
29399 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29400 }
29401 
29402 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29403 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29404 {
29405 	USE_OPLINE
29406 	zval *var_ptr;
29407 	zval *value, *container, *dim;
29408 	HashTable *ht;
29409 
29410 	SAVE_OPLINE();
29411 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29412 
29413 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
29414 assign_dim_op_array:
29415 		SEPARATE_ARRAY(container);
29416 		ht = Z_ARRVAL_P(container);
29417 assign_dim_op_new_array:
29418 		dim = EX_VAR(opline->op2.var);
29419 		if (IS_CV == IS_UNUSED) {
29420 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
29421 			if (UNEXPECTED(!var_ptr)) {
29422 				zend_cannot_add_element();
29423 				goto assign_dim_op_ret_null;
29424 			}
29425 		} else {
29426 			if (IS_CV == IS_CONST) {
29427 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
29428 			} else {
29429 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
29430 			}
29431 			if (UNEXPECTED(!var_ptr)) {
29432 				goto assign_dim_op_ret_null;
29433 			}
29434 		}
29435 
29436 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
29437 
29438 		do {
29439 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
29440 				zend_reference *ref = Z_REF_P(var_ptr);
29441 				var_ptr = Z_REFVAL_P(var_ptr);
29442 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
29443 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
29444 					break;
29445 				}
29446 			}
29447 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
29448 		} while (0);
29449 
29450 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29451 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
29452 		}
29453 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
29454 	} else {
29455 		if (EXPECTED(Z_ISREF_P(container))) {
29456 			container = Z_REFVAL_P(container);
29457 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
29458 				goto assign_dim_op_array;
29459 			}
29460 		}
29461 
29462 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
29463 			zend_object *obj = Z_OBJ_P(container);
29464 
29465 			dim = EX_VAR(opline->op2.var);
29466 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
29467 				dim++;
29468 			}
29469 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
29470 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
29471 			zend_uchar old_type;
29472 
29473 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
29474 				ZVAL_UNDEFINED_OP1();
29475 			}
29476 			ht = zend_new_array(8);
29477 			old_type = Z_TYPE_P(container);
29478 			ZVAL_ARR(container, ht);
29479 			if (UNEXPECTED(old_type == IS_FALSE)) {
29480 				GC_ADDREF(ht);
29481 				zend_false_to_array_deprecated();
29482 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
29483 					zend_array_destroy(ht);
29484 					goto assign_dim_op_ret_null;
29485 				}
29486 			}
29487 			goto assign_dim_op_new_array;
29488 		} else {
29489 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29490 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
29491 assign_dim_op_ret_null:
29492 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
29493 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29494 				ZVAL_NULL(EX_VAR(opline->result.var));
29495 			}
29496 		}
29497 	}
29498 
29499 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29500 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29501 }
29502 
ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29503 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29504 {
29505 	USE_OPLINE
29506 	zval *var_ptr;
29507 	zval *value;
29508 
29509 	SAVE_OPLINE();
29510 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29511 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29512 
29513 	do {
29514 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
29515 			zend_reference *ref = Z_REF_P(var_ptr);
29516 			var_ptr = Z_REFVAL_P(var_ptr);
29517 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
29518 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
29519 				break;
29520 			}
29521 		}
29522 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
29523 	} while (0);
29524 
29525 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29526 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
29527 	}
29528 
29529 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29530 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29531 }
29532 
ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29533 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29534 {
29535 	USE_OPLINE
29536 	zval *object;
29537 	zval *property;
29538 	zval *zptr;
29539 	void **cache_slot;
29540 	zend_property_info *prop_info;
29541 	zend_object *zobj;
29542 	zend_string *name, *tmp_name;
29543 
29544 	SAVE_OPLINE();
29545 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29546 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29547 
29548 	do {
29549 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29550 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29551 				object = Z_REFVAL_P(object);
29552 				goto pre_incdec_object;
29553 			}
29554 			if (IS_VAR == IS_CV
29555 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
29556 				ZVAL_UNDEFINED_OP1();
29557 			}
29558 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
29559 			break;
29560 		}
29561 
29562 pre_incdec_object:
29563 		/* here we are sure we are dealing with an object */
29564 		zobj = Z_OBJ_P(object);
29565 		if (IS_CV == IS_CONST) {
29566 			name = Z_STR_P(property);
29567 		} else {
29568 			name = zval_try_get_tmp_string(property, &tmp_name);
29569 			if (UNEXPECTED(!name)) {
29570 				UNDEF_RESULT();
29571 				break;
29572 			}
29573 		}
29574 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
29575 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
29576 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
29577 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29578 					ZVAL_NULL(EX_VAR(opline->result.var));
29579 				}
29580 			} else {
29581 				if (IS_CV == IS_CONST) {
29582 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
29583 				} else {
29584 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
29585 				}
29586 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
29587 			}
29588 		} else {
29589 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
29590 		}
29591 		if (IS_CV != IS_CONST) {
29592 			zend_tmp_string_release(tmp_name);
29593 		}
29594 	} while (0);
29595 
29596 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29597 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29598 }
29599 
ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29600 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29601 {
29602 	USE_OPLINE
29603 	zval *object;
29604 	zval *property;
29605 	zval *zptr;
29606 	void **cache_slot;
29607 	zend_property_info *prop_info;
29608 	zend_object *zobj;
29609 	zend_string *name, *tmp_name;
29610 
29611 	SAVE_OPLINE();
29612 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29613 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29614 
29615 	do {
29616 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29617 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29618 				object = Z_REFVAL_P(object);
29619 				goto post_incdec_object;
29620 			}
29621 			if (IS_VAR == IS_CV
29622 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
29623 				ZVAL_UNDEFINED_OP1();
29624 			}
29625 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
29626 			break;
29627 		}
29628 
29629 post_incdec_object:
29630 		/* here we are sure we are dealing with an object */
29631 		zobj = Z_OBJ_P(object);
29632 		if (IS_CV == IS_CONST) {
29633 			name = Z_STR_P(property);
29634 		} else {
29635 			name = zval_try_get_tmp_string(property, &tmp_name);
29636 			if (UNEXPECTED(!name)) {
29637 				ZVAL_UNDEF(EX_VAR(opline->result.var));
29638 				break;
29639 			}
29640 		}
29641 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
29642 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
29643 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
29644 				ZVAL_NULL(EX_VAR(opline->result.var));
29645 			} else {
29646 				if (IS_CV == IS_CONST) {
29647 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
29648 				} else {
29649 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
29650 				}
29651 
29652 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
29653 			}
29654 		} else {
29655 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
29656 		}
29657 		if (IS_CV != IS_CONST) {
29658 			zend_tmp_string_release(tmp_name);
29659 		}
29660 	} while (0);
29661 
29662 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29663 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29664 }
29665 
ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29666 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29667 {
29668 	USE_OPLINE
29669 	zval *container;
29670 
29671 	SAVE_OPLINE();
29672 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29673 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
29674 
29675 	if (IS_VAR == IS_VAR) {
29676 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29677 	}
29678 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29679 }
29680 
ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29681 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29682 {
29683 	USE_OPLINE
29684 	zval *container;
29685 
29686 	SAVE_OPLINE();
29687 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29688 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
29689 
29690 	if (IS_VAR == IS_VAR) {
29691 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29692 	}
29693 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29694 }
29695 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29696 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29697 {
29698 #if 0
29699 	USE_OPLINE
29700 #endif
29701 
29702 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
29703         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
29704 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29705         }
29706 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29707 	} else {
29708 		if (IS_CV == IS_UNUSED) {
29709 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29710 		}
29711 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29712 	}
29713 }
29714 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29715 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29716 {
29717 	USE_OPLINE
29718 	zval *container;
29719 
29720 	SAVE_OPLINE();
29721 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29722 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
29723 
29724 	if (IS_VAR == IS_VAR) {
29725 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29726 	}
29727 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29728 }
29729 
ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29730 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29731 {
29732 	USE_OPLINE
29733 	zval *property, *container, *result;
29734 
29735 	SAVE_OPLINE();
29736 
29737 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29738 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29739 	result = EX_VAR(opline->result.var);
29740 	zend_fetch_property_address(
29741 		result, container, IS_VAR, property, IS_CV,
29742 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
29743 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC);
29744 
29745 	if (IS_VAR == IS_VAR) {
29746 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29747 	}
29748 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29749 }
29750 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29751 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29752 {
29753 	USE_OPLINE
29754 	zval *property, *container, *result;
29755 
29756 	SAVE_OPLINE();
29757 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29758 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29759 	result = EX_VAR(opline->result.var);
29760 	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);
29761 
29762 	if (IS_VAR == IS_VAR) {
29763 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29764 	}
29765 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29766 }
29767 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29768 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29769 {
29770 #if 0
29771 	USE_OPLINE
29772 #endif
29773 
29774 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
29775 		/* Behave like FETCH_OBJ_W */
29776 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
29777 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29778 		}
29779 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29780 	} else {
29781 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29782 	}
29783 }
29784 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29786 {
29787 	USE_OPLINE
29788 	zval *container, *property, *result;
29789 
29790 	SAVE_OPLINE();
29791 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29792 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29793 	result = EX_VAR(opline->result.var);
29794 	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);
29795 
29796 	if (IS_VAR == IS_VAR) {
29797 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29798 	}
29799 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29800 }
29801 
ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29803 {
29804 	USE_OPLINE
29805 	zval *container, *dim;
29806 
29807 	SAVE_OPLINE();
29808 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29809 	dim = EX_VAR(opline->op2.var);
29810 
29811 	if (IS_VAR == IS_VAR
29812 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
29813 		&& UNEXPECTED(!Z_ISREF_P(container))
29814 	) {
29815 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
29816 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
29817 	} else {
29818 		zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
29819 	}
29820 
29821 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29822 }
29823 
ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29825 {
29826 	USE_OPLINE
29827 	zval *object, *value, tmp;
29828 	zend_object *zobj;
29829 	zend_string *name, *tmp_name;
29830 
29831 	SAVE_OPLINE();
29832 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29833 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
29834 
29835 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29836 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29837 			object = Z_REFVAL_P(object);
29838 			goto assign_object;
29839 		}
29840 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
29841 		value = &EG(uninitialized_zval);
29842 		goto free_and_exit_assign_obj;
29843 	}
29844 
29845 assign_object:
29846 	zobj = Z_OBJ_P(object);
29847 	if (IS_CV == IS_CONST) {
29848 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
29849 			void **cache_slot = CACHE_ADDR(opline->extended_value);
29850 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
29851 			zend_object *zobj = Z_OBJ_P(object);
29852 			zval *property_val;
29853 
29854 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
29855 				property_val = OBJ_PROP(zobj, prop_offset);
29856 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
29857 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
29858 
29859 					if (UNEXPECTED(prop_info != NULL)) {
29860 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
29861 						goto free_and_exit_assign_obj;
29862 					} else {
29863 fast_assign_obj:
29864 						value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
29865 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29866 							ZVAL_COPY(EX_VAR(opline->result.var), value);
29867 						}
29868 						goto exit_assign_obj;
29869 					}
29870 				}
29871 			} else {
29872 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
29873 				if (EXPECTED(zobj->properties != NULL)) {
29874 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
29875 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
29876 							GC_DELREF(zobj->properties);
29877 						}
29878 						zobj->properties = zend_array_dup(zobj->properties);
29879 					}
29880 					property_val = zend_hash_find_known_hash(zobj->properties, name);
29881 					if (property_val) {
29882 						goto fast_assign_obj;
29883 					}
29884 				}
29885 
29886 				if (!zobj->ce->__set) {
29887 					if (EXPECTED(zobj->properties == NULL)) {
29888 						rebuild_object_properties(zobj);
29889 					}
29890 					if (IS_CONST == IS_CONST) {
29891 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
29892 							Z_ADDREF_P(value);
29893 						}
29894 					} else if (IS_CONST != IS_TMP_VAR) {
29895 						if (Z_ISREF_P(value)) {
29896 							if (IS_CONST == IS_VAR) {
29897 								zend_reference *ref = Z_REF_P(value);
29898 								if (GC_DELREF(ref) == 0) {
29899 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
29900 									efree_size(ref, sizeof(zend_reference));
29901 									value = &tmp;
29902 								} else {
29903 									value = Z_REFVAL_P(value);
29904 									Z_TRY_ADDREF_P(value);
29905 								}
29906 							} else {
29907 								value = Z_REFVAL_P(value);
29908 								Z_TRY_ADDREF_P(value);
29909 							}
29910 						} else if (IS_CONST == IS_CV) {
29911 							Z_TRY_ADDREF_P(value);
29912 						}
29913 						}
29914 					zend_hash_add_new(zobj->properties, name, value);
29915 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29916 						ZVAL_COPY(EX_VAR(opline->result.var), value);
29917 					}
29918 					goto exit_assign_obj;
29919 				}
29920 			}
29921 		}
29922 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
29923 	} else {
29924 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
29925 		if (UNEXPECTED(!name)) {
29926 
29927 			UNDEF_RESULT();
29928 			goto exit_assign_obj;
29929 		}
29930 	}
29931 
29932 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
29933 		ZVAL_DEREF(value);
29934 	}
29935 
29936 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
29937 
29938 	if (IS_CV != IS_CONST) {
29939 		zend_tmp_string_release(tmp_name);
29940 	}
29941 
29942 free_and_exit_assign_obj:
29943 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29944 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
29945 	}
29946 
29947 exit_assign_obj:
29948 
29949 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29950 	/* assign_obj has two opcodes! */
29951 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29952 }
29953 
29954 /* 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)29955 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29956 {
29957 	USE_OPLINE
29958 	zval *object, *value, tmp;
29959 	zend_object *zobj;
29960 	zend_string *name, *tmp_name;
29961 
29962 	SAVE_OPLINE();
29963 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29964 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
29965 
29966 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29967 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29968 			object = Z_REFVAL_P(object);
29969 			goto assign_object;
29970 		}
29971 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
29972 		value = &EG(uninitialized_zval);
29973 		goto free_and_exit_assign_obj;
29974 	}
29975 
29976 assign_object:
29977 	zobj = Z_OBJ_P(object);
29978 	if (IS_CV == IS_CONST) {
29979 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
29980 			void **cache_slot = CACHE_ADDR(opline->extended_value);
29981 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
29982 			zend_object *zobj = Z_OBJ_P(object);
29983 			zval *property_val;
29984 
29985 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
29986 				property_val = OBJ_PROP(zobj, prop_offset);
29987 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
29988 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
29989 
29990 					if (UNEXPECTED(prop_info != NULL)) {
29991 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
29992 						goto free_and_exit_assign_obj;
29993 					} else {
29994 fast_assign_obj:
29995 						value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
29996 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29997 							ZVAL_COPY(EX_VAR(opline->result.var), value);
29998 						}
29999 						goto exit_assign_obj;
30000 					}
30001 				}
30002 			} else {
30003 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30004 				if (EXPECTED(zobj->properties != NULL)) {
30005 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
30006 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
30007 							GC_DELREF(zobj->properties);
30008 						}
30009 						zobj->properties = zend_array_dup(zobj->properties);
30010 					}
30011 					property_val = zend_hash_find_known_hash(zobj->properties, name);
30012 					if (property_val) {
30013 						goto fast_assign_obj;
30014 					}
30015 				}
30016 
30017 				if (!zobj->ce->__set) {
30018 					if (EXPECTED(zobj->properties == NULL)) {
30019 						rebuild_object_properties(zobj);
30020 					}
30021 					if (IS_TMP_VAR == IS_CONST) {
30022 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
30023 							Z_ADDREF_P(value);
30024 						}
30025 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
30026 						if (Z_ISREF_P(value)) {
30027 							if (IS_TMP_VAR == IS_VAR) {
30028 								zend_reference *ref = Z_REF_P(value);
30029 								if (GC_DELREF(ref) == 0) {
30030 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
30031 									efree_size(ref, sizeof(zend_reference));
30032 									value = &tmp;
30033 								} else {
30034 									value = Z_REFVAL_P(value);
30035 									Z_TRY_ADDREF_P(value);
30036 								}
30037 							} else {
30038 								value = Z_REFVAL_P(value);
30039 								Z_TRY_ADDREF_P(value);
30040 							}
30041 						} else if (IS_TMP_VAR == IS_CV) {
30042 							Z_TRY_ADDREF_P(value);
30043 						}
30044 						}
30045 					zend_hash_add_new(zobj->properties, name, value);
30046 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30047 						ZVAL_COPY(EX_VAR(opline->result.var), value);
30048 					}
30049 					goto exit_assign_obj;
30050 				}
30051 			}
30052 		}
30053 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30054 	} else {
30055 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
30056 		if (UNEXPECTED(!name)) {
30057 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30058 			UNDEF_RESULT();
30059 			goto exit_assign_obj;
30060 		}
30061 	}
30062 
30063 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
30064 		ZVAL_DEREF(value);
30065 	}
30066 
30067 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
30068 
30069 	if (IS_CV != IS_CONST) {
30070 		zend_tmp_string_release(tmp_name);
30071 	}
30072 
30073 free_and_exit_assign_obj:
30074 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30075 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
30076 	}
30077 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30078 exit_assign_obj:
30079 
30080 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30081 	/* assign_obj has two opcodes! */
30082 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30083 }
30084 
30085 /* 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)30086 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30087 {
30088 	USE_OPLINE
30089 	zval *object, *value, tmp;
30090 	zend_object *zobj;
30091 	zend_string *name, *tmp_name;
30092 
30093 	SAVE_OPLINE();
30094 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30095 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30096 
30097 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30098 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30099 			object = Z_REFVAL_P(object);
30100 			goto assign_object;
30101 		}
30102 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
30103 		value = &EG(uninitialized_zval);
30104 		goto free_and_exit_assign_obj;
30105 	}
30106 
30107 assign_object:
30108 	zobj = Z_OBJ_P(object);
30109 	if (IS_CV == IS_CONST) {
30110 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
30111 			void **cache_slot = CACHE_ADDR(opline->extended_value);
30112 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
30113 			zend_object *zobj = Z_OBJ_P(object);
30114 			zval *property_val;
30115 
30116 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
30117 				property_val = OBJ_PROP(zobj, prop_offset);
30118 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
30119 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
30120 
30121 					if (UNEXPECTED(prop_info != NULL)) {
30122 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
30123 						goto free_and_exit_assign_obj;
30124 					} else {
30125 fast_assign_obj:
30126 						value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
30127 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30128 							ZVAL_COPY(EX_VAR(opline->result.var), value);
30129 						}
30130 						goto exit_assign_obj;
30131 					}
30132 				}
30133 			} else {
30134 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30135 				if (EXPECTED(zobj->properties != NULL)) {
30136 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
30137 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
30138 							GC_DELREF(zobj->properties);
30139 						}
30140 						zobj->properties = zend_array_dup(zobj->properties);
30141 					}
30142 					property_val = zend_hash_find_known_hash(zobj->properties, name);
30143 					if (property_val) {
30144 						goto fast_assign_obj;
30145 					}
30146 				}
30147 
30148 				if (!zobj->ce->__set) {
30149 					if (EXPECTED(zobj->properties == NULL)) {
30150 						rebuild_object_properties(zobj);
30151 					}
30152 					if (IS_VAR == IS_CONST) {
30153 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
30154 							Z_ADDREF_P(value);
30155 						}
30156 					} else if (IS_VAR != IS_TMP_VAR) {
30157 						if (Z_ISREF_P(value)) {
30158 							if (IS_VAR == IS_VAR) {
30159 								zend_reference *ref = Z_REF_P(value);
30160 								if (GC_DELREF(ref) == 0) {
30161 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
30162 									efree_size(ref, sizeof(zend_reference));
30163 									value = &tmp;
30164 								} else {
30165 									value = Z_REFVAL_P(value);
30166 									Z_TRY_ADDREF_P(value);
30167 								}
30168 							} else {
30169 								value = Z_REFVAL_P(value);
30170 								Z_TRY_ADDREF_P(value);
30171 							}
30172 						} else if (IS_VAR == IS_CV) {
30173 							Z_TRY_ADDREF_P(value);
30174 						}
30175 						}
30176 					zend_hash_add_new(zobj->properties, name, value);
30177 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30178 						ZVAL_COPY(EX_VAR(opline->result.var), value);
30179 					}
30180 					goto exit_assign_obj;
30181 				}
30182 			}
30183 		}
30184 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30185 	} else {
30186 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
30187 		if (UNEXPECTED(!name)) {
30188 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30189 			UNDEF_RESULT();
30190 			goto exit_assign_obj;
30191 		}
30192 	}
30193 
30194 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
30195 		ZVAL_DEREF(value);
30196 	}
30197 
30198 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
30199 
30200 	if (IS_CV != IS_CONST) {
30201 		zend_tmp_string_release(tmp_name);
30202 	}
30203 
30204 free_and_exit_assign_obj:
30205 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30206 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
30207 	}
30208 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30209 exit_assign_obj:
30210 
30211 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30212 	/* assign_obj has two opcodes! */
30213 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30214 }
30215 
30216 /* 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)30217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30218 {
30219 	USE_OPLINE
30220 	zval *object, *value, tmp;
30221 	zend_object *zobj;
30222 	zend_string *name, *tmp_name;
30223 
30224 	SAVE_OPLINE();
30225 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30226 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
30227 
30228 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30229 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30230 			object = Z_REFVAL_P(object);
30231 			goto assign_object;
30232 		}
30233 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
30234 		value = &EG(uninitialized_zval);
30235 		goto free_and_exit_assign_obj;
30236 	}
30237 
30238 assign_object:
30239 	zobj = Z_OBJ_P(object);
30240 	if (IS_CV == IS_CONST) {
30241 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
30242 			void **cache_slot = CACHE_ADDR(opline->extended_value);
30243 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
30244 			zend_object *zobj = Z_OBJ_P(object);
30245 			zval *property_val;
30246 
30247 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
30248 				property_val = OBJ_PROP(zobj, prop_offset);
30249 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
30250 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
30251 
30252 					if (UNEXPECTED(prop_info != NULL)) {
30253 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
30254 						goto free_and_exit_assign_obj;
30255 					} else {
30256 fast_assign_obj:
30257 						value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
30258 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30259 							ZVAL_COPY(EX_VAR(opline->result.var), value);
30260 						}
30261 						goto exit_assign_obj;
30262 					}
30263 				}
30264 			} else {
30265 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30266 				if (EXPECTED(zobj->properties != NULL)) {
30267 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
30268 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
30269 							GC_DELREF(zobj->properties);
30270 						}
30271 						zobj->properties = zend_array_dup(zobj->properties);
30272 					}
30273 					property_val = zend_hash_find_known_hash(zobj->properties, name);
30274 					if (property_val) {
30275 						goto fast_assign_obj;
30276 					}
30277 				}
30278 
30279 				if (!zobj->ce->__set) {
30280 					if (EXPECTED(zobj->properties == NULL)) {
30281 						rebuild_object_properties(zobj);
30282 					}
30283 					if (IS_CV == IS_CONST) {
30284 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
30285 							Z_ADDREF_P(value);
30286 						}
30287 					} else if (IS_CV != IS_TMP_VAR) {
30288 						if (Z_ISREF_P(value)) {
30289 							if (IS_CV == IS_VAR) {
30290 								zend_reference *ref = Z_REF_P(value);
30291 								if (GC_DELREF(ref) == 0) {
30292 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
30293 									efree_size(ref, sizeof(zend_reference));
30294 									value = &tmp;
30295 								} else {
30296 									value = Z_REFVAL_P(value);
30297 									Z_TRY_ADDREF_P(value);
30298 								}
30299 							} else {
30300 								value = Z_REFVAL_P(value);
30301 								Z_TRY_ADDREF_P(value);
30302 							}
30303 						} else if (IS_CV == IS_CV) {
30304 							Z_TRY_ADDREF_P(value);
30305 						}
30306 						}
30307 					zend_hash_add_new(zobj->properties, name, value);
30308 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30309 						ZVAL_COPY(EX_VAR(opline->result.var), value);
30310 					}
30311 					goto exit_assign_obj;
30312 				}
30313 			}
30314 		}
30315 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30316 	} else {
30317 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
30318 		if (UNEXPECTED(!name)) {
30319 
30320 			UNDEF_RESULT();
30321 			goto exit_assign_obj;
30322 		}
30323 	}
30324 
30325 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
30326 		ZVAL_DEREF(value);
30327 	}
30328 
30329 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
30330 
30331 	if (IS_CV != IS_CONST) {
30332 		zend_tmp_string_release(tmp_name);
30333 	}
30334 
30335 free_and_exit_assign_obj:
30336 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30337 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
30338 	}
30339 
30340 exit_assign_obj:
30341 
30342 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30343 	/* assign_obj has two opcodes! */
30344 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30345 }
30346 
30347 /* 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)30348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30349 {
30350 	USE_OPLINE
30351 	zval *object_ptr, *orig_object_ptr;
30352 	zval *value;
30353 	zval *variable_ptr;
30354 	zval *dim;
30355 
30356 	SAVE_OPLINE();
30357 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30358 
30359 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30360 try_assign_dim_array:
30361 		SEPARATE_ARRAY(object_ptr);
30362 		if (IS_CV == IS_UNUSED) {
30363 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
30364 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
30365 				HashTable *ht = Z_ARRVAL_P(object_ptr);
30366 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
30367 					GC_ADDREF(ht);
30368 				}
30369 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30370 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
30371 					zend_array_destroy(ht);
30372 					goto assign_dim_error;
30373 				}
30374 			}
30375 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
30376 				ZVAL_DEREF(value);
30377 			}
30378 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
30379 			if (UNEXPECTED(value == NULL)) {
30380 				zend_cannot_add_element();
30381 				goto assign_dim_error;
30382 			} else if (IS_CONST == IS_CV) {
30383 				if (Z_REFCOUNTED_P(value)) {
30384 					Z_ADDREF_P(value);
30385 				}
30386 			} else if (IS_CONST == IS_VAR) {
30387 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
30388 				if (Z_ISREF_P(free_op_data)) {
30389 					if (Z_REFCOUNTED_P(value)) {
30390 						Z_ADDREF_P(value);
30391 					}
30392 					zval_ptr_dtor_nogc(free_op_data);
30393 				}
30394 			} else if (IS_CONST == IS_CONST) {
30395 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
30396 					Z_ADDREF_P(value);
30397 				}
30398 			}
30399 		} else {
30400 			dim = EX_VAR(opline->op2.var);
30401 			if (IS_CV == IS_CONST) {
30402 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30403 			} else {
30404 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30405 			}
30406 			if (UNEXPECTED(variable_ptr == NULL)) {
30407 				goto assign_dim_error;
30408 			}
30409 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
30410 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
30411 		}
30412 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30413 			ZVAL_COPY(EX_VAR(opline->result.var), value);
30414 		}
30415 	} else {
30416 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
30417 			object_ptr = Z_REFVAL_P(object_ptr);
30418 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30419 				goto try_assign_dim_array;
30420 			}
30421 		}
30422 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
30423 			zend_object *obj = Z_OBJ_P(object_ptr);
30424 
30425 			GC_ADDREF(obj);
30426 			dim = EX_VAR(opline->op2.var);
30427 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
30428 				dim = ZVAL_UNDEFINED_OP2();
30429 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30430 				dim++;
30431 			}
30432 
30433 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
30434 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
30435 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30436 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
30437 				ZVAL_DEREF(value);
30438 			}
30439 
30440 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
30441 
30442 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
30443 				zend_objects_store_del(obj);
30444 			}
30445 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
30446 			if (IS_CV == IS_UNUSED) {
30447 				zend_use_new_element_for_string();
30448 
30449 				UNDEF_RESULT();
30450 			} else {
30451 				dim = EX_VAR(opline->op2.var);
30452 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
30453 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
30454 
30455 			}
30456 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
30457 			if (Z_ISREF_P(orig_object_ptr)
30458 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
30459 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
30460 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30461 
30462 				UNDEF_RESULT();
30463 			} else {
30464 				HashTable *ht = zend_new_array(8);
30465 				zend_uchar old_type = Z_TYPE_P(object_ptr);
30466 
30467 				ZVAL_ARR(object_ptr, ht);
30468 				if (UNEXPECTED(old_type == IS_FALSE)) {
30469 					GC_ADDREF(ht);
30470 					zend_false_to_array_deprecated();
30471 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
30472 						zend_array_destroy(ht);
30473 						goto assign_dim_error;
30474 					}
30475 				}
30476 				goto try_assign_dim_array;
30477 			}
30478 		} else {
30479 			zend_use_scalar_as_array();
30480 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30481 assign_dim_error:
30482 
30483 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30484 				ZVAL_NULL(EX_VAR(opline->result.var));
30485 			}
30486 		}
30487 	}
30488 	if (IS_CV != IS_UNUSED) {
30489 
30490 	}
30491 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30492 	/* assign_dim has two opcodes! */
30493 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30494 }
30495 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30496 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30497 {
30498 	USE_OPLINE
30499 	zval *object_ptr, *orig_object_ptr;
30500 	zval *value;
30501 	zval *variable_ptr;
30502 	zval *dim;
30503 
30504 	SAVE_OPLINE();
30505 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30506 
30507 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30508 try_assign_dim_array:
30509 		SEPARATE_ARRAY(object_ptr);
30510 		if (IS_CV == IS_UNUSED) {
30511 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30512 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
30513 				HashTable *ht = Z_ARRVAL_P(object_ptr);
30514 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
30515 					GC_ADDREF(ht);
30516 				}
30517 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30518 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
30519 					zend_array_destroy(ht);
30520 					goto assign_dim_error;
30521 				}
30522 			}
30523 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
30524 				ZVAL_DEREF(value);
30525 			}
30526 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
30527 			if (UNEXPECTED(value == NULL)) {
30528 				zend_cannot_add_element();
30529 				goto assign_dim_error;
30530 			} else if (IS_TMP_VAR == IS_CV) {
30531 				if (Z_REFCOUNTED_P(value)) {
30532 					Z_ADDREF_P(value);
30533 				}
30534 			} else if (IS_TMP_VAR == IS_VAR) {
30535 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
30536 				if (Z_ISREF_P(free_op_data)) {
30537 					if (Z_REFCOUNTED_P(value)) {
30538 						Z_ADDREF_P(value);
30539 					}
30540 					zval_ptr_dtor_nogc(free_op_data);
30541 				}
30542 			} else if (IS_TMP_VAR == IS_CONST) {
30543 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
30544 					Z_ADDREF_P(value);
30545 				}
30546 			}
30547 		} else {
30548 			dim = EX_VAR(opline->op2.var);
30549 			if (IS_CV == IS_CONST) {
30550 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30551 			} else {
30552 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30553 			}
30554 			if (UNEXPECTED(variable_ptr == NULL)) {
30555 				goto assign_dim_error;
30556 			}
30557 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30558 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
30559 		}
30560 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30561 			ZVAL_COPY(EX_VAR(opline->result.var), value);
30562 		}
30563 	} else {
30564 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
30565 			object_ptr = Z_REFVAL_P(object_ptr);
30566 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30567 				goto try_assign_dim_array;
30568 			}
30569 		}
30570 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
30571 			zend_object *obj = Z_OBJ_P(object_ptr);
30572 
30573 			GC_ADDREF(obj);
30574 			dim = EX_VAR(opline->op2.var);
30575 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
30576 				dim = ZVAL_UNDEFINED_OP2();
30577 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30578 				dim++;
30579 			}
30580 
30581 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30582 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
30583 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30584 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
30585 				ZVAL_DEREF(value);
30586 			}
30587 
30588 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
30589 
30590 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30591 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
30592 				zend_objects_store_del(obj);
30593 			}
30594 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
30595 			if (IS_CV == IS_UNUSED) {
30596 				zend_use_new_element_for_string();
30597 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30598 				UNDEF_RESULT();
30599 			} else {
30600 				dim = EX_VAR(opline->op2.var);
30601 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30602 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
30603 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30604 			}
30605 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
30606 			if (Z_ISREF_P(orig_object_ptr)
30607 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
30608 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
30609 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30610 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30611 				UNDEF_RESULT();
30612 			} else {
30613 				HashTable *ht = zend_new_array(8);
30614 				zend_uchar old_type = Z_TYPE_P(object_ptr);
30615 
30616 				ZVAL_ARR(object_ptr, ht);
30617 				if (UNEXPECTED(old_type == IS_FALSE)) {
30618 					GC_ADDREF(ht);
30619 					zend_false_to_array_deprecated();
30620 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
30621 						zend_array_destroy(ht);
30622 						goto assign_dim_error;
30623 					}
30624 				}
30625 				goto try_assign_dim_array;
30626 			}
30627 		} else {
30628 			zend_use_scalar_as_array();
30629 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30630 assign_dim_error:
30631 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30632 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30633 				ZVAL_NULL(EX_VAR(opline->result.var));
30634 			}
30635 		}
30636 	}
30637 	if (IS_CV != IS_UNUSED) {
30638 
30639 	}
30640 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30641 	/* assign_dim has two opcodes! */
30642 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30643 }
30644 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30645 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30646 {
30647 	USE_OPLINE
30648 	zval *object_ptr, *orig_object_ptr;
30649 	zval *value;
30650 	zval *variable_ptr;
30651 	zval *dim;
30652 
30653 	SAVE_OPLINE();
30654 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30655 
30656 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30657 try_assign_dim_array:
30658 		SEPARATE_ARRAY(object_ptr);
30659 		if (IS_CV == IS_UNUSED) {
30660 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30661 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
30662 				HashTable *ht = Z_ARRVAL_P(object_ptr);
30663 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
30664 					GC_ADDREF(ht);
30665 				}
30666 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30667 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
30668 					zend_array_destroy(ht);
30669 					goto assign_dim_error;
30670 				}
30671 			}
30672 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
30673 				ZVAL_DEREF(value);
30674 			}
30675 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
30676 			if (UNEXPECTED(value == NULL)) {
30677 				zend_cannot_add_element();
30678 				goto assign_dim_error;
30679 			} else if (IS_VAR == IS_CV) {
30680 				if (Z_REFCOUNTED_P(value)) {
30681 					Z_ADDREF_P(value);
30682 				}
30683 			} else if (IS_VAR == IS_VAR) {
30684 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
30685 				if (Z_ISREF_P(free_op_data)) {
30686 					if (Z_REFCOUNTED_P(value)) {
30687 						Z_ADDREF_P(value);
30688 					}
30689 					zval_ptr_dtor_nogc(free_op_data);
30690 				}
30691 			} else if (IS_VAR == IS_CONST) {
30692 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
30693 					Z_ADDREF_P(value);
30694 				}
30695 			}
30696 		} else {
30697 			dim = EX_VAR(opline->op2.var);
30698 			if (IS_CV == IS_CONST) {
30699 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30700 			} else {
30701 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30702 			}
30703 			if (UNEXPECTED(variable_ptr == NULL)) {
30704 				goto assign_dim_error;
30705 			}
30706 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30707 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
30708 		}
30709 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30710 			ZVAL_COPY(EX_VAR(opline->result.var), value);
30711 		}
30712 	} else {
30713 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
30714 			object_ptr = Z_REFVAL_P(object_ptr);
30715 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30716 				goto try_assign_dim_array;
30717 			}
30718 		}
30719 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
30720 			zend_object *obj = Z_OBJ_P(object_ptr);
30721 
30722 			GC_ADDREF(obj);
30723 			dim = EX_VAR(opline->op2.var);
30724 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
30725 				dim = ZVAL_UNDEFINED_OP2();
30726 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30727 				dim++;
30728 			}
30729 
30730 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30731 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
30732 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30733 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
30734 				ZVAL_DEREF(value);
30735 			}
30736 
30737 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
30738 
30739 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30740 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
30741 				zend_objects_store_del(obj);
30742 			}
30743 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
30744 			if (IS_CV == IS_UNUSED) {
30745 				zend_use_new_element_for_string();
30746 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30747 				UNDEF_RESULT();
30748 			} else {
30749 				dim = EX_VAR(opline->op2.var);
30750 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30751 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
30752 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30753 			}
30754 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
30755 			if (Z_ISREF_P(orig_object_ptr)
30756 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
30757 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
30758 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30759 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30760 				UNDEF_RESULT();
30761 			} else {
30762 				HashTable *ht = zend_new_array(8);
30763 				zend_uchar old_type = Z_TYPE_P(object_ptr);
30764 
30765 				ZVAL_ARR(object_ptr, ht);
30766 				if (UNEXPECTED(old_type == IS_FALSE)) {
30767 					GC_ADDREF(ht);
30768 					zend_false_to_array_deprecated();
30769 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
30770 						zend_array_destroy(ht);
30771 						goto assign_dim_error;
30772 					}
30773 				}
30774 				goto try_assign_dim_array;
30775 			}
30776 		} else {
30777 			zend_use_scalar_as_array();
30778 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30779 assign_dim_error:
30780 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30781 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30782 				ZVAL_NULL(EX_VAR(opline->result.var));
30783 			}
30784 		}
30785 	}
30786 	if (IS_CV != IS_UNUSED) {
30787 
30788 	}
30789 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30790 	/* assign_dim has two opcodes! */
30791 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30792 }
30793 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30794 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30795 {
30796 	USE_OPLINE
30797 	zval *object_ptr, *orig_object_ptr;
30798 	zval *value;
30799 	zval *variable_ptr;
30800 	zval *dim;
30801 
30802 	SAVE_OPLINE();
30803 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30804 
30805 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30806 try_assign_dim_array:
30807 		SEPARATE_ARRAY(object_ptr);
30808 		if (IS_CV == IS_UNUSED) {
30809 			value = EX_VAR((opline+1)->op1.var);
30810 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
30811 				HashTable *ht = Z_ARRVAL_P(object_ptr);
30812 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
30813 					GC_ADDREF(ht);
30814 				}
30815 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30816 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
30817 					zend_array_destroy(ht);
30818 					goto assign_dim_error;
30819 				}
30820 			}
30821 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
30822 				ZVAL_DEREF(value);
30823 			}
30824 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
30825 			if (UNEXPECTED(value == NULL)) {
30826 				zend_cannot_add_element();
30827 				goto assign_dim_error;
30828 			} else if (IS_CV == IS_CV) {
30829 				if (Z_REFCOUNTED_P(value)) {
30830 					Z_ADDREF_P(value);
30831 				}
30832 			} else if (IS_CV == IS_VAR) {
30833 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
30834 				if (Z_ISREF_P(free_op_data)) {
30835 					if (Z_REFCOUNTED_P(value)) {
30836 						Z_ADDREF_P(value);
30837 					}
30838 					zval_ptr_dtor_nogc(free_op_data);
30839 				}
30840 			} else if (IS_CV == IS_CONST) {
30841 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
30842 					Z_ADDREF_P(value);
30843 				}
30844 			}
30845 		} else {
30846 			dim = EX_VAR(opline->op2.var);
30847 			if (IS_CV == IS_CONST) {
30848 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30849 			} else {
30850 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30851 			}
30852 			if (UNEXPECTED(variable_ptr == NULL)) {
30853 				goto assign_dim_error;
30854 			}
30855 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
30856 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
30857 		}
30858 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30859 			ZVAL_COPY(EX_VAR(opline->result.var), value);
30860 		}
30861 	} else {
30862 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
30863 			object_ptr = Z_REFVAL_P(object_ptr);
30864 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30865 				goto try_assign_dim_array;
30866 			}
30867 		}
30868 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
30869 			zend_object *obj = Z_OBJ_P(object_ptr);
30870 
30871 			GC_ADDREF(obj);
30872 			dim = EX_VAR(opline->op2.var);
30873 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
30874 				dim = ZVAL_UNDEFINED_OP2();
30875 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30876 				dim++;
30877 			}
30878 
30879 			value = EX_VAR((opline+1)->op1.var);
30880 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
30881 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30882 			} else if (IS_CV & (IS_CV|IS_VAR)) {
30883 				ZVAL_DEREF(value);
30884 			}
30885 
30886 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
30887 
30888 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
30889 				zend_objects_store_del(obj);
30890 			}
30891 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
30892 			if (IS_CV == IS_UNUSED) {
30893 				zend_use_new_element_for_string();
30894 
30895 				UNDEF_RESULT();
30896 			} else {
30897 				dim = EX_VAR(opline->op2.var);
30898 				value = EX_VAR((opline+1)->op1.var);
30899 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
30900 
30901 			}
30902 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
30903 			if (Z_ISREF_P(orig_object_ptr)
30904 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
30905 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
30906 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30907 
30908 				UNDEF_RESULT();
30909 			} else {
30910 				HashTable *ht = zend_new_array(8);
30911 				zend_uchar old_type = Z_TYPE_P(object_ptr);
30912 
30913 				ZVAL_ARR(object_ptr, ht);
30914 				if (UNEXPECTED(old_type == IS_FALSE)) {
30915 					GC_ADDREF(ht);
30916 					zend_false_to_array_deprecated();
30917 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
30918 						zend_array_destroy(ht);
30919 						goto assign_dim_error;
30920 					}
30921 				}
30922 				goto try_assign_dim_array;
30923 			}
30924 		} else {
30925 			zend_use_scalar_as_array();
30926 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30927 assign_dim_error:
30928 
30929 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30930 				ZVAL_NULL(EX_VAR(opline->result.var));
30931 			}
30932 		}
30933 	}
30934 	if (IS_CV != IS_UNUSED) {
30935 
30936 	}
30937 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30938 	/* assign_dim has two opcodes! */
30939 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30940 }
30941 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30942 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30943 {
30944 	USE_OPLINE
30945 	zval *value;
30946 	zval *variable_ptr;
30947 
30948 	SAVE_OPLINE();
30949 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30950 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30951 
30952 	value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
30953 	if (UNEXPECTED(0)) {
30954 		ZVAL_COPY(EX_VAR(opline->result.var), value);
30955 	}
30956 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30957 	/* zend_assign_to_variable() always takes care of op2, never free it! */
30958 
30959 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30960 }
30961 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30962 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30963 {
30964 	USE_OPLINE
30965 	zval *value;
30966 	zval *variable_ptr;
30967 
30968 	SAVE_OPLINE();
30969 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30970 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30971 
30972 	value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
30973 	if (UNEXPECTED(1)) {
30974 		ZVAL_COPY(EX_VAR(opline->result.var), value);
30975 	}
30976 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30977 	/* zend_assign_to_variable() always takes care of op2, never free it! */
30978 
30979 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30980 }
30981 
ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30982 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30983 {
30984 	USE_OPLINE
30985 	zval *variable_ptr;
30986 	zval *value_ptr;
30987 
30988 	SAVE_OPLINE();
30989 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
30990 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30991 
30992 	if (IS_VAR == IS_VAR &&
30993 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
30994 
30995 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
30996 		variable_ptr = &EG(uninitialized_zval);
30997 	} else if (IS_CV == IS_VAR &&
30998 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
30999 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
31000 
31001 		variable_ptr = zend_wrong_assign_to_variable_reference(
31002 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31003 	} else {
31004 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
31005 	}
31006 
31007 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31008 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
31009 	}
31010 
31011 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31012 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31013 }
31014 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31015 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31016 {
31017 	USE_OPLINE
31018 	zval *property, *container, *value_ptr;
31019 
31020 	SAVE_OPLINE();
31021 
31022 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31023 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31024 
31025 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31026 
31027 	if (1) {
31028 		if (IS_VAR == IS_UNUSED) {
31029 			if (IS_CV == IS_CONST) {
31030 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31031 			} else {
31032 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31033 			}
31034 		} else {
31035 			if (IS_CV == IS_CONST) {
31036 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31037 			} else {
31038 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31039 			}
31040 		}
31041 	} else {
31042 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31043 	}
31044 
31045 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31046 
31047 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
31048 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31049 }
31050 
31051 /* 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)31052 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31053 {
31054 	USE_OPLINE
31055 	zval *property, *container, *value_ptr;
31056 
31057 	SAVE_OPLINE();
31058 
31059 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31060 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31061 
31062 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
31063 
31064 	if (1) {
31065 		if (IS_VAR == IS_UNUSED) {
31066 			if (IS_CV == IS_CONST) {
31067 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31068 			} else {
31069 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31070 			}
31071 		} else {
31072 			if (IS_CV == IS_CONST) {
31073 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31074 			} else {
31075 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31076 			}
31077 		}
31078 	} else {
31079 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31080 	}
31081 
31082 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31083 
31084 
31085 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31086 }
31087 
31088 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31089 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31090 {
31091 	USE_OPLINE
31092 	zval *function_name;
31093 	zend_class_entry *ce;
31094 	uint32_t call_info;
31095 	zend_function *fbc;
31096 	zend_execute_data *call;
31097 
31098 	SAVE_OPLINE();
31099 
31100 	if (IS_VAR == IS_CONST) {
31101 		/* no function found. try a static method in class */
31102 		ce = CACHED_PTR(opline->result.num);
31103 		if (UNEXPECTED(ce == NULL)) {
31104 			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);
31105 			if (UNEXPECTED(ce == NULL)) {
31106 
31107 				HANDLE_EXCEPTION();
31108 			}
31109 			if (IS_CV != IS_CONST) {
31110 				CACHE_PTR(opline->result.num, ce);
31111 			}
31112 		}
31113 	} else if (IS_VAR == IS_UNUSED) {
31114 		ce = zend_fetch_class(NULL, opline->op1.num);
31115 		if (UNEXPECTED(ce == NULL)) {
31116 
31117 			HANDLE_EXCEPTION();
31118 		}
31119 	} else {
31120 		ce = Z_CE_P(EX_VAR(opline->op1.var));
31121 	}
31122 
31123 	if (IS_VAR == IS_CONST &&
31124 	    IS_CV == IS_CONST &&
31125 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
31126 		/* nothing to do */
31127 	} else if (IS_VAR != IS_CONST &&
31128 	           IS_CV == IS_CONST &&
31129 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
31130 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
31131 	} else if (IS_CV != IS_UNUSED) {
31132 		function_name = EX_VAR(opline->op2.var);
31133 		if (IS_CV != IS_CONST) {
31134 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
31135 				do {
31136 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
31137 						function_name = Z_REFVAL_P(function_name);
31138 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
31139 							break;
31140 						}
31141 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
31142 						ZVAL_UNDEFINED_OP2();
31143 						if (UNEXPECTED(EG(exception) != NULL)) {
31144 							HANDLE_EXCEPTION();
31145 						}
31146 					}
31147 					zend_throw_error(NULL, "Method name must be a string");
31148 
31149 					HANDLE_EXCEPTION();
31150 				} while (0);
31151 			}
31152 		}
31153 
31154 		if (ce->get_static_method) {
31155 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
31156 		} else {
31157 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
31158 		}
31159 		if (UNEXPECTED(fbc == NULL)) {
31160 			if (EXPECTED(!EG(exception))) {
31161 				zend_undefined_method(ce, Z_STR_P(function_name));
31162 			}
31163 
31164 			HANDLE_EXCEPTION();
31165 		}
31166 		if (IS_CV == IS_CONST &&
31167 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
31168 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
31169 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
31170 		}
31171 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
31172 			init_func_run_time_cache(&fbc->op_array);
31173 		}
31174 		if (IS_CV != IS_CONST) {
31175 
31176 		}
31177 	} else {
31178 		if (UNEXPECTED(ce->constructor == NULL)) {
31179 			zend_throw_error(NULL, "Cannot call constructor");
31180 			HANDLE_EXCEPTION();
31181 		}
31182 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
31183 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
31184 			HANDLE_EXCEPTION();
31185 		}
31186 		fbc = ce->constructor;
31187 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
31188 			init_func_run_time_cache(&fbc->op_array);
31189 		}
31190 	}
31191 
31192 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
31193 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
31194 			ce = (zend_class_entry*)Z_OBJ(EX(This));
31195 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
31196 		} else {
31197 			zend_non_static_method_call(fbc);
31198 			HANDLE_EXCEPTION();
31199 		}
31200 	} else {
31201 		/* previous opcode is ZEND_FETCH_CLASS */
31202 		if (IS_VAR == IS_UNUSED
31203 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
31204 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
31205 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
31206 				ce = Z_OBJCE(EX(This));
31207 			} else {
31208 				ce = Z_CE(EX(This));
31209 			}
31210 		}
31211 		call_info = ZEND_CALL_NESTED_FUNCTION;
31212 	}
31213 
31214 	call = zend_vm_stack_push_call_frame(call_info,
31215 		fbc, opline->extended_value, ce);
31216 	call->prev_execute_data = EX(call);
31217 	EX(call) = call;
31218 
31219 	ZEND_VM_NEXT_OPCODE();
31220 }
31221 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31223 {
31224 	USE_OPLINE
31225 	zval *expr_ptr, new_expr;
31226 
31227 	SAVE_OPLINE();
31228 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
31229 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
31230 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31231 		if (Z_ISREF_P(expr_ptr)) {
31232 			Z_ADDREF_P(expr_ptr);
31233 		} else {
31234 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
31235 		}
31236 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31237 	} else {
31238 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31239 		if (IS_VAR == IS_TMP_VAR) {
31240 			/* pass */
31241 		} else if (IS_VAR == IS_CONST) {
31242 			Z_TRY_ADDREF_P(expr_ptr);
31243 		} else if (IS_VAR == IS_CV) {
31244 			ZVAL_DEREF(expr_ptr);
31245 			Z_TRY_ADDREF_P(expr_ptr);
31246 		} else /* if (IS_VAR == IS_VAR) */ {
31247 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
31248 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
31249 
31250 				expr_ptr = Z_REFVAL_P(expr_ptr);
31251 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
31252 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
31253 					expr_ptr = &new_expr;
31254 					efree_size(ref, sizeof(zend_reference));
31255 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
31256 					Z_ADDREF_P(expr_ptr);
31257 				}
31258 			}
31259 		}
31260 	}
31261 
31262 	if (IS_CV != IS_UNUSED) {
31263 		zval *offset = EX_VAR(opline->op2.var);
31264 		zend_string *str;
31265 		zend_ulong hval;
31266 
31267 add_again:
31268 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
31269 			str = Z_STR_P(offset);
31270 			if (IS_CV != IS_CONST) {
31271 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
31272 					goto num_index;
31273 				}
31274 			}
31275 str_index:
31276 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
31277 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
31278 			hval = Z_LVAL_P(offset);
31279 num_index:
31280 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
31281 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
31282 			offset = Z_REFVAL_P(offset);
31283 			goto add_again;
31284 		} else if (Z_TYPE_P(offset) == IS_NULL) {
31285 			str = ZSTR_EMPTY_ALLOC();
31286 			goto str_index;
31287 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
31288 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
31289 			goto num_index;
31290 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
31291 			hval = 0;
31292 			goto num_index;
31293 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
31294 			hval = 1;
31295 			goto num_index;
31296 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
31297 			zend_use_resource_as_offset(offset);
31298 			hval = Z_RES_HANDLE_P(offset);
31299 			goto num_index;
31300 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
31301 			ZVAL_UNDEFINED_OP2();
31302 			str = ZSTR_EMPTY_ALLOC();
31303 			goto str_index;
31304 		} else {
31305 			zend_illegal_offset();
31306 			zval_ptr_dtor_nogc(expr_ptr);
31307 		}
31308 
31309 	} else {
31310 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
31311 			zend_cannot_add_element();
31312 			zval_ptr_dtor_nogc(expr_ptr);
31313 		}
31314 	}
31315 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31316 }
31317 
ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31319 {
31320 	zval *array;
31321 	uint32_t size;
31322 	USE_OPLINE
31323 
31324 	array = EX_VAR(opline->result.var);
31325 	if (IS_VAR != IS_UNUSED) {
31326 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
31327 		ZVAL_ARR(array, zend_new_array(size));
31328 		/* Explicitly initialize array as not-packed if flag is set */
31329 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
31330 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
31331 		}
31332 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31333 	} else {
31334 		ZVAL_ARR(array, zend_new_array(0));
31335 		ZEND_VM_NEXT_OPCODE();
31336 	}
31337 }
31338 
ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31339 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31340 {
31341 	USE_OPLINE
31342 	zval *container;
31343 	zval *offset;
31344 	zend_ulong hval;
31345 	zend_string *key;
31346 
31347 	SAVE_OPLINE();
31348 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31349 	offset = EX_VAR(opline->op2.var);
31350 
31351 	do {
31352 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
31353 			HashTable *ht;
31354 
31355 unset_dim_array:
31356 			SEPARATE_ARRAY(container);
31357 			ht = Z_ARRVAL_P(container);
31358 offset_again:
31359 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
31360 				key = Z_STR_P(offset);
31361 				if (IS_CV != IS_CONST) {
31362 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
31363 						goto num_index_dim;
31364 					}
31365 				}
31366 str_index_dim:
31367 				ZEND_ASSERT(ht != &EG(symbol_table));
31368 				zend_hash_del(ht, key);
31369 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
31370 				hval = Z_LVAL_P(offset);
31371 num_index_dim:
31372 				zend_hash_index_del(ht, hval);
31373 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
31374 				offset = Z_REFVAL_P(offset);
31375 				goto offset_again;
31376 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
31377 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
31378 				goto num_index_dim;
31379 			} else if (Z_TYPE_P(offset) == IS_NULL) {
31380 				key = ZSTR_EMPTY_ALLOC();
31381 				goto str_index_dim;
31382 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
31383 				hval = 0;
31384 				goto num_index_dim;
31385 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
31386 				hval = 1;
31387 				goto num_index_dim;
31388 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
31389 				zend_use_resource_as_offset(offset);
31390 				hval = Z_RES_HANDLE_P(offset);
31391 				goto num_index_dim;
31392 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
31393 				ZVAL_UNDEFINED_OP2();
31394 				key = ZSTR_EMPTY_ALLOC();
31395 				goto str_index_dim;
31396 			} else {
31397 				zend_type_error("Illegal offset type in unset");
31398 			}
31399 			break;
31400 		} else if (Z_ISREF_P(container)) {
31401 			container = Z_REFVAL_P(container);
31402 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
31403 				goto unset_dim_array;
31404 			}
31405 		}
31406 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31407 			container = ZVAL_UNDEFINED_OP1();
31408 		}
31409 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
31410 			offset = ZVAL_UNDEFINED_OP2();
31411 		}
31412 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
31413 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
31414 				offset++;
31415 			}
31416 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
31417 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
31418 			zend_throw_error(NULL, "Cannot unset string offsets");
31419 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
31420 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
31421 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
31422 			zend_false_to_array_deprecated();
31423 		}
31424 	} while (0);
31425 
31426 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31427 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31428 }
31429 
ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31430 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31431 {
31432 	USE_OPLINE
31433 	zval *container;
31434 	zval *offset;
31435 	zend_string *name, *tmp_name;
31436 
31437 	SAVE_OPLINE();
31438 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31439 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31440 
31441 	do {
31442 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
31443 			if (Z_ISREF_P(container)) {
31444 				container = Z_REFVAL_P(container);
31445 				if (Z_TYPE_P(container) != IS_OBJECT) {
31446 					if (IS_VAR == IS_CV
31447 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31448 						ZVAL_UNDEFINED_OP1();
31449 					}
31450 					break;
31451 				}
31452 			} else {
31453 				break;
31454 			}
31455 		}
31456 		if (IS_CV == IS_CONST) {
31457 			name = Z_STR_P(offset);
31458 		} else {
31459 			name = zval_try_get_tmp_string(offset, &tmp_name);
31460 			if (UNEXPECTED(!name)) {
31461 				break;
31462 			}
31463 		}
31464 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
31465 		if (IS_CV != IS_CONST) {
31466 			zend_tmp_string_release(tmp_name);
31467 		}
31468 	} while (0);
31469 
31470 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31471 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31472 }
31473 
ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31474 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31475 {
31476 	USE_OPLINE
31477 
31478 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
31479 
31480 	SAVE_OPLINE();
31481 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
31482 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31483 	}
31484 
31485 	/* Destroy the previously yielded value */
31486 	zval_ptr_dtor(&generator->value);
31487 
31488 	/* Destroy the previously yielded key */
31489 	zval_ptr_dtor(&generator->key);
31490 
31491 	/* Set the new yielded value */
31492 	if (IS_VAR != IS_UNUSED) {
31493 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
31494 			/* Constants and temporary variables aren't yieldable by reference,
31495 			 * but we still allow them with a notice. */
31496 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
31497 				zval *value;
31498 
31499 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
31500 
31501 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31502 				ZVAL_COPY_VALUE(&generator->value, value);
31503 				if (IS_VAR == IS_CONST) {
31504 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
31505 						Z_ADDREF(generator->value);
31506 					}
31507 				}
31508 			} else {
31509 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31510 
31511 				/* If a function call result is yielded and the function did
31512 				 * not return by reference we throw a notice. */
31513 				do {
31514 					if (IS_VAR == IS_VAR) {
31515 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
31516 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
31517 						 && !Z_ISREF_P(value_ptr)) {
31518 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
31519 							ZVAL_COPY(&generator->value, value_ptr);
31520 							break;
31521 						}
31522 					}
31523 					if (Z_ISREF_P(value_ptr)) {
31524 						Z_ADDREF_P(value_ptr);
31525 					} else {
31526 						ZVAL_MAKE_REF_EX(value_ptr, 2);
31527 					}
31528 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
31529 				} while (0);
31530 
31531 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31532 			}
31533 		} else {
31534 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31535 
31536 			/* Consts, temporary variables and references need copying */
31537 			if (IS_VAR == IS_CONST) {
31538 				ZVAL_COPY_VALUE(&generator->value, value);
31539 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
31540 					Z_ADDREF(generator->value);
31541 				}
31542 			} else if (IS_VAR == IS_TMP_VAR) {
31543 				ZVAL_COPY_VALUE(&generator->value, value);
31544             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
31545 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
31546 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31547 			} else {
31548 				ZVAL_COPY_VALUE(&generator->value, value);
31549 				if (IS_VAR == IS_CV) {
31550 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
31551 				}
31552 			}
31553 		}
31554 	} else {
31555 		/* If no value was specified yield null */
31556 		ZVAL_NULL(&generator->value);
31557 	}
31558 
31559 	/* Set the new yielded key */
31560 	if (IS_CV != IS_UNUSED) {
31561 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31562 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
31563 			key = Z_REFVAL_P(key);
31564 		}
31565 		ZVAL_COPY(&generator->key, key);
31566 
31567 		if (Z_TYPE(generator->key) == IS_LONG
31568 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
31569 		) {
31570 			generator->largest_used_integer_key = Z_LVAL(generator->key);
31571 		}
31572 	} else {
31573 		/* If no key was specified we use auto-increment keys */
31574 		generator->largest_used_integer_key++;
31575 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
31576 	}
31577 
31578 	if (RETURN_VALUE_USED(opline)) {
31579 		/* If the return value of yield is used set the send
31580 		 * target and initialize it to NULL */
31581 		generator->send_target = EX_VAR(opline->result.var);
31582 		ZVAL_NULL(generator->send_target);
31583 	} else {
31584 		generator->send_target = NULL;
31585 	}
31586 
31587 	/* We increment to the next op, so we are at the correct position when the
31588 	 * generator is resumed. */
31589 	ZEND_VM_INC_OPCODE();
31590 
31591 	/* The GOTO VM uses a local opline variable. We need to set the opline
31592 	 * variable in execute_data so we don't resume at an old position. */
31593 	SAVE_OPLINE();
31594 
31595 	ZEND_VM_RETURN();
31596 }
31597 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31598 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)
31599 {
31600 	USE_OPLINE
31601 	zval *array;
31602 	zval *value, *variable_ptr;
31603 	uint32_t value_type;
31604 	HashTable *fe_ht;
31605 	HashPosition pos;
31606 	Bucket *p;
31607 
31608 	array = EX_VAR(opline->op1.var);
31609 	SAVE_OPLINE();
31610 	fe_ht = Z_ARRVAL_P(array);
31611 	pos = Z_FE_POS_P(array);
31612 	p = fe_ht->arData + pos;
31613 	while (1) {
31614 		if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
31615 			/* reached end of iteration */
31616 			ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
31617 			ZEND_VM_CONTINUE();
31618 		}
31619 		pos++;
31620 		value = &p->val;
31621 		value_type = Z_TYPE_INFO_P(value);
31622 		ZEND_ASSERT(value_type != IS_INDIRECT);
31623 		if (EXPECTED(value_type != IS_UNDEF)) {
31624 			break;
31625 		}
31626 		p++;
31627 	}
31628 	Z_FE_POS_P(array) = pos;
31629 	if (0) {
31630 		if (!p->key) {
31631 			ZVAL_LONG(EX_VAR(opline->result.var), p->h);
31632 		} else {
31633 			ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
31634 		}
31635 	}
31636 
31637 	variable_ptr = EX_VAR(opline->op2.var);
31638 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
31639 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31640 }
31641 
31642 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31643 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)
31644 {
31645 	USE_OPLINE
31646 	zval *array;
31647 	zval *value, *variable_ptr;
31648 	uint32_t value_type;
31649 	HashTable *fe_ht;
31650 	HashPosition pos;
31651 	Bucket *p;
31652 
31653 	array = EX_VAR(opline->op1.var);
31654 	SAVE_OPLINE();
31655 	fe_ht = Z_ARRVAL_P(array);
31656 	pos = Z_FE_POS_P(array);
31657 	p = fe_ht->arData + pos;
31658 	while (1) {
31659 		if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
31660 			/* reached end of iteration */
31661 			ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
31662 			ZEND_VM_CONTINUE();
31663 		}
31664 		pos++;
31665 		value = &p->val;
31666 		value_type = Z_TYPE_INFO_P(value);
31667 		ZEND_ASSERT(value_type != IS_INDIRECT);
31668 		if (EXPECTED(value_type != IS_UNDEF)) {
31669 			break;
31670 		}
31671 		p++;
31672 	}
31673 	Z_FE_POS_P(array) = pos;
31674 	if (1) {
31675 		if (!p->key) {
31676 			ZVAL_LONG(EX_VAR(opline->result.var), p->h);
31677 		} else {
31678 			ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
31679 		}
31680 	}
31681 
31682 	variable_ptr = EX_VAR(opline->op2.var);
31683 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
31684 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31685 }
31686 
31687 
ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31688 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31689 {
31690 	USE_OPLINE
31691 	zval *obj;
31692 	zend_object *zobj;
31693 	zend_class_entry *ce, *scope;
31694 	zend_function *clone;
31695 	zend_object_clone_obj_t clone_call;
31696 
31697 	SAVE_OPLINE();
31698 	obj = &EX(This);
31699 
31700 	do {
31701 		if (IS_UNUSED == IS_CONST ||
31702 		    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
31703 		    if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
31704 				obj = Z_REFVAL_P(obj);
31705 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
31706 					break;
31707 				}
31708 			}
31709 			ZVAL_UNDEF(EX_VAR(opline->result.var));
31710 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
31711 				ZVAL_UNDEFINED_OP1();
31712 				if (UNEXPECTED(EG(exception) != NULL)) {
31713 					HANDLE_EXCEPTION();
31714 				}
31715 			}
31716 			zend_throw_error(NULL, "__clone method called on non-object");
31717 
31718 			HANDLE_EXCEPTION();
31719 		}
31720 	} while (0);
31721 
31722 	zobj = Z_OBJ_P(obj);
31723 	ce = zobj->ce;
31724 	clone = ce->clone;
31725 	clone_call = zobj->handlers->clone_obj;
31726 	if (UNEXPECTED(clone_call == NULL)) {
31727 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
31728 
31729 		ZVAL_UNDEF(EX_VAR(opline->result.var));
31730 		HANDLE_EXCEPTION();
31731 	}
31732 
31733 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
31734 		scope = EX(func)->op_array.scope;
31735 		if (clone->common.scope != scope) {
31736 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
31737 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
31738 				zend_wrong_clone_call(clone, scope);
31739 
31740 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31741 				HANDLE_EXCEPTION();
31742 			}
31743 		}
31744 	}
31745 
31746 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
31747 
31748 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31749 }
31750 
ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31751 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31752 {
31753 	uint32_t fetch_type;
31754 	zend_class_entry *called_scope, *scope;
31755 	USE_OPLINE
31756 
31757 	if (IS_UNUSED != IS_UNUSED) {
31758 		SAVE_OPLINE();
31759 		zval *op = NULL;
31760 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
31761 			ZVAL_DEREF(op);
31762 			if (Z_TYPE_P(op) != IS_OBJECT) {
31763 				zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
31764 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31765 
31766 				HANDLE_EXCEPTION();
31767 			}
31768 		}
31769 
31770 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
31771 
31772 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31773 	}
31774 
31775 	fetch_type = opline->op1.num;
31776 	scope = EX(func)->op_array.scope;
31777 	if (UNEXPECTED(scope == NULL)) {
31778 		SAVE_OPLINE();
31779 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
31780 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
31781 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
31782 		ZVAL_UNDEF(EX_VAR(opline->result.var));
31783 		HANDLE_EXCEPTION();
31784 	}
31785 
31786 	switch (fetch_type) {
31787 		case ZEND_FETCH_CLASS_SELF:
31788 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
31789 			break;
31790 		case ZEND_FETCH_CLASS_PARENT:
31791 			if (UNEXPECTED(scope->parent == NULL)) {
31792 				SAVE_OPLINE();
31793 				zend_throw_error(NULL,
31794 					"Cannot use \"parent\" when current class scope has no parent");
31795 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31796 				HANDLE_EXCEPTION();
31797 			}
31798 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
31799 			break;
31800 		case ZEND_FETCH_CLASS_STATIC:
31801 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
31802 				called_scope = Z_OBJCE(EX(This));
31803 			} else {
31804 				called_scope = Z_CE(EX(This));
31805 			}
31806 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
31807 			break;
31808 		EMPTY_SWITCH_DEFAULT_CASE()
31809 	}
31810 	ZEND_VM_NEXT_OPCODE();
31811 }
31812 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31813 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31814 {
31815 	USE_OPLINE
31816 	zval *object;
31817 	zval *property;
31818 	zval *value;
31819 	zval *zptr;
31820 	void **cache_slot;
31821 	zend_property_info *prop_info;
31822 	zend_object *zobj;
31823 	zend_string *name, *tmp_name;
31824 
31825 	SAVE_OPLINE();
31826 	object = &EX(This);
31827 	property = RT_CONSTANT(opline, opline->op2);
31828 
31829 	do {
31830 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
31831 
31832 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31833 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31834 				object = Z_REFVAL_P(object);
31835 				goto assign_op_object;
31836 			}
31837 			if (IS_UNUSED == IS_CV
31838 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31839 				ZVAL_UNDEFINED_OP1();
31840 			}
31841 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
31842 			break;
31843 		}
31844 
31845 assign_op_object:
31846 		/* here we are sure we are dealing with an object */
31847 		zobj = Z_OBJ_P(object);
31848 		if (IS_CONST == IS_CONST) {
31849 			name = Z_STR_P(property);
31850 		} else {
31851 			name = zval_try_get_tmp_string(property, &tmp_name);
31852 			if (UNEXPECTED(!name)) {
31853 				UNDEF_RESULT();
31854 				break;
31855 			}
31856 		}
31857 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
31858 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
31859 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
31860 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31861 					ZVAL_NULL(EX_VAR(opline->result.var));
31862 				}
31863 			} else {
31864 				zval *orig_zptr = zptr;
31865 				zend_reference *ref;
31866 
31867 				do {
31868 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
31869 						ref = Z_REF_P(zptr);
31870 						zptr = Z_REFVAL_P(zptr);
31871 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
31872 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
31873 							break;
31874 						}
31875 					}
31876 
31877 					if (IS_CONST == IS_CONST) {
31878 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
31879 					} else {
31880 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
31881 					}
31882 					if (UNEXPECTED(prop_info)) {
31883 						/* special case for typed properties */
31884 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
31885 					} else {
31886 						zend_binary_op(zptr, zptr, value OPLINE_CC);
31887 					}
31888 				} while (0);
31889 
31890 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31891 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
31892 				}
31893 			}
31894 		} else {
31895 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
31896 		}
31897 		if (IS_CONST != IS_CONST) {
31898 			zend_tmp_string_release(tmp_name);
31899 		}
31900 	} while (0);
31901 
31902 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
31903 
31904 
31905 	/* assign_obj has two opcodes! */
31906 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31907 }
31908 
31909 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31910 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31911 {
31912 	USE_OPLINE
31913 	zval *object;
31914 	zval *property;
31915 	zval *zptr;
31916 	void **cache_slot;
31917 	zend_property_info *prop_info;
31918 	zend_object *zobj;
31919 	zend_string *name, *tmp_name;
31920 
31921 	SAVE_OPLINE();
31922 	object = &EX(This);
31923 	property = RT_CONSTANT(opline, opline->op2);
31924 
31925 	do {
31926 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31927 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31928 				object = Z_REFVAL_P(object);
31929 				goto pre_incdec_object;
31930 			}
31931 			if (IS_UNUSED == IS_CV
31932 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31933 				ZVAL_UNDEFINED_OP1();
31934 			}
31935 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
31936 			break;
31937 		}
31938 
31939 pre_incdec_object:
31940 		/* here we are sure we are dealing with an object */
31941 		zobj = Z_OBJ_P(object);
31942 		if (IS_CONST == IS_CONST) {
31943 			name = Z_STR_P(property);
31944 		} else {
31945 			name = zval_try_get_tmp_string(property, &tmp_name);
31946 			if (UNEXPECTED(!name)) {
31947 				UNDEF_RESULT();
31948 				break;
31949 			}
31950 		}
31951 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
31952 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
31953 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
31954 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31955 					ZVAL_NULL(EX_VAR(opline->result.var));
31956 				}
31957 			} else {
31958 				if (IS_CONST == IS_CONST) {
31959 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
31960 				} else {
31961 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
31962 				}
31963 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
31964 			}
31965 		} else {
31966 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
31967 		}
31968 		if (IS_CONST != IS_CONST) {
31969 			zend_tmp_string_release(tmp_name);
31970 		}
31971 	} while (0);
31972 
31973 
31974 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31975 }
31976 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31977 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31978 {
31979 	USE_OPLINE
31980 	zval *object;
31981 	zval *property;
31982 	zval *zptr;
31983 	void **cache_slot;
31984 	zend_property_info *prop_info;
31985 	zend_object *zobj;
31986 	zend_string *name, *tmp_name;
31987 
31988 	SAVE_OPLINE();
31989 	object = &EX(This);
31990 	property = RT_CONSTANT(opline, opline->op2);
31991 
31992 	do {
31993 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31994 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31995 				object = Z_REFVAL_P(object);
31996 				goto post_incdec_object;
31997 			}
31998 			if (IS_UNUSED == IS_CV
31999 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32000 				ZVAL_UNDEFINED_OP1();
32001 			}
32002 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
32003 			break;
32004 		}
32005 
32006 post_incdec_object:
32007 		/* here we are sure we are dealing with an object */
32008 		zobj = Z_OBJ_P(object);
32009 		if (IS_CONST == IS_CONST) {
32010 			name = Z_STR_P(property);
32011 		} else {
32012 			name = zval_try_get_tmp_string(property, &tmp_name);
32013 			if (UNEXPECTED(!name)) {
32014 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32015 				break;
32016 			}
32017 		}
32018 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
32019 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
32020 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
32021 				ZVAL_NULL(EX_VAR(opline->result.var));
32022 			} else {
32023 				if (IS_CONST == IS_CONST) {
32024 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
32025 				} else {
32026 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
32027 				}
32028 
32029 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
32030 			}
32031 		} else {
32032 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
32033 		}
32034 		if (IS_CONST != IS_CONST) {
32035 			zend_tmp_string_release(tmp_name);
32036 		}
32037 	} while (0);
32038 
32039 
32040 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32041 }
32042 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32043 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32044 {
32045 	USE_OPLINE
32046 	zval *container;
32047 	void **cache_slot = NULL;
32048 
32049 	SAVE_OPLINE();
32050 	container = &EX(This);
32051 
32052 	if (IS_UNUSED == IS_CONST ||
32053 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
32054 	    do {
32055 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
32056 				container = Z_REFVAL_P(container);
32057 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
32058 					break;
32059 				}
32060 			}
32061 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32062 				ZVAL_UNDEFINED_OP1();
32063 			}
32064 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
32065 			ZVAL_NULL(EX_VAR(opline->result.var));
32066 			goto fetch_obj_r_finish;
32067 		} while (0);
32068 	}
32069 
32070 	/* here we are sure we are dealing with an object */
32071 	do {
32072 		zend_object *zobj = Z_OBJ_P(container);
32073 		zend_string *name, *tmp_name;
32074 		zval *retval;
32075 
32076 		if (IS_CONST == IS_CONST) {
32077 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
32078 
32079 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
32080 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32081 
32082 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32083 					retval = OBJ_PROP(zobj, prop_offset);
32084 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
32085 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32086 							goto fetch_obj_r_copy;
32087 						} else {
32088 fetch_obj_r_fast_copy:
32089 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
32090 							ZEND_VM_NEXT_OPCODE();
32091 						}
32092 					}
32093 				} else if (EXPECTED(zobj->properties != NULL)) {
32094 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32095 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
32096 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
32097 
32098 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
32099 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
32100 
32101 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
32102 						        (EXPECTED(p->key == name) ||
32103 						         (EXPECTED(p->h == ZSTR_H(name)) &&
32104 						          EXPECTED(p->key != NULL) &&
32105 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
32106 								retval = &p->val;
32107 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32108 									goto fetch_obj_r_copy;
32109 								} else {
32110 									goto fetch_obj_r_fast_copy;
32111 								}
32112 							}
32113 						}
32114 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
32115 					}
32116 					retval = zend_hash_find_known_hash(zobj->properties, name);
32117 					if (EXPECTED(retval)) {
32118 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
32119 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
32120 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32121 							goto fetch_obj_r_copy;
32122 						} else {
32123 							goto fetch_obj_r_fast_copy;
32124 						}
32125 					}
32126 				}
32127 			}
32128 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32129 		} else {
32130 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
32131 			if (UNEXPECTED(!name)) {
32132 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32133 				break;
32134 			}
32135 		}
32136 
32137 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
32138 #if ZEND_DEBUG
32139 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
32140 			zend_verify_internal_read_property_type(zobj, name, retval);
32141 		}
32142 #endif
32143 
32144 		if (IS_CONST != IS_CONST) {
32145 			zend_tmp_string_release(tmp_name);
32146 		}
32147 
32148 		if (retval != EX_VAR(opline->result.var)) {
32149 fetch_obj_r_copy:
32150 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
32151 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
32152 			zend_unwrap_reference(retval);
32153 		}
32154 	} while (0);
32155 
32156 fetch_obj_r_finish:
32157 
32158 
32159 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32160 }
32161 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32162 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32163 {
32164 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32165 }
32166 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32167 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32168 {
32169 	USE_OPLINE
32170 	zval *property, *container, *result;
32171 
32172 	SAVE_OPLINE();
32173 
32174 	container = &EX(This);
32175 	property = RT_CONSTANT(opline, opline->op2);
32176 	result = EX_VAR(opline->result.var);
32177 	zend_fetch_property_address(
32178 		result, container, IS_UNUSED, property, IS_CONST,
32179 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
32180 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC);
32181 
32182 	if (IS_UNUSED == IS_VAR) {
32183 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
32184 	}
32185 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32186 }
32187 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32188 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32189 {
32190 	USE_OPLINE
32191 	zval *property, *container, *result;
32192 
32193 	SAVE_OPLINE();
32194 	container = &EX(This);
32195 	property = RT_CONSTANT(opline, opline->op2);
32196 	result = EX_VAR(opline->result.var);
32197 	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);
32198 
32199 	if (IS_UNUSED == IS_VAR) {
32200 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
32201 	}
32202 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32203 }
32204 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32206 {
32207 	USE_OPLINE
32208 	zval *container;
32209 	void **cache_slot = NULL;
32210 
32211 	SAVE_OPLINE();
32212 	container = &EX(This);
32213 
32214 	if (IS_UNUSED == IS_CONST ||
32215 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
32216 		do {
32217 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
32218 				container = Z_REFVAL_P(container);
32219 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
32220 					break;
32221 				}
32222 			}
32223 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
32224 				ZVAL_UNDEFINED_OP2();
32225 			}
32226 			ZVAL_NULL(EX_VAR(opline->result.var));
32227 			goto fetch_obj_is_finish;
32228 		} while (0);
32229 	}
32230 
32231 	/* here we are sure we are dealing with an object */
32232 	do {
32233 		zend_object *zobj = Z_OBJ_P(container);
32234 		zend_string *name, *tmp_name;
32235 		zval *retval;
32236 
32237 		if (IS_CONST == IS_CONST) {
32238 			cache_slot = CACHE_ADDR(opline->extended_value);
32239 
32240 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
32241 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32242 
32243 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32244 					retval = OBJ_PROP(zobj, prop_offset);
32245 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
32246 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32247 							goto fetch_obj_is_copy;
32248 						} else {
32249 fetch_obj_is_fast_copy:
32250 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
32251 							ZEND_VM_NEXT_OPCODE();
32252 						}
32253 					}
32254 				} else if (EXPECTED(zobj->properties != NULL)) {
32255 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32256 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
32257 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
32258 
32259 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
32260 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
32261 
32262 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
32263 						        (EXPECTED(p->key == name) ||
32264 						         (EXPECTED(p->h == ZSTR_H(name)) &&
32265 						          EXPECTED(p->key != NULL) &&
32266 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
32267 								retval = &p->val;
32268 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32269 									goto fetch_obj_is_copy;
32270 								} else {
32271 									goto fetch_obj_is_fast_copy;
32272 								}
32273 							}
32274 						}
32275 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
32276 					}
32277 					retval = zend_hash_find_known_hash(zobj->properties, name);
32278 					if (EXPECTED(retval)) {
32279 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
32280 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
32281 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32282 							goto fetch_obj_is_copy;
32283 						} else {
32284 							goto fetch_obj_is_fast_copy;
32285 						}
32286 					}
32287 				}
32288 			}
32289 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32290 		} else {
32291 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
32292 			if (UNEXPECTED(!name)) {
32293 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32294 				break;
32295 			}
32296 		}
32297 
32298 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
32299 
32300 		if (IS_CONST != IS_CONST) {
32301 			zend_tmp_string_release(tmp_name);
32302 		}
32303 
32304 		if (retval != EX_VAR(opline->result.var)) {
32305 fetch_obj_is_copy:
32306 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
32307 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
32308 			zend_unwrap_reference(retval);
32309 		}
32310 	} while (0);
32311 
32312 fetch_obj_is_finish:
32313 
32314 
32315 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32316 }
32317 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32319 {
32320 #if 0
32321 	USE_OPLINE
32322 #endif
32323 
32324 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
32325 		/* Behave like FETCH_OBJ_W */
32326 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
32327 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32328 		}
32329 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32330 	} else {
32331 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32332 	}
32333 }
32334 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32335 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32336 {
32337 	USE_OPLINE
32338 	zval *container, *property, *result;
32339 
32340 	SAVE_OPLINE();
32341 	container = &EX(This);
32342 	property = RT_CONSTANT(opline, opline->op2);
32343 	result = EX_VAR(opline->result.var);
32344 	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);
32345 
32346 	if (IS_UNUSED == IS_VAR) {
32347 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
32348 	}
32349 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32350 }
32351 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32352 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32353 {
32354 	USE_OPLINE
32355 	zval *object, *value, tmp;
32356 	zend_object *zobj;
32357 	zend_string *name, *tmp_name;
32358 
32359 	SAVE_OPLINE();
32360 	object = &EX(This);
32361 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
32362 
32363 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32364 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32365 			object = Z_REFVAL_P(object);
32366 			goto assign_object;
32367 		}
32368 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
32369 		value = &EG(uninitialized_zval);
32370 		goto free_and_exit_assign_obj;
32371 	}
32372 
32373 assign_object:
32374 	zobj = Z_OBJ_P(object);
32375 	if (IS_CONST == IS_CONST) {
32376 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
32377 			void **cache_slot = CACHE_ADDR(opline->extended_value);
32378 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32379 			zend_object *zobj = Z_OBJ_P(object);
32380 			zval *property_val;
32381 
32382 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32383 				property_val = OBJ_PROP(zobj, prop_offset);
32384 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
32385 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
32386 
32387 					if (UNEXPECTED(prop_info != NULL)) {
32388 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
32389 						goto free_and_exit_assign_obj;
32390 					} else {
32391 fast_assign_obj:
32392 						value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
32393 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32394 							ZVAL_COPY(EX_VAR(opline->result.var), value);
32395 						}
32396 						goto exit_assign_obj;
32397 					}
32398 				}
32399 			} else {
32400 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32401 				if (EXPECTED(zobj->properties != NULL)) {
32402 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32403 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32404 							GC_DELREF(zobj->properties);
32405 						}
32406 						zobj->properties = zend_array_dup(zobj->properties);
32407 					}
32408 					property_val = zend_hash_find_known_hash(zobj->properties, name);
32409 					if (property_val) {
32410 						goto fast_assign_obj;
32411 					}
32412 				}
32413 
32414 				if (!zobj->ce->__set) {
32415 					if (EXPECTED(zobj->properties == NULL)) {
32416 						rebuild_object_properties(zobj);
32417 					}
32418 					if (IS_CONST == IS_CONST) {
32419 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32420 							Z_ADDREF_P(value);
32421 						}
32422 					} else if (IS_CONST != IS_TMP_VAR) {
32423 						if (Z_ISREF_P(value)) {
32424 							if (IS_CONST == IS_VAR) {
32425 								zend_reference *ref = Z_REF_P(value);
32426 								if (GC_DELREF(ref) == 0) {
32427 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32428 									efree_size(ref, sizeof(zend_reference));
32429 									value = &tmp;
32430 								} else {
32431 									value = Z_REFVAL_P(value);
32432 									Z_TRY_ADDREF_P(value);
32433 								}
32434 							} else {
32435 								value = Z_REFVAL_P(value);
32436 								Z_TRY_ADDREF_P(value);
32437 							}
32438 						} else if (IS_CONST == IS_CV) {
32439 							Z_TRY_ADDREF_P(value);
32440 						}
32441 						}
32442 					zend_hash_add_new(zobj->properties, name, value);
32443 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32444 						ZVAL_COPY(EX_VAR(opline->result.var), value);
32445 					}
32446 					goto exit_assign_obj;
32447 				}
32448 			}
32449 		}
32450 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32451 	} else {
32452 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
32453 		if (UNEXPECTED(!name)) {
32454 
32455 			UNDEF_RESULT();
32456 			goto exit_assign_obj;
32457 		}
32458 	}
32459 
32460 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
32461 		ZVAL_DEREF(value);
32462 	}
32463 
32464 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
32465 
32466 	if (IS_CONST != IS_CONST) {
32467 		zend_tmp_string_release(tmp_name);
32468 	}
32469 
32470 free_and_exit_assign_obj:
32471 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32472 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
32473 	}
32474 
32475 exit_assign_obj:
32476 
32477 
32478 	/* assign_obj has two opcodes! */
32479 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32480 }
32481 
32482 /* 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)32483 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32484 {
32485 	USE_OPLINE
32486 	zval *object, *value, tmp;
32487 	zend_object *zobj;
32488 	zend_string *name, *tmp_name;
32489 
32490 	SAVE_OPLINE();
32491 	object = &EX(This);
32492 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
32493 
32494 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32495 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32496 			object = Z_REFVAL_P(object);
32497 			goto assign_object;
32498 		}
32499 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
32500 		value = &EG(uninitialized_zval);
32501 		goto free_and_exit_assign_obj;
32502 	}
32503 
32504 assign_object:
32505 	zobj = Z_OBJ_P(object);
32506 	if (IS_CONST == IS_CONST) {
32507 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
32508 			void **cache_slot = CACHE_ADDR(opline->extended_value);
32509 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32510 			zend_object *zobj = Z_OBJ_P(object);
32511 			zval *property_val;
32512 
32513 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32514 				property_val = OBJ_PROP(zobj, prop_offset);
32515 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
32516 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
32517 
32518 					if (UNEXPECTED(prop_info != NULL)) {
32519 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
32520 						goto free_and_exit_assign_obj;
32521 					} else {
32522 fast_assign_obj:
32523 						value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
32524 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32525 							ZVAL_COPY(EX_VAR(opline->result.var), value);
32526 						}
32527 						goto exit_assign_obj;
32528 					}
32529 				}
32530 			} else {
32531 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32532 				if (EXPECTED(zobj->properties != NULL)) {
32533 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32534 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32535 							GC_DELREF(zobj->properties);
32536 						}
32537 						zobj->properties = zend_array_dup(zobj->properties);
32538 					}
32539 					property_val = zend_hash_find_known_hash(zobj->properties, name);
32540 					if (property_val) {
32541 						goto fast_assign_obj;
32542 					}
32543 				}
32544 
32545 				if (!zobj->ce->__set) {
32546 					if (EXPECTED(zobj->properties == NULL)) {
32547 						rebuild_object_properties(zobj);
32548 					}
32549 					if (IS_TMP_VAR == IS_CONST) {
32550 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32551 							Z_ADDREF_P(value);
32552 						}
32553 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
32554 						if (Z_ISREF_P(value)) {
32555 							if (IS_TMP_VAR == IS_VAR) {
32556 								zend_reference *ref = Z_REF_P(value);
32557 								if (GC_DELREF(ref) == 0) {
32558 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32559 									efree_size(ref, sizeof(zend_reference));
32560 									value = &tmp;
32561 								} else {
32562 									value = Z_REFVAL_P(value);
32563 									Z_TRY_ADDREF_P(value);
32564 								}
32565 							} else {
32566 								value = Z_REFVAL_P(value);
32567 								Z_TRY_ADDREF_P(value);
32568 							}
32569 						} else if (IS_TMP_VAR == IS_CV) {
32570 							Z_TRY_ADDREF_P(value);
32571 						}
32572 						}
32573 					zend_hash_add_new(zobj->properties, name, value);
32574 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32575 						ZVAL_COPY(EX_VAR(opline->result.var), value);
32576 					}
32577 					goto exit_assign_obj;
32578 				}
32579 			}
32580 		}
32581 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32582 	} else {
32583 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
32584 		if (UNEXPECTED(!name)) {
32585 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
32586 			UNDEF_RESULT();
32587 			goto exit_assign_obj;
32588 		}
32589 	}
32590 
32591 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
32592 		ZVAL_DEREF(value);
32593 	}
32594 
32595 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
32596 
32597 	if (IS_CONST != IS_CONST) {
32598 		zend_tmp_string_release(tmp_name);
32599 	}
32600 
32601 free_and_exit_assign_obj:
32602 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32603 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
32604 	}
32605 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
32606 exit_assign_obj:
32607 
32608 
32609 	/* assign_obj has two opcodes! */
32610 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32611 }
32612 
32613 /* 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)32614 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32615 {
32616 	USE_OPLINE
32617 	zval *object, *value, tmp;
32618 	zend_object *zobj;
32619 	zend_string *name, *tmp_name;
32620 
32621 	SAVE_OPLINE();
32622 	object = &EX(This);
32623 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
32624 
32625 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32626 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32627 			object = Z_REFVAL_P(object);
32628 			goto assign_object;
32629 		}
32630 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
32631 		value = &EG(uninitialized_zval);
32632 		goto free_and_exit_assign_obj;
32633 	}
32634 
32635 assign_object:
32636 	zobj = Z_OBJ_P(object);
32637 	if (IS_CONST == IS_CONST) {
32638 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
32639 			void **cache_slot = CACHE_ADDR(opline->extended_value);
32640 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32641 			zend_object *zobj = Z_OBJ_P(object);
32642 			zval *property_val;
32643 
32644 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32645 				property_val = OBJ_PROP(zobj, prop_offset);
32646 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
32647 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
32648 
32649 					if (UNEXPECTED(prop_info != NULL)) {
32650 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
32651 						goto free_and_exit_assign_obj;
32652 					} else {
32653 fast_assign_obj:
32654 						value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
32655 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32656 							ZVAL_COPY(EX_VAR(opline->result.var), value);
32657 						}
32658 						goto exit_assign_obj;
32659 					}
32660 				}
32661 			} else {
32662 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32663 				if (EXPECTED(zobj->properties != NULL)) {
32664 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32665 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32666 							GC_DELREF(zobj->properties);
32667 						}
32668 						zobj->properties = zend_array_dup(zobj->properties);
32669 					}
32670 					property_val = zend_hash_find_known_hash(zobj->properties, name);
32671 					if (property_val) {
32672 						goto fast_assign_obj;
32673 					}
32674 				}
32675 
32676 				if (!zobj->ce->__set) {
32677 					if (EXPECTED(zobj->properties == NULL)) {
32678 						rebuild_object_properties(zobj);
32679 					}
32680 					if (IS_VAR == IS_CONST) {
32681 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32682 							Z_ADDREF_P(value);
32683 						}
32684 					} else if (IS_VAR != IS_TMP_VAR) {
32685 						if (Z_ISREF_P(value)) {
32686 							if (IS_VAR == IS_VAR) {
32687 								zend_reference *ref = Z_REF_P(value);
32688 								if (GC_DELREF(ref) == 0) {
32689 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32690 									efree_size(ref, sizeof(zend_reference));
32691 									value = &tmp;
32692 								} else {
32693 									value = Z_REFVAL_P(value);
32694 									Z_TRY_ADDREF_P(value);
32695 								}
32696 							} else {
32697 								value = Z_REFVAL_P(value);
32698 								Z_TRY_ADDREF_P(value);
32699 							}
32700 						} else if (IS_VAR == IS_CV) {
32701 							Z_TRY_ADDREF_P(value);
32702 						}
32703 						}
32704 					zend_hash_add_new(zobj->properties, name, value);
32705 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32706 						ZVAL_COPY(EX_VAR(opline->result.var), value);
32707 					}
32708 					goto exit_assign_obj;
32709 				}
32710 			}
32711 		}
32712 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32713 	} else {
32714 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
32715 		if (UNEXPECTED(!name)) {
32716 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
32717 			UNDEF_RESULT();
32718 			goto exit_assign_obj;
32719 		}
32720 	}
32721 
32722 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
32723 		ZVAL_DEREF(value);
32724 	}
32725 
32726 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
32727 
32728 	if (IS_CONST != IS_CONST) {
32729 		zend_tmp_string_release(tmp_name);
32730 	}
32731 
32732 free_and_exit_assign_obj:
32733 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32734 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
32735 	}
32736 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
32737 exit_assign_obj:
32738 
32739 
32740 	/* assign_obj has two opcodes! */
32741 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32742 }
32743 
32744 /* 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)32745 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32746 {
32747 	USE_OPLINE
32748 	zval *object, *value, tmp;
32749 	zend_object *zobj;
32750 	zend_string *name, *tmp_name;
32751 
32752 	SAVE_OPLINE();
32753 	object = &EX(This);
32754 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
32755 
32756 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32757 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32758 			object = Z_REFVAL_P(object);
32759 			goto assign_object;
32760 		}
32761 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
32762 		value = &EG(uninitialized_zval);
32763 		goto free_and_exit_assign_obj;
32764 	}
32765 
32766 assign_object:
32767 	zobj = Z_OBJ_P(object);
32768 	if (IS_CONST == IS_CONST) {
32769 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
32770 			void **cache_slot = CACHE_ADDR(opline->extended_value);
32771 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32772 			zend_object *zobj = Z_OBJ_P(object);
32773 			zval *property_val;
32774 
32775 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32776 				property_val = OBJ_PROP(zobj, prop_offset);
32777 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
32778 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
32779 
32780 					if (UNEXPECTED(prop_info != NULL)) {
32781 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
32782 						goto free_and_exit_assign_obj;
32783 					} else {
32784 fast_assign_obj:
32785 						value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
32786 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32787 							ZVAL_COPY(EX_VAR(opline->result.var), value);
32788 						}
32789 						goto exit_assign_obj;
32790 					}
32791 				}
32792 			} else {
32793 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32794 				if (EXPECTED(zobj->properties != NULL)) {
32795 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32796 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32797 							GC_DELREF(zobj->properties);
32798 						}
32799 						zobj->properties = zend_array_dup(zobj->properties);
32800 					}
32801 					property_val = zend_hash_find_known_hash(zobj->properties, name);
32802 					if (property_val) {
32803 						goto fast_assign_obj;
32804 					}
32805 				}
32806 
32807 				if (!zobj->ce->__set) {
32808 					if (EXPECTED(zobj->properties == NULL)) {
32809 						rebuild_object_properties(zobj);
32810 					}
32811 					if (IS_CV == IS_CONST) {
32812 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32813 							Z_ADDREF_P(value);
32814 						}
32815 					} else if (IS_CV != IS_TMP_VAR) {
32816 						if (Z_ISREF_P(value)) {
32817 							if (IS_CV == IS_VAR) {
32818 								zend_reference *ref = Z_REF_P(value);
32819 								if (GC_DELREF(ref) == 0) {
32820 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32821 									efree_size(ref, sizeof(zend_reference));
32822 									value = &tmp;
32823 								} else {
32824 									value = Z_REFVAL_P(value);
32825 									Z_TRY_ADDREF_P(value);
32826 								}
32827 							} else {
32828 								value = Z_REFVAL_P(value);
32829 								Z_TRY_ADDREF_P(value);
32830 							}
32831 						} else if (IS_CV == IS_CV) {
32832 							Z_TRY_ADDREF_P(value);
32833 						}
32834 						}
32835 					zend_hash_add_new(zobj->properties, name, value);
32836 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32837 						ZVAL_COPY(EX_VAR(opline->result.var), value);
32838 					}
32839 					goto exit_assign_obj;
32840 				}
32841 			}
32842 		}
32843 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32844 	} else {
32845 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
32846 		if (UNEXPECTED(!name)) {
32847 
32848 			UNDEF_RESULT();
32849 			goto exit_assign_obj;
32850 		}
32851 	}
32852 
32853 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
32854 		ZVAL_DEREF(value);
32855 	}
32856 
32857 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
32858 
32859 	if (IS_CONST != IS_CONST) {
32860 		zend_tmp_string_release(tmp_name);
32861 	}
32862 
32863 free_and_exit_assign_obj:
32864 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32865 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
32866 	}
32867 
32868 exit_assign_obj:
32869 
32870 
32871 	/* assign_obj has two opcodes! */
32872 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32873 }
32874 
32875 /* 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)32876 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32877 {
32878 	USE_OPLINE
32879 	zval *property, *container, *value_ptr;
32880 
32881 	SAVE_OPLINE();
32882 
32883 	container = &EX(This);
32884 	property = RT_CONSTANT(opline, opline->op2);
32885 
32886 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
32887 
32888 	if (1) {
32889 		if (IS_UNUSED == IS_UNUSED) {
32890 			if (IS_CONST == IS_CONST) {
32891 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32892 			} else {
32893 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32894 			}
32895 		} else {
32896 			if (IS_CONST == IS_CONST) {
32897 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32898 			} else {
32899 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32900 			}
32901 		}
32902 	} else {
32903 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32904 	}
32905 
32906 
32907 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
32908 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32909 }
32910 
32911 /* 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)32912 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32913 {
32914 	USE_OPLINE
32915 	zval *property, *container, *value_ptr;
32916 
32917 	SAVE_OPLINE();
32918 
32919 	container = &EX(This);
32920 	property = RT_CONSTANT(opline, opline->op2);
32921 
32922 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
32923 
32924 	if (1) {
32925 		if (IS_UNUSED == IS_UNUSED) {
32926 			if (IS_CONST == IS_CONST) {
32927 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32928 			} else {
32929 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32930 			}
32931 		} else {
32932 			if (IS_CONST == IS_CONST) {
32933 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32934 			} else {
32935 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32936 			}
32937 		}
32938 	} else {
32939 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32940 	}
32941 
32942 
32943 
32944 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32945 }
32946 
32947 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32948 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32949 {
32950 	USE_OPLINE
32951 	zend_string **rope;
32952 	zval *var;
32953 
32954 	/* Compiler allocates the necessary number of zval slots to keep the rope */
32955 	rope = (zend_string**)EX_VAR(opline->result.var);
32956 	if (IS_CONST == IS_CONST) {
32957 		var = RT_CONSTANT(opline, opline->op2);
32958 		rope[0] = Z_STR_P(var);
32959 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
32960 			Z_ADDREF_P(var);
32961 		}
32962 	} else {
32963 		var = RT_CONSTANT(opline, opline->op2);
32964 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
32965 			if (IS_CONST == IS_CV) {
32966 				rope[0] = zend_string_copy(Z_STR_P(var));
32967 			} else {
32968 				rope[0] = Z_STR_P(var);
32969 			}
32970 		} else {
32971 			SAVE_OPLINE();
32972 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
32973 				ZVAL_UNDEFINED_OP2();
32974 			}
32975 			rope[0] = zval_get_string_func(var);
32976 
32977 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32978 		}
32979 	}
32980 	ZEND_VM_NEXT_OPCODE();
32981 }
32982 
ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32983 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32984 {
32985 	zval *class_name;
32986 	USE_OPLINE
32987 
32988 	SAVE_OPLINE();
32989 	if (IS_CONST == IS_UNUSED) {
32990 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
32991 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32992 	} else if (IS_CONST == IS_CONST) {
32993 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
32994 
32995 		if (UNEXPECTED(ce == NULL)) {
32996 			class_name = RT_CONSTANT(opline, opline->op2);
32997 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
32998 			CACHE_PTR(opline->extended_value, ce);
32999 		}
33000 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
33001 	} else {
33002 		class_name = RT_CONSTANT(opline, opline->op2);
33003 try_class_name:
33004 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
33005 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
33006 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
33007 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
33008 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
33009 			class_name = Z_REFVAL_P(class_name);
33010 			goto try_class_name;
33011 		} else {
33012 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
33013 				ZVAL_UNDEFINED_OP2();
33014 				if (UNEXPECTED(EG(exception) != NULL)) {
33015 					HANDLE_EXCEPTION();
33016 				}
33017 			}
33018 			zend_throw_error(NULL, "Class name must be a valid object or a string");
33019 		}
33020 	}
33021 
33022 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33023 }
33024 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33025 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33026 {
33027 	USE_OPLINE
33028 	zval *function_name;
33029 	zval *object;
33030 	zend_function *fbc;
33031 	zend_class_entry *called_scope;
33032 	zend_object *obj;
33033 	zend_execute_data *call;
33034 	uint32_t call_info;
33035 
33036 	SAVE_OPLINE();
33037 
33038 	object = &EX(This);
33039 
33040 	if (IS_CONST != IS_CONST) {
33041 		function_name = RT_CONSTANT(opline, opline->op2);
33042 	}
33043 
33044 	if (IS_CONST != IS_CONST &&
33045 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
33046 		do {
33047 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
33048 				function_name = Z_REFVAL_P(function_name);
33049 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
33050 					break;
33051 				}
33052 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
33053 				ZVAL_UNDEFINED_OP2();
33054 				if (UNEXPECTED(EG(exception) != NULL)) {
33055 
33056 					HANDLE_EXCEPTION();
33057 				}
33058 			}
33059 			zend_throw_error(NULL, "Method name must be a string");
33060 
33061 
33062 			HANDLE_EXCEPTION();
33063 		} while (0);
33064 	}
33065 
33066 	if (IS_UNUSED == IS_UNUSED) {
33067 		obj = Z_OBJ_P(object);
33068 	} else {
33069 		do {
33070 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
33071 				obj = Z_OBJ_P(object);
33072 			} else {
33073 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
33074 					zend_reference *ref = Z_REF_P(object);
33075 
33076 					object = &ref->val;
33077 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
33078 						obj = Z_OBJ_P(object);
33079 						if (IS_UNUSED & IS_VAR) {
33080 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
33081 								efree_size(ref, sizeof(zend_reference));
33082 							} else {
33083 								Z_ADDREF_P(object);
33084 							}
33085 						}
33086 						break;
33087 					}
33088 				}
33089 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33090 					object = ZVAL_UNDEFINED_OP1();
33091 					if (UNEXPECTED(EG(exception) != NULL)) {
33092 						if (IS_CONST != IS_CONST) {
33093 
33094 						}
33095 						HANDLE_EXCEPTION();
33096 					}
33097 				}
33098 				if (IS_CONST == IS_CONST) {
33099 					function_name = RT_CONSTANT(opline, opline->op2);
33100 				}
33101 				zend_invalid_method_call(object, function_name);
33102 
33103 
33104 				HANDLE_EXCEPTION();
33105 			}
33106 		} while (0);
33107 	}
33108 
33109 	called_scope = obj->ce;
33110 
33111 	if (IS_CONST == IS_CONST &&
33112 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
33113 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
33114 	} else {
33115 	    zend_object *orig_obj = obj;
33116 
33117 		if (IS_CONST == IS_CONST) {
33118 			function_name = RT_CONSTANT(opline, opline->op2);
33119 		}
33120 
33121 		/* First, locate the function. */
33122 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
33123 		if (UNEXPECTED(fbc == NULL)) {
33124 			if (EXPECTED(!EG(exception))) {
33125 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
33126 			}
33127 
33128 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
33129 				zend_objects_store_del(orig_obj);
33130 			}
33131 			HANDLE_EXCEPTION();
33132 		}
33133 		if (IS_CONST == IS_CONST &&
33134 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
33135 		    EXPECTED(obj == orig_obj)) {
33136 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
33137 		}
33138 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
33139 			GC_ADDREF(obj); /* For $this pointer */
33140 			if (GC_DELREF(orig_obj) == 0) {
33141 				zend_objects_store_del(orig_obj);
33142 			}
33143 		}
33144 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
33145 			init_func_run_time_cache(&fbc->op_array);
33146 		}
33147 	}
33148 
33149 	if (IS_CONST != IS_CONST) {
33150 
33151 	}
33152 
33153 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
33154 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
33155 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
33156 			zend_objects_store_del(obj);
33157 			if (UNEXPECTED(EG(exception))) {
33158 				HANDLE_EXCEPTION();
33159 			}
33160 		}
33161 		/* call static method */
33162 		obj = (zend_object*)called_scope;
33163 		call_info = ZEND_CALL_NESTED_FUNCTION;
33164 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
33165 		if (IS_UNUSED == IS_CV) {
33166 			GC_ADDREF(obj); /* For $this pointer */
33167 		}
33168 		/* CV may be changed indirectly (e.g. when it's a reference) */
33169 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
33170 	}
33171 
33172 	call = zend_vm_stack_push_call_frame(call_info,
33173 		fbc, opline->extended_value, obj);
33174 	call->prev_execute_data = EX(call);
33175 	EX(call) = call;
33176 
33177 	ZEND_VM_NEXT_OPCODE();
33178 }
33179 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33180 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33181 {
33182 	USE_OPLINE
33183 	zval *function_name;
33184 	zend_class_entry *ce;
33185 	uint32_t call_info;
33186 	zend_function *fbc;
33187 	zend_execute_data *call;
33188 
33189 	SAVE_OPLINE();
33190 
33191 	if (IS_UNUSED == IS_CONST) {
33192 		/* no function found. try a static method in class */
33193 		ce = CACHED_PTR(opline->result.num);
33194 		if (UNEXPECTED(ce == NULL)) {
33195 			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);
33196 			if (UNEXPECTED(ce == NULL)) {
33197 
33198 				HANDLE_EXCEPTION();
33199 			}
33200 			if (IS_CONST != IS_CONST) {
33201 				CACHE_PTR(opline->result.num, ce);
33202 			}
33203 		}
33204 	} else if (IS_UNUSED == IS_UNUSED) {
33205 		ce = zend_fetch_class(NULL, opline->op1.num);
33206 		if (UNEXPECTED(ce == NULL)) {
33207 
33208 			HANDLE_EXCEPTION();
33209 		}
33210 	} else {
33211 		ce = Z_CE_P(EX_VAR(opline->op1.var));
33212 	}
33213 
33214 	if (IS_UNUSED == IS_CONST &&
33215 	    IS_CONST == IS_CONST &&
33216 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
33217 		/* nothing to do */
33218 	} else if (IS_UNUSED != IS_CONST &&
33219 	           IS_CONST == IS_CONST &&
33220 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
33221 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
33222 	} else if (IS_CONST != IS_UNUSED) {
33223 		function_name = RT_CONSTANT(opline, opline->op2);
33224 		if (IS_CONST != IS_CONST) {
33225 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
33226 				do {
33227 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
33228 						function_name = Z_REFVAL_P(function_name);
33229 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
33230 							break;
33231 						}
33232 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
33233 						ZVAL_UNDEFINED_OP2();
33234 						if (UNEXPECTED(EG(exception) != NULL)) {
33235 							HANDLE_EXCEPTION();
33236 						}
33237 					}
33238 					zend_throw_error(NULL, "Method name must be a string");
33239 
33240 					HANDLE_EXCEPTION();
33241 				} while (0);
33242 			}
33243 		}
33244 
33245 		if (ce->get_static_method) {
33246 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
33247 		} else {
33248 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
33249 		}
33250 		if (UNEXPECTED(fbc == NULL)) {
33251 			if (EXPECTED(!EG(exception))) {
33252 				zend_undefined_method(ce, Z_STR_P(function_name));
33253 			}
33254 
33255 			HANDLE_EXCEPTION();
33256 		}
33257 		if (IS_CONST == IS_CONST &&
33258 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
33259 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
33260 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
33261 		}
33262 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
33263 			init_func_run_time_cache(&fbc->op_array);
33264 		}
33265 		if (IS_CONST != IS_CONST) {
33266 
33267 		}
33268 	} else {
33269 		if (UNEXPECTED(ce->constructor == NULL)) {
33270 			zend_throw_error(NULL, "Cannot call constructor");
33271 			HANDLE_EXCEPTION();
33272 		}
33273 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
33274 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
33275 			HANDLE_EXCEPTION();
33276 		}
33277 		fbc = ce->constructor;
33278 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
33279 			init_func_run_time_cache(&fbc->op_array);
33280 		}
33281 	}
33282 
33283 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
33284 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
33285 			ce = (zend_class_entry*)Z_OBJ(EX(This));
33286 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
33287 		} else {
33288 			zend_non_static_method_call(fbc);
33289 			HANDLE_EXCEPTION();
33290 		}
33291 	} else {
33292 		/* previous opcode is ZEND_FETCH_CLASS */
33293 		if (IS_UNUSED == IS_UNUSED
33294 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
33295 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
33296 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
33297 				ce = Z_OBJCE(EX(This));
33298 			} else {
33299 				ce = Z_CE(EX(This));
33300 			}
33301 		}
33302 		call_info = ZEND_CALL_NESTED_FUNCTION;
33303 	}
33304 
33305 	call = zend_vm_stack_push_call_frame(call_info,
33306 		fbc, opline->extended_value, ce);
33307 	call->prev_execute_data = EX(call);
33308 	EX(call) = call;
33309 
33310 	ZEND_VM_NEXT_OPCODE();
33311 }
33312 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33313 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33314 {
33315 	USE_OPLINE
33316 	uint32_t arg_num;
33317 
33318 	if (IS_CONST == IS_CONST) {
33319 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33320 		arg_num = zend_get_arg_offset_by_name(
33321 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
33322 		if (UNEXPECTED(arg_num == 0)) {
33323 			/* Treat this as a by-value argument, and throw an error during SEND. */
33324 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
33325 			ZEND_VM_NEXT_OPCODE();
33326 		}
33327 	} else {
33328 		arg_num = opline->op2.num;
33329 	}
33330 
33331 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
33332 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
33333 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
33334 		} else {
33335 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
33336 		}
33337 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
33338 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
33339 	} else {
33340 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
33341 	}
33342 	ZEND_VM_NEXT_OPCODE();
33343 }
33344 
ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33345 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33346 {
33347 	USE_OPLINE
33348 	zend_constant *c;
33349 
33350 	c = CACHED_PTR(opline->extended_value);
33351 	if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
33352 		ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
33353 		ZEND_VM_NEXT_OPCODE();
33354 	}
33355 
33356 	SAVE_OPLINE();
33357 	zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
33358 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33359 }
33360 
ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33361 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33362 {
33363 	zend_class_entry *ce, *scope;
33364 	zend_class_constant *c;
33365 	zval *value, *zv;
33366 	USE_OPLINE
33367 
33368 	SAVE_OPLINE();
33369 
33370 	do {
33371 		if (IS_UNUSED == IS_CONST) {
33372 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
33373 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
33374 				break;
33375 			} else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
33376 				ce = CACHED_PTR(opline->extended_value);
33377 			} else {
33378 				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);
33379 				if (UNEXPECTED(ce == NULL)) {
33380 					ZVAL_UNDEF(EX_VAR(opline->result.var));
33381 					HANDLE_EXCEPTION();
33382 				}
33383 			}
33384 		} else {
33385 			if (IS_UNUSED == IS_UNUSED) {
33386 				ce = zend_fetch_class(NULL, opline->op1.num);
33387 				if (UNEXPECTED(ce == NULL)) {
33388 					ZVAL_UNDEF(EX_VAR(opline->result.var));
33389 					HANDLE_EXCEPTION();
33390 				}
33391 			} else {
33392 				ce = Z_CE_P(EX_VAR(opline->op1.var));
33393 			}
33394 			if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
33395 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
33396 				break;
33397 			}
33398 		}
33399 
33400 		zv = zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
33401 		if (EXPECTED(zv != NULL)) {
33402 			c = Z_PTR_P(zv);
33403 			scope = EX(func)->op_array.scope;
33404 			if (!zend_verify_const_access(c, scope)) {
33405 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
33406 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33407 				HANDLE_EXCEPTION();
33408 			}
33409 			value = &c->value;
33410 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
33411 				zval_update_constant_ex(value, c->ce);
33412 				if (UNEXPECTED(EG(exception) != NULL)) {
33413 					ZVAL_UNDEF(EX_VAR(opline->result.var));
33414 					HANDLE_EXCEPTION();
33415 				}
33416 			}
33417 			CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
33418 		} else {
33419 			zend_throw_error(NULL, "Undefined constant %s::%s",
33420 				ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
33421 			ZVAL_UNDEF(EX_VAR(opline->result.var));
33422 			HANDLE_EXCEPTION();
33423 		}
33424 	} while (0);
33425 
33426 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
33427 
33428 	ZEND_VM_NEXT_OPCODE();
33429 }
33430 
ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33431 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33432 {
33433 	zval *array;
33434 	uint32_t size;
33435 	USE_OPLINE
33436 
33437 	array = EX_VAR(opline->result.var);
33438 	if (IS_UNUSED != IS_UNUSED) {
33439 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
33440 		ZVAL_ARR(array, zend_new_array(size));
33441 		/* Explicitly initialize array as not-packed if flag is set */
33442 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
33443 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
33444 		}
33445 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33446 	} else {
33447 		ZVAL_ARR(array, zend_new_array(0));
33448 		ZEND_VM_NEXT_OPCODE();
33449 	}
33450 }
33451 
ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33452 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33453 {
33454 	USE_OPLINE
33455 	zval *container;
33456 	zval *offset;
33457 	zend_string *name, *tmp_name;
33458 
33459 	SAVE_OPLINE();
33460 	container = &EX(This);
33461 	offset = RT_CONSTANT(opline, opline->op2);
33462 
33463 	do {
33464 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
33465 			if (Z_ISREF_P(container)) {
33466 				container = Z_REFVAL_P(container);
33467 				if (Z_TYPE_P(container) != IS_OBJECT) {
33468 					if (IS_UNUSED == IS_CV
33469 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33470 						ZVAL_UNDEFINED_OP1();
33471 					}
33472 					break;
33473 				}
33474 			} else {
33475 				break;
33476 			}
33477 		}
33478 		if (IS_CONST == IS_CONST) {
33479 			name = Z_STR_P(offset);
33480 		} else {
33481 			name = zval_try_get_tmp_string(offset, &tmp_name);
33482 			if (UNEXPECTED(!name)) {
33483 				break;
33484 			}
33485 		}
33486 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
33487 		if (IS_CONST != IS_CONST) {
33488 			zend_tmp_string_release(tmp_name);
33489 		}
33490 	} while (0);
33491 
33492 
33493 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33494 }
33495 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33496 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33497 {
33498 	USE_OPLINE
33499 	zval *container;
33500 	int result;
33501 	zval *offset;
33502 	zend_string *name, *tmp_name;
33503 
33504 	SAVE_OPLINE();
33505 	container = &EX(This);
33506 	offset = RT_CONSTANT(opline, opline->op2);
33507 
33508 	if (IS_UNUSED == IS_CONST ||
33509 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33510 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33511 			container = Z_REFVAL_P(container);
33512 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
33513 				result = (opline->extended_value & ZEND_ISEMPTY);
33514 				goto isset_object_finish;
33515 			}
33516 		} else {
33517 			result = (opline->extended_value & ZEND_ISEMPTY);
33518 			goto isset_object_finish;
33519 		}
33520 	}
33521 
33522 	if (IS_CONST == IS_CONST) {
33523 		name = Z_STR_P(offset);
33524 	} else {
33525 		name = zval_try_get_tmp_string(offset, &tmp_name);
33526 		if (UNEXPECTED(!name)) {
33527 			result = 0;
33528 			goto isset_object_finish;
33529 		}
33530 	}
33531 
33532 	result =
33533 		(opline->extended_value & ZEND_ISEMPTY) ^
33534 		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));
33535 
33536 	if (IS_CONST != IS_CONST) {
33537 		zend_tmp_string_release(tmp_name);
33538 	}
33539 
33540 isset_object_finish:
33541 
33542 
33543 	ZEND_VM_SMART_BRANCH(result, 1);
33544 }
33545 
ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33546 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33547 {
33548 	USE_OPLINE
33549 
33550 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
33551 
33552 	SAVE_OPLINE();
33553 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
33554 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33555 	}
33556 
33557 	/* Destroy the previously yielded value */
33558 	zval_ptr_dtor(&generator->value);
33559 
33560 	/* Destroy the previously yielded key */
33561 	zval_ptr_dtor(&generator->key);
33562 
33563 	/* Set the new yielded value */
33564 	if (IS_UNUSED != IS_UNUSED) {
33565 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
33566 			/* Constants and temporary variables aren't yieldable by reference,
33567 			 * but we still allow them with a notice. */
33568 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
33569 				zval *value;
33570 
33571 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33572 
33573 				value = NULL;
33574 				ZVAL_COPY_VALUE(&generator->value, value);
33575 				if (IS_UNUSED == IS_CONST) {
33576 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
33577 						Z_ADDREF(generator->value);
33578 					}
33579 				}
33580 			} else {
33581 				zval *value_ptr = NULL;
33582 
33583 				/* If a function call result is yielded and the function did
33584 				 * not return by reference we throw a notice. */
33585 				do {
33586 					if (IS_UNUSED == IS_VAR) {
33587 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
33588 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
33589 						 && !Z_ISREF_P(value_ptr)) {
33590 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33591 							ZVAL_COPY(&generator->value, value_ptr);
33592 							break;
33593 						}
33594 					}
33595 					if (Z_ISREF_P(value_ptr)) {
33596 						Z_ADDREF_P(value_ptr);
33597 					} else {
33598 						ZVAL_MAKE_REF_EX(value_ptr, 2);
33599 					}
33600 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
33601 				} while (0);
33602 
33603 			}
33604 		} else {
33605 			zval *value = NULL;
33606 
33607 			/* Consts, temporary variables and references need copying */
33608 			if (IS_UNUSED == IS_CONST) {
33609 				ZVAL_COPY_VALUE(&generator->value, value);
33610 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
33611 					Z_ADDREF(generator->value);
33612 				}
33613 			} else if (IS_UNUSED == IS_TMP_VAR) {
33614 				ZVAL_COPY_VALUE(&generator->value, value);
33615             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
33616 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
33617 
33618 			} else {
33619 				ZVAL_COPY_VALUE(&generator->value, value);
33620 				if (IS_UNUSED == IS_CV) {
33621 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
33622 				}
33623 			}
33624 		}
33625 	} else {
33626 		/* If no value was specified yield null */
33627 		ZVAL_NULL(&generator->value);
33628 	}
33629 
33630 	/* Set the new yielded key */
33631 	if (IS_CONST != IS_UNUSED) {
33632 		zval *key = RT_CONSTANT(opline, opline->op2);
33633 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
33634 			key = Z_REFVAL_P(key);
33635 		}
33636 		ZVAL_COPY(&generator->key, key);
33637 
33638 		if (Z_TYPE(generator->key) == IS_LONG
33639 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
33640 		) {
33641 			generator->largest_used_integer_key = Z_LVAL(generator->key);
33642 		}
33643 	} else {
33644 		/* If no key was specified we use auto-increment keys */
33645 		generator->largest_used_integer_key++;
33646 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
33647 	}
33648 
33649 	if (RETURN_VALUE_USED(opline)) {
33650 		/* If the return value of yield is used set the send
33651 		 * target and initialize it to NULL */
33652 		generator->send_target = EX_VAR(opline->result.var);
33653 		ZVAL_NULL(generator->send_target);
33654 	} else {
33655 		generator->send_target = NULL;
33656 	}
33657 
33658 	/* We increment to the next op, so we are at the correct position when the
33659 	 * generator is resumed. */
33660 	ZEND_VM_INC_OPCODE();
33661 
33662 	/* The GOTO VM uses a local opline variable. We need to set the opline
33663 	 * variable in execute_data so we don't resume at an old position. */
33664 	SAVE_OPLINE();
33665 
33666 	ZEND_VM_RETURN();
33667 }
33668 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33669 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33670 {
33671 	USE_OPLINE
33672 	zval *object;
33673 	zval *property;
33674 	zval *value;
33675 	zval *zptr;
33676 	void **cache_slot;
33677 	zend_property_info *prop_info;
33678 	zend_object *zobj;
33679 	zend_string *name, *tmp_name;
33680 
33681 	SAVE_OPLINE();
33682 	object = &EX(This);
33683 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33684 
33685 	do {
33686 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
33687 
33688 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33689 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33690 				object = Z_REFVAL_P(object);
33691 				goto assign_op_object;
33692 			}
33693 			if (IS_UNUSED == IS_CV
33694 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33695 				ZVAL_UNDEFINED_OP1();
33696 			}
33697 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33698 			break;
33699 		}
33700 
33701 assign_op_object:
33702 		/* here we are sure we are dealing with an object */
33703 		zobj = Z_OBJ_P(object);
33704 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33705 			name = Z_STR_P(property);
33706 		} else {
33707 			name = zval_try_get_tmp_string(property, &tmp_name);
33708 			if (UNEXPECTED(!name)) {
33709 				UNDEF_RESULT();
33710 				break;
33711 			}
33712 		}
33713 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
33714 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
33715 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33716 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33717 					ZVAL_NULL(EX_VAR(opline->result.var));
33718 				}
33719 			} else {
33720 				zval *orig_zptr = zptr;
33721 				zend_reference *ref;
33722 
33723 				do {
33724 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
33725 						ref = Z_REF_P(zptr);
33726 						zptr = Z_REFVAL_P(zptr);
33727 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
33728 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
33729 							break;
33730 						}
33731 					}
33732 
33733 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33734 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
33735 					} else {
33736 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
33737 					}
33738 					if (UNEXPECTED(prop_info)) {
33739 						/* special case for typed properties */
33740 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
33741 					} else {
33742 						zend_binary_op(zptr, zptr, value OPLINE_CC);
33743 					}
33744 				} while (0);
33745 
33746 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33747 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
33748 				}
33749 			}
33750 		} else {
33751 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
33752 		}
33753 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33754 			zend_tmp_string_release(tmp_name);
33755 		}
33756 	} while (0);
33757 
33758 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
33759 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33760 
33761 	/* assign_obj has two opcodes! */
33762 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33763 }
33764 
33765 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33766 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33767 {
33768 	USE_OPLINE
33769 	zval *object;
33770 	zval *property;
33771 	zval *zptr;
33772 	void **cache_slot;
33773 	zend_property_info *prop_info;
33774 	zend_object *zobj;
33775 	zend_string *name, *tmp_name;
33776 
33777 	SAVE_OPLINE();
33778 	object = &EX(This);
33779 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33780 
33781 	do {
33782 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33783 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33784 				object = Z_REFVAL_P(object);
33785 				goto pre_incdec_object;
33786 			}
33787 			if (IS_UNUSED == IS_CV
33788 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33789 				ZVAL_UNDEFINED_OP1();
33790 			}
33791 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33792 			break;
33793 		}
33794 
33795 pre_incdec_object:
33796 		/* here we are sure we are dealing with an object */
33797 		zobj = Z_OBJ_P(object);
33798 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33799 			name = Z_STR_P(property);
33800 		} else {
33801 			name = zval_try_get_tmp_string(property, &tmp_name);
33802 			if (UNEXPECTED(!name)) {
33803 				UNDEF_RESULT();
33804 				break;
33805 			}
33806 		}
33807 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
33808 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
33809 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33810 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33811 					ZVAL_NULL(EX_VAR(opline->result.var));
33812 				}
33813 			} else {
33814 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33815 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
33816 				} else {
33817 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
33818 				}
33819 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
33820 			}
33821 		} else {
33822 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
33823 		}
33824 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33825 			zend_tmp_string_release(tmp_name);
33826 		}
33827 	} while (0);
33828 
33829 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33830 
33831 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33832 }
33833 
ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33834 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33835 {
33836 	USE_OPLINE
33837 	zval *object;
33838 	zval *property;
33839 	zval *zptr;
33840 	void **cache_slot;
33841 	zend_property_info *prop_info;
33842 	zend_object *zobj;
33843 	zend_string *name, *tmp_name;
33844 
33845 	SAVE_OPLINE();
33846 	object = &EX(This);
33847 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33848 
33849 	do {
33850 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33851 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33852 				object = Z_REFVAL_P(object);
33853 				goto post_incdec_object;
33854 			}
33855 			if (IS_UNUSED == IS_CV
33856 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33857 				ZVAL_UNDEFINED_OP1();
33858 			}
33859 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33860 			break;
33861 		}
33862 
33863 post_incdec_object:
33864 		/* here we are sure we are dealing with an object */
33865 		zobj = Z_OBJ_P(object);
33866 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33867 			name = Z_STR_P(property);
33868 		} else {
33869 			name = zval_try_get_tmp_string(property, &tmp_name);
33870 			if (UNEXPECTED(!name)) {
33871 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33872 				break;
33873 			}
33874 		}
33875 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
33876 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
33877 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33878 				ZVAL_NULL(EX_VAR(opline->result.var));
33879 			} else {
33880 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33881 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
33882 				} else {
33883 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
33884 				}
33885 
33886 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
33887 			}
33888 		} else {
33889 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
33890 		}
33891 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33892 			zend_tmp_string_release(tmp_name);
33893 		}
33894 	} while (0);
33895 
33896 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33897 
33898 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33899 }
33900 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33901 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33902 {
33903 	USE_OPLINE
33904 	zval *container;
33905 	void **cache_slot = NULL;
33906 
33907 	SAVE_OPLINE();
33908 	container = &EX(This);
33909 
33910 	if (IS_UNUSED == IS_CONST ||
33911 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33912 	    do {
33913 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33914 				container = Z_REFVAL_P(container);
33915 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
33916 					break;
33917 				}
33918 			}
33919 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33920 				ZVAL_UNDEFINED_OP1();
33921 			}
33922 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
33923 			ZVAL_NULL(EX_VAR(opline->result.var));
33924 			goto fetch_obj_r_finish;
33925 		} while (0);
33926 	}
33927 
33928 	/* here we are sure we are dealing with an object */
33929 	do {
33930 		zend_object *zobj = Z_OBJ_P(container);
33931 		zend_string *name, *tmp_name;
33932 		zval *retval;
33933 
33934 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33935 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
33936 
33937 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
33938 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33939 
33940 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33941 					retval = OBJ_PROP(zobj, prop_offset);
33942 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
33943 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33944 							goto fetch_obj_r_copy;
33945 						} else {
33946 fetch_obj_r_fast_copy:
33947 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33948 							ZEND_VM_NEXT_OPCODE();
33949 						}
33950 					}
33951 				} else if (EXPECTED(zobj->properties != NULL)) {
33952 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
33953 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
33954 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
33955 
33956 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
33957 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
33958 
33959 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
33960 						        (EXPECTED(p->key == name) ||
33961 						         (EXPECTED(p->h == ZSTR_H(name)) &&
33962 						          EXPECTED(p->key != NULL) &&
33963 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
33964 								retval = &p->val;
33965 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33966 									goto fetch_obj_r_copy;
33967 								} else {
33968 									goto fetch_obj_r_fast_copy;
33969 								}
33970 							}
33971 						}
33972 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
33973 					}
33974 					retval = zend_hash_find_known_hash(zobj->properties, name);
33975 					if (EXPECTED(retval)) {
33976 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
33977 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
33978 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33979 							goto fetch_obj_r_copy;
33980 						} else {
33981 							goto fetch_obj_r_fast_copy;
33982 						}
33983 					}
33984 				}
33985 			}
33986 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
33987 		} else {
33988 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
33989 			if (UNEXPECTED(!name)) {
33990 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33991 				break;
33992 			}
33993 		}
33994 
33995 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
33996 #if ZEND_DEBUG
33997 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
33998 			zend_verify_internal_read_property_type(zobj, name, retval);
33999 		}
34000 #endif
34001 
34002 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34003 			zend_tmp_string_release(tmp_name);
34004 		}
34005 
34006 		if (retval != EX_VAR(opline->result.var)) {
34007 fetch_obj_r_copy:
34008 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
34009 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
34010 			zend_unwrap_reference(retval);
34011 		}
34012 	} while (0);
34013 
34014 fetch_obj_r_finish:
34015 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34016 
34017 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34018 }
34019 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34020 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34021 {
34022 	USE_OPLINE
34023 	zval *property, *container, *result;
34024 
34025 	SAVE_OPLINE();
34026 
34027 	container = &EX(This);
34028 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34029 	result = EX_VAR(opline->result.var);
34030 	zend_fetch_property_address(
34031 		result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
34032 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
34033 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC);
34034 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34035 	if (IS_UNUSED == IS_VAR) {
34036 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
34037 	}
34038 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34039 }
34040 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34041 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34042 {
34043 	USE_OPLINE
34044 	zval *property, *container, *result;
34045 
34046 	SAVE_OPLINE();
34047 	container = &EX(This);
34048 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34049 	result = EX_VAR(opline->result.var);
34050 	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);
34051 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34052 	if (IS_UNUSED == IS_VAR) {
34053 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
34054 	}
34055 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34056 }
34057 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34058 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34059 {
34060 	USE_OPLINE
34061 	zval *container;
34062 	void **cache_slot = NULL;
34063 
34064 	SAVE_OPLINE();
34065 	container = &EX(This);
34066 
34067 	if (IS_UNUSED == IS_CONST ||
34068 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
34069 		do {
34070 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
34071 				container = Z_REFVAL_P(container);
34072 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
34073 					break;
34074 				}
34075 			}
34076 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
34077 				ZVAL_UNDEFINED_OP2();
34078 			}
34079 			ZVAL_NULL(EX_VAR(opline->result.var));
34080 			goto fetch_obj_is_finish;
34081 		} while (0);
34082 	}
34083 
34084 	/* here we are sure we are dealing with an object */
34085 	do {
34086 		zend_object *zobj = Z_OBJ_P(container);
34087 		zend_string *name, *tmp_name;
34088 		zval *retval;
34089 
34090 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34091 			cache_slot = CACHE_ADDR(opline->extended_value);
34092 
34093 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
34094 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
34095 
34096 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
34097 					retval = OBJ_PROP(zobj, prop_offset);
34098 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
34099 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
34100 							goto fetch_obj_is_copy;
34101 						} else {
34102 fetch_obj_is_fast_copy:
34103 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
34104 							ZEND_VM_NEXT_OPCODE();
34105 						}
34106 					}
34107 				} else if (EXPECTED(zobj->properties != NULL)) {
34108 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34109 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
34110 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
34111 
34112 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
34113 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
34114 
34115 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
34116 						        (EXPECTED(p->key == name) ||
34117 						         (EXPECTED(p->h == ZSTR_H(name)) &&
34118 						          EXPECTED(p->key != NULL) &&
34119 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
34120 								retval = &p->val;
34121 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
34122 									goto fetch_obj_is_copy;
34123 								} else {
34124 									goto fetch_obj_is_fast_copy;
34125 								}
34126 							}
34127 						}
34128 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
34129 					}
34130 					retval = zend_hash_find_known_hash(zobj->properties, name);
34131 					if (EXPECTED(retval)) {
34132 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
34133 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
34134 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
34135 							goto fetch_obj_is_copy;
34136 						} else {
34137 							goto fetch_obj_is_fast_copy;
34138 						}
34139 					}
34140 				}
34141 			}
34142 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34143 		} else {
34144 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
34145 			if (UNEXPECTED(!name)) {
34146 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34147 				break;
34148 			}
34149 		}
34150 
34151 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
34152 
34153 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34154 			zend_tmp_string_release(tmp_name);
34155 		}
34156 
34157 		if (retval != EX_VAR(opline->result.var)) {
34158 fetch_obj_is_copy:
34159 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
34160 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
34161 			zend_unwrap_reference(retval);
34162 		}
34163 	} while (0);
34164 
34165 fetch_obj_is_finish:
34166 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34167 
34168 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34169 }
34170 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34171 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34172 {
34173 #if 0
34174 	USE_OPLINE
34175 #endif
34176 
34177 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
34178 		/* Behave like FETCH_OBJ_W */
34179 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
34180 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34181 		}
34182 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34183 	} else {
34184 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34185 	}
34186 }
34187 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34188 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34189 {
34190 	USE_OPLINE
34191 	zval *container, *property, *result;
34192 
34193 	SAVE_OPLINE();
34194 	container = &EX(This);
34195 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34196 	result = EX_VAR(opline->result.var);
34197 	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);
34198 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34199 	if (IS_UNUSED == IS_VAR) {
34200 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
34201 	}
34202 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34203 }
34204 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34206 {
34207 	USE_OPLINE
34208 	zval *object, *value, tmp;
34209 	zend_object *zobj;
34210 	zend_string *name, *tmp_name;
34211 
34212 	SAVE_OPLINE();
34213 	object = &EX(This);
34214 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
34215 
34216 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34217 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34218 			object = Z_REFVAL_P(object);
34219 			goto assign_object;
34220 		}
34221 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
34222 		value = &EG(uninitialized_zval);
34223 		goto free_and_exit_assign_obj;
34224 	}
34225 
34226 assign_object:
34227 	zobj = Z_OBJ_P(object);
34228 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34229 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
34230 			void **cache_slot = CACHE_ADDR(opline->extended_value);
34231 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
34232 			zend_object *zobj = Z_OBJ_P(object);
34233 			zval *property_val;
34234 
34235 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
34236 				property_val = OBJ_PROP(zobj, prop_offset);
34237 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
34238 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
34239 
34240 					if (UNEXPECTED(prop_info != NULL)) {
34241 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
34242 						goto free_and_exit_assign_obj;
34243 					} else {
34244 fast_assign_obj:
34245 						value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
34246 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34247 							ZVAL_COPY(EX_VAR(opline->result.var), value);
34248 						}
34249 						goto exit_assign_obj;
34250 					}
34251 				}
34252 			} else {
34253 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34254 				if (EXPECTED(zobj->properties != NULL)) {
34255 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
34256 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
34257 							GC_DELREF(zobj->properties);
34258 						}
34259 						zobj->properties = zend_array_dup(zobj->properties);
34260 					}
34261 					property_val = zend_hash_find_known_hash(zobj->properties, name);
34262 					if (property_val) {
34263 						goto fast_assign_obj;
34264 					}
34265 				}
34266 
34267 				if (!zobj->ce->__set) {
34268 					if (EXPECTED(zobj->properties == NULL)) {
34269 						rebuild_object_properties(zobj);
34270 					}
34271 					if (IS_CONST == IS_CONST) {
34272 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
34273 							Z_ADDREF_P(value);
34274 						}
34275 					} else if (IS_CONST != IS_TMP_VAR) {
34276 						if (Z_ISREF_P(value)) {
34277 							if (IS_CONST == IS_VAR) {
34278 								zend_reference *ref = Z_REF_P(value);
34279 								if (GC_DELREF(ref) == 0) {
34280 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
34281 									efree_size(ref, sizeof(zend_reference));
34282 									value = &tmp;
34283 								} else {
34284 									value = Z_REFVAL_P(value);
34285 									Z_TRY_ADDREF_P(value);
34286 								}
34287 							} else {
34288 								value = Z_REFVAL_P(value);
34289 								Z_TRY_ADDREF_P(value);
34290 							}
34291 						} else if (IS_CONST == IS_CV) {
34292 							Z_TRY_ADDREF_P(value);
34293 						}
34294 						}
34295 					zend_hash_add_new(zobj->properties, name, value);
34296 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34297 						ZVAL_COPY(EX_VAR(opline->result.var), value);
34298 					}
34299 					goto exit_assign_obj;
34300 				}
34301 			}
34302 		}
34303 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34304 	} else {
34305 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
34306 		if (UNEXPECTED(!name)) {
34307 
34308 			UNDEF_RESULT();
34309 			goto exit_assign_obj;
34310 		}
34311 	}
34312 
34313 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
34314 		ZVAL_DEREF(value);
34315 	}
34316 
34317 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
34318 
34319 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34320 		zend_tmp_string_release(tmp_name);
34321 	}
34322 
34323 free_and_exit_assign_obj:
34324 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34325 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
34326 	}
34327 
34328 exit_assign_obj:
34329 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34330 
34331 	/* assign_obj has two opcodes! */
34332 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34333 }
34334 
34335 /* 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)34336 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34337 {
34338 	USE_OPLINE
34339 	zval *object, *value, tmp;
34340 	zend_object *zobj;
34341 	zend_string *name, *tmp_name;
34342 
34343 	SAVE_OPLINE();
34344 	object = &EX(This);
34345 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
34346 
34347 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34348 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34349 			object = Z_REFVAL_P(object);
34350 			goto assign_object;
34351 		}
34352 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
34353 		value = &EG(uninitialized_zval);
34354 		goto free_and_exit_assign_obj;
34355 	}
34356 
34357 assign_object:
34358 	zobj = Z_OBJ_P(object);
34359 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34360 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
34361 			void **cache_slot = CACHE_ADDR(opline->extended_value);
34362 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
34363 			zend_object *zobj = Z_OBJ_P(object);
34364 			zval *property_val;
34365 
34366 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
34367 				property_val = OBJ_PROP(zobj, prop_offset);
34368 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
34369 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
34370 
34371 					if (UNEXPECTED(prop_info != NULL)) {
34372 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
34373 						goto free_and_exit_assign_obj;
34374 					} else {
34375 fast_assign_obj:
34376 						value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
34377 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34378 							ZVAL_COPY(EX_VAR(opline->result.var), value);
34379 						}
34380 						goto exit_assign_obj;
34381 					}
34382 				}
34383 			} else {
34384 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34385 				if (EXPECTED(zobj->properties != NULL)) {
34386 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
34387 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
34388 							GC_DELREF(zobj->properties);
34389 						}
34390 						zobj->properties = zend_array_dup(zobj->properties);
34391 					}
34392 					property_val = zend_hash_find_known_hash(zobj->properties, name);
34393 					if (property_val) {
34394 						goto fast_assign_obj;
34395 					}
34396 				}
34397 
34398 				if (!zobj->ce->__set) {
34399 					if (EXPECTED(zobj->properties == NULL)) {
34400 						rebuild_object_properties(zobj);
34401 					}
34402 					if (IS_TMP_VAR == IS_CONST) {
34403 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
34404 							Z_ADDREF_P(value);
34405 						}
34406 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
34407 						if (Z_ISREF_P(value)) {
34408 							if (IS_TMP_VAR == IS_VAR) {
34409 								zend_reference *ref = Z_REF_P(value);
34410 								if (GC_DELREF(ref) == 0) {
34411 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
34412 									efree_size(ref, sizeof(zend_reference));
34413 									value = &tmp;
34414 								} else {
34415 									value = Z_REFVAL_P(value);
34416 									Z_TRY_ADDREF_P(value);
34417 								}
34418 							} else {
34419 								value = Z_REFVAL_P(value);
34420 								Z_TRY_ADDREF_P(value);
34421 							}
34422 						} else if (IS_TMP_VAR == IS_CV) {
34423 							Z_TRY_ADDREF_P(value);
34424 						}
34425 						}
34426 					zend_hash_add_new(zobj->properties, name, value);
34427 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34428 						ZVAL_COPY(EX_VAR(opline->result.var), value);
34429 					}
34430 					goto exit_assign_obj;
34431 				}
34432 			}
34433 		}
34434 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34435 	} else {
34436 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
34437 		if (UNEXPECTED(!name)) {
34438 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
34439 			UNDEF_RESULT();
34440 			goto exit_assign_obj;
34441 		}
34442 	}
34443 
34444 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
34445 		ZVAL_DEREF(value);
34446 	}
34447 
34448 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
34449 
34450 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34451 		zend_tmp_string_release(tmp_name);
34452 	}
34453 
34454 free_and_exit_assign_obj:
34455 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34456 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
34457 	}
34458 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
34459 exit_assign_obj:
34460 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34461 
34462 	/* assign_obj has two opcodes! */
34463 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34464 }
34465 
34466 /* 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)34467 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34468 {
34469 	USE_OPLINE
34470 	zval *object, *value, tmp;
34471 	zend_object *zobj;
34472 	zend_string *name, *tmp_name;
34473 
34474 	SAVE_OPLINE();
34475 	object = &EX(This);
34476 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
34477 
34478 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34479 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34480 			object = Z_REFVAL_P(object);
34481 			goto assign_object;
34482 		}
34483 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
34484 		value = &EG(uninitialized_zval);
34485 		goto free_and_exit_assign_obj;
34486 	}
34487 
34488 assign_object:
34489 	zobj = Z_OBJ_P(object);
34490 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34491 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
34492 			void **cache_slot = CACHE_ADDR(opline->extended_value);
34493 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
34494 			zend_object *zobj = Z_OBJ_P(object);
34495 			zval *property_val;
34496 
34497 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
34498 				property_val = OBJ_PROP(zobj, prop_offset);
34499 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
34500 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
34501 
34502 					if (UNEXPECTED(prop_info != NULL)) {
34503 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
34504 						goto free_and_exit_assign_obj;
34505 					} else {
34506 fast_assign_obj:
34507 						value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
34508 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34509 							ZVAL_COPY(EX_VAR(opline->result.var), value);
34510 						}
34511 						goto exit_assign_obj;
34512 					}
34513 				}
34514 			} else {
34515 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34516 				if (EXPECTED(zobj->properties != NULL)) {
34517 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
34518 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
34519 							GC_DELREF(zobj->properties);
34520 						}
34521 						zobj->properties = zend_array_dup(zobj->properties);
34522 					}
34523 					property_val = zend_hash_find_known_hash(zobj->properties, name);
34524 					if (property_val) {
34525 						goto fast_assign_obj;
34526 					}
34527 				}
34528 
34529 				if (!zobj->ce->__set) {
34530 					if (EXPECTED(zobj->properties == NULL)) {
34531 						rebuild_object_properties(zobj);
34532 					}
34533 					if (IS_VAR == IS_CONST) {
34534 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
34535 							Z_ADDREF_P(value);
34536 						}
34537 					} else if (IS_VAR != IS_TMP_VAR) {
34538 						if (Z_ISREF_P(value)) {
34539 							if (IS_VAR == IS_VAR) {
34540 								zend_reference *ref = Z_REF_P(value);
34541 								if (GC_DELREF(ref) == 0) {
34542 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
34543 									efree_size(ref, sizeof(zend_reference));
34544 									value = &tmp;
34545 								} else {
34546 									value = Z_REFVAL_P(value);
34547 									Z_TRY_ADDREF_P(value);
34548 								}
34549 							} else {
34550 								value = Z_REFVAL_P(value);
34551 								Z_TRY_ADDREF_P(value);
34552 							}
34553 						} else if (IS_VAR == IS_CV) {
34554 							Z_TRY_ADDREF_P(value);
34555 						}
34556 						}
34557 					zend_hash_add_new(zobj->properties, name, value);
34558 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34559 						ZVAL_COPY(EX_VAR(opline->result.var), value);
34560 					}
34561 					goto exit_assign_obj;
34562 				}
34563 			}
34564 		}
34565 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34566 	} else {
34567 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
34568 		if (UNEXPECTED(!name)) {
34569 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
34570 			UNDEF_RESULT();
34571 			goto exit_assign_obj;
34572 		}
34573 	}
34574 
34575 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
34576 		ZVAL_DEREF(value);
34577 	}
34578 
34579 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
34580 
34581 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34582 		zend_tmp_string_release(tmp_name);
34583 	}
34584 
34585 free_and_exit_assign_obj:
34586 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34587 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
34588 	}
34589 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
34590 exit_assign_obj:
34591 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34592 
34593 	/* assign_obj has two opcodes! */
34594 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34595 }
34596 
34597 /* 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)34598 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34599 {
34600 	USE_OPLINE
34601 	zval *object, *value, tmp;
34602 	zend_object *zobj;
34603 	zend_string *name, *tmp_name;
34604 
34605 	SAVE_OPLINE();
34606 	object = &EX(This);
34607 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
34608 
34609 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34610 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34611 			object = Z_REFVAL_P(object);
34612 			goto assign_object;
34613 		}
34614 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
34615 		value = &EG(uninitialized_zval);
34616 		goto free_and_exit_assign_obj;
34617 	}
34618 
34619 assign_object:
34620 	zobj = Z_OBJ_P(object);
34621 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34622 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
34623 			void **cache_slot = CACHE_ADDR(opline->extended_value);
34624 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
34625 			zend_object *zobj = Z_OBJ_P(object);
34626 			zval *property_val;
34627 
34628 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
34629 				property_val = OBJ_PROP(zobj, prop_offset);
34630 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
34631 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
34632 
34633 					if (UNEXPECTED(prop_info != NULL)) {
34634 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
34635 						goto free_and_exit_assign_obj;
34636 					} else {
34637 fast_assign_obj:
34638 						value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
34639 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34640 							ZVAL_COPY(EX_VAR(opline->result.var), value);
34641 						}
34642 						goto exit_assign_obj;
34643 					}
34644 				}
34645 			} else {
34646 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34647 				if (EXPECTED(zobj->properties != NULL)) {
34648 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
34649 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
34650 							GC_DELREF(zobj->properties);
34651 						}
34652 						zobj->properties = zend_array_dup(zobj->properties);
34653 					}
34654 					property_val = zend_hash_find_known_hash(zobj->properties, name);
34655 					if (property_val) {
34656 						goto fast_assign_obj;
34657 					}
34658 				}
34659 
34660 				if (!zobj->ce->__set) {
34661 					if (EXPECTED(zobj->properties == NULL)) {
34662 						rebuild_object_properties(zobj);
34663 					}
34664 					if (IS_CV == IS_CONST) {
34665 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
34666 							Z_ADDREF_P(value);
34667 						}
34668 					} else if (IS_CV != IS_TMP_VAR) {
34669 						if (Z_ISREF_P(value)) {
34670 							if (IS_CV == IS_VAR) {
34671 								zend_reference *ref = Z_REF_P(value);
34672 								if (GC_DELREF(ref) == 0) {
34673 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
34674 									efree_size(ref, sizeof(zend_reference));
34675 									value = &tmp;
34676 								} else {
34677 									value = Z_REFVAL_P(value);
34678 									Z_TRY_ADDREF_P(value);
34679 								}
34680 							} else {
34681 								value = Z_REFVAL_P(value);
34682 								Z_TRY_ADDREF_P(value);
34683 							}
34684 						} else if (IS_CV == IS_CV) {
34685 							Z_TRY_ADDREF_P(value);
34686 						}
34687 						}
34688 					zend_hash_add_new(zobj->properties, name, value);
34689 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34690 						ZVAL_COPY(EX_VAR(opline->result.var), value);
34691 					}
34692 					goto exit_assign_obj;
34693 				}
34694 			}
34695 		}
34696 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34697 	} else {
34698 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
34699 		if (UNEXPECTED(!name)) {
34700 
34701 			UNDEF_RESULT();
34702 			goto exit_assign_obj;
34703 		}
34704 	}
34705 
34706 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
34707 		ZVAL_DEREF(value);
34708 	}
34709 
34710 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
34711 
34712 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34713 		zend_tmp_string_release(tmp_name);
34714 	}
34715 
34716 free_and_exit_assign_obj:
34717 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34718 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
34719 	}
34720 
34721 exit_assign_obj:
34722 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34723 
34724 	/* assign_obj has two opcodes! */
34725 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34726 }
34727 
34728 /* 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)34729 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34730 {
34731 	USE_OPLINE
34732 	zval *property, *container, *value_ptr;
34733 
34734 	SAVE_OPLINE();
34735 
34736 	container = &EX(This);
34737 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34738 
34739 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
34740 
34741 	if (1) {
34742 		if (IS_UNUSED == IS_UNUSED) {
34743 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34744 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34745 			} else {
34746 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34747 			}
34748 		} else {
34749 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34750 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34751 			} else {
34752 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34753 			}
34754 		}
34755 	} else {
34756 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
34757 	}
34758 
34759 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34760 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
34761 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34762 }
34763 
34764 /* 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)34765 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34766 {
34767 	USE_OPLINE
34768 	zval *property, *container, *value_ptr;
34769 
34770 	SAVE_OPLINE();
34771 
34772 	container = &EX(This);
34773 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34774 
34775 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
34776 
34777 	if (1) {
34778 		if (IS_UNUSED == IS_UNUSED) {
34779 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34780 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34781 			} else {
34782 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34783 			}
34784 		} else {
34785 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34786 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34787 			} else {
34788 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34789 			}
34790 		}
34791 	} else {
34792 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
34793 	}
34794 
34795 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34796 
34797 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34798 }
34799 
34800 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34802 {
34803 	USE_OPLINE
34804 	zend_string **rope;
34805 	zval *var;
34806 
34807 	/* Compiler allocates the necessary number of zval slots to keep the rope */
34808 	rope = (zend_string**)EX_VAR(opline->result.var);
34809 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34810 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34811 		rope[0] = Z_STR_P(var);
34812 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
34813 			Z_ADDREF_P(var);
34814 		}
34815 	} else {
34816 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34817 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
34818 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
34819 				rope[0] = zend_string_copy(Z_STR_P(var));
34820 			} else {
34821 				rope[0] = Z_STR_P(var);
34822 			}
34823 		} else {
34824 			SAVE_OPLINE();
34825 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
34826 				ZVAL_UNDEFINED_OP2();
34827 			}
34828 			rope[0] = zval_get_string_func(var);
34829 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34830 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34831 		}
34832 	}
34833 	ZEND_VM_NEXT_OPCODE();
34834 }
34835 
ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34837 {
34838 	zval *class_name;
34839 	USE_OPLINE
34840 
34841 	SAVE_OPLINE();
34842 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
34843 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
34844 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34845 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34846 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
34847 
34848 		if (UNEXPECTED(ce == NULL)) {
34849 			class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34850 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
34851 			CACHE_PTR(opline->extended_value, ce);
34852 		}
34853 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
34854 	} else {
34855 		class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34856 try_class_name:
34857 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
34858 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
34859 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
34860 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
34861 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
34862 			class_name = Z_REFVAL_P(class_name);
34863 			goto try_class_name;
34864 		} else {
34865 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
34866 				ZVAL_UNDEFINED_OP2();
34867 				if (UNEXPECTED(EG(exception) != NULL)) {
34868 					HANDLE_EXCEPTION();
34869 				}
34870 			}
34871 			zend_throw_error(NULL, "Class name must be a valid object or a string");
34872 		}
34873 	}
34874 
34875 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34876 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34877 }
34878 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34879 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34880 {
34881 	USE_OPLINE
34882 	zval *function_name;
34883 	zval *object;
34884 	zend_function *fbc;
34885 	zend_class_entry *called_scope;
34886 	zend_object *obj;
34887 	zend_execute_data *call;
34888 	uint32_t call_info;
34889 
34890 	SAVE_OPLINE();
34891 
34892 	object = &EX(This);
34893 
34894 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34895 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34896 	}
34897 
34898 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
34899 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
34900 		do {
34901 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
34902 				function_name = Z_REFVAL_P(function_name);
34903 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
34904 					break;
34905 				}
34906 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
34907 				ZVAL_UNDEFINED_OP2();
34908 				if (UNEXPECTED(EG(exception) != NULL)) {
34909 
34910 					HANDLE_EXCEPTION();
34911 				}
34912 			}
34913 			zend_throw_error(NULL, "Method name must be a string");
34914 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34915 
34916 			HANDLE_EXCEPTION();
34917 		} while (0);
34918 	}
34919 
34920 	if (IS_UNUSED == IS_UNUSED) {
34921 		obj = Z_OBJ_P(object);
34922 	} else {
34923 		do {
34924 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
34925 				obj = Z_OBJ_P(object);
34926 			} else {
34927 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
34928 					zend_reference *ref = Z_REF_P(object);
34929 
34930 					object = &ref->val;
34931 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
34932 						obj = Z_OBJ_P(object);
34933 						if (IS_UNUSED & IS_VAR) {
34934 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
34935 								efree_size(ref, sizeof(zend_reference));
34936 							} else {
34937 								Z_ADDREF_P(object);
34938 							}
34939 						}
34940 						break;
34941 					}
34942 				}
34943 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34944 					object = ZVAL_UNDEFINED_OP1();
34945 					if (UNEXPECTED(EG(exception) != NULL)) {
34946 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34947 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34948 						}
34949 						HANDLE_EXCEPTION();
34950 					}
34951 				}
34952 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34953 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34954 				}
34955 				zend_invalid_method_call(object, function_name);
34956 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34957 
34958 				HANDLE_EXCEPTION();
34959 			}
34960 		} while (0);
34961 	}
34962 
34963 	called_scope = obj->ce;
34964 
34965 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
34966 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
34967 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
34968 	} else {
34969 	    zend_object *orig_obj = obj;
34970 
34971 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34972 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34973 		}
34974 
34975 		/* First, locate the function. */
34976 		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));
34977 		if (UNEXPECTED(fbc == NULL)) {
34978 			if (EXPECTED(!EG(exception))) {
34979 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
34980 			}
34981 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34982 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
34983 				zend_objects_store_del(orig_obj);
34984 			}
34985 			HANDLE_EXCEPTION();
34986 		}
34987 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
34988 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
34989 		    EXPECTED(obj == orig_obj)) {
34990 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
34991 		}
34992 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
34993 			GC_ADDREF(obj); /* For $this pointer */
34994 			if (GC_DELREF(orig_obj) == 0) {
34995 				zend_objects_store_del(orig_obj);
34996 			}
34997 		}
34998 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34999 			init_func_run_time_cache(&fbc->op_array);
35000 		}
35001 	}
35002 
35003 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35004 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35005 	}
35006 
35007 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
35008 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
35009 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
35010 			zend_objects_store_del(obj);
35011 			if (UNEXPECTED(EG(exception))) {
35012 				HANDLE_EXCEPTION();
35013 			}
35014 		}
35015 		/* call static method */
35016 		obj = (zend_object*)called_scope;
35017 		call_info = ZEND_CALL_NESTED_FUNCTION;
35018 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
35019 		if (IS_UNUSED == IS_CV) {
35020 			GC_ADDREF(obj); /* For $this pointer */
35021 		}
35022 		/* CV may be changed indirectly (e.g. when it's a reference) */
35023 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
35024 	}
35025 
35026 	call = zend_vm_stack_push_call_frame(call_info,
35027 		fbc, opline->extended_value, obj);
35028 	call->prev_execute_data = EX(call);
35029 	EX(call) = call;
35030 
35031 	ZEND_VM_NEXT_OPCODE();
35032 }
35033 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35034 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35035 {
35036 	USE_OPLINE
35037 	zval *function_name;
35038 	zend_class_entry *ce;
35039 	uint32_t call_info;
35040 	zend_function *fbc;
35041 	zend_execute_data *call;
35042 
35043 	SAVE_OPLINE();
35044 
35045 	if (IS_UNUSED == IS_CONST) {
35046 		/* no function found. try a static method in class */
35047 		ce = CACHED_PTR(opline->result.num);
35048 		if (UNEXPECTED(ce == NULL)) {
35049 			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);
35050 			if (UNEXPECTED(ce == NULL)) {
35051 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35052 				HANDLE_EXCEPTION();
35053 			}
35054 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35055 				CACHE_PTR(opline->result.num, ce);
35056 			}
35057 		}
35058 	} else if (IS_UNUSED == IS_UNUSED) {
35059 		ce = zend_fetch_class(NULL, opline->op1.num);
35060 		if (UNEXPECTED(ce == NULL)) {
35061 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35062 			HANDLE_EXCEPTION();
35063 		}
35064 	} else {
35065 		ce = Z_CE_P(EX_VAR(opline->op1.var));
35066 	}
35067 
35068 	if (IS_UNUSED == IS_CONST &&
35069 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
35070 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
35071 		/* nothing to do */
35072 	} else if (IS_UNUSED != IS_CONST &&
35073 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
35074 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
35075 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
35076 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
35077 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35078 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35079 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
35080 				do {
35081 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
35082 						function_name = Z_REFVAL_P(function_name);
35083 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
35084 							break;
35085 						}
35086 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
35087 						ZVAL_UNDEFINED_OP2();
35088 						if (UNEXPECTED(EG(exception) != NULL)) {
35089 							HANDLE_EXCEPTION();
35090 						}
35091 					}
35092 					zend_throw_error(NULL, "Method name must be a string");
35093 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35094 					HANDLE_EXCEPTION();
35095 				} while (0);
35096 			}
35097 		}
35098 
35099 		if (ce->get_static_method) {
35100 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
35101 		} else {
35102 			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));
35103 		}
35104 		if (UNEXPECTED(fbc == NULL)) {
35105 			if (EXPECTED(!EG(exception))) {
35106 				zend_undefined_method(ce, Z_STR_P(function_name));
35107 			}
35108 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35109 			HANDLE_EXCEPTION();
35110 		}
35111 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
35112 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
35113 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
35114 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
35115 		}
35116 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
35117 			init_func_run_time_cache(&fbc->op_array);
35118 		}
35119 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35120 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35121 		}
35122 	} else {
35123 		if (UNEXPECTED(ce->constructor == NULL)) {
35124 			zend_throw_error(NULL, "Cannot call constructor");
35125 			HANDLE_EXCEPTION();
35126 		}
35127 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
35128 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
35129 			HANDLE_EXCEPTION();
35130 		}
35131 		fbc = ce->constructor;
35132 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
35133 			init_func_run_time_cache(&fbc->op_array);
35134 		}
35135 	}
35136 
35137 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
35138 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
35139 			ce = (zend_class_entry*)Z_OBJ(EX(This));
35140 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
35141 		} else {
35142 			zend_non_static_method_call(fbc);
35143 			HANDLE_EXCEPTION();
35144 		}
35145 	} else {
35146 		/* previous opcode is ZEND_FETCH_CLASS */
35147 		if (IS_UNUSED == IS_UNUSED
35148 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
35149 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
35150 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
35151 				ce = Z_OBJCE(EX(This));
35152 			} else {
35153 				ce = Z_CE(EX(This));
35154 			}
35155 		}
35156 		call_info = ZEND_CALL_NESTED_FUNCTION;
35157 	}
35158 
35159 	call = zend_vm_stack_push_call_frame(call_info,
35160 		fbc, opline->extended_value, ce);
35161 	call->prev_execute_data = EX(call);
35162 	EX(call) = call;
35163 
35164 	ZEND_VM_NEXT_OPCODE();
35165 }
35166 
ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35167 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35168 {
35169 	zval *array;
35170 	uint32_t size;
35171 	USE_OPLINE
35172 
35173 	array = EX_VAR(opline->result.var);
35174 	if (IS_UNUSED != IS_UNUSED) {
35175 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
35176 		ZVAL_ARR(array, zend_new_array(size));
35177 		/* Explicitly initialize array as not-packed if flag is set */
35178 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
35179 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
35180 		}
35181 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35182 	} else {
35183 		ZVAL_ARR(array, zend_new_array(0));
35184 		ZEND_VM_NEXT_OPCODE();
35185 	}
35186 }
35187 
ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35188 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35189 {
35190 	USE_OPLINE
35191 	zval *container;
35192 	zval *offset;
35193 	zend_string *name, *tmp_name;
35194 
35195 	SAVE_OPLINE();
35196 	container = &EX(This);
35197 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35198 
35199 	do {
35200 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
35201 			if (Z_ISREF_P(container)) {
35202 				container = Z_REFVAL_P(container);
35203 				if (Z_TYPE_P(container) != IS_OBJECT) {
35204 					if (IS_UNUSED == IS_CV
35205 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
35206 						ZVAL_UNDEFINED_OP1();
35207 					}
35208 					break;
35209 				}
35210 			} else {
35211 				break;
35212 			}
35213 		}
35214 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35215 			name = Z_STR_P(offset);
35216 		} else {
35217 			name = zval_try_get_tmp_string(offset, &tmp_name);
35218 			if (UNEXPECTED(!name)) {
35219 				break;
35220 			}
35221 		}
35222 		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));
35223 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35224 			zend_tmp_string_release(tmp_name);
35225 		}
35226 	} while (0);
35227 
35228 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35229 
35230 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35231 }
35232 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35234 {
35235 	USE_OPLINE
35236 	zval *container;
35237 	int result;
35238 	zval *offset;
35239 	zend_string *name, *tmp_name;
35240 
35241 	SAVE_OPLINE();
35242 	container = &EX(This);
35243 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35244 
35245 	if (IS_UNUSED == IS_CONST ||
35246 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
35247 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
35248 			container = Z_REFVAL_P(container);
35249 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
35250 				result = (opline->extended_value & ZEND_ISEMPTY);
35251 				goto isset_object_finish;
35252 			}
35253 		} else {
35254 			result = (opline->extended_value & ZEND_ISEMPTY);
35255 			goto isset_object_finish;
35256 		}
35257 	}
35258 
35259 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35260 		name = Z_STR_P(offset);
35261 	} else {
35262 		name = zval_try_get_tmp_string(offset, &tmp_name);
35263 		if (UNEXPECTED(!name)) {
35264 			result = 0;
35265 			goto isset_object_finish;
35266 		}
35267 	}
35268 
35269 	result =
35270 		(opline->extended_value & ZEND_ISEMPTY) ^
35271 		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));
35272 
35273 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35274 		zend_tmp_string_release(tmp_name);
35275 	}
35276 
35277 isset_object_finish:
35278 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35279 
35280 	ZEND_VM_SMART_BRANCH(result, 1);
35281 }
35282 
ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35283 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35284 {
35285 	USE_OPLINE
35286 
35287 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
35288 
35289 	SAVE_OPLINE();
35290 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
35291 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35292 	}
35293 
35294 	/* Destroy the previously yielded value */
35295 	zval_ptr_dtor(&generator->value);
35296 
35297 	/* Destroy the previously yielded key */
35298 	zval_ptr_dtor(&generator->key);
35299 
35300 	/* Set the new yielded value */
35301 	if (IS_UNUSED != IS_UNUSED) {
35302 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
35303 			/* Constants and temporary variables aren't yieldable by reference,
35304 			 * but we still allow them with a notice. */
35305 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
35306 				zval *value;
35307 
35308 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
35309 
35310 				value = NULL;
35311 				ZVAL_COPY_VALUE(&generator->value, value);
35312 				if (IS_UNUSED == IS_CONST) {
35313 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
35314 						Z_ADDREF(generator->value);
35315 					}
35316 				}
35317 			} else {
35318 				zval *value_ptr = NULL;
35319 
35320 				/* If a function call result is yielded and the function did
35321 				 * not return by reference we throw a notice. */
35322 				do {
35323 					if (IS_UNUSED == IS_VAR) {
35324 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
35325 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
35326 						 && !Z_ISREF_P(value_ptr)) {
35327 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
35328 							ZVAL_COPY(&generator->value, value_ptr);
35329 							break;
35330 						}
35331 					}
35332 					if (Z_ISREF_P(value_ptr)) {
35333 						Z_ADDREF_P(value_ptr);
35334 					} else {
35335 						ZVAL_MAKE_REF_EX(value_ptr, 2);
35336 					}
35337 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
35338 				} while (0);
35339 
35340 			}
35341 		} else {
35342 			zval *value = NULL;
35343 
35344 			/* Consts, temporary variables and references need copying */
35345 			if (IS_UNUSED == IS_CONST) {
35346 				ZVAL_COPY_VALUE(&generator->value, value);
35347 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
35348 					Z_ADDREF(generator->value);
35349 				}
35350 			} else if (IS_UNUSED == IS_TMP_VAR) {
35351 				ZVAL_COPY_VALUE(&generator->value, value);
35352             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
35353 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
35354 
35355 			} else {
35356 				ZVAL_COPY_VALUE(&generator->value, value);
35357 				if (IS_UNUSED == IS_CV) {
35358 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
35359 				}
35360 			}
35361 		}
35362 	} else {
35363 		/* If no value was specified yield null */
35364 		ZVAL_NULL(&generator->value);
35365 	}
35366 
35367 	/* Set the new yielded key */
35368 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
35369 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35370 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
35371 			key = Z_REFVAL_P(key);
35372 		}
35373 		ZVAL_COPY(&generator->key, key);
35374 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35375 
35376 		if (Z_TYPE(generator->key) == IS_LONG
35377 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
35378 		) {
35379 			generator->largest_used_integer_key = Z_LVAL(generator->key);
35380 		}
35381 	} else {
35382 		/* If no key was specified we use auto-increment keys */
35383 		generator->largest_used_integer_key++;
35384 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
35385 	}
35386 
35387 	if (RETURN_VALUE_USED(opline)) {
35388 		/* If the return value of yield is used set the send
35389 		 * target and initialize it to NULL */
35390 		generator->send_target = EX_VAR(opline->result.var);
35391 		ZVAL_NULL(generator->send_target);
35392 	} else {
35393 		generator->send_target = NULL;
35394 	}
35395 
35396 	/* We increment to the next op, so we are at the correct position when the
35397 	 * generator is resumed. */
35398 	ZEND_VM_INC_OPCODE();
35399 
35400 	/* The GOTO VM uses a local opline variable. We need to set the opline
35401 	 * variable in execute_data so we don't resume at an old position. */
35402 	SAVE_OPLINE();
35403 
35404 	ZEND_VM_RETURN();
35405 }
35406 
ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35408 {
35409 	zval *class_name;
35410 	USE_OPLINE
35411 
35412 	SAVE_OPLINE();
35413 	if (IS_UNUSED == IS_UNUSED) {
35414 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
35415 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35416 	} else if (IS_UNUSED == IS_CONST) {
35417 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
35418 
35419 		if (UNEXPECTED(ce == NULL)) {
35420 			class_name = NULL;
35421 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
35422 			CACHE_PTR(opline->extended_value, ce);
35423 		}
35424 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
35425 	} else {
35426 		class_name = NULL;
35427 try_class_name:
35428 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
35429 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
35430 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
35431 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
35432 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
35433 			class_name = Z_REFVAL_P(class_name);
35434 			goto try_class_name;
35435 		} else {
35436 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
35437 				ZVAL_UNDEFINED_OP2();
35438 				if (UNEXPECTED(EG(exception) != NULL)) {
35439 					HANDLE_EXCEPTION();
35440 				}
35441 			}
35442 			zend_throw_error(NULL, "Class name must be a valid object or a string");
35443 		}
35444 	}
35445 
35446 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35447 }
35448 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35449 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35450 {
35451 	USE_OPLINE
35452 	zval *function_name;
35453 	zend_class_entry *ce;
35454 	uint32_t call_info;
35455 	zend_function *fbc;
35456 	zend_execute_data *call;
35457 
35458 	SAVE_OPLINE();
35459 
35460 	if (IS_UNUSED == IS_CONST) {
35461 		/* no function found. try a static method in class */
35462 		ce = CACHED_PTR(opline->result.num);
35463 		if (UNEXPECTED(ce == NULL)) {
35464 			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);
35465 			if (UNEXPECTED(ce == NULL)) {
35466 
35467 				HANDLE_EXCEPTION();
35468 			}
35469 			if (IS_UNUSED != IS_CONST) {
35470 				CACHE_PTR(opline->result.num, ce);
35471 			}
35472 		}
35473 	} else if (IS_UNUSED == IS_UNUSED) {
35474 		ce = zend_fetch_class(NULL, opline->op1.num);
35475 		if (UNEXPECTED(ce == NULL)) {
35476 
35477 			HANDLE_EXCEPTION();
35478 		}
35479 	} else {
35480 		ce = Z_CE_P(EX_VAR(opline->op1.var));
35481 	}
35482 
35483 	if (IS_UNUSED == IS_CONST &&
35484 	    IS_UNUSED == IS_CONST &&
35485 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
35486 		/* nothing to do */
35487 	} else if (IS_UNUSED != IS_CONST &&
35488 	           IS_UNUSED == IS_CONST &&
35489 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
35490 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
35491 	} else if (IS_UNUSED != IS_UNUSED) {
35492 		function_name = NULL;
35493 		if (IS_UNUSED != IS_CONST) {
35494 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
35495 				do {
35496 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
35497 						function_name = Z_REFVAL_P(function_name);
35498 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
35499 							break;
35500 						}
35501 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
35502 						ZVAL_UNDEFINED_OP2();
35503 						if (UNEXPECTED(EG(exception) != NULL)) {
35504 							HANDLE_EXCEPTION();
35505 						}
35506 					}
35507 					zend_throw_error(NULL, "Method name must be a string");
35508 
35509 					HANDLE_EXCEPTION();
35510 				} while (0);
35511 			}
35512 		}
35513 
35514 		if (ce->get_static_method) {
35515 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
35516 		} else {
35517 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
35518 		}
35519 		if (UNEXPECTED(fbc == NULL)) {
35520 			if (EXPECTED(!EG(exception))) {
35521 				zend_undefined_method(ce, Z_STR_P(function_name));
35522 			}
35523 
35524 			HANDLE_EXCEPTION();
35525 		}
35526 		if (IS_UNUSED == IS_CONST &&
35527 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
35528 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
35529 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
35530 		}
35531 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
35532 			init_func_run_time_cache(&fbc->op_array);
35533 		}
35534 		if (IS_UNUSED != IS_CONST) {
35535 
35536 		}
35537 	} else {
35538 		if (UNEXPECTED(ce->constructor == NULL)) {
35539 			zend_throw_error(NULL, "Cannot call constructor");
35540 			HANDLE_EXCEPTION();
35541 		}
35542 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
35543 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
35544 			HANDLE_EXCEPTION();
35545 		}
35546 		fbc = ce->constructor;
35547 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
35548 			init_func_run_time_cache(&fbc->op_array);
35549 		}
35550 	}
35551 
35552 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
35553 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
35554 			ce = (zend_class_entry*)Z_OBJ(EX(This));
35555 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
35556 		} else {
35557 			zend_non_static_method_call(fbc);
35558 			HANDLE_EXCEPTION();
35559 		}
35560 	} else {
35561 		/* previous opcode is ZEND_FETCH_CLASS */
35562 		if (IS_UNUSED == IS_UNUSED
35563 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
35564 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
35565 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
35566 				ce = Z_OBJCE(EX(This));
35567 			} else {
35568 				ce = Z_CE(EX(This));
35569 			}
35570 		}
35571 		call_info = ZEND_CALL_NESTED_FUNCTION;
35572 	}
35573 
35574 	call = zend_vm_stack_push_call_frame(call_info,
35575 		fbc, opline->extended_value, ce);
35576 	call->prev_execute_data = EX(call);
35577 	EX(call) = call;
35578 
35579 	ZEND_VM_NEXT_OPCODE();
35580 }
35581 
ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35582 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35583 {
35584 	if (IS_UNUSED == IS_UNUSED) {
35585 		SAVE_OPLINE();
35586 		zend_verify_missing_return_type(EX(func));
35587 		HANDLE_EXCEPTION();
35588 	} else {
35589 /* prevents "undefined variable opline" errors */
35590 #if 0 || (IS_UNUSED != IS_UNUSED)
35591 		USE_OPLINE
35592 		zval *retval_ref, *retval_ptr;
35593 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
35594 		retval_ref = retval_ptr = NULL;
35595 
35596 		if (IS_UNUSED == IS_CONST) {
35597 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
35598 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
35599 		} else if (IS_UNUSED == IS_VAR) {
35600 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
35601 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
35602 			}
35603 			ZVAL_DEREF(retval_ptr);
35604 		} else if (IS_UNUSED == IS_CV) {
35605 			ZVAL_DEREF(retval_ptr);
35606 		}
35607 
35608 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
35609 			ZEND_VM_NEXT_OPCODE();
35610 		}
35611 
35612 		if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
35613 			SAVE_OPLINE();
35614 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
35615 			if (UNEXPECTED(EG(exception))) {
35616 				HANDLE_EXCEPTION();
35617 			}
35618 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
35619 				ZEND_VM_NEXT_OPCODE();
35620 			}
35621 		}
35622 
35623 		zend_reference *ref = NULL;
35624 		void *cache_slot = CACHE_ADDR(opline->op2.num);
35625 		if (UNEXPECTED(retval_ref != retval_ptr)) {
35626 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
35627 				ref = Z_REF_P(retval_ref);
35628 			} else {
35629 				/* A cast might happen - unwrap the reference if this is a by-value return */
35630 				if (Z_REFCOUNT_P(retval_ref) == 1) {
35631 					ZVAL_UNREF(retval_ref);
35632 				} else {
35633 					Z_DELREF_P(retval_ref);
35634 					ZVAL_COPY(retval_ref, retval_ptr);
35635 				}
35636 				retval_ptr = retval_ref;
35637 			}
35638 		}
35639 
35640 		SAVE_OPLINE();
35641 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
35642 			zend_verify_return_error(EX(func), retval_ptr);
35643 			HANDLE_EXCEPTION();
35644 		}
35645 		ZEND_VM_NEXT_OPCODE();
35646 #endif
35647 	}
35648 }
35649 
ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35650 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35651 {
35652 	SAVE_OPLINE();
35653 	zend_verify_never_error(EX(func));
35654 	HANDLE_EXCEPTION();
35655 }
35656 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35657 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35658 {
35659 	USE_OPLINE
35660 	uint32_t arg_num;
35661 
35662 	if (IS_UNUSED == IS_CONST) {
35663 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
35664 		arg_num = zend_get_arg_offset_by_name(
35665 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
35666 		if (UNEXPECTED(arg_num == 0)) {
35667 			/* Treat this as a by-value argument, and throw an error during SEND. */
35668 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35669 			ZEND_VM_NEXT_OPCODE();
35670 		}
35671 	} else {
35672 		arg_num = opline->op2.num;
35673 	}
35674 
35675 	if (EXPECTED(0)) {
35676 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35677 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35678 		} else {
35679 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35680 		}
35681 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35682 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35683 	} else {
35684 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35685 	}
35686 	ZEND_VM_NEXT_OPCODE();
35687 }
35688 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35689 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35690 {
35691 	USE_OPLINE
35692 	uint32_t arg_num;
35693 
35694 	if (IS_UNUSED == IS_CONST) {
35695 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
35696 		arg_num = zend_get_arg_offset_by_name(
35697 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
35698 		if (UNEXPECTED(arg_num == 0)) {
35699 			/* Treat this as a by-value argument, and throw an error during SEND. */
35700 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35701 			ZEND_VM_NEXT_OPCODE();
35702 		}
35703 	} else {
35704 		arg_num = opline->op2.num;
35705 	}
35706 
35707 	if (EXPECTED(1)) {
35708 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35709 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35710 		} else {
35711 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35712 		}
35713 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35714 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35715 	} else {
35716 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35717 	}
35718 	ZEND_VM_NEXT_OPCODE();
35719 }
35720 
ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35721 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35722 {
35723 	USE_OPLINE
35724 
35725 	zend_execute_data *call = execute_data->call;
35726 	if (EXPECTED(!(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF))) {
35727 		ZEND_VM_NEXT_OPCODE();
35728 	}
35729 
35730 	SAVE_OPLINE();
35731 	zend_handle_undef_args(call);
35732 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35733 }
35734 
ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35735 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35736 {
35737 	USE_OPLINE
35738 	zval *result;
35739 	zend_function *constructor;
35740 	zend_class_entry *ce;
35741 	zend_execute_data *call;
35742 
35743 	SAVE_OPLINE();
35744 	if (IS_UNUSED == IS_CONST) {
35745 		ce = CACHED_PTR(opline->op2.num);
35746 		if (UNEXPECTED(ce == NULL)) {
35747 			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);
35748 			if (UNEXPECTED(ce == NULL)) {
35749 				ZVAL_UNDEF(EX_VAR(opline->result.var));
35750 				HANDLE_EXCEPTION();
35751 			}
35752 			CACHE_PTR(opline->op2.num, ce);
35753 		}
35754 	} else if (IS_UNUSED == IS_UNUSED) {
35755 		ce = zend_fetch_class(NULL, opline->op1.num);
35756 		if (UNEXPECTED(ce == NULL)) {
35757 			ZVAL_UNDEF(EX_VAR(opline->result.var));
35758 			HANDLE_EXCEPTION();
35759 		}
35760 	} else {
35761 		ce = Z_CE_P(EX_VAR(opline->op1.var));
35762 	}
35763 
35764 	result = EX_VAR(opline->result.var);
35765 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
35766 		ZVAL_UNDEF(result);
35767 		HANDLE_EXCEPTION();
35768 	}
35769 
35770 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
35771 	if (constructor == NULL) {
35772 		if (UNEXPECTED(EG(exception))) {
35773 			HANDLE_EXCEPTION();
35774 		}
35775 
35776 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
35777 		 * opcode is DO_FCALL in case EXT instructions are used. */
35778 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
35779 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
35780 		}
35781 
35782 		/* Perform a dummy function call */
35783 		call = zend_vm_stack_push_call_frame(
35784 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
35785 			opline->extended_value, NULL);
35786 	} else {
35787 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
35788 			init_func_run_time_cache(&constructor->op_array);
35789 		}
35790 		/* We are not handling overloaded classes right now */
35791 		call = zend_vm_stack_push_call_frame(
35792 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
35793 			constructor,
35794 			opline->extended_value,
35795 			Z_OBJ_P(result));
35796 		Z_ADDREF_P(result);
35797 	}
35798 
35799 	call->prev_execute_data = EX(call);
35800 	EX(call) = call;
35801 	ZEND_VM_NEXT_OPCODE();
35802 }
35803 
ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35804 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35805 {
35806 	zval *array;
35807 	uint32_t size;
35808 	USE_OPLINE
35809 
35810 	array = EX_VAR(opline->result.var);
35811 	if (IS_UNUSED != IS_UNUSED) {
35812 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
35813 		ZVAL_ARR(array, zend_new_array(size));
35814 		/* Explicitly initialize array as not-packed if flag is set */
35815 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
35816 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
35817 		}
35818 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35819 	} else {
35820 		ZVAL_ARR(array, zend_new_array(0));
35821 		ZEND_VM_NEXT_OPCODE();
35822 	}
35823 }
35824 
ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35825 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35826 {
35827 	USE_OPLINE
35828 
35829 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
35830 
35831 	SAVE_OPLINE();
35832 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
35833 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35834 	}
35835 
35836 	/* Destroy the previously yielded value */
35837 	zval_ptr_dtor(&generator->value);
35838 
35839 	/* Destroy the previously yielded key */
35840 	zval_ptr_dtor(&generator->key);
35841 
35842 	/* Set the new yielded value */
35843 	if (IS_UNUSED != IS_UNUSED) {
35844 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
35845 			/* Constants and temporary variables aren't yieldable by reference,
35846 			 * but we still allow them with a notice. */
35847 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
35848 				zval *value;
35849 
35850 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
35851 
35852 				value = NULL;
35853 				ZVAL_COPY_VALUE(&generator->value, value);
35854 				if (IS_UNUSED == IS_CONST) {
35855 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
35856 						Z_ADDREF(generator->value);
35857 					}
35858 				}
35859 			} else {
35860 				zval *value_ptr = NULL;
35861 
35862 				/* If a function call result is yielded and the function did
35863 				 * not return by reference we throw a notice. */
35864 				do {
35865 					if (IS_UNUSED == IS_VAR) {
35866 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
35867 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
35868 						 && !Z_ISREF_P(value_ptr)) {
35869 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
35870 							ZVAL_COPY(&generator->value, value_ptr);
35871 							break;
35872 						}
35873 					}
35874 					if (Z_ISREF_P(value_ptr)) {
35875 						Z_ADDREF_P(value_ptr);
35876 					} else {
35877 						ZVAL_MAKE_REF_EX(value_ptr, 2);
35878 					}
35879 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
35880 				} while (0);
35881 
35882 			}
35883 		} else {
35884 			zval *value = NULL;
35885 
35886 			/* Consts, temporary variables and references need copying */
35887 			if (IS_UNUSED == IS_CONST) {
35888 				ZVAL_COPY_VALUE(&generator->value, value);
35889 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
35890 					Z_ADDREF(generator->value);
35891 				}
35892 			} else if (IS_UNUSED == IS_TMP_VAR) {
35893 				ZVAL_COPY_VALUE(&generator->value, value);
35894             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
35895 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
35896 
35897 			} else {
35898 				ZVAL_COPY_VALUE(&generator->value, value);
35899 				if (IS_UNUSED == IS_CV) {
35900 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
35901 				}
35902 			}
35903 		}
35904 	} else {
35905 		/* If no value was specified yield null */
35906 		ZVAL_NULL(&generator->value);
35907 	}
35908 
35909 	/* Set the new yielded key */
35910 	if (IS_UNUSED != IS_UNUSED) {
35911 		zval *key = NULL;
35912 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
35913 			key = Z_REFVAL_P(key);
35914 		}
35915 		ZVAL_COPY(&generator->key, key);
35916 
35917 		if (Z_TYPE(generator->key) == IS_LONG
35918 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
35919 		) {
35920 			generator->largest_used_integer_key = Z_LVAL(generator->key);
35921 		}
35922 	} else {
35923 		/* If no key was specified we use auto-increment keys */
35924 		generator->largest_used_integer_key++;
35925 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
35926 	}
35927 
35928 	if (RETURN_VALUE_USED(opline)) {
35929 		/* If the return value of yield is used set the send
35930 		 * target and initialize it to NULL */
35931 		generator->send_target = EX_VAR(opline->result.var);
35932 		ZVAL_NULL(generator->send_target);
35933 	} else {
35934 		generator->send_target = NULL;
35935 	}
35936 
35937 	/* We increment to the next op, so we are at the correct position when the
35938 	 * generator is resumed. */
35939 	ZEND_VM_INC_OPCODE();
35940 
35941 	/* The GOTO VM uses a local opline variable. We need to set the opline
35942 	 * variable in execute_data so we don't resume at an old position. */
35943 	SAVE_OPLINE();
35944 
35945 	ZEND_VM_RETURN();
35946 }
35947 
ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35948 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35949 {
35950 	USE_OPLINE
35951 
35952 	if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
35953 		zval *result = EX_VAR(opline->result.var);
35954 
35955 		ZVAL_OBJ(result, Z_OBJ(EX(This)));
35956 		Z_ADDREF_P(result);
35957 		ZEND_VM_NEXT_OPCODE();
35958 	} else {
35959 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35960 	}
35961 }
35962 
ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35963 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35964 {
35965 	USE_OPLINE
35966 
35967 	/* For symbol tables we need to deal with exactly the same problems as for property tables. */
35968 	ZVAL_ARR(EX_VAR(opline->result.var),
35969 		zend_proptable_to_symtable(&EG(symbol_table), /* always_duplicate */ 1));
35970 	ZEND_VM_NEXT_OPCODE();
35971 }
35972 
ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35973 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35974 {
35975 	USE_OPLINE
35976 
35977 	ZVAL_BOOL(EX_VAR(opline->result.var),
35978 		(opline->extended_value & ZEND_ISEMPTY) ^
35979 		 (Z_TYPE(EX(This)) == IS_OBJECT));
35980 	ZEND_VM_NEXT_OPCODE();
35981 }
35982 
ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35983 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35984 {
35985 	USE_OPLINE
35986 
35987 	if (IS_UNUSED == IS_UNUSED) {
35988 		if (UNEXPECTED(!EX(func)->common.scope)) {
35989 			SAVE_OPLINE();
35990 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
35991 			ZVAL_UNDEF(EX_VAR(opline->result.var));
35992 			HANDLE_EXCEPTION();
35993 		} else {
35994 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
35995 			ZEND_VM_NEXT_OPCODE();
35996 		}
35997 	} else {
35998 		zval *op1;
35999 
36000 		SAVE_OPLINE();
36001 		op1 = NULL;
36002 		while (1) {
36003 			if (Z_TYPE_P(op1) == IS_OBJECT) {
36004 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
36005 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
36006 				op1 = Z_REFVAL_P(op1);
36007 				continue;
36008 			} else {
36009 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
36010 					ZVAL_UNDEFINED_OP1();
36011 				}
36012 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
36013 				ZVAL_UNDEF(EX_VAR(opline->result.var));
36014 			}
36015 			break;
36016 		}
36017 
36018 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36019 	}
36020 }
36021 
ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36022 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36023 {
36024 	USE_OPLINE
36025 
36026 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
36027 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
36028 	} else if (Z_CE(EX(This))) {
36029 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
36030 	} else {
36031 		ZEND_ASSERT(!EX(func)->common.scope);
36032 		SAVE_OPLINE();
36033 		zend_throw_error(NULL, "get_called_class() must be called from within a class");
36034 		ZVAL_UNDEF(EX_VAR(opline->result.var));
36035 		HANDLE_EXCEPTION();
36036 	}
36037 	ZEND_VM_NEXT_OPCODE();
36038 }
36039 
ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36040 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36041 {
36042 	USE_OPLINE
36043 
36044 	ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
36045 	ZEND_VM_NEXT_OPCODE();
36046 }
36047 
ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36048 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36049 {
36050 	USE_OPLINE
36051 	zend_array *ht;
36052 	uint32_t arg_count, result_size, skip;
36053 
36054 	arg_count = EX_NUM_ARGS();
36055 	if (IS_UNUSED == IS_CONST) {
36056 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
36057 		if (arg_count < skip) {
36058 			result_size = 0;
36059 		} else {
36060 			result_size = arg_count - skip;
36061 		}
36062 	} else {
36063 		skip = 0;
36064 		result_size = arg_count;
36065 	}
36066 
36067 	if (result_size) {
36068 		SAVE_OPLINE();
36069 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
36070 
36071 		ht = zend_new_array(result_size);
36072 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
36073 		zend_hash_real_init_packed(ht);
36074 		ZEND_HASH_FILL_PACKED(ht) {
36075 			zval *p, *q;
36076 			uint32_t i = skip;
36077 			p = EX_VAR_NUM(i);
36078 			if (arg_count > first_extra_arg) {
36079 				while (i < first_extra_arg) {
36080 					q = p;
36081 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
36082 						ZVAL_DEREF(q);
36083 						if (Z_OPT_REFCOUNTED_P(q)) {
36084 							Z_ADDREF_P(q);
36085 						}
36086 						ZEND_HASH_FILL_SET(q);
36087 					} else {
36088 						ZEND_HASH_FILL_SET_NULL();
36089 					}
36090 					ZEND_HASH_FILL_NEXT();
36091 					p++;
36092 					i++;
36093 				}
36094 				if (skip < first_extra_arg) {
36095 					skip = 0;
36096 				} else {
36097 					skip -= first_extra_arg;
36098 				}
36099 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
36100 			}
36101 			while (i < arg_count) {
36102 				q = p;
36103 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
36104 					ZVAL_DEREF(q);
36105 					if (Z_OPT_REFCOUNTED_P(q)) {
36106 						Z_ADDREF_P(q);
36107 					}
36108 					ZEND_HASH_FILL_SET(q);
36109 				} else {
36110 					ZEND_HASH_FILL_SET_NULL();
36111 				}
36112 				ZEND_HASH_FILL_NEXT();
36113 				p++;
36114 				i++;
36115 			}
36116 		} ZEND_HASH_FILL_END();
36117 		ht->nNumOfElements = result_size;
36118 	} else {
36119 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
36120 	}
36121 	ZEND_VM_NEXT_OPCODE();
36122 }
36123 
ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36124 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36125 {
36126 	USE_OPLINE
36127 	zend_execute_data *call = EX(call);
36128 
36129 	zend_closure_from_frame(EX_VAR(opline->result.var), call);
36130 
36131 	if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) {
36132 		OBJ_RELEASE(Z_OBJ(call->This));
36133 	}
36134 
36135 	EX(call) = call->prev_execute_data;
36136 
36137 	zend_vm_stack_free_call_frame(call);
36138 
36139 	ZEND_VM_NEXT_OPCODE();
36140 }
36141 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36142 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36143 {
36144 	USE_OPLINE
36145 	zval *object;
36146 	zval *property;
36147 	zval *value;
36148 	zval *zptr;
36149 	void **cache_slot;
36150 	zend_property_info *prop_info;
36151 	zend_object *zobj;
36152 	zend_string *name, *tmp_name;
36153 
36154 	SAVE_OPLINE();
36155 	object = &EX(This);
36156 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36157 
36158 	do {
36159 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
36160 
36161 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36162 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36163 				object = Z_REFVAL_P(object);
36164 				goto assign_op_object;
36165 			}
36166 			if (IS_UNUSED == IS_CV
36167 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
36168 				ZVAL_UNDEFINED_OP1();
36169 			}
36170 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
36171 			break;
36172 		}
36173 
36174 assign_op_object:
36175 		/* here we are sure we are dealing with an object */
36176 		zobj = Z_OBJ_P(object);
36177 		if (IS_CV == IS_CONST) {
36178 			name = Z_STR_P(property);
36179 		} else {
36180 			name = zval_try_get_tmp_string(property, &tmp_name);
36181 			if (UNEXPECTED(!name)) {
36182 				UNDEF_RESULT();
36183 				break;
36184 			}
36185 		}
36186 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
36187 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
36188 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
36189 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36190 					ZVAL_NULL(EX_VAR(opline->result.var));
36191 				}
36192 			} else {
36193 				zval *orig_zptr = zptr;
36194 				zend_reference *ref;
36195 
36196 				do {
36197 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
36198 						ref = Z_REF_P(zptr);
36199 						zptr = Z_REFVAL_P(zptr);
36200 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
36201 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
36202 							break;
36203 						}
36204 					}
36205 
36206 					if (IS_CV == IS_CONST) {
36207 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
36208 					} else {
36209 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
36210 					}
36211 					if (UNEXPECTED(prop_info)) {
36212 						/* special case for typed properties */
36213 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
36214 					} else {
36215 						zend_binary_op(zptr, zptr, value OPLINE_CC);
36216 					}
36217 				} while (0);
36218 
36219 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36220 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
36221 				}
36222 			}
36223 		} else {
36224 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
36225 		}
36226 		if (IS_CV != IS_CONST) {
36227 			zend_tmp_string_release(tmp_name);
36228 		}
36229 	} while (0);
36230 
36231 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
36232 
36233 
36234 	/* assign_obj has two opcodes! */
36235 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36236 }
36237 
36238 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36239 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36240 {
36241 	USE_OPLINE
36242 	zval *object;
36243 	zval *property;
36244 	zval *zptr;
36245 	void **cache_slot;
36246 	zend_property_info *prop_info;
36247 	zend_object *zobj;
36248 	zend_string *name, *tmp_name;
36249 
36250 	SAVE_OPLINE();
36251 	object = &EX(This);
36252 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36253 
36254 	do {
36255 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36256 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36257 				object = Z_REFVAL_P(object);
36258 				goto pre_incdec_object;
36259 			}
36260 			if (IS_UNUSED == IS_CV
36261 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
36262 				ZVAL_UNDEFINED_OP1();
36263 			}
36264 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
36265 			break;
36266 		}
36267 
36268 pre_incdec_object:
36269 		/* here we are sure we are dealing with an object */
36270 		zobj = Z_OBJ_P(object);
36271 		if (IS_CV == IS_CONST) {
36272 			name = Z_STR_P(property);
36273 		} else {
36274 			name = zval_try_get_tmp_string(property, &tmp_name);
36275 			if (UNEXPECTED(!name)) {
36276 				UNDEF_RESULT();
36277 				break;
36278 			}
36279 		}
36280 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
36281 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
36282 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
36283 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36284 					ZVAL_NULL(EX_VAR(opline->result.var));
36285 				}
36286 			} else {
36287 				if (IS_CV == IS_CONST) {
36288 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
36289 				} else {
36290 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
36291 				}
36292 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
36293 			}
36294 		} else {
36295 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
36296 		}
36297 		if (IS_CV != IS_CONST) {
36298 			zend_tmp_string_release(tmp_name);
36299 		}
36300 	} while (0);
36301 
36302 
36303 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36304 }
36305 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36306 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36307 {
36308 	USE_OPLINE
36309 	zval *object;
36310 	zval *property;
36311 	zval *zptr;
36312 	void **cache_slot;
36313 	zend_property_info *prop_info;
36314 	zend_object *zobj;
36315 	zend_string *name, *tmp_name;
36316 
36317 	SAVE_OPLINE();
36318 	object = &EX(This);
36319 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36320 
36321 	do {
36322 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36323 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36324 				object = Z_REFVAL_P(object);
36325 				goto post_incdec_object;
36326 			}
36327 			if (IS_UNUSED == IS_CV
36328 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
36329 				ZVAL_UNDEFINED_OP1();
36330 			}
36331 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
36332 			break;
36333 		}
36334 
36335 post_incdec_object:
36336 		/* here we are sure we are dealing with an object */
36337 		zobj = Z_OBJ_P(object);
36338 		if (IS_CV == IS_CONST) {
36339 			name = Z_STR_P(property);
36340 		} else {
36341 			name = zval_try_get_tmp_string(property, &tmp_name);
36342 			if (UNEXPECTED(!name)) {
36343 				ZVAL_UNDEF(EX_VAR(opline->result.var));
36344 				break;
36345 			}
36346 		}
36347 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
36348 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
36349 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
36350 				ZVAL_NULL(EX_VAR(opline->result.var));
36351 			} else {
36352 				if (IS_CV == IS_CONST) {
36353 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
36354 				} else {
36355 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
36356 				}
36357 
36358 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
36359 			}
36360 		} else {
36361 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
36362 		}
36363 		if (IS_CV != IS_CONST) {
36364 			zend_tmp_string_release(tmp_name);
36365 		}
36366 	} while (0);
36367 
36368 
36369 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36370 }
36371 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36373 {
36374 	USE_OPLINE
36375 	zval *container;
36376 	void **cache_slot = NULL;
36377 
36378 	SAVE_OPLINE();
36379 	container = &EX(This);
36380 
36381 	if (IS_UNUSED == IS_CONST ||
36382 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
36383 	    do {
36384 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
36385 				container = Z_REFVAL_P(container);
36386 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
36387 					break;
36388 				}
36389 			}
36390 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
36391 				ZVAL_UNDEFINED_OP1();
36392 			}
36393 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36394 			ZVAL_NULL(EX_VAR(opline->result.var));
36395 			goto fetch_obj_r_finish;
36396 		} while (0);
36397 	}
36398 
36399 	/* here we are sure we are dealing with an object */
36400 	do {
36401 		zend_object *zobj = Z_OBJ_P(container);
36402 		zend_string *name, *tmp_name;
36403 		zval *retval;
36404 
36405 		if (IS_CV == IS_CONST) {
36406 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
36407 
36408 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
36409 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36410 
36411 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36412 					retval = OBJ_PROP(zobj, prop_offset);
36413 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
36414 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36415 							goto fetch_obj_r_copy;
36416 						} else {
36417 fetch_obj_r_fast_copy:
36418 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
36419 							ZEND_VM_NEXT_OPCODE();
36420 						}
36421 					}
36422 				} else if (EXPECTED(zobj->properties != NULL)) {
36423 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36424 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
36425 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
36426 
36427 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
36428 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
36429 
36430 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
36431 						        (EXPECTED(p->key == name) ||
36432 						         (EXPECTED(p->h == ZSTR_H(name)) &&
36433 						          EXPECTED(p->key != NULL) &&
36434 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
36435 								retval = &p->val;
36436 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36437 									goto fetch_obj_r_copy;
36438 								} else {
36439 									goto fetch_obj_r_fast_copy;
36440 								}
36441 							}
36442 						}
36443 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
36444 					}
36445 					retval = zend_hash_find_known_hash(zobj->properties, name);
36446 					if (EXPECTED(retval)) {
36447 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
36448 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
36449 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36450 							goto fetch_obj_r_copy;
36451 						} else {
36452 							goto fetch_obj_r_fast_copy;
36453 						}
36454 					}
36455 				}
36456 			}
36457 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36458 		} else {
36459 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
36460 			if (UNEXPECTED(!name)) {
36461 				ZVAL_UNDEF(EX_VAR(opline->result.var));
36462 				break;
36463 			}
36464 		}
36465 
36466 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
36467 #if ZEND_DEBUG
36468 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
36469 			zend_verify_internal_read_property_type(zobj, name, retval);
36470 		}
36471 #endif
36472 
36473 		if (IS_CV != IS_CONST) {
36474 			zend_tmp_string_release(tmp_name);
36475 		}
36476 
36477 		if (retval != EX_VAR(opline->result.var)) {
36478 fetch_obj_r_copy:
36479 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
36480 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
36481 			zend_unwrap_reference(retval);
36482 		}
36483 	} while (0);
36484 
36485 fetch_obj_r_finish:
36486 
36487 
36488 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36489 }
36490 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36491 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36492 {
36493 	USE_OPLINE
36494 	zval *property, *container, *result;
36495 
36496 	SAVE_OPLINE();
36497 
36498 	container = &EX(This);
36499 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36500 	result = EX_VAR(opline->result.var);
36501 	zend_fetch_property_address(
36502 		result, container, IS_UNUSED, property, IS_CV,
36503 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
36504 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC);
36505 
36506 	if (IS_UNUSED == IS_VAR) {
36507 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
36508 	}
36509 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36510 }
36511 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36512 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36513 {
36514 	USE_OPLINE
36515 	zval *property, *container, *result;
36516 
36517 	SAVE_OPLINE();
36518 	container = &EX(This);
36519 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36520 	result = EX_VAR(opline->result.var);
36521 	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);
36522 
36523 	if (IS_UNUSED == IS_VAR) {
36524 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
36525 	}
36526 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36527 }
36528 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36530 {
36531 	USE_OPLINE
36532 	zval *container;
36533 	void **cache_slot = NULL;
36534 
36535 	SAVE_OPLINE();
36536 	container = &EX(This);
36537 
36538 	if (IS_UNUSED == IS_CONST ||
36539 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
36540 		do {
36541 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
36542 				container = Z_REFVAL_P(container);
36543 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
36544 					break;
36545 				}
36546 			}
36547 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
36548 				ZVAL_UNDEFINED_OP2();
36549 			}
36550 			ZVAL_NULL(EX_VAR(opline->result.var));
36551 			goto fetch_obj_is_finish;
36552 		} while (0);
36553 	}
36554 
36555 	/* here we are sure we are dealing with an object */
36556 	do {
36557 		zend_object *zobj = Z_OBJ_P(container);
36558 		zend_string *name, *tmp_name;
36559 		zval *retval;
36560 
36561 		if (IS_CV == IS_CONST) {
36562 			cache_slot = CACHE_ADDR(opline->extended_value);
36563 
36564 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
36565 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36566 
36567 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36568 					retval = OBJ_PROP(zobj, prop_offset);
36569 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
36570 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36571 							goto fetch_obj_is_copy;
36572 						} else {
36573 fetch_obj_is_fast_copy:
36574 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
36575 							ZEND_VM_NEXT_OPCODE();
36576 						}
36577 					}
36578 				} else if (EXPECTED(zobj->properties != NULL)) {
36579 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36580 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
36581 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
36582 
36583 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
36584 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
36585 
36586 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
36587 						        (EXPECTED(p->key == name) ||
36588 						         (EXPECTED(p->h == ZSTR_H(name)) &&
36589 						          EXPECTED(p->key != NULL) &&
36590 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
36591 								retval = &p->val;
36592 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36593 									goto fetch_obj_is_copy;
36594 								} else {
36595 									goto fetch_obj_is_fast_copy;
36596 								}
36597 							}
36598 						}
36599 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
36600 					}
36601 					retval = zend_hash_find_known_hash(zobj->properties, name);
36602 					if (EXPECTED(retval)) {
36603 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
36604 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
36605 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36606 							goto fetch_obj_is_copy;
36607 						} else {
36608 							goto fetch_obj_is_fast_copy;
36609 						}
36610 					}
36611 				}
36612 			}
36613 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36614 		} else {
36615 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
36616 			if (UNEXPECTED(!name)) {
36617 				ZVAL_UNDEF(EX_VAR(opline->result.var));
36618 				break;
36619 			}
36620 		}
36621 
36622 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
36623 
36624 		if (IS_CV != IS_CONST) {
36625 			zend_tmp_string_release(tmp_name);
36626 		}
36627 
36628 		if (retval != EX_VAR(opline->result.var)) {
36629 fetch_obj_is_copy:
36630 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
36631 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
36632 			zend_unwrap_reference(retval);
36633 		}
36634 	} while (0);
36635 
36636 fetch_obj_is_finish:
36637 
36638 
36639 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36640 }
36641 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36642 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36643 {
36644 #if 0
36645 	USE_OPLINE
36646 #endif
36647 
36648 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
36649 		/* Behave like FETCH_OBJ_W */
36650 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
36651 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36652 		}
36653 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36654 	} else {
36655 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36656 	}
36657 }
36658 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36659 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36660 {
36661 	USE_OPLINE
36662 	zval *container, *property, *result;
36663 
36664 	SAVE_OPLINE();
36665 	container = &EX(This);
36666 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36667 	result = EX_VAR(opline->result.var);
36668 	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);
36669 
36670 	if (IS_UNUSED == IS_VAR) {
36671 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
36672 	}
36673 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36674 }
36675 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36676 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36677 {
36678 	USE_OPLINE
36679 	zval *object, *value, tmp;
36680 	zend_object *zobj;
36681 	zend_string *name, *tmp_name;
36682 
36683 	SAVE_OPLINE();
36684 	object = &EX(This);
36685 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
36686 
36687 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36688 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36689 			object = Z_REFVAL_P(object);
36690 			goto assign_object;
36691 		}
36692 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
36693 		value = &EG(uninitialized_zval);
36694 		goto free_and_exit_assign_obj;
36695 	}
36696 
36697 assign_object:
36698 	zobj = Z_OBJ_P(object);
36699 	if (IS_CV == IS_CONST) {
36700 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
36701 			void **cache_slot = CACHE_ADDR(opline->extended_value);
36702 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36703 			zend_object *zobj = Z_OBJ_P(object);
36704 			zval *property_val;
36705 
36706 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36707 				property_val = OBJ_PROP(zobj, prop_offset);
36708 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
36709 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
36710 
36711 					if (UNEXPECTED(prop_info != NULL)) {
36712 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
36713 						goto free_and_exit_assign_obj;
36714 					} else {
36715 fast_assign_obj:
36716 						value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
36717 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36718 							ZVAL_COPY(EX_VAR(opline->result.var), value);
36719 						}
36720 						goto exit_assign_obj;
36721 					}
36722 				}
36723 			} else {
36724 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36725 				if (EXPECTED(zobj->properties != NULL)) {
36726 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
36727 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
36728 							GC_DELREF(zobj->properties);
36729 						}
36730 						zobj->properties = zend_array_dup(zobj->properties);
36731 					}
36732 					property_val = zend_hash_find_known_hash(zobj->properties, name);
36733 					if (property_val) {
36734 						goto fast_assign_obj;
36735 					}
36736 				}
36737 
36738 				if (!zobj->ce->__set) {
36739 					if (EXPECTED(zobj->properties == NULL)) {
36740 						rebuild_object_properties(zobj);
36741 					}
36742 					if (IS_CONST == IS_CONST) {
36743 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
36744 							Z_ADDREF_P(value);
36745 						}
36746 					} else if (IS_CONST != IS_TMP_VAR) {
36747 						if (Z_ISREF_P(value)) {
36748 							if (IS_CONST == IS_VAR) {
36749 								zend_reference *ref = Z_REF_P(value);
36750 								if (GC_DELREF(ref) == 0) {
36751 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
36752 									efree_size(ref, sizeof(zend_reference));
36753 									value = &tmp;
36754 								} else {
36755 									value = Z_REFVAL_P(value);
36756 									Z_TRY_ADDREF_P(value);
36757 								}
36758 							} else {
36759 								value = Z_REFVAL_P(value);
36760 								Z_TRY_ADDREF_P(value);
36761 							}
36762 						} else if (IS_CONST == IS_CV) {
36763 							Z_TRY_ADDREF_P(value);
36764 						}
36765 						}
36766 					zend_hash_add_new(zobj->properties, name, value);
36767 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36768 						ZVAL_COPY(EX_VAR(opline->result.var), value);
36769 					}
36770 					goto exit_assign_obj;
36771 				}
36772 			}
36773 		}
36774 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36775 	} else {
36776 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
36777 		if (UNEXPECTED(!name)) {
36778 
36779 			UNDEF_RESULT();
36780 			goto exit_assign_obj;
36781 		}
36782 	}
36783 
36784 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
36785 		ZVAL_DEREF(value);
36786 	}
36787 
36788 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
36789 
36790 	if (IS_CV != IS_CONST) {
36791 		zend_tmp_string_release(tmp_name);
36792 	}
36793 
36794 free_and_exit_assign_obj:
36795 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36796 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
36797 	}
36798 
36799 exit_assign_obj:
36800 
36801 
36802 	/* assign_obj has two opcodes! */
36803 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36804 }
36805 
36806 /* 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)36807 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36808 {
36809 	USE_OPLINE
36810 	zval *object, *value, tmp;
36811 	zend_object *zobj;
36812 	zend_string *name, *tmp_name;
36813 
36814 	SAVE_OPLINE();
36815 	object = &EX(This);
36816 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
36817 
36818 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36819 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36820 			object = Z_REFVAL_P(object);
36821 			goto assign_object;
36822 		}
36823 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
36824 		value = &EG(uninitialized_zval);
36825 		goto free_and_exit_assign_obj;
36826 	}
36827 
36828 assign_object:
36829 	zobj = Z_OBJ_P(object);
36830 	if (IS_CV == IS_CONST) {
36831 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
36832 			void **cache_slot = CACHE_ADDR(opline->extended_value);
36833 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36834 			zend_object *zobj = Z_OBJ_P(object);
36835 			zval *property_val;
36836 
36837 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36838 				property_val = OBJ_PROP(zobj, prop_offset);
36839 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
36840 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
36841 
36842 					if (UNEXPECTED(prop_info != NULL)) {
36843 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
36844 						goto free_and_exit_assign_obj;
36845 					} else {
36846 fast_assign_obj:
36847 						value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
36848 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36849 							ZVAL_COPY(EX_VAR(opline->result.var), value);
36850 						}
36851 						goto exit_assign_obj;
36852 					}
36853 				}
36854 			} else {
36855 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36856 				if (EXPECTED(zobj->properties != NULL)) {
36857 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
36858 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
36859 							GC_DELREF(zobj->properties);
36860 						}
36861 						zobj->properties = zend_array_dup(zobj->properties);
36862 					}
36863 					property_val = zend_hash_find_known_hash(zobj->properties, name);
36864 					if (property_val) {
36865 						goto fast_assign_obj;
36866 					}
36867 				}
36868 
36869 				if (!zobj->ce->__set) {
36870 					if (EXPECTED(zobj->properties == NULL)) {
36871 						rebuild_object_properties(zobj);
36872 					}
36873 					if (IS_TMP_VAR == IS_CONST) {
36874 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
36875 							Z_ADDREF_P(value);
36876 						}
36877 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
36878 						if (Z_ISREF_P(value)) {
36879 							if (IS_TMP_VAR == IS_VAR) {
36880 								zend_reference *ref = Z_REF_P(value);
36881 								if (GC_DELREF(ref) == 0) {
36882 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
36883 									efree_size(ref, sizeof(zend_reference));
36884 									value = &tmp;
36885 								} else {
36886 									value = Z_REFVAL_P(value);
36887 									Z_TRY_ADDREF_P(value);
36888 								}
36889 							} else {
36890 								value = Z_REFVAL_P(value);
36891 								Z_TRY_ADDREF_P(value);
36892 							}
36893 						} else if (IS_TMP_VAR == IS_CV) {
36894 							Z_TRY_ADDREF_P(value);
36895 						}
36896 						}
36897 					zend_hash_add_new(zobj->properties, name, value);
36898 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36899 						ZVAL_COPY(EX_VAR(opline->result.var), value);
36900 					}
36901 					goto exit_assign_obj;
36902 				}
36903 			}
36904 		}
36905 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36906 	} else {
36907 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
36908 		if (UNEXPECTED(!name)) {
36909 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
36910 			UNDEF_RESULT();
36911 			goto exit_assign_obj;
36912 		}
36913 	}
36914 
36915 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
36916 		ZVAL_DEREF(value);
36917 	}
36918 
36919 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
36920 
36921 	if (IS_CV != IS_CONST) {
36922 		zend_tmp_string_release(tmp_name);
36923 	}
36924 
36925 free_and_exit_assign_obj:
36926 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36927 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
36928 	}
36929 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
36930 exit_assign_obj:
36931 
36932 
36933 	/* assign_obj has two opcodes! */
36934 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36935 }
36936 
36937 /* 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)36938 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36939 {
36940 	USE_OPLINE
36941 	zval *object, *value, tmp;
36942 	zend_object *zobj;
36943 	zend_string *name, *tmp_name;
36944 
36945 	SAVE_OPLINE();
36946 	object = &EX(This);
36947 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
36948 
36949 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36950 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36951 			object = Z_REFVAL_P(object);
36952 			goto assign_object;
36953 		}
36954 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
36955 		value = &EG(uninitialized_zval);
36956 		goto free_and_exit_assign_obj;
36957 	}
36958 
36959 assign_object:
36960 	zobj = Z_OBJ_P(object);
36961 	if (IS_CV == IS_CONST) {
36962 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
36963 			void **cache_slot = CACHE_ADDR(opline->extended_value);
36964 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36965 			zend_object *zobj = Z_OBJ_P(object);
36966 			zval *property_val;
36967 
36968 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36969 				property_val = OBJ_PROP(zobj, prop_offset);
36970 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
36971 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
36972 
36973 					if (UNEXPECTED(prop_info != NULL)) {
36974 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
36975 						goto free_and_exit_assign_obj;
36976 					} else {
36977 fast_assign_obj:
36978 						value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
36979 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36980 							ZVAL_COPY(EX_VAR(opline->result.var), value);
36981 						}
36982 						goto exit_assign_obj;
36983 					}
36984 				}
36985 			} else {
36986 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
36987 				if (EXPECTED(zobj->properties != NULL)) {
36988 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
36989 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
36990 							GC_DELREF(zobj->properties);
36991 						}
36992 						zobj->properties = zend_array_dup(zobj->properties);
36993 					}
36994 					property_val = zend_hash_find_known_hash(zobj->properties, name);
36995 					if (property_val) {
36996 						goto fast_assign_obj;
36997 					}
36998 				}
36999 
37000 				if (!zobj->ce->__set) {
37001 					if (EXPECTED(zobj->properties == NULL)) {
37002 						rebuild_object_properties(zobj);
37003 					}
37004 					if (IS_VAR == IS_CONST) {
37005 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
37006 							Z_ADDREF_P(value);
37007 						}
37008 					} else if (IS_VAR != IS_TMP_VAR) {
37009 						if (Z_ISREF_P(value)) {
37010 							if (IS_VAR == IS_VAR) {
37011 								zend_reference *ref = Z_REF_P(value);
37012 								if (GC_DELREF(ref) == 0) {
37013 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
37014 									efree_size(ref, sizeof(zend_reference));
37015 									value = &tmp;
37016 								} else {
37017 									value = Z_REFVAL_P(value);
37018 									Z_TRY_ADDREF_P(value);
37019 								}
37020 							} else {
37021 								value = Z_REFVAL_P(value);
37022 								Z_TRY_ADDREF_P(value);
37023 							}
37024 						} else if (IS_VAR == IS_CV) {
37025 							Z_TRY_ADDREF_P(value);
37026 						}
37027 						}
37028 					zend_hash_add_new(zobj->properties, name, value);
37029 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37030 						ZVAL_COPY(EX_VAR(opline->result.var), value);
37031 					}
37032 					goto exit_assign_obj;
37033 				}
37034 			}
37035 		}
37036 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37037 	} else {
37038 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
37039 		if (UNEXPECTED(!name)) {
37040 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
37041 			UNDEF_RESULT();
37042 			goto exit_assign_obj;
37043 		}
37044 	}
37045 
37046 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
37047 		ZVAL_DEREF(value);
37048 	}
37049 
37050 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
37051 
37052 	if (IS_CV != IS_CONST) {
37053 		zend_tmp_string_release(tmp_name);
37054 	}
37055 
37056 free_and_exit_assign_obj:
37057 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37058 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
37059 	}
37060 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
37061 exit_assign_obj:
37062 
37063 
37064 	/* assign_obj has two opcodes! */
37065 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37066 }
37067 
37068 /* 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)37069 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37070 {
37071 	USE_OPLINE
37072 	zval *object, *value, tmp;
37073 	zend_object *zobj;
37074 	zend_string *name, *tmp_name;
37075 
37076 	SAVE_OPLINE();
37077 	object = &EX(This);
37078 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
37079 
37080 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37081 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
37082 			object = Z_REFVAL_P(object);
37083 			goto assign_object;
37084 		}
37085 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
37086 		value = &EG(uninitialized_zval);
37087 		goto free_and_exit_assign_obj;
37088 	}
37089 
37090 assign_object:
37091 	zobj = Z_OBJ_P(object);
37092 	if (IS_CV == IS_CONST) {
37093 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
37094 			void **cache_slot = CACHE_ADDR(opline->extended_value);
37095 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
37096 			zend_object *zobj = Z_OBJ_P(object);
37097 			zval *property_val;
37098 
37099 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
37100 				property_val = OBJ_PROP(zobj, prop_offset);
37101 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
37102 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
37103 
37104 					if (UNEXPECTED(prop_info != NULL)) {
37105 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
37106 						goto free_and_exit_assign_obj;
37107 					} else {
37108 fast_assign_obj:
37109 						value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
37110 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37111 							ZVAL_COPY(EX_VAR(opline->result.var), value);
37112 						}
37113 						goto exit_assign_obj;
37114 					}
37115 				}
37116 			} else {
37117 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37118 				if (EXPECTED(zobj->properties != NULL)) {
37119 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
37120 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
37121 							GC_DELREF(zobj->properties);
37122 						}
37123 						zobj->properties = zend_array_dup(zobj->properties);
37124 					}
37125 					property_val = zend_hash_find_known_hash(zobj->properties, name);
37126 					if (property_val) {
37127 						goto fast_assign_obj;
37128 					}
37129 				}
37130 
37131 				if (!zobj->ce->__set) {
37132 					if (EXPECTED(zobj->properties == NULL)) {
37133 						rebuild_object_properties(zobj);
37134 					}
37135 					if (IS_CV == IS_CONST) {
37136 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
37137 							Z_ADDREF_P(value);
37138 						}
37139 					} else if (IS_CV != IS_TMP_VAR) {
37140 						if (Z_ISREF_P(value)) {
37141 							if (IS_CV == IS_VAR) {
37142 								zend_reference *ref = Z_REF_P(value);
37143 								if (GC_DELREF(ref) == 0) {
37144 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
37145 									efree_size(ref, sizeof(zend_reference));
37146 									value = &tmp;
37147 								} else {
37148 									value = Z_REFVAL_P(value);
37149 									Z_TRY_ADDREF_P(value);
37150 								}
37151 							} else {
37152 								value = Z_REFVAL_P(value);
37153 								Z_TRY_ADDREF_P(value);
37154 							}
37155 						} else if (IS_CV == IS_CV) {
37156 							Z_TRY_ADDREF_P(value);
37157 						}
37158 						}
37159 					zend_hash_add_new(zobj->properties, name, value);
37160 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37161 						ZVAL_COPY(EX_VAR(opline->result.var), value);
37162 					}
37163 					goto exit_assign_obj;
37164 				}
37165 			}
37166 		}
37167 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37168 	} else {
37169 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
37170 		if (UNEXPECTED(!name)) {
37171 
37172 			UNDEF_RESULT();
37173 			goto exit_assign_obj;
37174 		}
37175 	}
37176 
37177 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
37178 		ZVAL_DEREF(value);
37179 	}
37180 
37181 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
37182 
37183 	if (IS_CV != IS_CONST) {
37184 		zend_tmp_string_release(tmp_name);
37185 	}
37186 
37187 free_and_exit_assign_obj:
37188 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37189 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
37190 	}
37191 
37192 exit_assign_obj:
37193 
37194 
37195 	/* assign_obj has two opcodes! */
37196 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37197 }
37198 
37199 /* 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)37200 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37201 {
37202 	USE_OPLINE
37203 	zval *property, *container, *value_ptr;
37204 
37205 	SAVE_OPLINE();
37206 
37207 	container = &EX(This);
37208 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37209 
37210 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
37211 
37212 	if (1) {
37213 		if (IS_UNUSED == IS_UNUSED) {
37214 			if (IS_CV == IS_CONST) {
37215 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37216 			} else {
37217 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37218 			}
37219 		} else {
37220 			if (IS_CV == IS_CONST) {
37221 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37222 			} else {
37223 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37224 			}
37225 		}
37226 	} else {
37227 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37228 	}
37229 
37230 
37231 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
37232 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37233 }
37234 
37235 /* 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)37236 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37237 {
37238 	USE_OPLINE
37239 	zval *property, *container, *value_ptr;
37240 
37241 	SAVE_OPLINE();
37242 
37243 	container = &EX(This);
37244 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37245 
37246 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
37247 
37248 	if (1) {
37249 		if (IS_UNUSED == IS_UNUSED) {
37250 			if (IS_CV == IS_CONST) {
37251 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37252 			} else {
37253 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37254 			}
37255 		} else {
37256 			if (IS_CV == IS_CONST) {
37257 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37258 			} else {
37259 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37260 			}
37261 		}
37262 	} else {
37263 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
37264 	}
37265 
37266 
37267 
37268 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37269 }
37270 
37271 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37273 {
37274 	USE_OPLINE
37275 	zend_string **rope;
37276 	zval *var;
37277 
37278 	/* Compiler allocates the necessary number of zval slots to keep the rope */
37279 	rope = (zend_string**)EX_VAR(opline->result.var);
37280 	if (IS_CV == IS_CONST) {
37281 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37282 		rope[0] = Z_STR_P(var);
37283 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
37284 			Z_ADDREF_P(var);
37285 		}
37286 	} else {
37287 		var = EX_VAR(opline->op2.var);
37288 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
37289 			if (IS_CV == IS_CV) {
37290 				rope[0] = zend_string_copy(Z_STR_P(var));
37291 			} else {
37292 				rope[0] = Z_STR_P(var);
37293 			}
37294 		} else {
37295 			SAVE_OPLINE();
37296 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
37297 				ZVAL_UNDEFINED_OP2();
37298 			}
37299 			rope[0] = zval_get_string_func(var);
37300 
37301 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37302 		}
37303 	}
37304 	ZEND_VM_NEXT_OPCODE();
37305 }
37306 
ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37307 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37308 {
37309 	zval *class_name;
37310 	USE_OPLINE
37311 
37312 	SAVE_OPLINE();
37313 	if (IS_CV == IS_UNUSED) {
37314 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
37315 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37316 	} else if (IS_CV == IS_CONST) {
37317 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
37318 
37319 		if (UNEXPECTED(ce == NULL)) {
37320 			class_name = EX_VAR(opline->op2.var);
37321 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
37322 			CACHE_PTR(opline->extended_value, ce);
37323 		}
37324 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
37325 	} else {
37326 		class_name = EX_VAR(opline->op2.var);
37327 try_class_name:
37328 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
37329 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
37330 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
37331 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
37332 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
37333 			class_name = Z_REFVAL_P(class_name);
37334 			goto try_class_name;
37335 		} else {
37336 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
37337 				ZVAL_UNDEFINED_OP2();
37338 				if (UNEXPECTED(EG(exception) != NULL)) {
37339 					HANDLE_EXCEPTION();
37340 				}
37341 			}
37342 			zend_throw_error(NULL, "Class name must be a valid object or a string");
37343 		}
37344 	}
37345 
37346 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37347 }
37348 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37349 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37350 {
37351 	USE_OPLINE
37352 	zval *function_name;
37353 	zval *object;
37354 	zend_function *fbc;
37355 	zend_class_entry *called_scope;
37356 	zend_object *obj;
37357 	zend_execute_data *call;
37358 	uint32_t call_info;
37359 
37360 	SAVE_OPLINE();
37361 
37362 	object = &EX(This);
37363 
37364 	if (IS_CV != IS_CONST) {
37365 		function_name = EX_VAR(opline->op2.var);
37366 	}
37367 
37368 	if (IS_CV != IS_CONST &&
37369 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
37370 		do {
37371 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
37372 				function_name = Z_REFVAL_P(function_name);
37373 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
37374 					break;
37375 				}
37376 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
37377 				ZVAL_UNDEFINED_OP2();
37378 				if (UNEXPECTED(EG(exception) != NULL)) {
37379 
37380 					HANDLE_EXCEPTION();
37381 				}
37382 			}
37383 			zend_throw_error(NULL, "Method name must be a string");
37384 
37385 
37386 			HANDLE_EXCEPTION();
37387 		} while (0);
37388 	}
37389 
37390 	if (IS_UNUSED == IS_UNUSED) {
37391 		obj = Z_OBJ_P(object);
37392 	} else {
37393 		do {
37394 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
37395 				obj = Z_OBJ_P(object);
37396 			} else {
37397 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
37398 					zend_reference *ref = Z_REF_P(object);
37399 
37400 					object = &ref->val;
37401 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
37402 						obj = Z_OBJ_P(object);
37403 						if (IS_UNUSED & IS_VAR) {
37404 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
37405 								efree_size(ref, sizeof(zend_reference));
37406 							} else {
37407 								Z_ADDREF_P(object);
37408 							}
37409 						}
37410 						break;
37411 					}
37412 				}
37413 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37414 					object = ZVAL_UNDEFINED_OP1();
37415 					if (UNEXPECTED(EG(exception) != NULL)) {
37416 						if (IS_CV != IS_CONST) {
37417 
37418 						}
37419 						HANDLE_EXCEPTION();
37420 					}
37421 				}
37422 				if (IS_CV == IS_CONST) {
37423 					function_name = EX_VAR(opline->op2.var);
37424 				}
37425 				zend_invalid_method_call(object, function_name);
37426 
37427 
37428 				HANDLE_EXCEPTION();
37429 			}
37430 		} while (0);
37431 	}
37432 
37433 	called_scope = obj->ce;
37434 
37435 	if (IS_CV == IS_CONST &&
37436 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
37437 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
37438 	} else {
37439 	    zend_object *orig_obj = obj;
37440 
37441 		if (IS_CV == IS_CONST) {
37442 			function_name = EX_VAR(opline->op2.var);
37443 		}
37444 
37445 		/* First, locate the function. */
37446 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
37447 		if (UNEXPECTED(fbc == NULL)) {
37448 			if (EXPECTED(!EG(exception))) {
37449 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
37450 			}
37451 
37452 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
37453 				zend_objects_store_del(orig_obj);
37454 			}
37455 			HANDLE_EXCEPTION();
37456 		}
37457 		if (IS_CV == IS_CONST &&
37458 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
37459 		    EXPECTED(obj == orig_obj)) {
37460 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
37461 		}
37462 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
37463 			GC_ADDREF(obj); /* For $this pointer */
37464 			if (GC_DELREF(orig_obj) == 0) {
37465 				zend_objects_store_del(orig_obj);
37466 			}
37467 		}
37468 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
37469 			init_func_run_time_cache(&fbc->op_array);
37470 		}
37471 	}
37472 
37473 	if (IS_CV != IS_CONST) {
37474 
37475 	}
37476 
37477 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
37478 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
37479 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
37480 			zend_objects_store_del(obj);
37481 			if (UNEXPECTED(EG(exception))) {
37482 				HANDLE_EXCEPTION();
37483 			}
37484 		}
37485 		/* call static method */
37486 		obj = (zend_object*)called_scope;
37487 		call_info = ZEND_CALL_NESTED_FUNCTION;
37488 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
37489 		if (IS_UNUSED == IS_CV) {
37490 			GC_ADDREF(obj); /* For $this pointer */
37491 		}
37492 		/* CV may be changed indirectly (e.g. when it's a reference) */
37493 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
37494 	}
37495 
37496 	call = zend_vm_stack_push_call_frame(call_info,
37497 		fbc, opline->extended_value, obj);
37498 	call->prev_execute_data = EX(call);
37499 	EX(call) = call;
37500 
37501 	ZEND_VM_NEXT_OPCODE();
37502 }
37503 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37504 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37505 {
37506 	USE_OPLINE
37507 	zval *function_name;
37508 	zend_class_entry *ce;
37509 	uint32_t call_info;
37510 	zend_function *fbc;
37511 	zend_execute_data *call;
37512 
37513 	SAVE_OPLINE();
37514 
37515 	if (IS_UNUSED == IS_CONST) {
37516 		/* no function found. try a static method in class */
37517 		ce = CACHED_PTR(opline->result.num);
37518 		if (UNEXPECTED(ce == NULL)) {
37519 			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);
37520 			if (UNEXPECTED(ce == NULL)) {
37521 
37522 				HANDLE_EXCEPTION();
37523 			}
37524 			if (IS_CV != IS_CONST) {
37525 				CACHE_PTR(opline->result.num, ce);
37526 			}
37527 		}
37528 	} else if (IS_UNUSED == IS_UNUSED) {
37529 		ce = zend_fetch_class(NULL, opline->op1.num);
37530 		if (UNEXPECTED(ce == NULL)) {
37531 
37532 			HANDLE_EXCEPTION();
37533 		}
37534 	} else {
37535 		ce = Z_CE_P(EX_VAR(opline->op1.var));
37536 	}
37537 
37538 	if (IS_UNUSED == IS_CONST &&
37539 	    IS_CV == IS_CONST &&
37540 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
37541 		/* nothing to do */
37542 	} else if (IS_UNUSED != IS_CONST &&
37543 	           IS_CV == IS_CONST &&
37544 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
37545 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
37546 	} else if (IS_CV != IS_UNUSED) {
37547 		function_name = EX_VAR(opline->op2.var);
37548 		if (IS_CV != IS_CONST) {
37549 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
37550 				do {
37551 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
37552 						function_name = Z_REFVAL_P(function_name);
37553 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
37554 							break;
37555 						}
37556 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
37557 						ZVAL_UNDEFINED_OP2();
37558 						if (UNEXPECTED(EG(exception) != NULL)) {
37559 							HANDLE_EXCEPTION();
37560 						}
37561 					}
37562 					zend_throw_error(NULL, "Method name must be a string");
37563 
37564 					HANDLE_EXCEPTION();
37565 				} while (0);
37566 			}
37567 		}
37568 
37569 		if (ce->get_static_method) {
37570 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
37571 		} else {
37572 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
37573 		}
37574 		if (UNEXPECTED(fbc == NULL)) {
37575 			if (EXPECTED(!EG(exception))) {
37576 				zend_undefined_method(ce, Z_STR_P(function_name));
37577 			}
37578 
37579 			HANDLE_EXCEPTION();
37580 		}
37581 		if (IS_CV == IS_CONST &&
37582 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
37583 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
37584 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
37585 		}
37586 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
37587 			init_func_run_time_cache(&fbc->op_array);
37588 		}
37589 		if (IS_CV != IS_CONST) {
37590 
37591 		}
37592 	} else {
37593 		if (UNEXPECTED(ce->constructor == NULL)) {
37594 			zend_throw_error(NULL, "Cannot call constructor");
37595 			HANDLE_EXCEPTION();
37596 		}
37597 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
37598 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
37599 			HANDLE_EXCEPTION();
37600 		}
37601 		fbc = ce->constructor;
37602 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
37603 			init_func_run_time_cache(&fbc->op_array);
37604 		}
37605 	}
37606 
37607 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
37608 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
37609 			ce = (zend_class_entry*)Z_OBJ(EX(This));
37610 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
37611 		} else {
37612 			zend_non_static_method_call(fbc);
37613 			HANDLE_EXCEPTION();
37614 		}
37615 	} else {
37616 		/* previous opcode is ZEND_FETCH_CLASS */
37617 		if (IS_UNUSED == IS_UNUSED
37618 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
37619 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
37620 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
37621 				ce = Z_OBJCE(EX(This));
37622 			} else {
37623 				ce = Z_CE(EX(This));
37624 			}
37625 		}
37626 		call_info = ZEND_CALL_NESTED_FUNCTION;
37627 	}
37628 
37629 	call = zend_vm_stack_push_call_frame(call_info,
37630 		fbc, opline->extended_value, ce);
37631 	call->prev_execute_data = EX(call);
37632 	EX(call) = call;
37633 
37634 	ZEND_VM_NEXT_OPCODE();
37635 }
37636 
ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37637 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37638 {
37639 	zval *array;
37640 	uint32_t size;
37641 	USE_OPLINE
37642 
37643 	array = EX_VAR(opline->result.var);
37644 	if (IS_UNUSED != IS_UNUSED) {
37645 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
37646 		ZVAL_ARR(array, zend_new_array(size));
37647 		/* Explicitly initialize array as not-packed if flag is set */
37648 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
37649 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
37650 		}
37651 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37652 	} else {
37653 		ZVAL_ARR(array, zend_new_array(0));
37654 		ZEND_VM_NEXT_OPCODE();
37655 	}
37656 }
37657 
ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37658 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37659 {
37660 	USE_OPLINE
37661 	zval *container;
37662 	zval *offset;
37663 	zend_string *name, *tmp_name;
37664 
37665 	SAVE_OPLINE();
37666 	container = &EX(This);
37667 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37668 
37669 	do {
37670 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
37671 			if (Z_ISREF_P(container)) {
37672 				container = Z_REFVAL_P(container);
37673 				if (Z_TYPE_P(container) != IS_OBJECT) {
37674 					if (IS_UNUSED == IS_CV
37675 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
37676 						ZVAL_UNDEFINED_OP1();
37677 					}
37678 					break;
37679 				}
37680 			} else {
37681 				break;
37682 			}
37683 		}
37684 		if (IS_CV == IS_CONST) {
37685 			name = Z_STR_P(offset);
37686 		} else {
37687 			name = zval_try_get_tmp_string(offset, &tmp_name);
37688 			if (UNEXPECTED(!name)) {
37689 				break;
37690 			}
37691 		}
37692 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
37693 		if (IS_CV != IS_CONST) {
37694 			zend_tmp_string_release(tmp_name);
37695 		}
37696 	} while (0);
37697 
37698 
37699 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37700 }
37701 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37702 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37703 {
37704 	USE_OPLINE
37705 	zval *container;
37706 	int result;
37707 	zval *offset;
37708 	zend_string *name, *tmp_name;
37709 
37710 	SAVE_OPLINE();
37711 	container = &EX(This);
37712 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37713 
37714 	if (IS_UNUSED == IS_CONST ||
37715 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
37716 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
37717 			container = Z_REFVAL_P(container);
37718 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
37719 				result = (opline->extended_value & ZEND_ISEMPTY);
37720 				goto isset_object_finish;
37721 			}
37722 		} else {
37723 			result = (opline->extended_value & ZEND_ISEMPTY);
37724 			goto isset_object_finish;
37725 		}
37726 	}
37727 
37728 	if (IS_CV == IS_CONST) {
37729 		name = Z_STR_P(offset);
37730 	} else {
37731 		name = zval_try_get_tmp_string(offset, &tmp_name);
37732 		if (UNEXPECTED(!name)) {
37733 			result = 0;
37734 			goto isset_object_finish;
37735 		}
37736 	}
37737 
37738 	result =
37739 		(opline->extended_value & ZEND_ISEMPTY) ^
37740 		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));
37741 
37742 	if (IS_CV != IS_CONST) {
37743 		zend_tmp_string_release(tmp_name);
37744 	}
37745 
37746 isset_object_finish:
37747 
37748 
37749 	ZEND_VM_SMART_BRANCH(result, 1);
37750 }
37751 
ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37752 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37753 {
37754 	USE_OPLINE
37755 
37756 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
37757 
37758 	SAVE_OPLINE();
37759 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
37760 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37761 	}
37762 
37763 	/* Destroy the previously yielded value */
37764 	zval_ptr_dtor(&generator->value);
37765 
37766 	/* Destroy the previously yielded key */
37767 	zval_ptr_dtor(&generator->key);
37768 
37769 	/* Set the new yielded value */
37770 	if (IS_UNUSED != IS_UNUSED) {
37771 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
37772 			/* Constants and temporary variables aren't yieldable by reference,
37773 			 * but we still allow them with a notice. */
37774 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
37775 				zval *value;
37776 
37777 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
37778 
37779 				value = NULL;
37780 				ZVAL_COPY_VALUE(&generator->value, value);
37781 				if (IS_UNUSED == IS_CONST) {
37782 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
37783 						Z_ADDREF(generator->value);
37784 					}
37785 				}
37786 			} else {
37787 				zval *value_ptr = NULL;
37788 
37789 				/* If a function call result is yielded and the function did
37790 				 * not return by reference we throw a notice. */
37791 				do {
37792 					if (IS_UNUSED == IS_VAR) {
37793 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
37794 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
37795 						 && !Z_ISREF_P(value_ptr)) {
37796 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
37797 							ZVAL_COPY(&generator->value, value_ptr);
37798 							break;
37799 						}
37800 					}
37801 					if (Z_ISREF_P(value_ptr)) {
37802 						Z_ADDREF_P(value_ptr);
37803 					} else {
37804 						ZVAL_MAKE_REF_EX(value_ptr, 2);
37805 					}
37806 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
37807 				} while (0);
37808 
37809 			}
37810 		} else {
37811 			zval *value = NULL;
37812 
37813 			/* Consts, temporary variables and references need copying */
37814 			if (IS_UNUSED == IS_CONST) {
37815 				ZVAL_COPY_VALUE(&generator->value, value);
37816 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
37817 					Z_ADDREF(generator->value);
37818 				}
37819 			} else if (IS_UNUSED == IS_TMP_VAR) {
37820 				ZVAL_COPY_VALUE(&generator->value, value);
37821             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
37822 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
37823 
37824 			} else {
37825 				ZVAL_COPY_VALUE(&generator->value, value);
37826 				if (IS_UNUSED == IS_CV) {
37827 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
37828 				}
37829 			}
37830 		}
37831 	} else {
37832 		/* If no value was specified yield null */
37833 		ZVAL_NULL(&generator->value);
37834 	}
37835 
37836 	/* Set the new yielded key */
37837 	if (IS_CV != IS_UNUSED) {
37838 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37839 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
37840 			key = Z_REFVAL_P(key);
37841 		}
37842 		ZVAL_COPY(&generator->key, key);
37843 
37844 		if (Z_TYPE(generator->key) == IS_LONG
37845 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
37846 		) {
37847 			generator->largest_used_integer_key = Z_LVAL(generator->key);
37848 		}
37849 	} else {
37850 		/* If no key was specified we use auto-increment keys */
37851 		generator->largest_used_integer_key++;
37852 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
37853 	}
37854 
37855 	if (RETURN_VALUE_USED(opline)) {
37856 		/* If the return value of yield is used set the send
37857 		 * target and initialize it to NULL */
37858 		generator->send_target = EX_VAR(opline->result.var);
37859 		ZVAL_NULL(generator->send_target);
37860 	} else {
37861 		generator->send_target = NULL;
37862 	}
37863 
37864 	/* We increment to the next op, so we are at the correct position when the
37865 	 * generator is resumed. */
37866 	ZEND_VM_INC_OPCODE();
37867 
37868 	/* The GOTO VM uses a local opline variable. We need to set the opline
37869 	 * variable in execute_data so we don't resume at an old position. */
37870 	SAVE_OPLINE();
37871 
37872 	ZEND_VM_RETURN();
37873 }
37874 
ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37875 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37876 {
37877 	USE_OPLINE
37878 	zval *val;
37879 
37880 	val = EX_VAR(opline->op1.var);
37881 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
37882 		ZVAL_FALSE(EX_VAR(opline->result.var));
37883 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
37884 		/* The result and op1 can be the same cv zval */
37885 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
37886 		ZVAL_TRUE(EX_VAR(opline->result.var));
37887 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
37888 			SAVE_OPLINE();
37889 			ZVAL_UNDEFINED_OP1();
37890 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37891 		}
37892 	} else {
37893 		SAVE_OPLINE();
37894 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
37895 
37896 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37897 	}
37898 	ZEND_VM_NEXT_OPCODE();
37899 }
37900 
zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)37901 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
37902 {
37903 	USE_OPLINE
37904 	zval *var_ptr;
37905 
37906 	var_ptr = EX_VAR(opline->op1.var);
37907 
37908 	SAVE_OPLINE();
37909 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
37910 		ZVAL_UNDEFINED_OP1();
37911 		ZVAL_NULL(var_ptr);
37912 	}
37913 
37914 	do {
37915 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
37916 			zend_reference *ref = Z_REF_P(var_ptr);
37917 			var_ptr = Z_REFVAL_P(var_ptr);
37918 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
37919 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
37920 				break;
37921 			}
37922 		}
37923 		increment_function(var_ptr);
37924 	} while (0);
37925 
37926 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37927 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
37928 	}
37929 
37930 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37931 }
37932 
ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37933 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37934 {
37935 	USE_OPLINE
37936 	zval *var_ptr;
37937 
37938 	var_ptr = EX_VAR(opline->op1.var);
37939 
37940 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
37941 		fast_long_increment_function(var_ptr);
37942 		if (UNEXPECTED(0)) {
37943 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
37944 		}
37945 		ZEND_VM_NEXT_OPCODE();
37946 	}
37947 
37948 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37949 }
37950 
ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37951 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37952 {
37953 	USE_OPLINE
37954 	zval *var_ptr;
37955 
37956 	var_ptr = EX_VAR(opline->op1.var);
37957 
37958 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
37959 		fast_long_increment_function(var_ptr);
37960 		if (UNEXPECTED(1)) {
37961 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
37962 		}
37963 		ZEND_VM_NEXT_OPCODE();
37964 	}
37965 
37966 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37967 }
37968 
zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)37969 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
37970 {
37971 	USE_OPLINE
37972 	zval *var_ptr;
37973 
37974 	var_ptr = EX_VAR(opline->op1.var);
37975 
37976 	SAVE_OPLINE();
37977 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
37978 		ZVAL_UNDEFINED_OP1();
37979 		ZVAL_NULL(var_ptr);
37980 	}
37981 
37982 	do {
37983 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
37984 			zend_reference *ref = Z_REF_P(var_ptr);
37985 			var_ptr = Z_REFVAL_P(var_ptr);
37986 
37987 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
37988 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
37989 				break;
37990 			}
37991 		}
37992 		decrement_function(var_ptr);
37993 	} while (0);
37994 
37995 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37996 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
37997 	}
37998 
37999 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38000 }
38001 
ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38002 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38003 {
38004 	USE_OPLINE
38005 	zval *var_ptr;
38006 
38007 	var_ptr = EX_VAR(opline->op1.var);
38008 
38009 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
38010 		fast_long_decrement_function(var_ptr);
38011 		if (UNEXPECTED(0)) {
38012 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
38013 		}
38014 		ZEND_VM_NEXT_OPCODE();
38015 	}
38016 
38017 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38018 }
38019 
ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38020 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38021 {
38022 	USE_OPLINE
38023 	zval *var_ptr;
38024 
38025 	var_ptr = EX_VAR(opline->op1.var);
38026 
38027 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
38028 		fast_long_decrement_function(var_ptr);
38029 		if (UNEXPECTED(1)) {
38030 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
38031 		}
38032 		ZEND_VM_NEXT_OPCODE();
38033 	}
38034 
38035 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38036 }
38037 
zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)38038 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
38039 {
38040 	USE_OPLINE
38041 	zval *var_ptr;
38042 
38043 	var_ptr = EX_VAR(opline->op1.var);
38044 
38045 	SAVE_OPLINE();
38046 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
38047 		ZVAL_UNDEFINED_OP1();
38048 		ZVAL_NULL(var_ptr);
38049 	}
38050 
38051 	do {
38052 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
38053 			zend_reference *ref = Z_REF_P(var_ptr);
38054 			var_ptr = Z_REFVAL_P(var_ptr);
38055 
38056 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
38057 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
38058 				break;
38059 			}
38060 		}
38061 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
38062 
38063 		increment_function(var_ptr);
38064 	} while (0);
38065 
38066 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38067 }
38068 
ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38069 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38070 {
38071 	USE_OPLINE
38072 	zval *var_ptr;
38073 
38074 	var_ptr = EX_VAR(opline->op1.var);
38075 
38076 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
38077 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38078 		fast_long_increment_function(var_ptr);
38079 		ZEND_VM_NEXT_OPCODE();
38080 	}
38081 
38082 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38083 }
38084 
zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)38085 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
38086 {
38087 	USE_OPLINE
38088 	zval *var_ptr;
38089 
38090 	var_ptr = EX_VAR(opline->op1.var);
38091 
38092 	SAVE_OPLINE();
38093 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
38094 		ZVAL_UNDEFINED_OP1();
38095 		ZVAL_NULL(var_ptr);
38096 	}
38097 
38098 	do {
38099 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
38100 			zend_reference *ref = Z_REF_P(var_ptr);
38101 			var_ptr = Z_REFVAL_P(var_ptr);
38102 
38103 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
38104 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
38105 				break;
38106 			}
38107 		}
38108 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
38109 
38110 		decrement_function(var_ptr);
38111 	} while (0);
38112 
38113 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38114 }
38115 
ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38116 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38117 {
38118 	USE_OPLINE
38119 	zval *var_ptr;
38120 
38121 	var_ptr = EX_VAR(opline->op1.var);
38122 
38123 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
38124 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38125 		fast_long_decrement_function(var_ptr);
38126 		ZEND_VM_NEXT_OPCODE();
38127 	}
38128 
38129 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38130 }
38131 
ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38132 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38133 {
38134 	USE_OPLINE
38135 	zval *z;
38136 
38137 	SAVE_OPLINE();
38138 	z = EX_VAR(opline->op1.var);
38139 
38140 	if (Z_TYPE_P(z) == IS_STRING) {
38141 		zend_string *str = Z_STR_P(z);
38142 
38143 		if (ZSTR_LEN(str) != 0) {
38144 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
38145 		}
38146 	} else {
38147 		zend_string *str = zval_get_string_func(z);
38148 
38149 		if (ZSTR_LEN(str) != 0) {
38150 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
38151 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
38152 			ZVAL_UNDEFINED_OP1();
38153 		}
38154 		zend_string_release_ex(str, 0);
38155 	}
38156 
38157 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38158 }
38159 
ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38160 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38161 {
38162 	USE_OPLINE
38163 	zval *val;
38164 	zend_uchar op1_type;
38165 
38166 	val = EX_VAR(opline->op1.var);
38167 
38168 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
38169 		ZEND_VM_NEXT_OPCODE();
38170 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
38171 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
38172 			SAVE_OPLINE();
38173 			ZVAL_UNDEFINED_OP1();
38174 			if (UNEXPECTED(EG(exception))) {
38175 				HANDLE_EXCEPTION();
38176 			}
38177 		}
38178 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38179 	}
38180 
38181 	SAVE_OPLINE();
38182 	op1_type = IS_CV;
38183 	if (i_zend_is_true(val)) {
38184 		opline++;
38185 	} else {
38186 		opline = OP_JMP_ADDR(opline, opline->op2);
38187 	}
38188 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
38189 		zval_ptr_dtor_nogc(val);
38190 	}
38191 	ZEND_VM_JMP(opline);
38192 }
38193 
ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38194 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38195 {
38196 	USE_OPLINE
38197 	zval *val;
38198 	zend_uchar op1_type;
38199 
38200 	val = EX_VAR(opline->op1.var);
38201 
38202 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
38203 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38204 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
38205 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
38206 			SAVE_OPLINE();
38207 			ZVAL_UNDEFINED_OP1();
38208 			if (UNEXPECTED(EG(exception))) {
38209 				HANDLE_EXCEPTION();
38210 			}
38211 		}
38212 		ZEND_VM_NEXT_OPCODE();
38213 	}
38214 
38215 	SAVE_OPLINE();
38216 	op1_type = IS_CV;
38217 	if (i_zend_is_true(val)) {
38218 		opline = OP_JMP_ADDR(opline, opline->op2);
38219 	} else {
38220 		opline++;
38221 	}
38222 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
38223 		zval_ptr_dtor_nogc(val);
38224 	}
38225 	ZEND_VM_JMP(opline);
38226 }
38227 
ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38228 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38229 {
38230 	USE_OPLINE
38231 	zval *val;
38232 	zend_uchar op1_type;
38233 
38234 	val = EX_VAR(opline->op1.var);
38235 
38236 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
38237 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
38238 		ZEND_VM_CONTINUE();
38239 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
38240 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
38241 			SAVE_OPLINE();
38242 			ZVAL_UNDEFINED_OP1();
38243 			if (UNEXPECTED(EG(exception))) {
38244 				HANDLE_EXCEPTION();
38245 			}
38246 		}
38247 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38248 	}
38249 
38250 	SAVE_OPLINE();
38251 	op1_type = IS_CV;
38252 	if (i_zend_is_true(val)) {
38253 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
38254 	} else {
38255 		opline = OP_JMP_ADDR(opline, opline->op2);
38256 	}
38257 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
38258 		zval_ptr_dtor_nogc(val);
38259 	}
38260 	ZEND_VM_JMP(opline);
38261 }
38262 
ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38263 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38264 {
38265 	USE_OPLINE
38266 	zval *val;
38267 	bool ret;
38268 
38269 	val = EX_VAR(opline->op1.var);
38270 
38271 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
38272 		ZVAL_TRUE(EX_VAR(opline->result.var));
38273 		ZEND_VM_NEXT_OPCODE();
38274 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
38275 		ZVAL_FALSE(EX_VAR(opline->result.var));
38276 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
38277 			SAVE_OPLINE();
38278 			ZVAL_UNDEFINED_OP1();
38279 			if (UNEXPECTED(EG(exception))) {
38280 				HANDLE_EXCEPTION();
38281 			}
38282 		}
38283 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38284 	}
38285 
38286 	SAVE_OPLINE();
38287 	ret = i_zend_is_true(val);
38288 
38289 	if (ret) {
38290 		ZVAL_TRUE(EX_VAR(opline->result.var));
38291 		opline++;
38292 	} else {
38293 		ZVAL_FALSE(EX_VAR(opline->result.var));
38294 		opline = OP_JMP_ADDR(opline, opline->op2);
38295 	}
38296 	ZEND_VM_JMP(opline);
38297 }
38298 
ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38299 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38300 {
38301 	USE_OPLINE
38302 	zval *val;
38303 	bool ret;
38304 
38305 	val = EX_VAR(opline->op1.var);
38306 
38307 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
38308 		ZVAL_TRUE(EX_VAR(opline->result.var));
38309 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38310 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
38311 		ZVAL_FALSE(EX_VAR(opline->result.var));
38312 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
38313 			SAVE_OPLINE();
38314 			ZVAL_UNDEFINED_OP1();
38315 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38316 		} else {
38317 			ZEND_VM_NEXT_OPCODE();
38318 		}
38319 	}
38320 
38321 	SAVE_OPLINE();
38322 	ret = i_zend_is_true(val);
38323 
38324 	if (ret) {
38325 		ZVAL_TRUE(EX_VAR(opline->result.var));
38326 		opline = OP_JMP_ADDR(opline, opline->op2);
38327 	} else {
38328 		ZVAL_FALSE(EX_VAR(opline->result.var));
38329 		opline++;
38330 	}
38331 	ZEND_VM_JMP(opline);
38332 }
38333 
ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38334 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38335 {
38336 	USE_OPLINE
38337 	zval *retval_ptr;
38338 	zval *return_value;
38339 
38340 	retval_ptr = EX_VAR(opline->op1.var);
38341 	return_value = EX(return_value);
38342 
38343 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
38344 		SAVE_OPLINE();
38345 		retval_ptr = ZVAL_UNDEFINED_OP1();
38346 		if (return_value) {
38347 			ZVAL_NULL(return_value);
38348 		}
38349 	} else if (!return_value) {
38350 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
38351 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
38352 				SAVE_OPLINE();
38353 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
38354 			}
38355 		}
38356 	} else {
38357 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
38358 			ZVAL_COPY_VALUE(return_value, retval_ptr);
38359 			if (IS_CV == IS_CONST) {
38360 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
38361 					Z_ADDREF_P(return_value);
38362 				}
38363 			}
38364 		} else if (IS_CV == IS_CV) {
38365 			do {
38366 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
38367 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
38368 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
38369 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
38370 							ZVAL_COPY_VALUE(return_value, retval_ptr);
38371 							if (GC_MAY_LEAK(ref)) {
38372 								SAVE_OPLINE();
38373 								gc_possible_root(ref);
38374 							}
38375 							ZVAL_NULL(retval_ptr);
38376 							break;
38377 						} else {
38378 							Z_ADDREF_P(retval_ptr);
38379 						}
38380 					} else {
38381 						retval_ptr = Z_REFVAL_P(retval_ptr);
38382 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
38383 							Z_ADDREF_P(retval_ptr);
38384 						}
38385 					}
38386 				}
38387 				ZVAL_COPY_VALUE(return_value, retval_ptr);
38388 			} while (0);
38389 		} else /* if (IS_CV == IS_VAR) */ {
38390 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
38391 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
38392 
38393 				retval_ptr = Z_REFVAL_P(retval_ptr);
38394 				ZVAL_COPY_VALUE(return_value, retval_ptr);
38395 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
38396 					efree_size(ref, sizeof(zend_reference));
38397 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
38398 					Z_ADDREF_P(retval_ptr);
38399 				}
38400 			} else {
38401 				ZVAL_COPY_VALUE(return_value, retval_ptr);
38402 			}
38403 		}
38404 	}
38405 
38406 
38407 
38408 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38409 }
38410 
ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38412 {
38413 	USE_OPLINE
38414 	zval *retval_ptr;
38415 	zval *return_value;
38416 
38417 	SAVE_OPLINE();
38418 
38419 	return_value = EX(return_value);
38420 
38421 	do {
38422 		if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
38423 		    (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
38424 			/* Not supposed to happen, but we'll allow it */
38425 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
38426 
38427 			retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38428 			if (!return_value) {
38429 
38430 			} else {
38431 				if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
38432 					ZVAL_COPY_VALUE(return_value, retval_ptr);
38433 					break;
38434 				}
38435 
38436 				ZVAL_NEW_REF(return_value, retval_ptr);
38437 				if (IS_CV == IS_CONST) {
38438 					Z_TRY_ADDREF_P(retval_ptr);
38439 				}
38440 			}
38441 			break;
38442 		}
38443 
38444 		retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
38445 
38446 		if (IS_CV == IS_VAR) {
38447 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
38448 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
38449 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
38450 				if (return_value) {
38451 					ZVAL_NEW_REF(return_value, retval_ptr);
38452 				} else {
38453 
38454 				}
38455 				break;
38456 			}
38457 		}
38458 
38459 		if (return_value) {
38460 			if (Z_ISREF_P(retval_ptr)) {
38461 				Z_ADDREF_P(retval_ptr);
38462 			} else {
38463 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
38464 			}
38465 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
38466 		}
38467 
38468 	} while (0);
38469 
38470 
38471 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38472 }
38473 
ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38474 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38475 {
38476 	USE_OPLINE
38477 	zval *retval;
38478 
38479 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
38480 
38481 	SAVE_OPLINE();
38482 	retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38483 
38484 	/* Copy return value into generator->retval */
38485 	if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
38486 		ZVAL_COPY_VALUE(&generator->retval, retval);
38487 		if (IS_CV == IS_CONST) {
38488 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
38489 				Z_ADDREF(generator->retval);
38490 			}
38491 		}
38492 	} else if (IS_CV == IS_CV) {
38493 		ZVAL_COPY_DEREF(&generator->retval, retval);
38494 	} else /* if (IS_CV == IS_VAR) */ {
38495 		if (UNEXPECTED(Z_ISREF_P(retval))) {
38496 			zend_refcounted *ref = Z_COUNTED_P(retval);
38497 
38498 			retval = Z_REFVAL_P(retval);
38499 			ZVAL_COPY_VALUE(&generator->retval, retval);
38500 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
38501 				efree_size(ref, sizeof(zend_reference));
38502 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
38503 				Z_ADDREF_P(retval);
38504 			}
38505 		} else {
38506 			ZVAL_COPY_VALUE(&generator->retval, retval);
38507 		}
38508 	}
38509 
38510 	EG(current_execute_data) = EX(prev_execute_data);
38511 
38512 	/* Close the generator to free up resources */
38513 	zend_generator_close(generator, 1);
38514 
38515 	/* Pass execution back to handling code */
38516 	ZEND_VM_RETURN();
38517 }
38518 
ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38519 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38520 {
38521 	USE_OPLINE
38522 	zval *value;
38523 
38524 	SAVE_OPLINE();
38525 	value = EX_VAR(opline->op1.var);
38526 
38527 	do {
38528 		if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
38529 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
38530 				value = Z_REFVAL_P(value);
38531 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
38532 					break;
38533 				}
38534 			}
38535 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
38536 				ZVAL_UNDEFINED_OP1();
38537 				if (UNEXPECTED(EG(exception) != NULL)) {
38538 					HANDLE_EXCEPTION();
38539 				}
38540 			}
38541 			zend_throw_error(NULL, "Can only throw objects");
38542 
38543 			HANDLE_EXCEPTION();
38544 		}
38545 	} while (0);
38546 
38547 	zend_exception_save();
38548 	Z_TRY_ADDREF_P(value);
38549 	zend_throw_exception_object(value);
38550 	zend_exception_restore();
38551 
38552 	HANDLE_EXCEPTION();
38553 }
38554 
ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38555 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38556 {
38557 	USE_OPLINE
38558 	zval *arg, *param;
38559 
38560 	SAVE_OPLINE();
38561 
38562 	arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38563 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
38564 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
38565 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
38566 		Z_TRY_ADDREF_P(arg);
38567 		ZVAL_NEW_REF(param, arg);
38568 	} else {
38569 		ZVAL_COPY(param, arg);
38570 	}
38571 
38572 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38573 }
38574 
ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38575 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38576 {
38577 	USE_OPLINE
38578 	zval *val;
38579 
38580 	val = EX_VAR(opline->op1.var);
38581 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
38582 		ZVAL_TRUE(EX_VAR(opline->result.var));
38583 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
38584 		/* The result and op1 can be the same cv zval */
38585 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
38586 		ZVAL_FALSE(EX_VAR(opline->result.var));
38587 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
38588 			SAVE_OPLINE();
38589 			ZVAL_UNDEFINED_OP1();
38590 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38591 		}
38592 	} else {
38593 		SAVE_OPLINE();
38594 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
38595 
38596 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38597 	}
38598 	ZEND_VM_NEXT_OPCODE();
38599 }
38600 
ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38601 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38602 {
38603 	USE_OPLINE
38604 	zval *obj;
38605 	zend_object *zobj;
38606 	zend_class_entry *ce, *scope;
38607 	zend_function *clone;
38608 	zend_object_clone_obj_t clone_call;
38609 
38610 	SAVE_OPLINE();
38611 	obj = EX_VAR(opline->op1.var);
38612 
38613 	do {
38614 		if (IS_CV == IS_CONST ||
38615 		    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
38616 		    if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
38617 				obj = Z_REFVAL_P(obj);
38618 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
38619 					break;
38620 				}
38621 			}
38622 			ZVAL_UNDEF(EX_VAR(opline->result.var));
38623 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
38624 				ZVAL_UNDEFINED_OP1();
38625 				if (UNEXPECTED(EG(exception) != NULL)) {
38626 					HANDLE_EXCEPTION();
38627 				}
38628 			}
38629 			zend_throw_error(NULL, "__clone method called on non-object");
38630 
38631 			HANDLE_EXCEPTION();
38632 		}
38633 	} while (0);
38634 
38635 	zobj = Z_OBJ_P(obj);
38636 	ce = zobj->ce;
38637 	clone = ce->clone;
38638 	clone_call = zobj->handlers->clone_obj;
38639 	if (UNEXPECTED(clone_call == NULL)) {
38640 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
38641 
38642 		ZVAL_UNDEF(EX_VAR(opline->result.var));
38643 		HANDLE_EXCEPTION();
38644 	}
38645 
38646 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
38647 		scope = EX(func)->op_array.scope;
38648 		if (clone->common.scope != scope) {
38649 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
38650 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
38651 				zend_wrong_clone_call(clone, scope);
38652 
38653 				ZVAL_UNDEF(EX_VAR(opline->result.var));
38654 				HANDLE_EXCEPTION();
38655 			}
38656 		}
38657 	}
38658 
38659 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
38660 
38661 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38662 }
38663 
ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38664 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38665 {
38666 	USE_OPLINE
38667 	zval *expr;
38668 	zval *result = EX_VAR(opline->result.var);
38669 	HashTable *ht;
38670 
38671 	SAVE_OPLINE();
38672 	expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38673 
38674 	switch (opline->extended_value) {
38675 		case IS_LONG:
38676 			ZVAL_LONG(result, zval_get_long(expr));
38677 			break;
38678 		case IS_DOUBLE:
38679 			ZVAL_DOUBLE(result, zval_get_double(expr));
38680 			break;
38681 		case IS_STRING:
38682 			ZVAL_STR(result, zval_get_string(expr));
38683 			break;
38684 		default:
38685 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
38686 			if (IS_CV & (IS_VAR|IS_CV)) {
38687 				ZVAL_DEREF(expr);
38688 			}
38689 			/* If value is already of correct type, return it directly */
38690 			if (Z_TYPE_P(expr) == opline->extended_value) {
38691 				ZVAL_COPY_VALUE(result, expr);
38692 				if (IS_CV == IS_CONST) {
38693 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
38694 				} else if (IS_CV != IS_TMP_VAR) {
38695 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
38696 				}
38697 
38698 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38699 			}
38700 
38701 			if (opline->extended_value == IS_ARRAY) {
38702 				if (IS_CV == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
38703 					if (Z_TYPE_P(expr) != IS_NULL) {
38704 						ZVAL_ARR(result, zend_new_array(1));
38705 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
38706 						if (IS_CV == IS_CONST) {
38707 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
38708 						} else {
38709 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
38710 						}
38711 					} else {
38712 						ZVAL_EMPTY_ARRAY(result);
38713 					}
38714 				} else if (Z_OBJ_P(expr)->properties == NULL
38715 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
38716 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
38717 					/* Optimized version without rebuilding properties HashTable */
38718 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
38719 				} else {
38720 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
38721 					if (obj_ht) {
38722 						/* fast copy */
38723 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
38724 							(Z_OBJCE_P(expr)->default_properties_count ||
38725 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
38726 							 GC_IS_RECURSIVE(obj_ht))));
38727 						zend_release_properties(obj_ht);
38728 					} else {
38729 						ZVAL_EMPTY_ARRAY(result);
38730 					}
38731 				}
38732 			} else {
38733 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
38734 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
38735 				if (Z_TYPE_P(expr) == IS_ARRAY) {
38736 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
38737 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
38738 						/* TODO: try not to duplicate immutable arrays as well ??? */
38739 						ht = zend_array_dup(ht);
38740 					}
38741 					Z_OBJ_P(result)->properties = ht;
38742 				} else if (Z_TYPE_P(expr) != IS_NULL) {
38743 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
38744 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
38745 					if (IS_CV == IS_CONST) {
38746 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
38747 					} else {
38748 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
38749 					}
38750 				}
38751 			}
38752 	}
38753 
38754 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38755 }
38756 
ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38757 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38758 {
38759 	USE_OPLINE
38760 	zend_op_array *new_op_array;
38761 	zval *inc_filename;
38762 
38763 	SAVE_OPLINE();
38764 	inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38765 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
38766 	if (UNEXPECTED(EG(exception) != NULL)) {
38767 
38768 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
38769 			destroy_op_array(new_op_array);
38770 			efree_size(new_op_array, sizeof(zend_op_array));
38771 		}
38772 		UNDEF_RESULT();
38773 		HANDLE_EXCEPTION();
38774 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
38775 		if (RETURN_VALUE_USED(opline)) {
38776 			ZVAL_TRUE(EX_VAR(opline->result.var));
38777 		}
38778 	} else if (EXPECTED(new_op_array != NULL)) {
38779 		zval *return_value = NULL;
38780 		zend_execute_data *call;
38781 
38782 		if (RETURN_VALUE_USED(opline)) {
38783 			return_value = EX_VAR(opline->result.var);
38784 		}
38785 
38786 		new_op_array->scope = EX(func)->op_array.scope;
38787 
38788 		call = zend_vm_stack_push_call_frame(
38789 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
38790 			(zend_function*)new_op_array, 0,
38791 			Z_PTR(EX(This)));
38792 
38793 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
38794 			call->symbol_table = EX(symbol_table);
38795 		} else {
38796 			call->symbol_table = zend_rebuild_symbol_table();
38797 		}
38798 
38799 		call->prev_execute_data = execute_data;
38800 		i_init_code_execute_data(call, new_op_array, return_value);
38801 
38802 		if (EXPECTED(zend_execute_ex == execute_ex)) {
38803 
38804 			ZEND_VM_ENTER();
38805 		} else {
38806 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
38807 			zend_execute_ex(call);
38808 			zend_vm_stack_free_call_frame(call);
38809 		}
38810 
38811 		zend_destroy_static_vars(new_op_array);
38812 		destroy_op_array(new_op_array);
38813 		efree_size(new_op_array, sizeof(zend_op_array));
38814 		if (UNEXPECTED(EG(exception) != NULL)) {
38815 			zend_rethrow_exception(execute_data);
38816 
38817 			UNDEF_RESULT();
38818 			HANDLE_EXCEPTION();
38819 		}
38820 	} else if (RETURN_VALUE_USED(opline)) {
38821 		ZVAL_FALSE(EX_VAR(opline->result.var));
38822 	}
38823 
38824 	ZEND_VM_NEXT_OPCODE();
38825 }
38826 
ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38827 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38828 {
38829 	USE_OPLINE
38830 	zval *array_ptr, *result;
38831 
38832 	SAVE_OPLINE();
38833 
38834 	array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38835 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
38836 		result = EX_VAR(opline->result.var);
38837 		ZVAL_COPY_VALUE(result, array_ptr);
38838 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
38839 			Z_ADDREF_P(array_ptr);
38840 		}
38841 		Z_FE_POS_P(result) = 0;
38842 
38843 		ZEND_VM_NEXT_OPCODE();
38844 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
38845 		zend_object *zobj = Z_OBJ_P(array_ptr);
38846 		if (!zobj->ce->get_iterator) {
38847 			HashTable *properties = zobj->properties;
38848 			if (properties) {
38849 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
38850 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
38851 						GC_DELREF(properties);
38852 					}
38853 					properties = zobj->properties = zend_array_dup(properties);
38854 				}
38855 			} else {
38856 				properties = zobj->handlers->get_properties(zobj);
38857 			}
38858 
38859 			result = EX_VAR(opline->result.var);
38860 			ZVAL_COPY_VALUE(result, array_ptr);
38861 			if (IS_CV != IS_TMP_VAR) {
38862 				Z_ADDREF_P(array_ptr);
38863 			}
38864 
38865 			if (zend_hash_num_elements(properties) == 0) {
38866 				Z_FE_ITER_P(result) = (uint32_t) -1;
38867 
38868 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38869 			}
38870 
38871 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
38872 
38873 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38874 		} else {
38875 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
38876 
38877 			if (UNEXPECTED(EG(exception))) {
38878 				HANDLE_EXCEPTION();
38879 			} else if (is_empty) {
38880 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38881 			} else {
38882 				ZEND_VM_NEXT_OPCODE();
38883 			}
38884 		}
38885 	} else {
38886 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
38887 		ZVAL_UNDEF(EX_VAR(opline->result.var));
38888 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
38889 
38890 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38891 	}
38892 }
38893 
ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38894 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38895 {
38896 	USE_OPLINE
38897 	zval *array_ptr, *array_ref;
38898 
38899 	SAVE_OPLINE();
38900 
38901 	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
38902 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38903 		if (Z_ISREF_P(array_ref)) {
38904 			array_ptr = Z_REFVAL_P(array_ref);
38905 		}
38906 	} else {
38907 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38908 	}
38909 
38910 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
38911 		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
38912 			if (array_ptr == array_ref) {
38913 				ZVAL_NEW_REF(array_ref, array_ref);
38914 				array_ptr = Z_REFVAL_P(array_ref);
38915 			}
38916 			Z_ADDREF_P(array_ref);
38917 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
38918 		} else {
38919 			array_ref = EX_VAR(opline->result.var);
38920 			ZVAL_NEW_REF(array_ref, array_ptr);
38921 			array_ptr = Z_REFVAL_P(array_ref);
38922 		}
38923 		if (IS_CV == IS_CONST) {
38924 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
38925 		} else {
38926 			SEPARATE_ARRAY(array_ptr);
38927 		}
38928 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
38929 
38930 		if (IS_CV == IS_VAR) {
38931 
38932 		}
38933 		ZEND_VM_NEXT_OPCODE();
38934 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
38935 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
38936 			HashTable *properties;
38937 			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
38938 				if (array_ptr == array_ref) {
38939 					ZVAL_NEW_REF(array_ref, array_ref);
38940 					array_ptr = Z_REFVAL_P(array_ref);
38941 				}
38942 				Z_ADDREF_P(array_ref);
38943 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
38944 			} else {
38945 				array_ptr = EX_VAR(opline->result.var);
38946 				ZVAL_COPY_VALUE(array_ptr, array_ref);
38947 			}
38948 			if (Z_OBJ_P(array_ptr)->properties
38949 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
38950 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
38951 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
38952 				}
38953 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
38954 			}
38955 
38956 			properties = Z_OBJPROP_P(array_ptr);
38957 			if (zend_hash_num_elements(properties) == 0) {
38958 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
38959 
38960 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38961 			}
38962 
38963 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
38964 
38965 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38966 		} else {
38967 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
38968 
38969 			if (IS_CV == IS_VAR) {
38970 
38971 			} else {
38972 
38973 			}
38974 			if (UNEXPECTED(EG(exception))) {
38975 				HANDLE_EXCEPTION();
38976 			} else if (is_empty) {
38977 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38978 			} else {
38979 				ZEND_VM_NEXT_OPCODE();
38980 			}
38981 		}
38982 	} else {
38983 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
38984 		ZVAL_UNDEF(EX_VAR(opline->result.var));
38985 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
38986 		if (IS_CV == IS_VAR) {
38987 
38988 		} else {
38989 
38990 		}
38991 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38992 	}
38993 }
38994 
ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38995 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38996 {
38997 	USE_OPLINE
38998 	zval *value;
38999 	zend_reference *ref = NULL;
39000 	bool ret;
39001 
39002 	SAVE_OPLINE();
39003 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39004 
39005 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
39006 		if (IS_CV == IS_VAR) {
39007 			ref = Z_REF_P(value);
39008 		}
39009 		value = Z_REFVAL_P(value);
39010 	}
39011 
39012 	ret = i_zend_is_true(value);
39013 
39014 	if (UNEXPECTED(EG(exception))) {
39015 
39016 		ZVAL_UNDEF(EX_VAR(opline->result.var));
39017 		HANDLE_EXCEPTION();
39018 	}
39019 
39020 	if (ret) {
39021 		zval *result = EX_VAR(opline->result.var);
39022 
39023 		ZVAL_COPY_VALUE(result, value);
39024 		if (IS_CV == IS_CONST) {
39025 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
39026 		} else if (IS_CV == IS_CV) {
39027 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
39028 		} else if (IS_CV == IS_VAR && ref) {
39029 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
39030 				efree_size(ref, sizeof(zend_reference));
39031 			} else if (Z_OPT_REFCOUNTED_P(result)) {
39032 				Z_ADDREF_P(result);
39033 			}
39034 		}
39035 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39036 	}
39037 
39038 	ZEND_VM_NEXT_OPCODE();
39039 }
39040 
ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39041 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39042 {
39043 	USE_OPLINE
39044 	zval *value;
39045 	zend_reference *ref = NULL;
39046 
39047 	SAVE_OPLINE();
39048 	value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
39049 
39050 	if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
39051 		if (IS_CV & IS_VAR) {
39052 			ref = Z_REF_P(value);
39053 		}
39054 		value = Z_REFVAL_P(value);
39055 	}
39056 
39057 	if (Z_TYPE_P(value) > IS_NULL) {
39058 		zval *result = EX_VAR(opline->result.var);
39059 		ZVAL_COPY_VALUE(result, value);
39060 		if (IS_CV == IS_CONST) {
39061 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
39062 		} else if (IS_CV == IS_CV) {
39063 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
39064 		} else if ((IS_CV & IS_VAR) && ref) {
39065 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
39066 				efree_size(ref, sizeof(zend_reference));
39067 			} else if (Z_OPT_REFCOUNTED_P(result)) {
39068 				Z_ADDREF_P(result);
39069 			}
39070 		}
39071 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39072 	}
39073 
39074 	if ((IS_CV & IS_VAR) && ref) {
39075 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
39076 			efree_size(ref, sizeof(zend_reference));
39077 		}
39078 	}
39079 	ZEND_VM_NEXT_OPCODE();
39080 }
39081 
ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39082 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39083 {
39084 	USE_OPLINE
39085 	zval *val, *result;
39086 
39087 	val = EX_VAR(opline->op1.var);
39088 
39089 	if (Z_TYPE_P(val) > IS_NULL) {
39090 		do {
39091 			if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
39092 				val = Z_REFVAL_P(val);
39093 				if (Z_TYPE_P(val) <= IS_NULL) {
39094 
39095 					break;
39096 				}
39097 			}
39098 			ZEND_VM_NEXT_OPCODE();
39099 		} while (0);
39100 	}
39101 
39102 	result = EX_VAR(opline->result.var);
39103 	if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
39104 		ZVAL_NULL(result);
39105 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
39106 			SAVE_OPLINE();
39107 			ZVAL_UNDEFINED_OP1();
39108 			if (UNEXPECTED(EG(exception) != NULL)) {
39109 				HANDLE_EXCEPTION();
39110 			}
39111 		}
39112 	} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
39113 		ZVAL_FALSE(result);
39114 	} else {
39115 		ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
39116 		ZVAL_TRUE(result);
39117 	}
39118 
39119 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39120 }
39121 
ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39122 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39123 {
39124 	USE_OPLINE
39125 	zval *value;
39126 	zval *result = EX_VAR(opline->result.var);
39127 
39128 	value = EX_VAR(opline->op1.var);
39129 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
39130 		SAVE_OPLINE();
39131 		ZVAL_UNDEFINED_OP1();
39132 		ZVAL_NULL(result);
39133 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39134 	}
39135 
39136 	if (IS_CV == IS_CV) {
39137 		ZVAL_COPY_DEREF(result, value);
39138 	} else if (IS_CV == IS_VAR) {
39139 		if (UNEXPECTED(Z_ISREF_P(value))) {
39140 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
39141 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
39142 				efree_size(Z_REF_P(value), sizeof(zend_reference));
39143 			} else if (Z_OPT_REFCOUNTED_P(result)) {
39144 				Z_ADDREF_P(result);
39145 			}
39146 		} else {
39147 			ZVAL_COPY_VALUE(result, value);
39148 		}
39149 	} else {
39150 		ZVAL_COPY_VALUE(result, value);
39151 		if (IS_CV == IS_CONST) {
39152 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
39153 				Z_ADDREF_P(result);
39154 			}
39155 		}
39156 	}
39157 	ZEND_VM_NEXT_OPCODE();
39158 }
39159 
ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39160 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39161 {
39162 	USE_OPLINE
39163 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
39164 	zval *val;
39165 
39166 	SAVE_OPLINE();
39167 	val = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39168 
39169 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
39170 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
39171 
39172 		UNDEF_RESULT();
39173 		HANDLE_EXCEPTION();
39174 	}
39175 
39176 yield_from_try_again:
39177 	if (Z_TYPE_P(val) == IS_ARRAY) {
39178 		ZVAL_COPY_VALUE(&generator->values, val);
39179 		if (Z_OPT_REFCOUNTED_P(val)) {
39180 			Z_ADDREF_P(val);
39181 		}
39182 		Z_FE_POS(generator->values) = 0;
39183 
39184 	} else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
39185 		zend_class_entry *ce = Z_OBJCE_P(val);
39186 		if (ce == zend_ce_generator) {
39187 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
39188 
39189 			Z_ADDREF_P(val);
39190 
39191 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
39192 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
39193 				zval_ptr_dtor(val);
39194 				UNDEF_RESULT();
39195 				HANDLE_EXCEPTION();
39196 			} else if (Z_ISUNDEF(new_gen->retval)) {
39197 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
39198 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
39199 					zval_ptr_dtor(val);
39200 					UNDEF_RESULT();
39201 					HANDLE_EXCEPTION();
39202 				} else {
39203 					zend_generator_yield_from(generator, new_gen);
39204 				}
39205 			} else {
39206 				if (RETURN_VALUE_USED(opline)) {
39207 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
39208 				}
39209 				ZEND_VM_NEXT_OPCODE();
39210 			}
39211 		} else {
39212 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
39213 
39214 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
39215 				if (!EG(exception)) {
39216 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
39217 				}
39218 				UNDEF_RESULT();
39219 				HANDLE_EXCEPTION();
39220 			}
39221 
39222 			iter->index = 0;
39223 			if (iter->funcs->rewind) {
39224 				iter->funcs->rewind(iter);
39225 				if (UNEXPECTED(EG(exception) != NULL)) {
39226 					OBJ_RELEASE(&iter->std);
39227 					UNDEF_RESULT();
39228 					HANDLE_EXCEPTION();
39229 				}
39230 			}
39231 
39232 			ZVAL_OBJ(&generator->values, &iter->std);
39233 		}
39234 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
39235 		val = Z_REFVAL_P(val);
39236 		goto yield_from_try_again;
39237 	} else {
39238 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
39239 
39240 		UNDEF_RESULT();
39241 		HANDLE_EXCEPTION();
39242 	}
39243 
39244 	/* This is the default return value
39245 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
39246 	if (RETURN_VALUE_USED(opline)) {
39247 		ZVAL_NULL(EX_VAR(opline->result.var));
39248 	}
39249 
39250 	/* This generator has no send target (though the generator we delegate to might have one) */
39251 	generator->send_target = NULL;
39252 
39253 	/* We increment to the next op, so we are at the correct position when the
39254 	 * generator is resumed. */
39255 	ZEND_VM_INC_OPCODE();
39256 
39257 	/* The GOTO VM uses a local opline variable. We need to set the opline
39258 	 * variable in execute_data so we don't resume at an old position. */
39259 	SAVE_OPLINE();
39260 
39261 	ZEND_VM_RETURN();
39262 }
39263 
ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39264 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39265 {
39266 	USE_OPLINE
39267 	zval *value;
39268 
39269 	value = EX_VAR(opline->op1.var);
39270 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
39271 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
39272 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39273 			zval_ptr_dtor_str(value);
39274 		}
39275 		ZEND_VM_NEXT_OPCODE();
39276 	} else {
39277 		bool strict;
39278 
39279 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
39280 			value = Z_REFVAL_P(value);
39281 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
39282 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
39283 
39284 				ZEND_VM_NEXT_OPCODE();
39285 			}
39286 		}
39287 
39288 		SAVE_OPLINE();
39289 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
39290 			value = ZVAL_UNDEFINED_OP1();
39291 		}
39292 		strict = EX_USES_STRICT_TYPES();
39293 		do {
39294 			if (EXPECTED(!strict)) {
39295 				zend_string *str;
39296 				zval tmp;
39297 
39298 				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
39299 					zend_error(E_DEPRECATED,
39300 						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
39301 					ZVAL_LONG(EX_VAR(opline->result.var), 0);
39302 					if (UNEXPECTED(EG(exception))) {
39303 						HANDLE_EXCEPTION();
39304 					}
39305 					break;
39306 				}
39307 
39308 				ZVAL_COPY(&tmp, value);
39309 				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
39310 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
39311 					zval_ptr_dtor(&tmp);
39312 					break;
39313 				}
39314 				zval_ptr_dtor(&tmp);
39315 			}
39316 			if (!EG(exception)) {
39317 				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_type_name(value));
39318 			}
39319 			ZVAL_UNDEF(EX_VAR(opline->result.var));
39320 		} while (0);
39321 	}
39322 
39323 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39324 }
39325 
ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39326 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39327 {
39328 	USE_OPLINE
39329 	zval *value;
39330 	int result = 0;
39331 
39332 	value = EX_VAR(opline->op1.var);
39333 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
39334 type_check_resource:
39335 		if (opline->extended_value != MAY_BE_RESOURCE
39336 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
39337 			result = 1;
39338 		}
39339 	} else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
39340 		value = Z_REFVAL_P(value);
39341 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
39342 			goto type_check_resource;
39343 		}
39344 	} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
39345 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
39346 		SAVE_OPLINE();
39347 		ZVAL_UNDEFINED_OP1();
39348 		if (UNEXPECTED(EG(exception))) {
39349 			ZVAL_UNDEF(EX_VAR(opline->result.var));
39350 			HANDLE_EXCEPTION();
39351 		}
39352 	}
39353 	if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39354 		SAVE_OPLINE();
39355 
39356 		ZEND_VM_SMART_BRANCH(result, 1);
39357 	} else {
39358 		ZEND_VM_SMART_BRANCH(result, 0);
39359 	}
39360 }
39361 
ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39362 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39363 {
39364 	uint32_t fetch_type;
39365 	zend_class_entry *called_scope, *scope;
39366 	USE_OPLINE
39367 
39368 	if (IS_CV != IS_UNUSED) {
39369 		SAVE_OPLINE();
39370 		zval *op = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39371 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
39372 			ZVAL_DEREF(op);
39373 			if (Z_TYPE_P(op) != IS_OBJECT) {
39374 				zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
39375 				ZVAL_UNDEF(EX_VAR(opline->result.var));
39376 
39377 				HANDLE_EXCEPTION();
39378 			}
39379 		}
39380 
39381 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
39382 
39383 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39384 	}
39385 
39386 	fetch_type = opline->op1.num;
39387 	scope = EX(func)->op_array.scope;
39388 	if (UNEXPECTED(scope == NULL)) {
39389 		SAVE_OPLINE();
39390 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
39391 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
39392 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
39393 		ZVAL_UNDEF(EX_VAR(opline->result.var));
39394 		HANDLE_EXCEPTION();
39395 	}
39396 
39397 	switch (fetch_type) {
39398 		case ZEND_FETCH_CLASS_SELF:
39399 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
39400 			break;
39401 		case ZEND_FETCH_CLASS_PARENT:
39402 			if (UNEXPECTED(scope->parent == NULL)) {
39403 				SAVE_OPLINE();
39404 				zend_throw_error(NULL,
39405 					"Cannot use \"parent\" when current class scope has no parent");
39406 				ZVAL_UNDEF(EX_VAR(opline->result.var));
39407 				HANDLE_EXCEPTION();
39408 			}
39409 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
39410 			break;
39411 		case ZEND_FETCH_CLASS_STATIC:
39412 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
39413 				called_scope = Z_OBJCE(EX(This));
39414 			} else {
39415 				called_scope = Z_CE(EX(This));
39416 			}
39417 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
39418 			break;
39419 		EMPTY_SWITCH_DEFAULT_CASE()
39420 	}
39421 	ZEND_VM_NEXT_OPCODE();
39422 }
39423 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39424 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)
39425 {
39426 	USE_OPLINE
39427 	zval *var_ptr;
39428 
39429 	var_ptr = EX_VAR(opline->op1.var);
39430 	Z_LVAL_P(var_ptr)++;
39431 	if (UNEXPECTED(0)) {
39432 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39433 	}
39434 	ZEND_VM_NEXT_OPCODE();
39435 }
39436 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39437 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)
39438 {
39439 	USE_OPLINE
39440 	zval *var_ptr;
39441 
39442 	var_ptr = EX_VAR(opline->op1.var);
39443 	Z_LVAL_P(var_ptr)++;
39444 	if (UNEXPECTED(1)) {
39445 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39446 	}
39447 	ZEND_VM_NEXT_OPCODE();
39448 }
39449 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39450 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39451 {
39452 	USE_OPLINE
39453 	zval *var_ptr;
39454 
39455 	var_ptr = EX_VAR(opline->op1.var);
39456 	fast_long_increment_function(var_ptr);
39457 	if (UNEXPECTED(0)) {
39458 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39459 	}
39460 	ZEND_VM_NEXT_OPCODE();
39461 }
39462 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39463 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39464 {
39465 	USE_OPLINE
39466 	zval *var_ptr;
39467 
39468 	var_ptr = EX_VAR(opline->op1.var);
39469 	fast_long_increment_function(var_ptr);
39470 	if (UNEXPECTED(1)) {
39471 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39472 	}
39473 	ZEND_VM_NEXT_OPCODE();
39474 }
39475 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39476 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)
39477 {
39478 	USE_OPLINE
39479 	zval *var_ptr;
39480 
39481 	var_ptr = EX_VAR(opline->op1.var);
39482 	Z_LVAL_P(var_ptr)--;
39483 	if (UNEXPECTED(0)) {
39484 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39485 	}
39486 	ZEND_VM_NEXT_OPCODE();
39487 }
39488 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39489 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)
39490 {
39491 	USE_OPLINE
39492 	zval *var_ptr;
39493 
39494 	var_ptr = EX_VAR(opline->op1.var);
39495 	Z_LVAL_P(var_ptr)--;
39496 	if (UNEXPECTED(1)) {
39497 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39498 	}
39499 	ZEND_VM_NEXT_OPCODE();
39500 }
39501 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39502 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39503 {
39504 	USE_OPLINE
39505 	zval *var_ptr;
39506 
39507 	var_ptr = EX_VAR(opline->op1.var);
39508 	fast_long_decrement_function(var_ptr);
39509 	if (UNEXPECTED(0)) {
39510 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39511 	}
39512 	ZEND_VM_NEXT_OPCODE();
39513 }
39514 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39515 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39516 {
39517 	USE_OPLINE
39518 	zval *var_ptr;
39519 
39520 	var_ptr = EX_VAR(opline->op1.var);
39521 	fast_long_decrement_function(var_ptr);
39522 	if (UNEXPECTED(1)) {
39523 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39524 	}
39525 	ZEND_VM_NEXT_OPCODE();
39526 }
39527 
ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39528 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39529 {
39530 	USE_OPLINE
39531 	zval *var_ptr;
39532 
39533 	var_ptr = EX_VAR(opline->op1.var);
39534 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39535 	Z_LVAL_P(var_ptr)++;
39536 	ZEND_VM_NEXT_OPCODE();
39537 }
39538 
ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39539 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39540 {
39541 	USE_OPLINE
39542 	zval *var_ptr;
39543 
39544 	var_ptr = EX_VAR(opline->op1.var);
39545 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39546 	fast_long_increment_function(var_ptr);
39547 	ZEND_VM_NEXT_OPCODE();
39548 }
39549 
ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39550 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39551 {
39552 	USE_OPLINE
39553 	zval *var_ptr;
39554 
39555 	var_ptr = EX_VAR(opline->op1.var);
39556 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39557 	Z_LVAL_P(var_ptr)--;
39558 	ZEND_VM_NEXT_OPCODE();
39559 }
39560 
ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39561 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39562 {
39563 	USE_OPLINE
39564 	zval *var_ptr;
39565 
39566 	var_ptr = EX_VAR(opline->op1.var);
39567 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39568 	fast_long_decrement_function(var_ptr);
39569 	ZEND_VM_NEXT_OPCODE();
39570 }
39571 
ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39572 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39573 {
39574 	USE_OPLINE
39575 	zval *varptr, *arg;
39576 
39577 	varptr = EX_VAR(opline->op1.var);
39578 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
39579 
39580 	if (IS_CV == IS_CV) {
39581 		ZVAL_COPY(arg, varptr);
39582 	} else /* if (IS_CV == IS_VAR) */ {
39583 		ZVAL_COPY_VALUE(arg, varptr);
39584 	}
39585 
39586 	ZEND_VM_NEXT_OPCODE();
39587 }
39588 
ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39589 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39590 {
39591 	USE_OPLINE
39592 	zval *op1, *op2;
39593 
39594 	SAVE_OPLINE();
39595 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39596 	op2 = RT_CONSTANT(opline, opline->op2);
39597 	div_function(EX_VAR(opline->result.var), op1, op2);
39598 
39599 
39600 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39601 }
39602 
ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39603 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39604 {
39605 	USE_OPLINE
39606 	zval *op1, *op2;
39607 
39608 	SAVE_OPLINE();
39609 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39610 	op2 = RT_CONSTANT(opline, opline->op2);
39611 	pow_function(EX_VAR(opline->result.var), op1, op2);
39612 
39613 
39614 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39615 }
39616 
ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39617 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39618 {
39619 	USE_OPLINE
39620 	zval *op1, *op2;
39621 
39622 	op1 = EX_VAR(opline->op1.var);
39623 	op2 = RT_CONSTANT(opline, opline->op2);
39624 
39625 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
39626 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
39627 		zend_string *op1_str = Z_STR_P(op1);
39628 		zend_string *op2_str = Z_STR_P(op2);
39629 		zend_string *str;
39630 
39631 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
39632 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
39633 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
39634 			} else {
39635 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
39636 			}
39637 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39638 				zend_string_release_ex(op1_str, 0);
39639 			}
39640 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
39641 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
39642 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
39643 			} else {
39644 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
39645 			}
39646 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39647 				zend_string_release_ex(op2_str, 0);
39648 			}
39649 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
39650 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
39651 		    size_t len = ZSTR_LEN(op1_str);
39652 
39653 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
39654 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
39655 			}
39656 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
39657 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
39658 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
39659 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39660 				zend_string_release_ex(op2_str, 0);
39661 			}
39662 		} else {
39663 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
39664 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
39665 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
39666 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
39667 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39668 				zend_string_release_ex(op1_str, 0);
39669 			}
39670 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39671 				zend_string_release_ex(op2_str, 0);
39672 			}
39673 		}
39674 		ZEND_VM_NEXT_OPCODE();
39675 	} else {
39676 		SAVE_OPLINE();
39677 
39678 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
39679 			op1 = ZVAL_UNDEFINED_OP1();
39680 		}
39681 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
39682 			op2 = ZVAL_UNDEFINED_OP2();
39683 		}
39684 		concat_function(EX_VAR(opline->result.var), op1, op2);
39685 
39686 
39687 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39688 	}
39689 }
39690 
ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39691 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39692 {
39693 	USE_OPLINE
39694 	zval *op1, *op2;
39695 	bool result;
39696 
39697 	SAVE_OPLINE();
39698 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39699 	op2 = RT_CONSTANT(opline, opline->op2);
39700 	result = fast_is_identical_function(op1, op2);
39701 
39702 
39703 	ZEND_VM_SMART_BRANCH(result, 1);
39704 }
39705 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39706 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39707 {
39708 	USE_OPLINE
39709 	zval *op1, *op2;
39710 	bool result;
39711 
39712 	SAVE_OPLINE();
39713 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39714 	op2 = RT_CONSTANT(opline, opline->op2);
39715 	result = fast_is_not_identical_function(op1, op2);
39716 
39717 
39718 	ZEND_VM_SMART_BRANCH(result, 1);
39719 }
39720 
ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39721 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39722 {
39723 	USE_OPLINE
39724 	zval *op1, *op2;
39725 	double d1, d2;
39726 
39727 	op1 = EX_VAR(opline->op1.var);
39728 	op2 = RT_CONSTANT(opline, opline->op2);
39729 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39730 		/* pass */
39731 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39732 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39733 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
39734 is_equal_true:
39735 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
39736 			} else {
39737 is_equal_false:
39738 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
39739 			}
39740 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39741 			d1 = (double)Z_LVAL_P(op1);
39742 			d2 = Z_DVAL_P(op2);
39743 			goto is_equal_double;
39744 		}
39745 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39746 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39747 			d1 = Z_DVAL_P(op1);
39748 			d2 = Z_DVAL_P(op2);
39749 is_equal_double:
39750 			if (d1 == d2) {
39751 				goto is_equal_true;
39752 			} else {
39753 				goto is_equal_false;
39754 			}
39755 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39756 			d1 = Z_DVAL_P(op1);
39757 			d2 = (double)Z_LVAL_P(op2);
39758 			goto is_equal_double;
39759 		}
39760 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39761 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39762 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39763 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39764 				zval_ptr_dtor_str(op1);
39765 			}
39766 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39767 				zval_ptr_dtor_str(op2);
39768 			}
39769 			if (result) {
39770 				goto is_equal_true;
39771 			} else {
39772 				goto is_equal_false;
39773 			}
39774 		}
39775 	}
39776 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39777 }
39778 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39779 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39780 {
39781 	USE_OPLINE
39782 	zval *op1, *op2;
39783 	double d1, d2;
39784 
39785 	op1 = EX_VAR(opline->op1.var);
39786 	op2 = RT_CONSTANT(opline, opline->op2);
39787 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39788 		/* pass */
39789 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39790 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39791 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
39792 is_equal_true:
39793 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
39794 			} else {
39795 is_equal_false:
39796 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
39797 			}
39798 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39799 			d1 = (double)Z_LVAL_P(op1);
39800 			d2 = Z_DVAL_P(op2);
39801 			goto is_equal_double;
39802 		}
39803 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39804 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39805 			d1 = Z_DVAL_P(op1);
39806 			d2 = Z_DVAL_P(op2);
39807 is_equal_double:
39808 			if (d1 == d2) {
39809 				goto is_equal_true;
39810 			} else {
39811 				goto is_equal_false;
39812 			}
39813 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39814 			d1 = Z_DVAL_P(op1);
39815 			d2 = (double)Z_LVAL_P(op2);
39816 			goto is_equal_double;
39817 		}
39818 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39819 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39820 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39821 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39822 				zval_ptr_dtor_str(op1);
39823 			}
39824 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39825 				zval_ptr_dtor_str(op2);
39826 			}
39827 			if (result) {
39828 				goto is_equal_true;
39829 			} else {
39830 				goto is_equal_false;
39831 			}
39832 		}
39833 	}
39834 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39835 }
39836 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39837 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39838 {
39839 	USE_OPLINE
39840 	zval *op1, *op2;
39841 	double d1, d2;
39842 
39843 	op1 = EX_VAR(opline->op1.var);
39844 	op2 = RT_CONSTANT(opline, opline->op2);
39845 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39846 		/* pass */
39847 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39848 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39849 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
39850 is_equal_true:
39851 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
39852 			} else {
39853 is_equal_false:
39854 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
39855 			}
39856 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39857 			d1 = (double)Z_LVAL_P(op1);
39858 			d2 = Z_DVAL_P(op2);
39859 			goto is_equal_double;
39860 		}
39861 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39862 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39863 			d1 = Z_DVAL_P(op1);
39864 			d2 = Z_DVAL_P(op2);
39865 is_equal_double:
39866 			if (d1 == d2) {
39867 				goto is_equal_true;
39868 			} else {
39869 				goto is_equal_false;
39870 			}
39871 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39872 			d1 = Z_DVAL_P(op1);
39873 			d2 = (double)Z_LVAL_P(op2);
39874 			goto is_equal_double;
39875 		}
39876 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39877 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39878 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39879 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39880 				zval_ptr_dtor_str(op1);
39881 			}
39882 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39883 				zval_ptr_dtor_str(op2);
39884 			}
39885 			if (result) {
39886 				goto is_equal_true;
39887 			} else {
39888 				goto is_equal_false;
39889 			}
39890 		}
39891 	}
39892 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39893 }
39894 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39895 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39896 {
39897 	USE_OPLINE
39898 	zval *op1, *op2;
39899 	double d1, d2;
39900 
39901 	op1 = EX_VAR(opline->op1.var);
39902 	op2 = RT_CONSTANT(opline, opline->op2);
39903 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39904 		/* pass */
39905 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39906 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39907 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
39908 is_not_equal_true:
39909 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
39910 			} else {
39911 is_not_equal_false:
39912 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
39913 			}
39914 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39915 			d1 = (double)Z_LVAL_P(op1);
39916 			d2 = Z_DVAL_P(op2);
39917 			goto is_not_equal_double;
39918 		}
39919 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39920 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39921 			d1 = Z_DVAL_P(op1);
39922 			d2 = Z_DVAL_P(op2);
39923 is_not_equal_double:
39924 			if (d1 != d2) {
39925 				goto is_not_equal_true;
39926 			} else {
39927 				goto is_not_equal_false;
39928 			}
39929 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39930 			d1 = Z_DVAL_P(op1);
39931 			d2 = (double)Z_LVAL_P(op2);
39932 			goto is_not_equal_double;
39933 		}
39934 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39935 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39936 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39937 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39938 				zval_ptr_dtor_str(op1);
39939 			}
39940 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39941 				zval_ptr_dtor_str(op2);
39942 			}
39943 			if (!result) {
39944 				goto is_not_equal_true;
39945 			} else {
39946 				goto is_not_equal_false;
39947 			}
39948 		}
39949 	}
39950 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39951 }
39952 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39953 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39954 {
39955 	USE_OPLINE
39956 	zval *op1, *op2;
39957 	double d1, d2;
39958 
39959 	op1 = EX_VAR(opline->op1.var);
39960 	op2 = RT_CONSTANT(opline, opline->op2);
39961 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39962 		/* pass */
39963 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39964 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39965 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
39966 is_not_equal_true:
39967 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
39968 			} else {
39969 is_not_equal_false:
39970 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
39971 			}
39972 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39973 			d1 = (double)Z_LVAL_P(op1);
39974 			d2 = Z_DVAL_P(op2);
39975 			goto is_not_equal_double;
39976 		}
39977 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39978 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39979 			d1 = Z_DVAL_P(op1);
39980 			d2 = Z_DVAL_P(op2);
39981 is_not_equal_double:
39982 			if (d1 != d2) {
39983 				goto is_not_equal_true;
39984 			} else {
39985 				goto is_not_equal_false;
39986 			}
39987 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39988 			d1 = Z_DVAL_P(op1);
39989 			d2 = (double)Z_LVAL_P(op2);
39990 			goto is_not_equal_double;
39991 		}
39992 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39993 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39994 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39995 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39996 				zval_ptr_dtor_str(op1);
39997 			}
39998 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39999 				zval_ptr_dtor_str(op2);
40000 			}
40001 			if (!result) {
40002 				goto is_not_equal_true;
40003 			} else {
40004 				goto is_not_equal_false;
40005 			}
40006 		}
40007 	}
40008 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
40009 }
40010 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40011 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40012 {
40013 	USE_OPLINE
40014 	zval *op1, *op2;
40015 	double d1, d2;
40016 
40017 	op1 = EX_VAR(opline->op1.var);
40018 	op2 = RT_CONSTANT(opline, opline->op2);
40019 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
40020 		/* pass */
40021 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
40022 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
40023 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
40024 is_not_equal_true:
40025 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
40026 			} else {
40027 is_not_equal_false:
40028 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
40029 			}
40030 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
40031 			d1 = (double)Z_LVAL_P(op1);
40032 			d2 = Z_DVAL_P(op2);
40033 			goto is_not_equal_double;
40034 		}
40035 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
40036 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
40037 			d1 = Z_DVAL_P(op1);
40038 			d2 = Z_DVAL_P(op2);
40039 is_not_equal_double:
40040 			if (d1 != d2) {
40041 				goto is_not_equal_true;
40042 			} else {
40043 				goto is_not_equal_false;
40044 			}
40045 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
40046 			d1 = Z_DVAL_P(op1);
40047 			d2 = (double)Z_LVAL_P(op2);
40048 			goto is_not_equal_double;
40049 		}
40050 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
40051 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
40052 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
40053 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40054 				zval_ptr_dtor_str(op1);
40055 			}
40056 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
40057 				zval_ptr_dtor_str(op2);
40058 			}
40059 			if (!result) {
40060 				goto is_not_equal_true;
40061 			} else {
40062 				goto is_not_equal_false;
40063 			}
40064 		}
40065 	}
40066 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
40067 }
40068 
ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40069 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40070 {
40071 	USE_OPLINE
40072 	zval *op1, *op2;
40073 
40074 	SAVE_OPLINE();
40075 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40076 	op2 = RT_CONSTANT(opline, opline->op2);
40077 	compare_function(EX_VAR(opline->result.var), op1, op2);
40078 
40079 
40080 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40081 }
40082 
ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40084 {
40085 	USE_OPLINE
40086 	zval *op1, *op2;
40087 
40088 	SAVE_OPLINE();
40089 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40090 	op2 = RT_CONSTANT(opline, opline->op2);
40091 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
40092 
40093 
40094 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40095 }
40096 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40097 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40098 {
40099 	USE_OPLINE
40100 	zval *object;
40101 	zval *property;
40102 	zval *value;
40103 	zval *zptr;
40104 	void **cache_slot;
40105 	zend_property_info *prop_info;
40106 	zend_object *zobj;
40107 	zend_string *name, *tmp_name;
40108 
40109 	SAVE_OPLINE();
40110 	object = EX_VAR(opline->op1.var);
40111 	property = RT_CONSTANT(opline, opline->op2);
40112 
40113 	do {
40114 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
40115 
40116 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40117 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
40118 				object = Z_REFVAL_P(object);
40119 				goto assign_op_object;
40120 			}
40121 			if (IS_CV == IS_CV
40122 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
40123 				ZVAL_UNDEFINED_OP1();
40124 			}
40125 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
40126 			break;
40127 		}
40128 
40129 assign_op_object:
40130 		/* here we are sure we are dealing with an object */
40131 		zobj = Z_OBJ_P(object);
40132 		if (IS_CONST == IS_CONST) {
40133 			name = Z_STR_P(property);
40134 		} else {
40135 			name = zval_try_get_tmp_string(property, &tmp_name);
40136 			if (UNEXPECTED(!name)) {
40137 				UNDEF_RESULT();
40138 				break;
40139 			}
40140 		}
40141 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
40142 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
40143 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
40144 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40145 					ZVAL_NULL(EX_VAR(opline->result.var));
40146 				}
40147 			} else {
40148 				zval *orig_zptr = zptr;
40149 				zend_reference *ref;
40150 
40151 				do {
40152 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
40153 						ref = Z_REF_P(zptr);
40154 						zptr = Z_REFVAL_P(zptr);
40155 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
40156 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
40157 							break;
40158 						}
40159 					}
40160 
40161 					if (IS_CONST == IS_CONST) {
40162 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
40163 					} else {
40164 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
40165 					}
40166 					if (UNEXPECTED(prop_info)) {
40167 						/* special case for typed properties */
40168 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
40169 					} else {
40170 						zend_binary_op(zptr, zptr, value OPLINE_CC);
40171 					}
40172 				} while (0);
40173 
40174 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40175 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
40176 				}
40177 			}
40178 		} else {
40179 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
40180 		}
40181 		if (IS_CONST != IS_CONST) {
40182 			zend_tmp_string_release(tmp_name);
40183 		}
40184 	} while (0);
40185 
40186 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
40187 
40188 
40189 	/* assign_obj has two opcodes! */
40190 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40191 }
40192 
40193 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40194 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40195 {
40196 	USE_OPLINE
40197 	zval *var_ptr;
40198 	zval *value, *container, *dim;
40199 	HashTable *ht;
40200 
40201 	SAVE_OPLINE();
40202 	container = EX_VAR(opline->op1.var);
40203 
40204 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40205 assign_dim_op_array:
40206 		SEPARATE_ARRAY(container);
40207 		ht = Z_ARRVAL_P(container);
40208 assign_dim_op_new_array:
40209 		dim = RT_CONSTANT(opline, opline->op2);
40210 		if (IS_CONST == IS_UNUSED) {
40211 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
40212 			if (UNEXPECTED(!var_ptr)) {
40213 				zend_cannot_add_element();
40214 				goto assign_dim_op_ret_null;
40215 			}
40216 		} else {
40217 			if (IS_CONST == IS_CONST) {
40218 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
40219 			} else {
40220 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
40221 			}
40222 			if (UNEXPECTED(!var_ptr)) {
40223 				goto assign_dim_op_ret_null;
40224 			}
40225 		}
40226 
40227 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
40228 
40229 		do {
40230 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
40231 				zend_reference *ref = Z_REF_P(var_ptr);
40232 				var_ptr = Z_REFVAL_P(var_ptr);
40233 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
40234 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
40235 					break;
40236 				}
40237 			}
40238 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
40239 		} while (0);
40240 
40241 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40242 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
40243 		}
40244 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
40245 	} else {
40246 		if (EXPECTED(Z_ISREF_P(container))) {
40247 			container = Z_REFVAL_P(container);
40248 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40249 				goto assign_dim_op_array;
40250 			}
40251 		}
40252 
40253 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
40254 			zend_object *obj = Z_OBJ_P(container);
40255 
40256 			dim = RT_CONSTANT(opline, opline->op2);
40257 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
40258 				dim++;
40259 			}
40260 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
40261 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
40262 			zend_uchar old_type;
40263 
40264 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
40265 				ZVAL_UNDEFINED_OP1();
40266 			}
40267 			ht = zend_new_array(8);
40268 			old_type = Z_TYPE_P(container);
40269 			ZVAL_ARR(container, ht);
40270 			if (UNEXPECTED(old_type == IS_FALSE)) {
40271 				GC_ADDREF(ht);
40272 				zend_false_to_array_deprecated();
40273 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
40274 					zend_array_destroy(ht);
40275 					goto assign_dim_op_ret_null;
40276 				}
40277 			}
40278 			goto assign_dim_op_new_array;
40279 		} else {
40280 			dim = RT_CONSTANT(opline, opline->op2);
40281 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
40282 assign_dim_op_ret_null:
40283 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
40284 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40285 				ZVAL_NULL(EX_VAR(opline->result.var));
40286 			}
40287 		}
40288 	}
40289 
40290 
40291 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40292 }
40293 
ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40294 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40295 {
40296 	USE_OPLINE
40297 	zval *var_ptr;
40298 	zval *value;
40299 
40300 	SAVE_OPLINE();
40301 	value = RT_CONSTANT(opline, opline->op2);
40302 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
40303 
40304 	do {
40305 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
40306 			zend_reference *ref = Z_REF_P(var_ptr);
40307 			var_ptr = Z_REFVAL_P(var_ptr);
40308 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
40309 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
40310 				break;
40311 			}
40312 		}
40313 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
40314 	} while (0);
40315 
40316 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40317 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
40318 	}
40319 
40320 
40321 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40322 }
40323 
ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40324 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40325 {
40326 	USE_OPLINE
40327 	zval *object;
40328 	zval *property;
40329 	zval *zptr;
40330 	void **cache_slot;
40331 	zend_property_info *prop_info;
40332 	zend_object *zobj;
40333 	zend_string *name, *tmp_name;
40334 
40335 	SAVE_OPLINE();
40336 	object = EX_VAR(opline->op1.var);
40337 	property = RT_CONSTANT(opline, opline->op2);
40338 
40339 	do {
40340 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40341 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
40342 				object = Z_REFVAL_P(object);
40343 				goto pre_incdec_object;
40344 			}
40345 			if (IS_CV == IS_CV
40346 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
40347 				ZVAL_UNDEFINED_OP1();
40348 			}
40349 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
40350 			break;
40351 		}
40352 
40353 pre_incdec_object:
40354 		/* here we are sure we are dealing with an object */
40355 		zobj = Z_OBJ_P(object);
40356 		if (IS_CONST == IS_CONST) {
40357 			name = Z_STR_P(property);
40358 		} else {
40359 			name = zval_try_get_tmp_string(property, &tmp_name);
40360 			if (UNEXPECTED(!name)) {
40361 				UNDEF_RESULT();
40362 				break;
40363 			}
40364 		}
40365 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
40366 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
40367 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
40368 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40369 					ZVAL_NULL(EX_VAR(opline->result.var));
40370 				}
40371 			} else {
40372 				if (IS_CONST == IS_CONST) {
40373 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
40374 				} else {
40375 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
40376 				}
40377 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
40378 			}
40379 		} else {
40380 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
40381 		}
40382 		if (IS_CONST != IS_CONST) {
40383 			zend_tmp_string_release(tmp_name);
40384 		}
40385 	} while (0);
40386 
40387 
40388 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40389 }
40390 
ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40391 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40392 {
40393 	USE_OPLINE
40394 	zval *object;
40395 	zval *property;
40396 	zval *zptr;
40397 	void **cache_slot;
40398 	zend_property_info *prop_info;
40399 	zend_object *zobj;
40400 	zend_string *name, *tmp_name;
40401 
40402 	SAVE_OPLINE();
40403 	object = EX_VAR(opline->op1.var);
40404 	property = RT_CONSTANT(opline, opline->op2);
40405 
40406 	do {
40407 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40408 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
40409 				object = Z_REFVAL_P(object);
40410 				goto post_incdec_object;
40411 			}
40412 			if (IS_CV == IS_CV
40413 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
40414 				ZVAL_UNDEFINED_OP1();
40415 			}
40416 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
40417 			break;
40418 		}
40419 
40420 post_incdec_object:
40421 		/* here we are sure we are dealing with an object */
40422 		zobj = Z_OBJ_P(object);
40423 		if (IS_CONST == IS_CONST) {
40424 			name = Z_STR_P(property);
40425 		} else {
40426 			name = zval_try_get_tmp_string(property, &tmp_name);
40427 			if (UNEXPECTED(!name)) {
40428 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40429 				break;
40430 			}
40431 		}
40432 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
40433 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
40434 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
40435 				ZVAL_NULL(EX_VAR(opline->result.var));
40436 			} else {
40437 				if (IS_CONST == IS_CONST) {
40438 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
40439 				} else {
40440 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
40441 				}
40442 
40443 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
40444 			}
40445 		} else {
40446 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
40447 		}
40448 		if (IS_CONST != IS_CONST) {
40449 			zend_tmp_string_release(tmp_name);
40450 		}
40451 	} while (0);
40452 
40453 
40454 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40455 }
40456 
ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40457 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40458 {
40459 	USE_OPLINE
40460 	zval *container, *dim, *value;
40461 
40462 	SAVE_OPLINE();
40463 	container = EX_VAR(opline->op1.var);
40464 	dim = RT_CONSTANT(opline, opline->op2);
40465 	if (IS_CV != IS_CONST) {
40466 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40467 fetch_dim_r_array:
40468 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
40469 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
40470 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
40471 			container = Z_REFVAL_P(container);
40472 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40473 				goto fetch_dim_r_array;
40474 			} else {
40475 				goto fetch_dim_r_slow;
40476 			}
40477 		} else {
40478 fetch_dim_r_slow:
40479 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
40480 				dim++;
40481 			}
40482 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
40483 		}
40484 	} else {
40485 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40486 	}
40487 
40488 
40489 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40490 }
40491 
ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40492 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40493 {
40494 	USE_OPLINE
40495 	zval *container;
40496 
40497 	SAVE_OPLINE();
40498 	container = EX_VAR(opline->op1.var);
40499 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40500 
40501 	if (IS_CV == IS_VAR) {
40502 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40503 	}
40504 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40505 }
40506 
ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40507 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40508 {
40509 	USE_OPLINE
40510 	zval *container;
40511 
40512 	SAVE_OPLINE();
40513 	container = EX_VAR(opline->op1.var);
40514 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40515 
40516 	if (IS_CV == IS_VAR) {
40517 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40518 	}
40519 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40520 }
40521 
ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40522 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40523 {
40524 	USE_OPLINE
40525 	zval *container;
40526 
40527 	SAVE_OPLINE();
40528 	container = EX_VAR(opline->op1.var);
40529 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40530 
40531 
40532 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40533 }
40534 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40535 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40536 {
40537 #if 0
40538 	USE_OPLINE
40539 #endif
40540 
40541 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
40542         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
40543 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40544         }
40545 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40546 	} else {
40547 		if (IS_CONST == IS_UNUSED) {
40548 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40549 		}
40550 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40551 	}
40552 }
40553 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40554 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40555 {
40556 	USE_OPLINE
40557 	zval *container;
40558 
40559 	SAVE_OPLINE();
40560 	container = EX_VAR(opline->op1.var);
40561 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40562 
40563 	if (IS_CV == IS_VAR) {
40564 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40565 	}
40566 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40567 }
40568 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40569 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40570 {
40571 	USE_OPLINE
40572 	zval *container;
40573 	void **cache_slot = NULL;
40574 
40575 	SAVE_OPLINE();
40576 	container = EX_VAR(opline->op1.var);
40577 
40578 	if (IS_CV == IS_CONST ||
40579 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
40580 	    do {
40581 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
40582 				container = Z_REFVAL_P(container);
40583 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
40584 					break;
40585 				}
40586 			}
40587 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
40588 				ZVAL_UNDEFINED_OP1();
40589 			}
40590 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
40591 			ZVAL_NULL(EX_VAR(opline->result.var));
40592 			goto fetch_obj_r_finish;
40593 		} while (0);
40594 	}
40595 
40596 	/* here we are sure we are dealing with an object */
40597 	do {
40598 		zend_object *zobj = Z_OBJ_P(container);
40599 		zend_string *name, *tmp_name;
40600 		zval *retval;
40601 
40602 		if (IS_CONST == IS_CONST) {
40603 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
40604 
40605 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
40606 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40607 
40608 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40609 					retval = OBJ_PROP(zobj, prop_offset);
40610 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
40611 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40612 							goto fetch_obj_r_copy;
40613 						} else {
40614 fetch_obj_r_fast_copy:
40615 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
40616 							ZEND_VM_NEXT_OPCODE();
40617 						}
40618 					}
40619 				} else if (EXPECTED(zobj->properties != NULL)) {
40620 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
40621 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
40622 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
40623 
40624 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
40625 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
40626 
40627 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
40628 						        (EXPECTED(p->key == name) ||
40629 						         (EXPECTED(p->h == ZSTR_H(name)) &&
40630 						          EXPECTED(p->key != NULL) &&
40631 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
40632 								retval = &p->val;
40633 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40634 									goto fetch_obj_r_copy;
40635 								} else {
40636 									goto fetch_obj_r_fast_copy;
40637 								}
40638 							}
40639 						}
40640 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
40641 					}
40642 					retval = zend_hash_find_known_hash(zobj->properties, name);
40643 					if (EXPECTED(retval)) {
40644 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
40645 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
40646 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40647 							goto fetch_obj_r_copy;
40648 						} else {
40649 							goto fetch_obj_r_fast_copy;
40650 						}
40651 					}
40652 				}
40653 			}
40654 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
40655 		} else {
40656 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
40657 			if (UNEXPECTED(!name)) {
40658 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40659 				break;
40660 			}
40661 		}
40662 
40663 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
40664 #if ZEND_DEBUG
40665 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
40666 			zend_verify_internal_read_property_type(zobj, name, retval);
40667 		}
40668 #endif
40669 
40670 		if (IS_CONST != IS_CONST) {
40671 			zend_tmp_string_release(tmp_name);
40672 		}
40673 
40674 		if (retval != EX_VAR(opline->result.var)) {
40675 fetch_obj_r_copy:
40676 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
40677 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
40678 			zend_unwrap_reference(retval);
40679 		}
40680 	} while (0);
40681 
40682 fetch_obj_r_finish:
40683 
40684 
40685 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40686 }
40687 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40688 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40689 {
40690 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40691 }
40692 
ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40693 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40694 {
40695 	USE_OPLINE
40696 	zval *property, *container, *result;
40697 
40698 	SAVE_OPLINE();
40699 
40700 	container = EX_VAR(opline->op1.var);
40701 	property = RT_CONSTANT(opline, opline->op2);
40702 	result = EX_VAR(opline->result.var);
40703 	zend_fetch_property_address(
40704 		result, container, IS_CV, property, IS_CONST,
40705 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
40706 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC);
40707 
40708 	if (IS_CV == IS_VAR) {
40709 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40710 	}
40711 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40712 }
40713 
ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40714 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40715 {
40716 	USE_OPLINE
40717 	zval *property, *container, *result;
40718 
40719 	SAVE_OPLINE();
40720 	container = EX_VAR(opline->op1.var);
40721 	property = RT_CONSTANT(opline, opline->op2);
40722 	result = EX_VAR(opline->result.var);
40723 	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);
40724 
40725 	if (IS_CV == IS_VAR) {
40726 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40727 	}
40728 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40729 }
40730 
ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40731 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40732 {
40733 	USE_OPLINE
40734 	zval *container;
40735 	void **cache_slot = NULL;
40736 
40737 	SAVE_OPLINE();
40738 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
40739 
40740 	if (IS_CV == IS_CONST ||
40741 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
40742 		do {
40743 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
40744 				container = Z_REFVAL_P(container);
40745 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
40746 					break;
40747 				}
40748 			}
40749 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
40750 				ZVAL_UNDEFINED_OP2();
40751 			}
40752 			ZVAL_NULL(EX_VAR(opline->result.var));
40753 			goto fetch_obj_is_finish;
40754 		} while (0);
40755 	}
40756 
40757 	/* here we are sure we are dealing with an object */
40758 	do {
40759 		zend_object *zobj = Z_OBJ_P(container);
40760 		zend_string *name, *tmp_name;
40761 		zval *retval;
40762 
40763 		if (IS_CONST == IS_CONST) {
40764 			cache_slot = CACHE_ADDR(opline->extended_value);
40765 
40766 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
40767 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40768 
40769 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40770 					retval = OBJ_PROP(zobj, prop_offset);
40771 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
40772 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40773 							goto fetch_obj_is_copy;
40774 						} else {
40775 fetch_obj_is_fast_copy:
40776 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
40777 							ZEND_VM_NEXT_OPCODE();
40778 						}
40779 					}
40780 				} else if (EXPECTED(zobj->properties != NULL)) {
40781 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
40782 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
40783 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
40784 
40785 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
40786 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
40787 
40788 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
40789 						        (EXPECTED(p->key == name) ||
40790 						         (EXPECTED(p->h == ZSTR_H(name)) &&
40791 						          EXPECTED(p->key != NULL) &&
40792 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
40793 								retval = &p->val;
40794 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40795 									goto fetch_obj_is_copy;
40796 								} else {
40797 									goto fetch_obj_is_fast_copy;
40798 								}
40799 							}
40800 						}
40801 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
40802 					}
40803 					retval = zend_hash_find_known_hash(zobj->properties, name);
40804 					if (EXPECTED(retval)) {
40805 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
40806 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
40807 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40808 							goto fetch_obj_is_copy;
40809 						} else {
40810 							goto fetch_obj_is_fast_copy;
40811 						}
40812 					}
40813 				}
40814 			}
40815 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
40816 		} else {
40817 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
40818 			if (UNEXPECTED(!name)) {
40819 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40820 				break;
40821 			}
40822 		}
40823 
40824 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
40825 
40826 		if (IS_CONST != IS_CONST) {
40827 			zend_tmp_string_release(tmp_name);
40828 		}
40829 
40830 		if (retval != EX_VAR(opline->result.var)) {
40831 fetch_obj_is_copy:
40832 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
40833 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
40834 			zend_unwrap_reference(retval);
40835 		}
40836 	} while (0);
40837 
40838 fetch_obj_is_finish:
40839 
40840 
40841 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40842 }
40843 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40844 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40845 {
40846 #if 0
40847 	USE_OPLINE
40848 #endif
40849 
40850 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
40851 		/* Behave like FETCH_OBJ_W */
40852 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
40853 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40854 		}
40855 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40856 	} else {
40857 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40858 	}
40859 }
40860 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40861 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40862 {
40863 	USE_OPLINE
40864 	zval *container, *property, *result;
40865 
40866 	SAVE_OPLINE();
40867 	container = EX_VAR(opline->op1.var);
40868 	property = RT_CONSTANT(opline, opline->op2);
40869 	result = EX_VAR(opline->result.var);
40870 	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);
40871 
40872 	if (IS_CV == IS_VAR) {
40873 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40874 	}
40875 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40876 }
40877 
ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40878 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40879 {
40880 	USE_OPLINE
40881 	zval *object, *value, tmp;
40882 	zend_object *zobj;
40883 	zend_string *name, *tmp_name;
40884 
40885 	SAVE_OPLINE();
40886 	object = EX_VAR(opline->op1.var);
40887 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
40888 
40889 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40890 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
40891 			object = Z_REFVAL_P(object);
40892 			goto assign_object;
40893 		}
40894 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
40895 		value = &EG(uninitialized_zval);
40896 		goto free_and_exit_assign_obj;
40897 	}
40898 
40899 assign_object:
40900 	zobj = Z_OBJ_P(object);
40901 	if (IS_CONST == IS_CONST) {
40902 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
40903 			void **cache_slot = CACHE_ADDR(opline->extended_value);
40904 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40905 			zend_object *zobj = Z_OBJ_P(object);
40906 			zval *property_val;
40907 
40908 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40909 				property_val = OBJ_PROP(zobj, prop_offset);
40910 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
40911 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
40912 
40913 					if (UNEXPECTED(prop_info != NULL)) {
40914 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
40915 						goto free_and_exit_assign_obj;
40916 					} else {
40917 fast_assign_obj:
40918 						value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
40919 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40920 							ZVAL_COPY(EX_VAR(opline->result.var), value);
40921 						}
40922 						goto exit_assign_obj;
40923 					}
40924 				}
40925 			} else {
40926 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
40927 				if (EXPECTED(zobj->properties != NULL)) {
40928 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
40929 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
40930 							GC_DELREF(zobj->properties);
40931 						}
40932 						zobj->properties = zend_array_dup(zobj->properties);
40933 					}
40934 					property_val = zend_hash_find_known_hash(zobj->properties, name);
40935 					if (property_val) {
40936 						goto fast_assign_obj;
40937 					}
40938 				}
40939 
40940 				if (!zobj->ce->__set) {
40941 					if (EXPECTED(zobj->properties == NULL)) {
40942 						rebuild_object_properties(zobj);
40943 					}
40944 					if (IS_CONST == IS_CONST) {
40945 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
40946 							Z_ADDREF_P(value);
40947 						}
40948 					} else if (IS_CONST != IS_TMP_VAR) {
40949 						if (Z_ISREF_P(value)) {
40950 							if (IS_CONST == IS_VAR) {
40951 								zend_reference *ref = Z_REF_P(value);
40952 								if (GC_DELREF(ref) == 0) {
40953 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
40954 									efree_size(ref, sizeof(zend_reference));
40955 									value = &tmp;
40956 								} else {
40957 									value = Z_REFVAL_P(value);
40958 									Z_TRY_ADDREF_P(value);
40959 								}
40960 							} else {
40961 								value = Z_REFVAL_P(value);
40962 								Z_TRY_ADDREF_P(value);
40963 							}
40964 						} else if (IS_CONST == IS_CV) {
40965 							Z_TRY_ADDREF_P(value);
40966 						}
40967 						}
40968 					zend_hash_add_new(zobj->properties, name, value);
40969 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40970 						ZVAL_COPY(EX_VAR(opline->result.var), value);
40971 					}
40972 					goto exit_assign_obj;
40973 				}
40974 			}
40975 		}
40976 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
40977 	} else {
40978 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
40979 		if (UNEXPECTED(!name)) {
40980 
40981 			UNDEF_RESULT();
40982 			goto exit_assign_obj;
40983 		}
40984 	}
40985 
40986 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
40987 		ZVAL_DEREF(value);
40988 	}
40989 
40990 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
40991 
40992 	if (IS_CONST != IS_CONST) {
40993 		zend_tmp_string_release(tmp_name);
40994 	}
40995 
40996 free_and_exit_assign_obj:
40997 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40998 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
40999 	}
41000 
41001 exit_assign_obj:
41002 
41003 
41004 	/* assign_obj has two opcodes! */
41005 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41006 }
41007 
41008 /* 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)41009 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41010 {
41011 	USE_OPLINE
41012 	zval *object, *value, tmp;
41013 	zend_object *zobj;
41014 	zend_string *name, *tmp_name;
41015 
41016 	SAVE_OPLINE();
41017 	object = EX_VAR(opline->op1.var);
41018 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
41019 
41020 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
41021 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
41022 			object = Z_REFVAL_P(object);
41023 			goto assign_object;
41024 		}
41025 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
41026 		value = &EG(uninitialized_zval);
41027 		goto free_and_exit_assign_obj;
41028 	}
41029 
41030 assign_object:
41031 	zobj = Z_OBJ_P(object);
41032 	if (IS_CONST == IS_CONST) {
41033 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
41034 			void **cache_slot = CACHE_ADDR(opline->extended_value);
41035 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
41036 			zend_object *zobj = Z_OBJ_P(object);
41037 			zval *property_val;
41038 
41039 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
41040 				property_val = OBJ_PROP(zobj, prop_offset);
41041 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
41042 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
41043 
41044 					if (UNEXPECTED(prop_info != NULL)) {
41045 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
41046 						goto free_and_exit_assign_obj;
41047 					} else {
41048 fast_assign_obj:
41049 						value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
41050 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41051 							ZVAL_COPY(EX_VAR(opline->result.var), value);
41052 						}
41053 						goto exit_assign_obj;
41054 					}
41055 				}
41056 			} else {
41057 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41058 				if (EXPECTED(zobj->properties != NULL)) {
41059 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
41060 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
41061 							GC_DELREF(zobj->properties);
41062 						}
41063 						zobj->properties = zend_array_dup(zobj->properties);
41064 					}
41065 					property_val = zend_hash_find_known_hash(zobj->properties, name);
41066 					if (property_val) {
41067 						goto fast_assign_obj;
41068 					}
41069 				}
41070 
41071 				if (!zobj->ce->__set) {
41072 					if (EXPECTED(zobj->properties == NULL)) {
41073 						rebuild_object_properties(zobj);
41074 					}
41075 					if (IS_TMP_VAR == IS_CONST) {
41076 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
41077 							Z_ADDREF_P(value);
41078 						}
41079 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
41080 						if (Z_ISREF_P(value)) {
41081 							if (IS_TMP_VAR == IS_VAR) {
41082 								zend_reference *ref = Z_REF_P(value);
41083 								if (GC_DELREF(ref) == 0) {
41084 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
41085 									efree_size(ref, sizeof(zend_reference));
41086 									value = &tmp;
41087 								} else {
41088 									value = Z_REFVAL_P(value);
41089 									Z_TRY_ADDREF_P(value);
41090 								}
41091 							} else {
41092 								value = Z_REFVAL_P(value);
41093 								Z_TRY_ADDREF_P(value);
41094 							}
41095 						} else if (IS_TMP_VAR == IS_CV) {
41096 							Z_TRY_ADDREF_P(value);
41097 						}
41098 						}
41099 					zend_hash_add_new(zobj->properties, name, value);
41100 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41101 						ZVAL_COPY(EX_VAR(opline->result.var), value);
41102 					}
41103 					goto exit_assign_obj;
41104 				}
41105 			}
41106 		}
41107 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41108 	} else {
41109 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
41110 		if (UNEXPECTED(!name)) {
41111 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41112 			UNDEF_RESULT();
41113 			goto exit_assign_obj;
41114 		}
41115 	}
41116 
41117 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
41118 		ZVAL_DEREF(value);
41119 	}
41120 
41121 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
41122 
41123 	if (IS_CONST != IS_CONST) {
41124 		zend_tmp_string_release(tmp_name);
41125 	}
41126 
41127 free_and_exit_assign_obj:
41128 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41129 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
41130 	}
41131 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41132 exit_assign_obj:
41133 
41134 
41135 	/* assign_obj has two opcodes! */
41136 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41137 }
41138 
41139 /* 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)41140 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41141 {
41142 	USE_OPLINE
41143 	zval *object, *value, tmp;
41144 	zend_object *zobj;
41145 	zend_string *name, *tmp_name;
41146 
41147 	SAVE_OPLINE();
41148 	object = EX_VAR(opline->op1.var);
41149 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41150 
41151 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
41152 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
41153 			object = Z_REFVAL_P(object);
41154 			goto assign_object;
41155 		}
41156 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
41157 		value = &EG(uninitialized_zval);
41158 		goto free_and_exit_assign_obj;
41159 	}
41160 
41161 assign_object:
41162 	zobj = Z_OBJ_P(object);
41163 	if (IS_CONST == IS_CONST) {
41164 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
41165 			void **cache_slot = CACHE_ADDR(opline->extended_value);
41166 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
41167 			zend_object *zobj = Z_OBJ_P(object);
41168 			zval *property_val;
41169 
41170 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
41171 				property_val = OBJ_PROP(zobj, prop_offset);
41172 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
41173 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
41174 
41175 					if (UNEXPECTED(prop_info != NULL)) {
41176 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
41177 						goto free_and_exit_assign_obj;
41178 					} else {
41179 fast_assign_obj:
41180 						value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
41181 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41182 							ZVAL_COPY(EX_VAR(opline->result.var), value);
41183 						}
41184 						goto exit_assign_obj;
41185 					}
41186 				}
41187 			} else {
41188 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41189 				if (EXPECTED(zobj->properties != NULL)) {
41190 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
41191 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
41192 							GC_DELREF(zobj->properties);
41193 						}
41194 						zobj->properties = zend_array_dup(zobj->properties);
41195 					}
41196 					property_val = zend_hash_find_known_hash(zobj->properties, name);
41197 					if (property_val) {
41198 						goto fast_assign_obj;
41199 					}
41200 				}
41201 
41202 				if (!zobj->ce->__set) {
41203 					if (EXPECTED(zobj->properties == NULL)) {
41204 						rebuild_object_properties(zobj);
41205 					}
41206 					if (IS_VAR == IS_CONST) {
41207 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
41208 							Z_ADDREF_P(value);
41209 						}
41210 					} else if (IS_VAR != IS_TMP_VAR) {
41211 						if (Z_ISREF_P(value)) {
41212 							if (IS_VAR == IS_VAR) {
41213 								zend_reference *ref = Z_REF_P(value);
41214 								if (GC_DELREF(ref) == 0) {
41215 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
41216 									efree_size(ref, sizeof(zend_reference));
41217 									value = &tmp;
41218 								} else {
41219 									value = Z_REFVAL_P(value);
41220 									Z_TRY_ADDREF_P(value);
41221 								}
41222 							} else {
41223 								value = Z_REFVAL_P(value);
41224 								Z_TRY_ADDREF_P(value);
41225 							}
41226 						} else if (IS_VAR == IS_CV) {
41227 							Z_TRY_ADDREF_P(value);
41228 						}
41229 						}
41230 					zend_hash_add_new(zobj->properties, name, value);
41231 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41232 						ZVAL_COPY(EX_VAR(opline->result.var), value);
41233 					}
41234 					goto exit_assign_obj;
41235 				}
41236 			}
41237 		}
41238 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41239 	} else {
41240 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
41241 		if (UNEXPECTED(!name)) {
41242 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41243 			UNDEF_RESULT();
41244 			goto exit_assign_obj;
41245 		}
41246 	}
41247 
41248 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
41249 		ZVAL_DEREF(value);
41250 	}
41251 
41252 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
41253 
41254 	if (IS_CONST != IS_CONST) {
41255 		zend_tmp_string_release(tmp_name);
41256 	}
41257 
41258 free_and_exit_assign_obj:
41259 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41260 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
41261 	}
41262 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41263 exit_assign_obj:
41264 
41265 
41266 	/* assign_obj has two opcodes! */
41267 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41268 }
41269 
41270 /* 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)41271 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41272 {
41273 	USE_OPLINE
41274 	zval *object, *value, tmp;
41275 	zend_object *zobj;
41276 	zend_string *name, *tmp_name;
41277 
41278 	SAVE_OPLINE();
41279 	object = EX_VAR(opline->op1.var);
41280 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
41281 
41282 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
41283 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
41284 			object = Z_REFVAL_P(object);
41285 			goto assign_object;
41286 		}
41287 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
41288 		value = &EG(uninitialized_zval);
41289 		goto free_and_exit_assign_obj;
41290 	}
41291 
41292 assign_object:
41293 	zobj = Z_OBJ_P(object);
41294 	if (IS_CONST == IS_CONST) {
41295 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
41296 			void **cache_slot = CACHE_ADDR(opline->extended_value);
41297 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
41298 			zend_object *zobj = Z_OBJ_P(object);
41299 			zval *property_val;
41300 
41301 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
41302 				property_val = OBJ_PROP(zobj, prop_offset);
41303 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
41304 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
41305 
41306 					if (UNEXPECTED(prop_info != NULL)) {
41307 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
41308 						goto free_and_exit_assign_obj;
41309 					} else {
41310 fast_assign_obj:
41311 						value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
41312 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41313 							ZVAL_COPY(EX_VAR(opline->result.var), value);
41314 						}
41315 						goto exit_assign_obj;
41316 					}
41317 				}
41318 			} else {
41319 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41320 				if (EXPECTED(zobj->properties != NULL)) {
41321 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
41322 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
41323 							GC_DELREF(zobj->properties);
41324 						}
41325 						zobj->properties = zend_array_dup(zobj->properties);
41326 					}
41327 					property_val = zend_hash_find_known_hash(zobj->properties, name);
41328 					if (property_val) {
41329 						goto fast_assign_obj;
41330 					}
41331 				}
41332 
41333 				if (!zobj->ce->__set) {
41334 					if (EXPECTED(zobj->properties == NULL)) {
41335 						rebuild_object_properties(zobj);
41336 					}
41337 					if (IS_CV == IS_CONST) {
41338 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
41339 							Z_ADDREF_P(value);
41340 						}
41341 					} else if (IS_CV != IS_TMP_VAR) {
41342 						if (Z_ISREF_P(value)) {
41343 							if (IS_CV == IS_VAR) {
41344 								zend_reference *ref = Z_REF_P(value);
41345 								if (GC_DELREF(ref) == 0) {
41346 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
41347 									efree_size(ref, sizeof(zend_reference));
41348 									value = &tmp;
41349 								} else {
41350 									value = Z_REFVAL_P(value);
41351 									Z_TRY_ADDREF_P(value);
41352 								}
41353 							} else {
41354 								value = Z_REFVAL_P(value);
41355 								Z_TRY_ADDREF_P(value);
41356 							}
41357 						} else if (IS_CV == IS_CV) {
41358 							Z_TRY_ADDREF_P(value);
41359 						}
41360 						}
41361 					zend_hash_add_new(zobj->properties, name, value);
41362 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41363 						ZVAL_COPY(EX_VAR(opline->result.var), value);
41364 					}
41365 					goto exit_assign_obj;
41366 				}
41367 			}
41368 		}
41369 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41370 	} else {
41371 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
41372 		if (UNEXPECTED(!name)) {
41373 
41374 			UNDEF_RESULT();
41375 			goto exit_assign_obj;
41376 		}
41377 	}
41378 
41379 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
41380 		ZVAL_DEREF(value);
41381 	}
41382 
41383 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
41384 
41385 	if (IS_CONST != IS_CONST) {
41386 		zend_tmp_string_release(tmp_name);
41387 	}
41388 
41389 free_and_exit_assign_obj:
41390 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41391 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
41392 	}
41393 
41394 exit_assign_obj:
41395 
41396 
41397 	/* assign_obj has two opcodes! */
41398 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41399 }
41400 
41401 /* 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)41402 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41403 {
41404 	USE_OPLINE
41405 	zval *object_ptr, *orig_object_ptr;
41406 	zval *value;
41407 	zval *variable_ptr;
41408 	zval *dim;
41409 
41410 	SAVE_OPLINE();
41411 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
41412 
41413 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41414 try_assign_dim_array:
41415 		SEPARATE_ARRAY(object_ptr);
41416 		if (IS_CONST == IS_UNUSED) {
41417 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
41418 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
41419 				HashTable *ht = Z_ARRVAL_P(object_ptr);
41420 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
41421 					GC_ADDREF(ht);
41422 				}
41423 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41424 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
41425 					zend_array_destroy(ht);
41426 					goto assign_dim_error;
41427 				}
41428 			}
41429 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
41430 				ZVAL_DEREF(value);
41431 			}
41432 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
41433 			if (UNEXPECTED(value == NULL)) {
41434 				zend_cannot_add_element();
41435 				goto assign_dim_error;
41436 			} else if (IS_CONST == IS_CV) {
41437 				if (Z_REFCOUNTED_P(value)) {
41438 					Z_ADDREF_P(value);
41439 				}
41440 			} else if (IS_CONST == IS_VAR) {
41441 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
41442 				if (Z_ISREF_P(free_op_data)) {
41443 					if (Z_REFCOUNTED_P(value)) {
41444 						Z_ADDREF_P(value);
41445 					}
41446 					zval_ptr_dtor_nogc(free_op_data);
41447 				}
41448 			} else if (IS_CONST == IS_CONST) {
41449 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
41450 					Z_ADDREF_P(value);
41451 				}
41452 			}
41453 		} else {
41454 			dim = RT_CONSTANT(opline, opline->op2);
41455 			if (IS_CONST == IS_CONST) {
41456 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41457 			} else {
41458 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41459 			}
41460 			if (UNEXPECTED(variable_ptr == NULL)) {
41461 				goto assign_dim_error;
41462 			}
41463 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
41464 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
41465 		}
41466 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41467 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41468 		}
41469 	} else {
41470 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
41471 			object_ptr = Z_REFVAL_P(object_ptr);
41472 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41473 				goto try_assign_dim_array;
41474 			}
41475 		}
41476 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
41477 			zend_object *obj = Z_OBJ_P(object_ptr);
41478 
41479 			GC_ADDREF(obj);
41480 			dim = RT_CONSTANT(opline, opline->op2);
41481 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
41482 				dim = ZVAL_UNDEFINED_OP2();
41483 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41484 				dim++;
41485 			}
41486 
41487 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
41488 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
41489 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41490 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
41491 				ZVAL_DEREF(value);
41492 			}
41493 
41494 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
41495 
41496 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
41497 				zend_objects_store_del(obj);
41498 			}
41499 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
41500 			if (IS_CONST == IS_UNUSED) {
41501 				zend_use_new_element_for_string();
41502 
41503 				UNDEF_RESULT();
41504 			} else {
41505 				dim = RT_CONSTANT(opline, opline->op2);
41506 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
41507 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
41508 
41509 			}
41510 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
41511 			if (Z_ISREF_P(orig_object_ptr)
41512 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
41513 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
41514 				dim = RT_CONSTANT(opline, opline->op2);
41515 
41516 				UNDEF_RESULT();
41517 			} else {
41518 				HashTable *ht = zend_new_array(8);
41519 				zend_uchar old_type = Z_TYPE_P(object_ptr);
41520 
41521 				ZVAL_ARR(object_ptr, ht);
41522 				if (UNEXPECTED(old_type == IS_FALSE)) {
41523 					GC_ADDREF(ht);
41524 					zend_false_to_array_deprecated();
41525 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
41526 						zend_array_destroy(ht);
41527 						goto assign_dim_error;
41528 					}
41529 				}
41530 				goto try_assign_dim_array;
41531 			}
41532 		} else {
41533 			zend_use_scalar_as_array();
41534 			dim = RT_CONSTANT(opline, opline->op2);
41535 assign_dim_error:
41536 
41537 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41538 				ZVAL_NULL(EX_VAR(opline->result.var));
41539 			}
41540 		}
41541 	}
41542 	if (IS_CONST != IS_UNUSED) {
41543 
41544 	}
41545 
41546 	/* assign_dim has two opcodes! */
41547 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41548 }
41549 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41550 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41551 {
41552 	USE_OPLINE
41553 	zval *object_ptr, *orig_object_ptr;
41554 	zval *value;
41555 	zval *variable_ptr;
41556 	zval *dim;
41557 
41558 	SAVE_OPLINE();
41559 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
41560 
41561 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41562 try_assign_dim_array:
41563 		SEPARATE_ARRAY(object_ptr);
41564 		if (IS_CONST == IS_UNUSED) {
41565 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
41566 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
41567 				HashTable *ht = Z_ARRVAL_P(object_ptr);
41568 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
41569 					GC_ADDREF(ht);
41570 				}
41571 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41572 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
41573 					zend_array_destroy(ht);
41574 					goto assign_dim_error;
41575 				}
41576 			}
41577 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
41578 				ZVAL_DEREF(value);
41579 			}
41580 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
41581 			if (UNEXPECTED(value == NULL)) {
41582 				zend_cannot_add_element();
41583 				goto assign_dim_error;
41584 			} else if (IS_TMP_VAR == IS_CV) {
41585 				if (Z_REFCOUNTED_P(value)) {
41586 					Z_ADDREF_P(value);
41587 				}
41588 			} else if (IS_TMP_VAR == IS_VAR) {
41589 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
41590 				if (Z_ISREF_P(free_op_data)) {
41591 					if (Z_REFCOUNTED_P(value)) {
41592 						Z_ADDREF_P(value);
41593 					}
41594 					zval_ptr_dtor_nogc(free_op_data);
41595 				}
41596 			} else if (IS_TMP_VAR == IS_CONST) {
41597 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
41598 					Z_ADDREF_P(value);
41599 				}
41600 			}
41601 		} else {
41602 			dim = RT_CONSTANT(opline, opline->op2);
41603 			if (IS_CONST == IS_CONST) {
41604 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41605 			} else {
41606 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41607 			}
41608 			if (UNEXPECTED(variable_ptr == NULL)) {
41609 				goto assign_dim_error;
41610 			}
41611 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
41612 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
41613 		}
41614 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41615 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41616 		}
41617 	} else {
41618 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
41619 			object_ptr = Z_REFVAL_P(object_ptr);
41620 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41621 				goto try_assign_dim_array;
41622 			}
41623 		}
41624 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
41625 			zend_object *obj = Z_OBJ_P(object_ptr);
41626 
41627 			GC_ADDREF(obj);
41628 			dim = RT_CONSTANT(opline, opline->op2);
41629 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
41630 				dim = ZVAL_UNDEFINED_OP2();
41631 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41632 				dim++;
41633 			}
41634 
41635 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
41636 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
41637 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41638 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
41639 				ZVAL_DEREF(value);
41640 			}
41641 
41642 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
41643 
41644 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41645 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
41646 				zend_objects_store_del(obj);
41647 			}
41648 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
41649 			if (IS_CONST == IS_UNUSED) {
41650 				zend_use_new_element_for_string();
41651 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41652 				UNDEF_RESULT();
41653 			} else {
41654 				dim = RT_CONSTANT(opline, opline->op2);
41655 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
41656 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
41657 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41658 			}
41659 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
41660 			if (Z_ISREF_P(orig_object_ptr)
41661 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
41662 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
41663 				dim = RT_CONSTANT(opline, opline->op2);
41664 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41665 				UNDEF_RESULT();
41666 			} else {
41667 				HashTable *ht = zend_new_array(8);
41668 				zend_uchar old_type = Z_TYPE_P(object_ptr);
41669 
41670 				ZVAL_ARR(object_ptr, ht);
41671 				if (UNEXPECTED(old_type == IS_FALSE)) {
41672 					GC_ADDREF(ht);
41673 					zend_false_to_array_deprecated();
41674 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
41675 						zend_array_destroy(ht);
41676 						goto assign_dim_error;
41677 					}
41678 				}
41679 				goto try_assign_dim_array;
41680 			}
41681 		} else {
41682 			zend_use_scalar_as_array();
41683 			dim = RT_CONSTANT(opline, opline->op2);
41684 assign_dim_error:
41685 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41686 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41687 				ZVAL_NULL(EX_VAR(opline->result.var));
41688 			}
41689 		}
41690 	}
41691 	if (IS_CONST != IS_UNUSED) {
41692 
41693 	}
41694 
41695 	/* assign_dim has two opcodes! */
41696 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41697 }
41698 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41699 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41700 {
41701 	USE_OPLINE
41702 	zval *object_ptr, *orig_object_ptr;
41703 	zval *value;
41704 	zval *variable_ptr;
41705 	zval *dim;
41706 
41707 	SAVE_OPLINE();
41708 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
41709 
41710 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41711 try_assign_dim_array:
41712 		SEPARATE_ARRAY(object_ptr);
41713 		if (IS_CONST == IS_UNUSED) {
41714 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41715 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
41716 				HashTable *ht = Z_ARRVAL_P(object_ptr);
41717 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
41718 					GC_ADDREF(ht);
41719 				}
41720 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41721 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
41722 					zend_array_destroy(ht);
41723 					goto assign_dim_error;
41724 				}
41725 			}
41726 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
41727 				ZVAL_DEREF(value);
41728 			}
41729 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
41730 			if (UNEXPECTED(value == NULL)) {
41731 				zend_cannot_add_element();
41732 				goto assign_dim_error;
41733 			} else if (IS_VAR == IS_CV) {
41734 				if (Z_REFCOUNTED_P(value)) {
41735 					Z_ADDREF_P(value);
41736 				}
41737 			} else if (IS_VAR == IS_VAR) {
41738 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
41739 				if (Z_ISREF_P(free_op_data)) {
41740 					if (Z_REFCOUNTED_P(value)) {
41741 						Z_ADDREF_P(value);
41742 					}
41743 					zval_ptr_dtor_nogc(free_op_data);
41744 				}
41745 			} else if (IS_VAR == IS_CONST) {
41746 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
41747 					Z_ADDREF_P(value);
41748 				}
41749 			}
41750 		} else {
41751 			dim = RT_CONSTANT(opline, opline->op2);
41752 			if (IS_CONST == IS_CONST) {
41753 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41754 			} else {
41755 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41756 			}
41757 			if (UNEXPECTED(variable_ptr == NULL)) {
41758 				goto assign_dim_error;
41759 			}
41760 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41761 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
41762 		}
41763 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41764 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41765 		}
41766 	} else {
41767 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
41768 			object_ptr = Z_REFVAL_P(object_ptr);
41769 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41770 				goto try_assign_dim_array;
41771 			}
41772 		}
41773 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
41774 			zend_object *obj = Z_OBJ_P(object_ptr);
41775 
41776 			GC_ADDREF(obj);
41777 			dim = RT_CONSTANT(opline, opline->op2);
41778 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
41779 				dim = ZVAL_UNDEFINED_OP2();
41780 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41781 				dim++;
41782 			}
41783 
41784 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41785 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
41786 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41787 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
41788 				ZVAL_DEREF(value);
41789 			}
41790 
41791 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
41792 
41793 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41794 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
41795 				zend_objects_store_del(obj);
41796 			}
41797 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
41798 			if (IS_CONST == IS_UNUSED) {
41799 				zend_use_new_element_for_string();
41800 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41801 				UNDEF_RESULT();
41802 			} else {
41803 				dim = RT_CONSTANT(opline, opline->op2);
41804 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41805 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
41806 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41807 			}
41808 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
41809 			if (Z_ISREF_P(orig_object_ptr)
41810 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
41811 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
41812 				dim = RT_CONSTANT(opline, opline->op2);
41813 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41814 				UNDEF_RESULT();
41815 			} else {
41816 				HashTable *ht = zend_new_array(8);
41817 				zend_uchar old_type = Z_TYPE_P(object_ptr);
41818 
41819 				ZVAL_ARR(object_ptr, ht);
41820 				if (UNEXPECTED(old_type == IS_FALSE)) {
41821 					GC_ADDREF(ht);
41822 					zend_false_to_array_deprecated();
41823 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
41824 						zend_array_destroy(ht);
41825 						goto assign_dim_error;
41826 					}
41827 				}
41828 				goto try_assign_dim_array;
41829 			}
41830 		} else {
41831 			zend_use_scalar_as_array();
41832 			dim = RT_CONSTANT(opline, opline->op2);
41833 assign_dim_error:
41834 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41835 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41836 				ZVAL_NULL(EX_VAR(opline->result.var));
41837 			}
41838 		}
41839 	}
41840 	if (IS_CONST != IS_UNUSED) {
41841 
41842 	}
41843 
41844 	/* assign_dim has two opcodes! */
41845 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41846 }
41847 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41848 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41849 {
41850 	USE_OPLINE
41851 	zval *object_ptr, *orig_object_ptr;
41852 	zval *value;
41853 	zval *variable_ptr;
41854 	zval *dim;
41855 
41856 	SAVE_OPLINE();
41857 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
41858 
41859 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41860 try_assign_dim_array:
41861 		SEPARATE_ARRAY(object_ptr);
41862 		if (IS_CONST == IS_UNUSED) {
41863 			value = EX_VAR((opline+1)->op1.var);
41864 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
41865 				HashTable *ht = Z_ARRVAL_P(object_ptr);
41866 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
41867 					GC_ADDREF(ht);
41868 				}
41869 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41870 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
41871 					zend_array_destroy(ht);
41872 					goto assign_dim_error;
41873 				}
41874 			}
41875 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
41876 				ZVAL_DEREF(value);
41877 			}
41878 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
41879 			if (UNEXPECTED(value == NULL)) {
41880 				zend_cannot_add_element();
41881 				goto assign_dim_error;
41882 			} else if (IS_CV == IS_CV) {
41883 				if (Z_REFCOUNTED_P(value)) {
41884 					Z_ADDREF_P(value);
41885 				}
41886 			} else if (IS_CV == IS_VAR) {
41887 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
41888 				if (Z_ISREF_P(free_op_data)) {
41889 					if (Z_REFCOUNTED_P(value)) {
41890 						Z_ADDREF_P(value);
41891 					}
41892 					zval_ptr_dtor_nogc(free_op_data);
41893 				}
41894 			} else if (IS_CV == IS_CONST) {
41895 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
41896 					Z_ADDREF_P(value);
41897 				}
41898 			}
41899 		} else {
41900 			dim = RT_CONSTANT(opline, opline->op2);
41901 			if (IS_CONST == IS_CONST) {
41902 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41903 			} else {
41904 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41905 			}
41906 			if (UNEXPECTED(variable_ptr == NULL)) {
41907 				goto assign_dim_error;
41908 			}
41909 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
41910 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
41911 		}
41912 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41913 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41914 		}
41915 	} else {
41916 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
41917 			object_ptr = Z_REFVAL_P(object_ptr);
41918 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41919 				goto try_assign_dim_array;
41920 			}
41921 		}
41922 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
41923 			zend_object *obj = Z_OBJ_P(object_ptr);
41924 
41925 			GC_ADDREF(obj);
41926 			dim = RT_CONSTANT(opline, opline->op2);
41927 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
41928 				dim = ZVAL_UNDEFINED_OP2();
41929 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41930 				dim++;
41931 			}
41932 
41933 			value = EX_VAR((opline+1)->op1.var);
41934 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
41935 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41936 			} else if (IS_CV & (IS_CV|IS_VAR)) {
41937 				ZVAL_DEREF(value);
41938 			}
41939 
41940 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
41941 
41942 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
41943 				zend_objects_store_del(obj);
41944 			}
41945 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
41946 			if (IS_CONST == IS_UNUSED) {
41947 				zend_use_new_element_for_string();
41948 
41949 				UNDEF_RESULT();
41950 			} else {
41951 				dim = RT_CONSTANT(opline, opline->op2);
41952 				value = EX_VAR((opline+1)->op1.var);
41953 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
41954 
41955 			}
41956 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
41957 			if (Z_ISREF_P(orig_object_ptr)
41958 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
41959 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
41960 				dim = RT_CONSTANT(opline, opline->op2);
41961 
41962 				UNDEF_RESULT();
41963 			} else {
41964 				HashTable *ht = zend_new_array(8);
41965 				zend_uchar old_type = Z_TYPE_P(object_ptr);
41966 
41967 				ZVAL_ARR(object_ptr, ht);
41968 				if (UNEXPECTED(old_type == IS_FALSE)) {
41969 					GC_ADDREF(ht);
41970 					zend_false_to_array_deprecated();
41971 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
41972 						zend_array_destroy(ht);
41973 						goto assign_dim_error;
41974 					}
41975 				}
41976 				goto try_assign_dim_array;
41977 			}
41978 		} else {
41979 			zend_use_scalar_as_array();
41980 			dim = RT_CONSTANT(opline, opline->op2);
41981 assign_dim_error:
41982 
41983 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41984 				ZVAL_NULL(EX_VAR(opline->result.var));
41985 			}
41986 		}
41987 	}
41988 	if (IS_CONST != IS_UNUSED) {
41989 
41990 	}
41991 
41992 	/* assign_dim has two opcodes! */
41993 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41994 }
41995 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41997 {
41998 	USE_OPLINE
41999 	zval *value;
42000 	zval *variable_ptr;
42001 
42002 	SAVE_OPLINE();
42003 	value = RT_CONSTANT(opline, opline->op2);
42004 	variable_ptr = EX_VAR(opline->op1.var);
42005 
42006 	value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
42007 	if (UNEXPECTED(0)) {
42008 		ZVAL_COPY(EX_VAR(opline->result.var), value);
42009 	}
42010 
42011 	/* zend_assign_to_variable() always takes care of op2, never free it! */
42012 
42013 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42014 }
42015 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42016 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42017 {
42018 	USE_OPLINE
42019 	zval *value;
42020 	zval *variable_ptr;
42021 
42022 	SAVE_OPLINE();
42023 	value = RT_CONSTANT(opline, opline->op2);
42024 	variable_ptr = EX_VAR(opline->op1.var);
42025 
42026 	value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
42027 	if (UNEXPECTED(1)) {
42028 		ZVAL_COPY(EX_VAR(opline->result.var), value);
42029 	}
42030 
42031 	/* zend_assign_to_variable() always takes care of op2, never free it! */
42032 
42033 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42034 }
42035 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42036 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42037 {
42038 	USE_OPLINE
42039 	zval *property, *container, *value_ptr;
42040 
42041 	SAVE_OPLINE();
42042 
42043 	container = EX_VAR(opline->op1.var);
42044 	property = RT_CONSTANT(opline, opline->op2);
42045 
42046 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
42047 
42048 	if (1) {
42049 		if (IS_CV == IS_UNUSED) {
42050 			if (IS_CONST == IS_CONST) {
42051 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42052 			} else {
42053 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42054 			}
42055 		} else {
42056 			if (IS_CONST == IS_CONST) {
42057 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42058 			} else {
42059 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42060 			}
42061 		}
42062 	} else {
42063 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42064 	}
42065 
42066 
42067 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
42068 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42069 }
42070 
42071 /* 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)42072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42073 {
42074 	USE_OPLINE
42075 	zval *property, *container, *value_ptr;
42076 
42077 	SAVE_OPLINE();
42078 
42079 	container = EX_VAR(opline->op1.var);
42080 	property = RT_CONSTANT(opline, opline->op2);
42081 
42082 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
42083 
42084 	if (1) {
42085 		if (IS_CV == IS_UNUSED) {
42086 			if (IS_CONST == IS_CONST) {
42087 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42088 			} else {
42089 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42090 			}
42091 		} else {
42092 			if (IS_CONST == IS_CONST) {
42093 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42094 			} else {
42095 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42096 			}
42097 		}
42098 	} else {
42099 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
42100 	}
42101 
42102 
42103 
42104 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42105 }
42106 
42107 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42108 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42109 {
42110 	USE_OPLINE
42111 	zval *op1, *op2;
42112 	zend_string *op1_str, *op2_str, *str;
42113 
42114 
42115 	op1 = EX_VAR(opline->op1.var);
42116 	op2 = RT_CONSTANT(opline, opline->op2);
42117 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
42118 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
42119 		zend_string *op1_str = Z_STR_P(op1);
42120 		zend_string *op2_str = Z_STR_P(op2);
42121 		zend_string *str;
42122 
42123 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
42124 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
42125 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
42126 			} else {
42127 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
42128 			}
42129 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42130 				zend_string_release_ex(op1_str, 0);
42131 			}
42132 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
42133 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
42134 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
42135 			} else {
42136 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
42137 			}
42138 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
42139 				zend_string_release_ex(op2_str, 0);
42140 			}
42141 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
42142 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
42143 		    size_t len = ZSTR_LEN(op1_str);
42144 
42145 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
42146 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
42147 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
42148 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
42149 				zend_string_release_ex(op2_str, 0);
42150 			}
42151 		} else {
42152 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
42153 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
42154 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
42155 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
42156 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42157 				zend_string_release_ex(op1_str, 0);
42158 			}
42159 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
42160 				zend_string_release_ex(op2_str, 0);
42161 			}
42162 		}
42163 		ZEND_VM_NEXT_OPCODE();
42164 	}
42165 
42166 	SAVE_OPLINE();
42167 	if (IS_CV == IS_CONST) {
42168 		op1_str = Z_STR_P(op1);
42169 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
42170 		op1_str = zend_string_copy(Z_STR_P(op1));
42171 	} else {
42172 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
42173 			ZVAL_UNDEFINED_OP1();
42174 		}
42175 		op1_str = zval_get_string_func(op1);
42176 	}
42177 	if (IS_CONST == IS_CONST) {
42178 		op2_str = Z_STR_P(op2);
42179 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
42180 		op2_str = zend_string_copy(Z_STR_P(op2));
42181 	} else {
42182 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
42183 			ZVAL_UNDEFINED_OP2();
42184 		}
42185 		op2_str = zval_get_string_func(op2);
42186 	}
42187 	do {
42188 		if (IS_CV != IS_CONST) {
42189 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
42190 				if (IS_CONST == IS_CONST) {
42191 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
42192 						GC_ADDREF(op2_str);
42193 					}
42194 				}
42195 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
42196 				zend_string_release_ex(op1_str, 0);
42197 				break;
42198 			}
42199 		}
42200 		if (IS_CONST != IS_CONST) {
42201 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
42202 				if (IS_CV == IS_CONST) {
42203 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
42204 						GC_ADDREF(op1_str);
42205 					}
42206 				}
42207 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
42208 				zend_string_release_ex(op2_str, 0);
42209 				break;
42210 			}
42211 		}
42212 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
42213 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
42214 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
42215 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
42216 		if (IS_CV != IS_CONST) {
42217 			zend_string_release_ex(op1_str, 0);
42218 		}
42219 		if (IS_CONST != IS_CONST) {
42220 			zend_string_release_ex(op2_str, 0);
42221 		}
42222 	} while (0);
42223 
42224 
42225 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42226 }
42227 
ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42228 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42229 {
42230 	USE_OPLINE
42231 	zval *function_name;
42232 	zval *object;
42233 	zend_function *fbc;
42234 	zend_class_entry *called_scope;
42235 	zend_object *obj;
42236 	zend_execute_data *call;
42237 	uint32_t call_info;
42238 
42239 	SAVE_OPLINE();
42240 
42241 	object = EX_VAR(opline->op1.var);
42242 
42243 	if (IS_CONST != IS_CONST) {
42244 		function_name = RT_CONSTANT(opline, opline->op2);
42245 	}
42246 
42247 	if (IS_CONST != IS_CONST &&
42248 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
42249 		do {
42250 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
42251 				function_name = Z_REFVAL_P(function_name);
42252 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
42253 					break;
42254 				}
42255 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
42256 				ZVAL_UNDEFINED_OP2();
42257 				if (UNEXPECTED(EG(exception) != NULL)) {
42258 
42259 					HANDLE_EXCEPTION();
42260 				}
42261 			}
42262 			zend_throw_error(NULL, "Method name must be a string");
42263 
42264 
42265 			HANDLE_EXCEPTION();
42266 		} while (0);
42267 	}
42268 
42269 	if (IS_CV == IS_UNUSED) {
42270 		obj = Z_OBJ_P(object);
42271 	} else {
42272 		do {
42273 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
42274 				obj = Z_OBJ_P(object);
42275 			} else {
42276 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
42277 					zend_reference *ref = Z_REF_P(object);
42278 
42279 					object = &ref->val;
42280 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
42281 						obj = Z_OBJ_P(object);
42282 						if (IS_CV & IS_VAR) {
42283 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
42284 								efree_size(ref, sizeof(zend_reference));
42285 							} else {
42286 								Z_ADDREF_P(object);
42287 							}
42288 						}
42289 						break;
42290 					}
42291 				}
42292 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
42293 					object = ZVAL_UNDEFINED_OP1();
42294 					if (UNEXPECTED(EG(exception) != NULL)) {
42295 						if (IS_CONST != IS_CONST) {
42296 
42297 						}
42298 						HANDLE_EXCEPTION();
42299 					}
42300 				}
42301 				if (IS_CONST == IS_CONST) {
42302 					function_name = RT_CONSTANT(opline, opline->op2);
42303 				}
42304 				zend_invalid_method_call(object, function_name);
42305 
42306 
42307 				HANDLE_EXCEPTION();
42308 			}
42309 		} while (0);
42310 	}
42311 
42312 	called_scope = obj->ce;
42313 
42314 	if (IS_CONST == IS_CONST &&
42315 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
42316 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
42317 	} else {
42318 	    zend_object *orig_obj = obj;
42319 
42320 		if (IS_CONST == IS_CONST) {
42321 			function_name = RT_CONSTANT(opline, opline->op2);
42322 		}
42323 
42324 		/* First, locate the function. */
42325 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
42326 		if (UNEXPECTED(fbc == NULL)) {
42327 			if (EXPECTED(!EG(exception))) {
42328 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
42329 			}
42330 
42331 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
42332 				zend_objects_store_del(orig_obj);
42333 			}
42334 			HANDLE_EXCEPTION();
42335 		}
42336 		if (IS_CONST == IS_CONST &&
42337 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
42338 		    EXPECTED(obj == orig_obj)) {
42339 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
42340 		}
42341 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
42342 			GC_ADDREF(obj); /* For $this pointer */
42343 			if (GC_DELREF(orig_obj) == 0) {
42344 				zend_objects_store_del(orig_obj);
42345 			}
42346 		}
42347 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
42348 			init_func_run_time_cache(&fbc->op_array);
42349 		}
42350 	}
42351 
42352 	if (IS_CONST != IS_CONST) {
42353 
42354 	}
42355 
42356 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
42357 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
42358 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
42359 			zend_objects_store_del(obj);
42360 			if (UNEXPECTED(EG(exception))) {
42361 				HANDLE_EXCEPTION();
42362 			}
42363 		}
42364 		/* call static method */
42365 		obj = (zend_object*)called_scope;
42366 		call_info = ZEND_CALL_NESTED_FUNCTION;
42367 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
42368 		if (IS_CV == IS_CV) {
42369 			GC_ADDREF(obj); /* For $this pointer */
42370 		}
42371 		/* CV may be changed indirectly (e.g. when it's a reference) */
42372 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
42373 	}
42374 
42375 	call = zend_vm_stack_push_call_frame(call_info,
42376 		fbc, opline->extended_value, obj);
42377 	call->prev_execute_data = EX(call);
42378 	EX(call) = call;
42379 
42380 	ZEND_VM_NEXT_OPCODE();
42381 }
42382 
ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42383 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42384 {
42385 	USE_OPLINE
42386 	zval *varptr, *arg;
42387 
42388 	if (IS_CONST == IS_CONST) {
42389 		SAVE_OPLINE();
42390 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42391 		uint32_t arg_num;
42392 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
42393 		if (UNEXPECTED(!arg)) {
42394 
42395 			HANDLE_EXCEPTION();
42396 		}
42397 	} else {
42398 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
42399 	}
42400 
42401 	varptr = EX_VAR(opline->op1.var);
42402 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
42403 		SAVE_OPLINE();
42404 		ZVAL_UNDEFINED_OP1();
42405 		ZVAL_NULL(arg);
42406 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42407 	}
42408 
42409 	if (IS_CV == IS_CV) {
42410 		ZVAL_COPY_DEREF(arg, varptr);
42411 	} else /* if (IS_CV == IS_VAR) */ {
42412 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
42413 			zend_refcounted *ref = Z_COUNTED_P(varptr);
42414 
42415 			varptr = Z_REFVAL_P(varptr);
42416 			ZVAL_COPY_VALUE(arg, varptr);
42417 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
42418 				efree_size(ref, sizeof(zend_reference));
42419 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
42420 				Z_ADDREF_P(arg);
42421 			}
42422 		} else {
42423 			ZVAL_COPY_VALUE(arg, varptr);
42424 		}
42425 	}
42426 
42427 	ZEND_VM_NEXT_OPCODE();
42428 }
42429 
ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42430 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42431 {
42432 	USE_OPLINE
42433 	zval *varptr, *arg;
42434 
42435 	SAVE_OPLINE();
42436 	if (IS_CONST == IS_CONST) {
42437 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42438 		uint32_t arg_num;
42439 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
42440 		if (UNEXPECTED(!arg)) {
42441 
42442 			HANDLE_EXCEPTION();
42443 		}
42444 	} else {
42445 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
42446 	}
42447 
42448 	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
42449 	if (Z_ISREF_P(varptr)) {
42450 		Z_ADDREF_P(varptr);
42451 	} else {
42452 		ZVAL_MAKE_REF_EX(varptr, 2);
42453 	}
42454 	ZVAL_REF(arg, Z_REF_P(varptr));
42455 
42456 	ZEND_VM_NEXT_OPCODE();
42457 }
42458 
ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42460 {
42461 	USE_OPLINE
42462 	zval *varptr, *arg;
42463 	uint32_t arg_num;
42464 
42465 	if (IS_CONST == IS_CONST) {
42466 		SAVE_OPLINE();
42467 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42468 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
42469 		if (UNEXPECTED(!arg)) {
42470 
42471 			HANDLE_EXCEPTION();
42472 		}
42473 	} else {
42474 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
42475 		arg_num = opline->op2.num;
42476 	}
42477 
42478 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
42479 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
42480 			goto send_var_by_ref;
42481 		}
42482 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
42483 send_var_by_ref:
42484 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
42485 		if (Z_ISREF_P(varptr)) {
42486 			Z_ADDREF_P(varptr);
42487 		} else {
42488 			ZVAL_MAKE_REF_EX(varptr, 2);
42489 		}
42490 		ZVAL_REF(arg, Z_REF_P(varptr));
42491 
42492 		ZEND_VM_NEXT_OPCODE();
42493 	}
42494 
42495 	varptr = EX_VAR(opline->op1.var);
42496 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
42497 		SAVE_OPLINE();
42498 		ZVAL_UNDEFINED_OP1();
42499 		ZVAL_NULL(arg);
42500 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42501 	}
42502 
42503 	if (IS_CV == IS_CV) {
42504 		ZVAL_COPY_DEREF(arg, varptr);
42505 	} else /* if (IS_CV == IS_VAR) */ {
42506 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
42507 			zend_refcounted *ref = Z_COUNTED_P(varptr);
42508 
42509 			varptr = Z_REFVAL_P(varptr);
42510 			ZVAL_COPY_VALUE(arg, varptr);
42511 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
42512 				efree_size(ref, sizeof(zend_reference));
42513 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
42514 				Z_ADDREF_P(arg);
42515 			}
42516 		} else {
42517 			ZVAL_COPY_VALUE(arg, varptr);
42518 		}
42519 	}
42520 
42521 	ZEND_VM_NEXT_OPCODE();
42522 }
42523 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42524 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42525 {
42526 	USE_OPLINE
42527 	zval *expr_ptr, new_expr;
42528 
42529 	SAVE_OPLINE();
42530 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
42531 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
42532 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
42533 		if (Z_ISREF_P(expr_ptr)) {
42534 			Z_ADDREF_P(expr_ptr);
42535 		} else {
42536 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
42537 		}
42538 
42539 	} else {
42540 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
42541 		if (IS_CV == IS_TMP_VAR) {
42542 			/* pass */
42543 		} else if (IS_CV == IS_CONST) {
42544 			Z_TRY_ADDREF_P(expr_ptr);
42545 		} else if (IS_CV == IS_CV) {
42546 			ZVAL_DEREF(expr_ptr);
42547 			Z_TRY_ADDREF_P(expr_ptr);
42548 		} else /* if (IS_CV == IS_VAR) */ {
42549 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
42550 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
42551 
42552 				expr_ptr = Z_REFVAL_P(expr_ptr);
42553 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
42554 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
42555 					expr_ptr = &new_expr;
42556 					efree_size(ref, sizeof(zend_reference));
42557 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
42558 					Z_ADDREF_P(expr_ptr);
42559 				}
42560 			}
42561 		}
42562 	}
42563 
42564 	if (IS_CONST != IS_UNUSED) {
42565 		zval *offset = RT_CONSTANT(opline, opline->op2);
42566 		zend_string *str;
42567 		zend_ulong hval;
42568 
42569 add_again:
42570 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
42571 			str = Z_STR_P(offset);
42572 			if (IS_CONST != IS_CONST) {
42573 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
42574 					goto num_index;
42575 				}
42576 			}
42577 str_index:
42578 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
42579 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
42580 			hval = Z_LVAL_P(offset);
42581 num_index:
42582 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
42583 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
42584 			offset = Z_REFVAL_P(offset);
42585 			goto add_again;
42586 		} else if (Z_TYPE_P(offset) == IS_NULL) {
42587 			str = ZSTR_EMPTY_ALLOC();
42588 			goto str_index;
42589 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
42590 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
42591 			goto num_index;
42592 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
42593 			hval = 0;
42594 			goto num_index;
42595 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
42596 			hval = 1;
42597 			goto num_index;
42598 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
42599 			zend_use_resource_as_offset(offset);
42600 			hval = Z_RES_HANDLE_P(offset);
42601 			goto num_index;
42602 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
42603 			ZVAL_UNDEFINED_OP2();
42604 			str = ZSTR_EMPTY_ALLOC();
42605 			goto str_index;
42606 		} else {
42607 			zend_illegal_offset();
42608 			zval_ptr_dtor_nogc(expr_ptr);
42609 		}
42610 
42611 	} else {
42612 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
42613 			zend_cannot_add_element();
42614 			zval_ptr_dtor_nogc(expr_ptr);
42615 		}
42616 	}
42617 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42618 }
42619 
ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42620 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42621 {
42622 	zval *array;
42623 	uint32_t size;
42624 	USE_OPLINE
42625 
42626 	array = EX_VAR(opline->result.var);
42627 	if (IS_CV != IS_UNUSED) {
42628 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
42629 		ZVAL_ARR(array, zend_new_array(size));
42630 		/* Explicitly initialize array as not-packed if flag is set */
42631 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
42632 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
42633 		}
42634 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42635 	} else {
42636 		ZVAL_ARR(array, zend_new_array(0));
42637 		ZEND_VM_NEXT_OPCODE();
42638 	}
42639 }
42640 
ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42642 {
42643 	USE_OPLINE
42644 	zval *container;
42645 	zval *offset;
42646 	zend_ulong hval;
42647 	zend_string *key;
42648 
42649 	SAVE_OPLINE();
42650 	container = EX_VAR(opline->op1.var);
42651 	offset = RT_CONSTANT(opline, opline->op2);
42652 
42653 	do {
42654 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42655 			HashTable *ht;
42656 
42657 unset_dim_array:
42658 			SEPARATE_ARRAY(container);
42659 			ht = Z_ARRVAL_P(container);
42660 offset_again:
42661 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
42662 				key = Z_STR_P(offset);
42663 				if (IS_CONST != IS_CONST) {
42664 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
42665 						goto num_index_dim;
42666 					}
42667 				}
42668 str_index_dim:
42669 				ZEND_ASSERT(ht != &EG(symbol_table));
42670 				zend_hash_del(ht, key);
42671 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
42672 				hval = Z_LVAL_P(offset);
42673 num_index_dim:
42674 				zend_hash_index_del(ht, hval);
42675 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
42676 				offset = Z_REFVAL_P(offset);
42677 				goto offset_again;
42678 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
42679 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
42680 				goto num_index_dim;
42681 			} else if (Z_TYPE_P(offset) == IS_NULL) {
42682 				key = ZSTR_EMPTY_ALLOC();
42683 				goto str_index_dim;
42684 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
42685 				hval = 0;
42686 				goto num_index_dim;
42687 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
42688 				hval = 1;
42689 				goto num_index_dim;
42690 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
42691 				zend_use_resource_as_offset(offset);
42692 				hval = Z_RES_HANDLE_P(offset);
42693 				goto num_index_dim;
42694 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
42695 				ZVAL_UNDEFINED_OP2();
42696 				key = ZSTR_EMPTY_ALLOC();
42697 				goto str_index_dim;
42698 			} else {
42699 				zend_type_error("Illegal offset type in unset");
42700 			}
42701 			break;
42702 		} else if (Z_ISREF_P(container)) {
42703 			container = Z_REFVAL_P(container);
42704 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42705 				goto unset_dim_array;
42706 			}
42707 		}
42708 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42709 			container = ZVAL_UNDEFINED_OP1();
42710 		}
42711 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
42712 			offset = ZVAL_UNDEFINED_OP2();
42713 		}
42714 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
42715 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
42716 				offset++;
42717 			}
42718 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
42719 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
42720 			zend_throw_error(NULL, "Cannot unset string offsets");
42721 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
42722 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
42723 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
42724 			zend_false_to_array_deprecated();
42725 		}
42726 	} while (0);
42727 
42728 
42729 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42730 }
42731 
ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42733 {
42734 	USE_OPLINE
42735 	zval *container;
42736 	zval *offset;
42737 	zend_string *name, *tmp_name;
42738 
42739 	SAVE_OPLINE();
42740 	container = EX_VAR(opline->op1.var);
42741 	offset = RT_CONSTANT(opline, opline->op2);
42742 
42743 	do {
42744 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
42745 			if (Z_ISREF_P(container)) {
42746 				container = Z_REFVAL_P(container);
42747 				if (Z_TYPE_P(container) != IS_OBJECT) {
42748 					if (IS_CV == IS_CV
42749 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42750 						ZVAL_UNDEFINED_OP1();
42751 					}
42752 					break;
42753 				}
42754 			} else {
42755 				break;
42756 			}
42757 		}
42758 		if (IS_CONST == IS_CONST) {
42759 			name = Z_STR_P(offset);
42760 		} else {
42761 			name = zval_try_get_tmp_string(offset, &tmp_name);
42762 			if (UNEXPECTED(!name)) {
42763 				break;
42764 			}
42765 		}
42766 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
42767 		if (IS_CONST != IS_CONST) {
42768 			zend_tmp_string_release(tmp_name);
42769 		}
42770 	} while (0);
42771 
42772 
42773 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42774 }
42775 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42776 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42777 {
42778 	USE_OPLINE
42779 	zval *container;
42780 	bool result;
42781 	zend_ulong hval;
42782 	zval *offset;
42783 
42784 	SAVE_OPLINE();
42785 	container = EX_VAR(opline->op1.var);
42786 	offset = RT_CONSTANT(opline, opline->op2);
42787 
42788 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42789 		HashTable *ht;
42790 		zval *value;
42791 		zend_string *str;
42792 
42793 isset_dim_obj_array:
42794 		ht = Z_ARRVAL_P(container);
42795 isset_again:
42796 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
42797 			str = Z_STR_P(offset);
42798 			if (IS_CONST != IS_CONST) {
42799 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
42800 					goto num_index_prop;
42801 				}
42802 			}
42803 			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
42804 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
42805 			hval = Z_LVAL_P(offset);
42806 num_index_prop:
42807 			value = zend_hash_index_find(ht, hval);
42808 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
42809 			offset = Z_REFVAL_P(offset);
42810 			goto isset_again;
42811 		} else {
42812 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
42813 			if (UNEXPECTED(EG(exception))) {
42814 				result = 0;
42815 				goto isset_dim_obj_exit;
42816 			}
42817 		}
42818 
42819 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
42820 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
42821 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
42822 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
42823 
42824 			if (IS_CV & (IS_CONST|IS_CV)) {
42825 				/* avoid exception check */
42826 
42827 				ZEND_VM_SMART_BRANCH(result, 0);
42828 			}
42829 		} else {
42830 			result = (value == NULL || !i_zend_is_true(value));
42831 		}
42832 		goto isset_dim_obj_exit;
42833 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
42834 		container = Z_REFVAL_P(container);
42835 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42836 			goto isset_dim_obj_array;
42837 		}
42838 	}
42839 
42840 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
42841 		offset++;
42842 	}
42843 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
42844 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
42845 	} else {
42846 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
42847 	}
42848 
42849 isset_dim_obj_exit:
42850 
42851 
42852 	ZEND_VM_SMART_BRANCH(result, 1);
42853 }
42854 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42855 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42856 {
42857 	USE_OPLINE
42858 	zval *container;
42859 	int result;
42860 	zval *offset;
42861 	zend_string *name, *tmp_name;
42862 
42863 	SAVE_OPLINE();
42864 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
42865 	offset = RT_CONSTANT(opline, opline->op2);
42866 
42867 	if (IS_CV == IS_CONST ||
42868 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
42869 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
42870 			container = Z_REFVAL_P(container);
42871 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
42872 				result = (opline->extended_value & ZEND_ISEMPTY);
42873 				goto isset_object_finish;
42874 			}
42875 		} else {
42876 			result = (opline->extended_value & ZEND_ISEMPTY);
42877 			goto isset_object_finish;
42878 		}
42879 	}
42880 
42881 	if (IS_CONST == IS_CONST) {
42882 		name = Z_STR_P(offset);
42883 	} else {
42884 		name = zval_try_get_tmp_string(offset, &tmp_name);
42885 		if (UNEXPECTED(!name)) {
42886 			result = 0;
42887 			goto isset_object_finish;
42888 		}
42889 	}
42890 
42891 	result =
42892 		(opline->extended_value & ZEND_ISEMPTY) ^
42893 		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));
42894 
42895 	if (IS_CONST != IS_CONST) {
42896 		zend_tmp_string_release(tmp_name);
42897 	}
42898 
42899 isset_object_finish:
42900 
42901 
42902 	ZEND_VM_SMART_BRANCH(result, 1);
42903 }
42904 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42905 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42906 {
42907 	USE_OPLINE
42908 
42909 	zval *key, *subject;
42910 	HashTable *ht;
42911 	bool result;
42912 
42913 	SAVE_OPLINE();
42914 
42915 	key = EX_VAR(opline->op1.var);
42916 	subject = RT_CONSTANT(opline, opline->op2);
42917 
42918 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
42919 array_key_exists_array:
42920 		ht = Z_ARRVAL_P(subject);
42921 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
42922 	} else {
42923 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
42924 			subject = Z_REFVAL_P(subject);
42925 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
42926 				goto array_key_exists_array;
42927 			}
42928 		}
42929 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
42930 		result = 0;
42931 	}
42932 
42933 
42934 	ZEND_VM_SMART_BRANCH(result, 1);
42935 }
42936 
42937 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42938 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42939 {
42940 	USE_OPLINE
42941 	zval *expr;
42942 	bool result;
42943 
42944 	SAVE_OPLINE();
42945 	expr = EX_VAR(opline->op1.var);
42946 
42947 try_instanceof:
42948 	if (Z_TYPE_P(expr) == IS_OBJECT) {
42949 		zend_class_entry *ce;
42950 
42951 		if (IS_CONST == IS_CONST) {
42952 			ce = CACHED_PTR(opline->extended_value);
42953 			if (UNEXPECTED(ce == NULL)) {
42954 				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);
42955 				if (EXPECTED(ce)) {
42956 					CACHE_PTR(opline->extended_value, ce);
42957 				}
42958 			}
42959 		} else if (IS_CONST == IS_UNUSED) {
42960 			ce = zend_fetch_class(NULL, opline->op2.num);
42961 			if (UNEXPECTED(ce == NULL)) {
42962 
42963 				ZVAL_UNDEF(EX_VAR(opline->result.var));
42964 				HANDLE_EXCEPTION();
42965 			}
42966 		} else {
42967 			ce = Z_CE_P(EX_VAR(opline->op2.var));
42968 		}
42969 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
42970 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
42971 		expr = Z_REFVAL_P(expr);
42972 		goto try_instanceof;
42973 	} else {
42974 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
42975 			ZVAL_UNDEFINED_OP1();
42976 		}
42977 		result = 0;
42978 	}
42979 
42980 	ZEND_VM_SMART_BRANCH(result, 1);
42981 }
42982 
ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42983 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42984 {
42985 	USE_OPLINE
42986 
42987 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
42988 
42989 	SAVE_OPLINE();
42990 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
42991 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42992 	}
42993 
42994 	/* Destroy the previously yielded value */
42995 	zval_ptr_dtor(&generator->value);
42996 
42997 	/* Destroy the previously yielded key */
42998 	zval_ptr_dtor(&generator->key);
42999 
43000 	/* Set the new yielded value */
43001 	if (IS_CV != IS_UNUSED) {
43002 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
43003 			/* Constants and temporary variables aren't yieldable by reference,
43004 			 * but we still allow them with a notice. */
43005 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
43006 				zval *value;
43007 
43008 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
43009 
43010 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
43011 				ZVAL_COPY_VALUE(&generator->value, value);
43012 				if (IS_CV == IS_CONST) {
43013 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
43014 						Z_ADDREF(generator->value);
43015 					}
43016 				}
43017 			} else {
43018 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
43019 
43020 				/* If a function call result is yielded and the function did
43021 				 * not return by reference we throw a notice. */
43022 				do {
43023 					if (IS_CV == IS_VAR) {
43024 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
43025 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
43026 						 && !Z_ISREF_P(value_ptr)) {
43027 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
43028 							ZVAL_COPY(&generator->value, value_ptr);
43029 							break;
43030 						}
43031 					}
43032 					if (Z_ISREF_P(value_ptr)) {
43033 						Z_ADDREF_P(value_ptr);
43034 					} else {
43035 						ZVAL_MAKE_REF_EX(value_ptr, 2);
43036 					}
43037 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
43038 				} while (0);
43039 
43040 			}
43041 		} else {
43042 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
43043 
43044 			/* Consts, temporary variables and references need copying */
43045 			if (IS_CV == IS_CONST) {
43046 				ZVAL_COPY_VALUE(&generator->value, value);
43047 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
43048 					Z_ADDREF(generator->value);
43049 				}
43050 			} else if (IS_CV == IS_TMP_VAR) {
43051 				ZVAL_COPY_VALUE(&generator->value, value);
43052             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
43053 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
43054 
43055 			} else {
43056 				ZVAL_COPY_VALUE(&generator->value, value);
43057 				if (IS_CV == IS_CV) {
43058 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
43059 				}
43060 			}
43061 		}
43062 	} else {
43063 		/* If no value was specified yield null */
43064 		ZVAL_NULL(&generator->value);
43065 	}
43066 
43067 	/* Set the new yielded key */
43068 	if (IS_CONST != IS_UNUSED) {
43069 		zval *key = RT_CONSTANT(opline, opline->op2);
43070 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
43071 			key = Z_REFVAL_P(key);
43072 		}
43073 		ZVAL_COPY(&generator->key, key);
43074 
43075 		if (Z_TYPE(generator->key) == IS_LONG
43076 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
43077 		) {
43078 			generator->largest_used_integer_key = Z_LVAL(generator->key);
43079 		}
43080 	} else {
43081 		/* If no key was specified we use auto-increment keys */
43082 		generator->largest_used_integer_key++;
43083 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
43084 	}
43085 
43086 	if (RETURN_VALUE_USED(opline)) {
43087 		/* If the return value of yield is used set the send
43088 		 * target and initialize it to NULL */
43089 		generator->send_target = EX_VAR(opline->result.var);
43090 		ZVAL_NULL(generator->send_target);
43091 	} else {
43092 		generator->send_target = NULL;
43093 	}
43094 
43095 	/* We increment to the next op, so we are at the correct position when the
43096 	 * generator is resumed. */
43097 	ZEND_VM_INC_OPCODE();
43098 
43099 	/* The GOTO VM uses a local opline variable. We need to set the opline
43100 	 * variable in execute_data so we don't resume at an old position. */
43101 	SAVE_OPLINE();
43102 
43103 	ZEND_VM_RETURN();
43104 }
43105 
ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43106 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43107 {
43108 	USE_OPLINE
43109 	zend_string *varname;
43110 	zval *value;
43111 	zval *variable_ptr;
43112 	uintptr_t idx;
43113 	zend_reference *ref;
43114 
43115 	ZEND_VM_REPEATABLE_OPCODE
43116 
43117 	varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));
43118 
43119 	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
43120 	idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
43121 	if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
43122 		Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
43123 
43124 		if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
43125 	        (EXPECTED(p->key == varname) ||
43126 	         (EXPECTED(p->h == ZSTR_H(varname)) &&
43127 	          EXPECTED(p->key != NULL) &&
43128 	          EXPECTED(zend_string_equal_content(p->key, varname))))) {
43129 
43130 			value = (zval*)p; /* value = &p->val; */
43131 			goto check_indirect;
43132 		}
43133 	}
43134 
43135 	value = zend_hash_find_known_hash(&EG(symbol_table), varname);
43136 	if (UNEXPECTED(value == NULL)) {
43137 		value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
43138 		idx = (char*)value - (char*)EG(symbol_table).arData;
43139 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
43140 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
43141 	} else {
43142 		idx = (char*)value - (char*)EG(symbol_table).arData;
43143 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
43144 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
43145 check_indirect:
43146 		/* GLOBAL variable may be an INDIRECT pointer to CV */
43147 		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
43148 			value = Z_INDIRECT_P(value);
43149 			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
43150 				ZVAL_NULL(value);
43151 			}
43152 		}
43153 	}
43154 
43155 	if (UNEXPECTED(!Z_ISREF_P(value))) {
43156 		ZVAL_MAKE_REF_EX(value, 2);
43157 		ref = Z_REF_P(value);
43158 	} else {
43159 		ref = Z_REF_P(value);
43160 		GC_ADDREF(ref);
43161 	}
43162 
43163 	variable_ptr = EX_VAR(opline->op1.var);
43164 
43165 	if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
43166 		zend_refcounted *garbage = Z_COUNTED_P(variable_ptr);
43167 
43168 		ZVAL_REF(variable_ptr, ref);
43169 		SAVE_OPLINE();
43170 		if (GC_DELREF(garbage) == 0) {
43171 			rc_dtor_func(garbage);
43172 			if (UNEXPECTED(EG(exception))) {
43173 				ZVAL_NULL(variable_ptr);
43174 				HANDLE_EXCEPTION();
43175 			}
43176 		} else {
43177 			gc_check_possible_root(garbage);
43178 		}
43179 	} else {
43180 		ZVAL_REF(variable_ptr, ref);
43181 	}
43182 
43183 	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
43184 	ZEND_VM_NEXT_OPCODE();
43185 }
43186 
ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43187 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43188 {
43189 	USE_OPLINE
43190 	zval *op1;
43191 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
43192 	zval *result;
43193 
43194 	op1 = EX_VAR(opline->op1.var);
43195 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43196 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CV == IS_CONST);
43197 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43198 			zval_ptr_dtor_str(op1);
43199 		}
43200 		ZEND_VM_SMART_BRANCH(result, 0);
43201 	}
43202 
43203 	if (opline->extended_value) {
43204 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43205 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
43206 			ZEND_VM_SMART_BRANCH(result, 0);
43207 		}
43208 		SAVE_OPLINE();
43209 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
43210 			op1 = Z_REFVAL_P(op1);
43211 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43212 				result = zend_hash_find(ht, Z_STR_P(op1));
43213 
43214 				ZEND_VM_SMART_BRANCH(result, 0);
43215 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43216 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
43217 
43218 				ZEND_VM_SMART_BRANCH(result, 0);
43219 			}
43220 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43221 			ZVAL_UNDEFINED_OP1();
43222 		}
43223 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
43224 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43225 			SAVE_OPLINE();
43226 			ZVAL_UNDEFINED_OP1();
43227 			if (UNEXPECTED(EG(exception) != NULL)) {
43228 				HANDLE_EXCEPTION();
43229 			}
43230 		}
43231 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
43232 		ZEND_VM_SMART_BRANCH(result, 0);
43233 	} else {
43234 		zend_string *key;
43235 		zval key_tmp;
43236 
43237 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
43238 			op1 = Z_REFVAL_P(op1);
43239 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43240 				result = zend_hash_find(ht, Z_STR_P(op1));
43241 
43242 				ZEND_VM_SMART_BRANCH(result, 0);
43243 			}
43244 		}
43245 
43246 		SAVE_OPLINE();
43247 		ZEND_HASH_FOREACH_STR_KEY(ht, key) {
43248 			ZVAL_STR(&key_tmp, key);
43249 			if (zend_compare(op1, &key_tmp) == 0) {
43250 
43251 				ZEND_VM_SMART_BRANCH(1, 1);
43252 			}
43253 		} ZEND_HASH_FOREACH_END();
43254 	}
43255 
43256 	ZEND_VM_SMART_BRANCH(0, 1);
43257 }
43258 
ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43259 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43260 {
43261 	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
43262 	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
43263 	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
43264 	USE_OPLINE
43265 	zval *op1, *op2;
43266 	bool result;
43267 
43268 	op1 = EX_VAR(opline->op1.var);
43269 	op2 = RT_CONSTANT(opline, opline->op2);
43270 	result = fast_is_identical_function(op1, op2);
43271 	/* Free is a no-op for const/cv */
43272 	ZEND_VM_SMART_BRANCH(result, 0);
43273 }
43274 
ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43275 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43276 {
43277 	USE_OPLINE
43278 	zval *op1, *op2;
43279 	bool result;
43280 
43281 	op1 = EX_VAR(opline->op1.var);
43282 	op2 = RT_CONSTANT(opline, opline->op2);
43283 	result = fast_is_identical_function(op1, op2);
43284 	/* Free is a no-op for const/cv */
43285 	ZEND_VM_SMART_BRANCH(!result, 0);
43286 }
43287 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43288 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43289 {
43290 	USE_OPLINE
43291 	zval *container, *dim, *value;
43292 	zend_long offset;
43293 	HashTable *ht;
43294 
43295 	container = EX_VAR(opline->op1.var);
43296 	dim = RT_CONSTANT(opline, opline->op2);
43297 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43298 fetch_dim_r_index_array:
43299 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
43300 			offset = Z_LVAL_P(dim);
43301 		} else {
43302 			SAVE_OPLINE();
43303 			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
43304 
43305 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43306 		}
43307 		ht = Z_ARRVAL_P(container);
43308 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
43309 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
43310 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43311 			SAVE_OPLINE();
43312 
43313 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43314 		} else {
43315 			ZEND_VM_NEXT_OPCODE();
43316 		}
43317 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
43318 		container = Z_REFVAL_P(container);
43319 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43320 			goto fetch_dim_r_index_array;
43321 		} else {
43322 			goto fetch_dim_r_index_slow;
43323 		}
43324 	} else {
43325 fetch_dim_r_index_slow:
43326 		SAVE_OPLINE();
43327 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43328 			dim++;
43329 		}
43330 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
43331 
43332 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43333 	}
43334 
43335 fetch_dim_r_index_undef:
43336 	ZVAL_NULL(EX_VAR(opline->result.var));
43337 	SAVE_OPLINE();
43338 	zend_undefined_offset(offset);
43339 
43340 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43341 }
43342 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43343 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43344 {
43345 	USE_OPLINE
43346 	zval *container, *dim, *value;
43347 	zend_long offset;
43348 	HashTable *ht;
43349 
43350 	container = EX_VAR(opline->op1.var);
43351 	dim = EX_VAR(opline->op2.var);
43352 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43353 fetch_dim_r_index_array:
43354 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
43355 			offset = Z_LVAL_P(dim);
43356 		} else {
43357 			SAVE_OPLINE();
43358 			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
43359 
43360 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43361 		}
43362 		ht = Z_ARRVAL_P(container);
43363 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
43364 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
43365 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43366 			SAVE_OPLINE();
43367 
43368 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43369 		} else {
43370 			ZEND_VM_NEXT_OPCODE();
43371 		}
43372 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
43373 		container = Z_REFVAL_P(container);
43374 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43375 			goto fetch_dim_r_index_array;
43376 		} else {
43377 			goto fetch_dim_r_index_slow;
43378 		}
43379 	} else {
43380 fetch_dim_r_index_slow:
43381 		SAVE_OPLINE();
43382 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43383 			dim++;
43384 		}
43385 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
43386 
43387 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43388 	}
43389 
43390 fetch_dim_r_index_undef:
43391 	ZVAL_NULL(EX_VAR(opline->result.var));
43392 	SAVE_OPLINE();
43393 	zend_undefined_offset(offset);
43394 
43395 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43396 }
43397 
ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43398 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43399 {
43400 	USE_OPLINE
43401 	zval *op1, *op2;
43402 
43403 	SAVE_OPLINE();
43404 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
43405 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43406 	div_function(EX_VAR(opline->result.var), op1, op2);
43407 
43408 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43409 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43410 }
43411 
ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43412 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43413 {
43414 	USE_OPLINE
43415 	zval *op1, *op2;
43416 
43417 	SAVE_OPLINE();
43418 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
43419 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43420 	pow_function(EX_VAR(opline->result.var), op1, op2);
43421 
43422 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43423 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43424 }
43425 
ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43426 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43427 {
43428 	USE_OPLINE
43429 	zval *op1, *op2;
43430 
43431 	op1 = EX_VAR(opline->op1.var);
43432 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43433 
43434 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
43435 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
43436 		zend_string *op1_str = Z_STR_P(op1);
43437 		zend_string *op2_str = Z_STR_P(op2);
43438 		zend_string *str;
43439 
43440 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
43441 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
43442 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
43443 			} else {
43444 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
43445 			}
43446 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43447 				zend_string_release_ex(op1_str, 0);
43448 			}
43449 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
43450 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
43451 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
43452 			} else {
43453 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
43454 			}
43455 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43456 				zend_string_release_ex(op2_str, 0);
43457 			}
43458 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
43459 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
43460 		    size_t len = ZSTR_LEN(op1_str);
43461 
43462 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
43463 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
43464 			}
43465 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
43466 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43467 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43468 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43469 				zend_string_release_ex(op2_str, 0);
43470 			}
43471 		} else {
43472 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
43473 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
43474 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43475 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43476 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43477 				zend_string_release_ex(op1_str, 0);
43478 			}
43479 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43480 				zend_string_release_ex(op2_str, 0);
43481 			}
43482 		}
43483 		ZEND_VM_NEXT_OPCODE();
43484 	} else {
43485 		SAVE_OPLINE();
43486 
43487 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43488 			op1 = ZVAL_UNDEFINED_OP1();
43489 		}
43490 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
43491 			op2 = ZVAL_UNDEFINED_OP2();
43492 		}
43493 		concat_function(EX_VAR(opline->result.var), op1, op2);
43494 
43495 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43496 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43497 	}
43498 }
43499 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43500 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43501 {
43502 	USE_OPLINE
43503 	zval *op1, *op2;
43504 	double d1, d2;
43505 
43506 	op1 = EX_VAR(opline->op1.var);
43507 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43508 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43509 		/* pass */
43510 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43511 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43512 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
43513 is_equal_true:
43514 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
43515 			} else {
43516 is_equal_false:
43517 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
43518 			}
43519 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43520 			d1 = (double)Z_LVAL_P(op1);
43521 			d2 = Z_DVAL_P(op2);
43522 			goto is_equal_double;
43523 		}
43524 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43525 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43526 			d1 = Z_DVAL_P(op1);
43527 			d2 = Z_DVAL_P(op2);
43528 is_equal_double:
43529 			if (d1 == d2) {
43530 				goto is_equal_true;
43531 			} else {
43532 				goto is_equal_false;
43533 			}
43534 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43535 			d1 = Z_DVAL_P(op1);
43536 			d2 = (double)Z_LVAL_P(op2);
43537 			goto is_equal_double;
43538 		}
43539 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43540 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43541 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43542 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43543 				zval_ptr_dtor_str(op1);
43544 			}
43545 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43546 				zval_ptr_dtor_str(op2);
43547 			}
43548 			if (result) {
43549 				goto is_equal_true;
43550 			} else {
43551 				goto is_equal_false;
43552 			}
43553 		}
43554 	}
43555 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43556 }
43557 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43558 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43559 {
43560 	USE_OPLINE
43561 	zval *op1, *op2;
43562 	double d1, d2;
43563 
43564 	op1 = EX_VAR(opline->op1.var);
43565 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43566 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43567 		/* pass */
43568 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43569 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43570 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
43571 is_equal_true:
43572 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
43573 			} else {
43574 is_equal_false:
43575 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
43576 			}
43577 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43578 			d1 = (double)Z_LVAL_P(op1);
43579 			d2 = Z_DVAL_P(op2);
43580 			goto is_equal_double;
43581 		}
43582 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43583 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43584 			d1 = Z_DVAL_P(op1);
43585 			d2 = Z_DVAL_P(op2);
43586 is_equal_double:
43587 			if (d1 == d2) {
43588 				goto is_equal_true;
43589 			} else {
43590 				goto is_equal_false;
43591 			}
43592 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43593 			d1 = Z_DVAL_P(op1);
43594 			d2 = (double)Z_LVAL_P(op2);
43595 			goto is_equal_double;
43596 		}
43597 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43598 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43599 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43600 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43601 				zval_ptr_dtor_str(op1);
43602 			}
43603 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43604 				zval_ptr_dtor_str(op2);
43605 			}
43606 			if (result) {
43607 				goto is_equal_true;
43608 			} else {
43609 				goto is_equal_false;
43610 			}
43611 		}
43612 	}
43613 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43614 }
43615 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43616 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43617 {
43618 	USE_OPLINE
43619 	zval *op1, *op2;
43620 	double d1, d2;
43621 
43622 	op1 = EX_VAR(opline->op1.var);
43623 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43624 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43625 		/* pass */
43626 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43627 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43628 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
43629 is_equal_true:
43630 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
43631 			} else {
43632 is_equal_false:
43633 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
43634 			}
43635 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43636 			d1 = (double)Z_LVAL_P(op1);
43637 			d2 = Z_DVAL_P(op2);
43638 			goto is_equal_double;
43639 		}
43640 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43641 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43642 			d1 = Z_DVAL_P(op1);
43643 			d2 = Z_DVAL_P(op2);
43644 is_equal_double:
43645 			if (d1 == d2) {
43646 				goto is_equal_true;
43647 			} else {
43648 				goto is_equal_false;
43649 			}
43650 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43651 			d1 = Z_DVAL_P(op1);
43652 			d2 = (double)Z_LVAL_P(op2);
43653 			goto is_equal_double;
43654 		}
43655 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43656 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43657 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43658 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43659 				zval_ptr_dtor_str(op1);
43660 			}
43661 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43662 				zval_ptr_dtor_str(op2);
43663 			}
43664 			if (result) {
43665 				goto is_equal_true;
43666 			} else {
43667 				goto is_equal_false;
43668 			}
43669 		}
43670 	}
43671 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43672 }
43673 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43674 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43675 {
43676 	USE_OPLINE
43677 	zval *op1, *op2;
43678 	double d1, d2;
43679 
43680 	op1 = EX_VAR(opline->op1.var);
43681 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43682 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43683 		/* pass */
43684 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43685 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43686 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
43687 is_not_equal_true:
43688 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
43689 			} else {
43690 is_not_equal_false:
43691 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
43692 			}
43693 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43694 			d1 = (double)Z_LVAL_P(op1);
43695 			d2 = Z_DVAL_P(op2);
43696 			goto is_not_equal_double;
43697 		}
43698 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43699 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43700 			d1 = Z_DVAL_P(op1);
43701 			d2 = Z_DVAL_P(op2);
43702 is_not_equal_double:
43703 			if (d1 != d2) {
43704 				goto is_not_equal_true;
43705 			} else {
43706 				goto is_not_equal_false;
43707 			}
43708 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43709 			d1 = Z_DVAL_P(op1);
43710 			d2 = (double)Z_LVAL_P(op2);
43711 			goto is_not_equal_double;
43712 		}
43713 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43714 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43715 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43716 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43717 				zval_ptr_dtor_str(op1);
43718 			}
43719 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43720 				zval_ptr_dtor_str(op2);
43721 			}
43722 			if (!result) {
43723 				goto is_not_equal_true;
43724 			} else {
43725 				goto is_not_equal_false;
43726 			}
43727 		}
43728 	}
43729 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43730 }
43731 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43733 {
43734 	USE_OPLINE
43735 	zval *op1, *op2;
43736 	double d1, d2;
43737 
43738 	op1 = EX_VAR(opline->op1.var);
43739 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43740 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43741 		/* pass */
43742 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43743 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43744 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
43745 is_not_equal_true:
43746 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
43747 			} else {
43748 is_not_equal_false:
43749 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
43750 			}
43751 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43752 			d1 = (double)Z_LVAL_P(op1);
43753 			d2 = Z_DVAL_P(op2);
43754 			goto is_not_equal_double;
43755 		}
43756 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43757 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43758 			d1 = Z_DVAL_P(op1);
43759 			d2 = Z_DVAL_P(op2);
43760 is_not_equal_double:
43761 			if (d1 != d2) {
43762 				goto is_not_equal_true;
43763 			} else {
43764 				goto is_not_equal_false;
43765 			}
43766 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43767 			d1 = Z_DVAL_P(op1);
43768 			d2 = (double)Z_LVAL_P(op2);
43769 			goto is_not_equal_double;
43770 		}
43771 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43772 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43773 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43774 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43775 				zval_ptr_dtor_str(op1);
43776 			}
43777 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43778 				zval_ptr_dtor_str(op2);
43779 			}
43780 			if (!result) {
43781 				goto is_not_equal_true;
43782 			} else {
43783 				goto is_not_equal_false;
43784 			}
43785 		}
43786 	}
43787 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43788 }
43789 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43790 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43791 {
43792 	USE_OPLINE
43793 	zval *op1, *op2;
43794 	double d1, d2;
43795 
43796 	op1 = EX_VAR(opline->op1.var);
43797 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43798 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43799 		/* pass */
43800 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43801 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43802 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
43803 is_not_equal_true:
43804 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
43805 			} else {
43806 is_not_equal_false:
43807 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
43808 			}
43809 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43810 			d1 = (double)Z_LVAL_P(op1);
43811 			d2 = Z_DVAL_P(op2);
43812 			goto is_not_equal_double;
43813 		}
43814 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43815 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43816 			d1 = Z_DVAL_P(op1);
43817 			d2 = Z_DVAL_P(op2);
43818 is_not_equal_double:
43819 			if (d1 != d2) {
43820 				goto is_not_equal_true;
43821 			} else {
43822 				goto is_not_equal_false;
43823 			}
43824 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43825 			d1 = Z_DVAL_P(op1);
43826 			d2 = (double)Z_LVAL_P(op2);
43827 			goto is_not_equal_double;
43828 		}
43829 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43830 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43831 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43832 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43833 				zval_ptr_dtor_str(op1);
43834 			}
43835 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43836 				zval_ptr_dtor_str(op2);
43837 			}
43838 			if (!result) {
43839 				goto is_not_equal_true;
43840 			} else {
43841 				goto is_not_equal_false;
43842 			}
43843 		}
43844 	}
43845 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43846 }
43847 
ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43848 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43849 {
43850 	USE_OPLINE
43851 	zval *op1, *op2;
43852 
43853 	SAVE_OPLINE();
43854 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
43855 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43856 	compare_function(EX_VAR(opline->result.var), op1, op2);
43857 
43858 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43859 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43860 }
43861 
ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43863 {
43864 	USE_OPLINE
43865 	zval *op1, *op2;
43866 
43867 	SAVE_OPLINE();
43868 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
43869 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43870 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
43871 
43872 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43873 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43874 }
43875 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43876 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43877 {
43878 	USE_OPLINE
43879 	zval *object;
43880 	zval *property;
43881 	zval *value;
43882 	zval *zptr;
43883 	void **cache_slot;
43884 	zend_property_info *prop_info;
43885 	zend_object *zobj;
43886 	zend_string *name, *tmp_name;
43887 
43888 	SAVE_OPLINE();
43889 	object = EX_VAR(opline->op1.var);
43890 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43891 
43892 	do {
43893 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
43894 
43895 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
43896 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
43897 				object = Z_REFVAL_P(object);
43898 				goto assign_op_object;
43899 			}
43900 			if (IS_CV == IS_CV
43901 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43902 				ZVAL_UNDEFINED_OP1();
43903 			}
43904 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
43905 			break;
43906 		}
43907 
43908 assign_op_object:
43909 		/* here we are sure we are dealing with an object */
43910 		zobj = Z_OBJ_P(object);
43911 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43912 			name = Z_STR_P(property);
43913 		} else {
43914 			name = zval_try_get_tmp_string(property, &tmp_name);
43915 			if (UNEXPECTED(!name)) {
43916 				UNDEF_RESULT();
43917 				break;
43918 			}
43919 		}
43920 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
43921 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
43922 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
43923 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43924 					ZVAL_NULL(EX_VAR(opline->result.var));
43925 				}
43926 			} else {
43927 				zval *orig_zptr = zptr;
43928 				zend_reference *ref;
43929 
43930 				do {
43931 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
43932 						ref = Z_REF_P(zptr);
43933 						zptr = Z_REFVAL_P(zptr);
43934 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
43935 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
43936 							break;
43937 						}
43938 					}
43939 
43940 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43941 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
43942 					} else {
43943 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
43944 					}
43945 					if (UNEXPECTED(prop_info)) {
43946 						/* special case for typed properties */
43947 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
43948 					} else {
43949 						zend_binary_op(zptr, zptr, value OPLINE_CC);
43950 					}
43951 				} while (0);
43952 
43953 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43954 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
43955 				}
43956 			}
43957 		} else {
43958 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
43959 		}
43960 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43961 			zend_tmp_string_release(tmp_name);
43962 		}
43963 	} while (0);
43964 
43965 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
43966 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43967 
43968 	/* assign_obj has two opcodes! */
43969 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43970 }
43971 
43972 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43973 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43974 {
43975 	USE_OPLINE
43976 	zval *var_ptr;
43977 	zval *value, *container, *dim;
43978 	HashTable *ht;
43979 
43980 	SAVE_OPLINE();
43981 	container = EX_VAR(opline->op1.var);
43982 
43983 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43984 assign_dim_op_array:
43985 		SEPARATE_ARRAY(container);
43986 		ht = Z_ARRVAL_P(container);
43987 assign_dim_op_new_array:
43988 		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43989 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43990 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
43991 			if (UNEXPECTED(!var_ptr)) {
43992 				zend_cannot_add_element();
43993 				goto assign_dim_op_ret_null;
43994 			}
43995 		} else {
43996 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43997 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
43998 			} else {
43999 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
44000 			}
44001 			if (UNEXPECTED(!var_ptr)) {
44002 				goto assign_dim_op_ret_null;
44003 			}
44004 		}
44005 
44006 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
44007 
44008 		do {
44009 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
44010 				zend_reference *ref = Z_REF_P(var_ptr);
44011 				var_ptr = Z_REFVAL_P(var_ptr);
44012 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
44013 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
44014 					break;
44015 				}
44016 			}
44017 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
44018 		} while (0);
44019 
44020 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44021 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
44022 		}
44023 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
44024 	} else {
44025 		if (EXPECTED(Z_ISREF_P(container))) {
44026 			container = Z_REFVAL_P(container);
44027 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44028 				goto assign_dim_op_array;
44029 			}
44030 		}
44031 
44032 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
44033 			zend_object *obj = Z_OBJ_P(container);
44034 
44035 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44036 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
44037 				dim++;
44038 			}
44039 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
44040 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
44041 			zend_uchar old_type;
44042 
44043 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
44044 				ZVAL_UNDEFINED_OP1();
44045 			}
44046 			ht = zend_new_array(8);
44047 			old_type = Z_TYPE_P(container);
44048 			ZVAL_ARR(container, ht);
44049 			if (UNEXPECTED(old_type == IS_FALSE)) {
44050 				GC_ADDREF(ht);
44051 				zend_false_to_array_deprecated();
44052 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
44053 					zend_array_destroy(ht);
44054 					goto assign_dim_op_ret_null;
44055 				}
44056 			}
44057 			goto assign_dim_op_new_array;
44058 		} else {
44059 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44060 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
44061 assign_dim_op_ret_null:
44062 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
44063 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44064 				ZVAL_NULL(EX_VAR(opline->result.var));
44065 			}
44066 		}
44067 	}
44068 
44069 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44070 
44071 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44072 }
44073 
ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44075 {
44076 	USE_OPLINE
44077 	zval *var_ptr;
44078 	zval *value;
44079 
44080 	SAVE_OPLINE();
44081 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44082 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
44083 
44084 	do {
44085 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
44086 			zend_reference *ref = Z_REF_P(var_ptr);
44087 			var_ptr = Z_REFVAL_P(var_ptr);
44088 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
44089 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
44090 				break;
44091 			}
44092 		}
44093 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
44094 	} while (0);
44095 
44096 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44097 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
44098 	}
44099 
44100 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44101 
44102 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44103 }
44104 
ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44105 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44106 {
44107 	USE_OPLINE
44108 	zval *object;
44109 	zval *property;
44110 	zval *zptr;
44111 	void **cache_slot;
44112 	zend_property_info *prop_info;
44113 	zend_object *zobj;
44114 	zend_string *name, *tmp_name;
44115 
44116 	SAVE_OPLINE();
44117 	object = EX_VAR(opline->op1.var);
44118 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44119 
44120 	do {
44121 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44122 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
44123 				object = Z_REFVAL_P(object);
44124 				goto pre_incdec_object;
44125 			}
44126 			if (IS_CV == IS_CV
44127 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
44128 				ZVAL_UNDEFINED_OP1();
44129 			}
44130 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
44131 			break;
44132 		}
44133 
44134 pre_incdec_object:
44135 		/* here we are sure we are dealing with an object */
44136 		zobj = Z_OBJ_P(object);
44137 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44138 			name = Z_STR_P(property);
44139 		} else {
44140 			name = zval_try_get_tmp_string(property, &tmp_name);
44141 			if (UNEXPECTED(!name)) {
44142 				UNDEF_RESULT();
44143 				break;
44144 			}
44145 		}
44146 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
44147 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
44148 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
44149 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44150 					ZVAL_NULL(EX_VAR(opline->result.var));
44151 				}
44152 			} else {
44153 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44154 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
44155 				} else {
44156 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
44157 				}
44158 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
44159 			}
44160 		} else {
44161 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
44162 		}
44163 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44164 			zend_tmp_string_release(tmp_name);
44165 		}
44166 	} while (0);
44167 
44168 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44169 
44170 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44171 }
44172 
ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44173 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44174 {
44175 	USE_OPLINE
44176 	zval *object;
44177 	zval *property;
44178 	zval *zptr;
44179 	void **cache_slot;
44180 	zend_property_info *prop_info;
44181 	zend_object *zobj;
44182 	zend_string *name, *tmp_name;
44183 
44184 	SAVE_OPLINE();
44185 	object = EX_VAR(opline->op1.var);
44186 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44187 
44188 	do {
44189 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44190 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
44191 				object = Z_REFVAL_P(object);
44192 				goto post_incdec_object;
44193 			}
44194 			if (IS_CV == IS_CV
44195 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
44196 				ZVAL_UNDEFINED_OP1();
44197 			}
44198 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
44199 			break;
44200 		}
44201 
44202 post_incdec_object:
44203 		/* here we are sure we are dealing with an object */
44204 		zobj = Z_OBJ_P(object);
44205 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44206 			name = Z_STR_P(property);
44207 		} else {
44208 			name = zval_try_get_tmp_string(property, &tmp_name);
44209 			if (UNEXPECTED(!name)) {
44210 				ZVAL_UNDEF(EX_VAR(opline->result.var));
44211 				break;
44212 			}
44213 		}
44214 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
44215 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
44216 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
44217 				ZVAL_NULL(EX_VAR(opline->result.var));
44218 			} else {
44219 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44220 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
44221 				} else {
44222 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
44223 				}
44224 
44225 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
44226 			}
44227 		} else {
44228 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
44229 		}
44230 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44231 			zend_tmp_string_release(tmp_name);
44232 		}
44233 	} while (0);
44234 
44235 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44236 
44237 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44238 }
44239 
ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44240 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44241 {
44242 	USE_OPLINE
44243 	zval *container, *dim, *value;
44244 
44245 	SAVE_OPLINE();
44246 	container = EX_VAR(opline->op1.var);
44247 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44248 	if (IS_CV != IS_CONST) {
44249 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44250 fetch_dim_r_array:
44251 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
44252 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44253 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
44254 			container = Z_REFVAL_P(container);
44255 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44256 				goto fetch_dim_r_array;
44257 			} else {
44258 				goto fetch_dim_r_slow;
44259 			}
44260 		} else {
44261 fetch_dim_r_slow:
44262 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
44263 				dim++;
44264 			}
44265 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
44266 		}
44267 	} else {
44268 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
44269 	}
44270 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44271 
44272 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44273 }
44274 
ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44275 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44276 {
44277 	USE_OPLINE
44278 	zval *container;
44279 
44280 	SAVE_OPLINE();
44281 	container = EX_VAR(opline->op1.var);
44282 	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);
44283 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44284 	if (IS_CV == IS_VAR) {
44285 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
44286 	}
44287 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44288 }
44289 
ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44290 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44291 {
44292 	USE_OPLINE
44293 	zval *container;
44294 
44295 	SAVE_OPLINE();
44296 	container = EX_VAR(opline->op1.var);
44297 	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);
44298 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44299 	if (IS_CV == IS_VAR) {
44300 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
44301 	}
44302 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44303 }
44304 
ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44305 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44306 {
44307 	USE_OPLINE
44308 	zval *container;
44309 
44310 	SAVE_OPLINE();
44311 	container = EX_VAR(opline->op1.var);
44312 	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);
44313 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44314 
44315 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44316 }
44317 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44319 {
44320 #if 0
44321 	USE_OPLINE
44322 #endif
44323 
44324 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
44325         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
44326 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44327         }
44328 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44329 	} else {
44330 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
44331 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44332 		}
44333 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44334 	}
44335 }
44336 
ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44337 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44338 {
44339 	USE_OPLINE
44340 	zval *container;
44341 
44342 	SAVE_OPLINE();
44343 	container = EX_VAR(opline->op1.var);
44344 	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);
44345 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44346 	if (IS_CV == IS_VAR) {
44347 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
44348 	}
44349 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44350 }
44351 
ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44352 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44353 {
44354 	USE_OPLINE
44355 	zval *container;
44356 	void **cache_slot = NULL;
44357 
44358 	SAVE_OPLINE();
44359 	container = EX_VAR(opline->op1.var);
44360 
44361 	if (IS_CV == IS_CONST ||
44362 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
44363 	    do {
44364 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
44365 				container = Z_REFVAL_P(container);
44366 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
44367 					break;
44368 				}
44369 			}
44370 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
44371 				ZVAL_UNDEFINED_OP1();
44372 			}
44373 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44374 			ZVAL_NULL(EX_VAR(opline->result.var));
44375 			goto fetch_obj_r_finish;
44376 		} while (0);
44377 	}
44378 
44379 	/* here we are sure we are dealing with an object */
44380 	do {
44381 		zend_object *zobj = Z_OBJ_P(container);
44382 		zend_string *name, *tmp_name;
44383 		zval *retval;
44384 
44385 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44386 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
44387 
44388 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
44389 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44390 
44391 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44392 					retval = OBJ_PROP(zobj, prop_offset);
44393 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
44394 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
44395 							goto fetch_obj_r_copy;
44396 						} else {
44397 fetch_obj_r_fast_copy:
44398 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
44399 							ZEND_VM_NEXT_OPCODE();
44400 						}
44401 					}
44402 				} else if (EXPECTED(zobj->properties != NULL)) {
44403 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44404 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
44405 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
44406 
44407 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
44408 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
44409 
44410 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
44411 						        (EXPECTED(p->key == name) ||
44412 						         (EXPECTED(p->h == ZSTR_H(name)) &&
44413 						          EXPECTED(p->key != NULL) &&
44414 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
44415 								retval = &p->val;
44416 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
44417 									goto fetch_obj_r_copy;
44418 								} else {
44419 									goto fetch_obj_r_fast_copy;
44420 								}
44421 							}
44422 						}
44423 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
44424 					}
44425 					retval = zend_hash_find_known_hash(zobj->properties, name);
44426 					if (EXPECTED(retval)) {
44427 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
44428 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
44429 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
44430 							goto fetch_obj_r_copy;
44431 						} else {
44432 							goto fetch_obj_r_fast_copy;
44433 						}
44434 					}
44435 				}
44436 			}
44437 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44438 		} else {
44439 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
44440 			if (UNEXPECTED(!name)) {
44441 				ZVAL_UNDEF(EX_VAR(opline->result.var));
44442 				break;
44443 			}
44444 		}
44445 
44446 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
44447 #if ZEND_DEBUG
44448 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
44449 			zend_verify_internal_read_property_type(zobj, name, retval);
44450 		}
44451 #endif
44452 
44453 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44454 			zend_tmp_string_release(tmp_name);
44455 		}
44456 
44457 		if (retval != EX_VAR(opline->result.var)) {
44458 fetch_obj_r_copy:
44459 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
44460 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
44461 			zend_unwrap_reference(retval);
44462 		}
44463 	} while (0);
44464 
44465 fetch_obj_r_finish:
44466 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44467 
44468 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44469 }
44470 
ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44471 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44472 {
44473 	USE_OPLINE
44474 	zval *property, *container, *result;
44475 
44476 	SAVE_OPLINE();
44477 
44478 	container = EX_VAR(opline->op1.var);
44479 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44480 	result = EX_VAR(opline->result.var);
44481 	zend_fetch_property_address(
44482 		result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
44483 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
44484 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC);
44485 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44486 	if (IS_CV == IS_VAR) {
44487 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
44488 	}
44489 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44490 }
44491 
ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44492 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44493 {
44494 	USE_OPLINE
44495 	zval *property, *container, *result;
44496 
44497 	SAVE_OPLINE();
44498 	container = EX_VAR(opline->op1.var);
44499 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44500 	result = EX_VAR(opline->result.var);
44501 	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);
44502 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44503 	if (IS_CV == IS_VAR) {
44504 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
44505 	}
44506 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44507 }
44508 
ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44509 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44510 {
44511 	USE_OPLINE
44512 	zval *container;
44513 	void **cache_slot = NULL;
44514 
44515 	SAVE_OPLINE();
44516 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
44517 
44518 	if (IS_CV == IS_CONST ||
44519 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
44520 		do {
44521 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
44522 				container = Z_REFVAL_P(container);
44523 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
44524 					break;
44525 				}
44526 			}
44527 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
44528 				ZVAL_UNDEFINED_OP2();
44529 			}
44530 			ZVAL_NULL(EX_VAR(opline->result.var));
44531 			goto fetch_obj_is_finish;
44532 		} while (0);
44533 	}
44534 
44535 	/* here we are sure we are dealing with an object */
44536 	do {
44537 		zend_object *zobj = Z_OBJ_P(container);
44538 		zend_string *name, *tmp_name;
44539 		zval *retval;
44540 
44541 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44542 			cache_slot = CACHE_ADDR(opline->extended_value);
44543 
44544 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
44545 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44546 
44547 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44548 					retval = OBJ_PROP(zobj, prop_offset);
44549 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
44550 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
44551 							goto fetch_obj_is_copy;
44552 						} else {
44553 fetch_obj_is_fast_copy:
44554 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
44555 							ZEND_VM_NEXT_OPCODE();
44556 						}
44557 					}
44558 				} else if (EXPECTED(zobj->properties != NULL)) {
44559 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44560 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
44561 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
44562 
44563 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
44564 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
44565 
44566 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
44567 						        (EXPECTED(p->key == name) ||
44568 						         (EXPECTED(p->h == ZSTR_H(name)) &&
44569 						          EXPECTED(p->key != NULL) &&
44570 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
44571 								retval = &p->val;
44572 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
44573 									goto fetch_obj_is_copy;
44574 								} else {
44575 									goto fetch_obj_is_fast_copy;
44576 								}
44577 							}
44578 						}
44579 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
44580 					}
44581 					retval = zend_hash_find_known_hash(zobj->properties, name);
44582 					if (EXPECTED(retval)) {
44583 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
44584 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
44585 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
44586 							goto fetch_obj_is_copy;
44587 						} else {
44588 							goto fetch_obj_is_fast_copy;
44589 						}
44590 					}
44591 				}
44592 			}
44593 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44594 		} else {
44595 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
44596 			if (UNEXPECTED(!name)) {
44597 				ZVAL_UNDEF(EX_VAR(opline->result.var));
44598 				break;
44599 			}
44600 		}
44601 
44602 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
44603 
44604 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44605 			zend_tmp_string_release(tmp_name);
44606 		}
44607 
44608 		if (retval != EX_VAR(opline->result.var)) {
44609 fetch_obj_is_copy:
44610 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
44611 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
44612 			zend_unwrap_reference(retval);
44613 		}
44614 	} while (0);
44615 
44616 fetch_obj_is_finish:
44617 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44618 
44619 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44620 }
44621 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44622 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44623 {
44624 #if 0
44625 	USE_OPLINE
44626 #endif
44627 
44628 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
44629 		/* Behave like FETCH_OBJ_W */
44630 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
44631 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44632 		}
44633 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44634 	} else {
44635 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44636 	}
44637 }
44638 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44639 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44640 {
44641 	USE_OPLINE
44642 	zval *container, *property, *result;
44643 
44644 	SAVE_OPLINE();
44645 	container = EX_VAR(opline->op1.var);
44646 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44647 	result = EX_VAR(opline->result.var);
44648 	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);
44649 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44650 	if (IS_CV == IS_VAR) {
44651 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
44652 	}
44653 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44654 }
44655 
ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44656 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44657 {
44658 	USE_OPLINE
44659 	zval *object, *value, tmp;
44660 	zend_object *zobj;
44661 	zend_string *name, *tmp_name;
44662 
44663 	SAVE_OPLINE();
44664 	object = EX_VAR(opline->op1.var);
44665 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
44666 
44667 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44668 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
44669 			object = Z_REFVAL_P(object);
44670 			goto assign_object;
44671 		}
44672 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
44673 		value = &EG(uninitialized_zval);
44674 		goto free_and_exit_assign_obj;
44675 	}
44676 
44677 assign_object:
44678 	zobj = Z_OBJ_P(object);
44679 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44680 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
44681 			void **cache_slot = CACHE_ADDR(opline->extended_value);
44682 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44683 			zend_object *zobj = Z_OBJ_P(object);
44684 			zval *property_val;
44685 
44686 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44687 				property_val = OBJ_PROP(zobj, prop_offset);
44688 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
44689 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
44690 
44691 					if (UNEXPECTED(prop_info != NULL)) {
44692 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
44693 						goto free_and_exit_assign_obj;
44694 					} else {
44695 fast_assign_obj:
44696 						value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
44697 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44698 							ZVAL_COPY(EX_VAR(opline->result.var), value);
44699 						}
44700 						goto exit_assign_obj;
44701 					}
44702 				}
44703 			} else {
44704 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44705 				if (EXPECTED(zobj->properties != NULL)) {
44706 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
44707 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
44708 							GC_DELREF(zobj->properties);
44709 						}
44710 						zobj->properties = zend_array_dup(zobj->properties);
44711 					}
44712 					property_val = zend_hash_find_known_hash(zobj->properties, name);
44713 					if (property_val) {
44714 						goto fast_assign_obj;
44715 					}
44716 				}
44717 
44718 				if (!zobj->ce->__set) {
44719 					if (EXPECTED(zobj->properties == NULL)) {
44720 						rebuild_object_properties(zobj);
44721 					}
44722 					if (IS_CONST == IS_CONST) {
44723 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
44724 							Z_ADDREF_P(value);
44725 						}
44726 					} else if (IS_CONST != IS_TMP_VAR) {
44727 						if (Z_ISREF_P(value)) {
44728 							if (IS_CONST == IS_VAR) {
44729 								zend_reference *ref = Z_REF_P(value);
44730 								if (GC_DELREF(ref) == 0) {
44731 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
44732 									efree_size(ref, sizeof(zend_reference));
44733 									value = &tmp;
44734 								} else {
44735 									value = Z_REFVAL_P(value);
44736 									Z_TRY_ADDREF_P(value);
44737 								}
44738 							} else {
44739 								value = Z_REFVAL_P(value);
44740 								Z_TRY_ADDREF_P(value);
44741 							}
44742 						} else if (IS_CONST == IS_CV) {
44743 							Z_TRY_ADDREF_P(value);
44744 						}
44745 						}
44746 					zend_hash_add_new(zobj->properties, name, value);
44747 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44748 						ZVAL_COPY(EX_VAR(opline->result.var), value);
44749 					}
44750 					goto exit_assign_obj;
44751 				}
44752 			}
44753 		}
44754 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44755 	} else {
44756 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
44757 		if (UNEXPECTED(!name)) {
44758 
44759 			UNDEF_RESULT();
44760 			goto exit_assign_obj;
44761 		}
44762 	}
44763 
44764 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
44765 		ZVAL_DEREF(value);
44766 	}
44767 
44768 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
44769 
44770 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44771 		zend_tmp_string_release(tmp_name);
44772 	}
44773 
44774 free_and_exit_assign_obj:
44775 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44776 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44777 	}
44778 
44779 exit_assign_obj:
44780 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44781 
44782 	/* assign_obj has two opcodes! */
44783 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44784 }
44785 
44786 /* 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)44787 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44788 {
44789 	USE_OPLINE
44790 	zval *object, *value, tmp;
44791 	zend_object *zobj;
44792 	zend_string *name, *tmp_name;
44793 
44794 	SAVE_OPLINE();
44795 	object = EX_VAR(opline->op1.var);
44796 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
44797 
44798 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44799 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
44800 			object = Z_REFVAL_P(object);
44801 			goto assign_object;
44802 		}
44803 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
44804 		value = &EG(uninitialized_zval);
44805 		goto free_and_exit_assign_obj;
44806 	}
44807 
44808 assign_object:
44809 	zobj = Z_OBJ_P(object);
44810 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44811 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
44812 			void **cache_slot = CACHE_ADDR(opline->extended_value);
44813 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44814 			zend_object *zobj = Z_OBJ_P(object);
44815 			zval *property_val;
44816 
44817 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44818 				property_val = OBJ_PROP(zobj, prop_offset);
44819 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
44820 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
44821 
44822 					if (UNEXPECTED(prop_info != NULL)) {
44823 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
44824 						goto free_and_exit_assign_obj;
44825 					} else {
44826 fast_assign_obj:
44827 						value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
44828 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44829 							ZVAL_COPY(EX_VAR(opline->result.var), value);
44830 						}
44831 						goto exit_assign_obj;
44832 					}
44833 				}
44834 			} else {
44835 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44836 				if (EXPECTED(zobj->properties != NULL)) {
44837 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
44838 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
44839 							GC_DELREF(zobj->properties);
44840 						}
44841 						zobj->properties = zend_array_dup(zobj->properties);
44842 					}
44843 					property_val = zend_hash_find_known_hash(zobj->properties, name);
44844 					if (property_val) {
44845 						goto fast_assign_obj;
44846 					}
44847 				}
44848 
44849 				if (!zobj->ce->__set) {
44850 					if (EXPECTED(zobj->properties == NULL)) {
44851 						rebuild_object_properties(zobj);
44852 					}
44853 					if (IS_TMP_VAR == IS_CONST) {
44854 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
44855 							Z_ADDREF_P(value);
44856 						}
44857 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
44858 						if (Z_ISREF_P(value)) {
44859 							if (IS_TMP_VAR == IS_VAR) {
44860 								zend_reference *ref = Z_REF_P(value);
44861 								if (GC_DELREF(ref) == 0) {
44862 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
44863 									efree_size(ref, sizeof(zend_reference));
44864 									value = &tmp;
44865 								} else {
44866 									value = Z_REFVAL_P(value);
44867 									Z_TRY_ADDREF_P(value);
44868 								}
44869 							} else {
44870 								value = Z_REFVAL_P(value);
44871 								Z_TRY_ADDREF_P(value);
44872 							}
44873 						} else if (IS_TMP_VAR == IS_CV) {
44874 							Z_TRY_ADDREF_P(value);
44875 						}
44876 						}
44877 					zend_hash_add_new(zobj->properties, name, value);
44878 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44879 						ZVAL_COPY(EX_VAR(opline->result.var), value);
44880 					}
44881 					goto exit_assign_obj;
44882 				}
44883 			}
44884 		}
44885 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44886 	} else {
44887 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
44888 		if (UNEXPECTED(!name)) {
44889 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44890 			UNDEF_RESULT();
44891 			goto exit_assign_obj;
44892 		}
44893 	}
44894 
44895 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
44896 		ZVAL_DEREF(value);
44897 	}
44898 
44899 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
44900 
44901 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44902 		zend_tmp_string_release(tmp_name);
44903 	}
44904 
44905 free_and_exit_assign_obj:
44906 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44907 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44908 	}
44909 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44910 exit_assign_obj:
44911 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44912 
44913 	/* assign_obj has two opcodes! */
44914 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44915 }
44916 
44917 /* 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)44918 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44919 {
44920 	USE_OPLINE
44921 	zval *object, *value, tmp;
44922 	zend_object *zobj;
44923 	zend_string *name, *tmp_name;
44924 
44925 	SAVE_OPLINE();
44926 	object = EX_VAR(opline->op1.var);
44927 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
44928 
44929 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44930 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
44931 			object = Z_REFVAL_P(object);
44932 			goto assign_object;
44933 		}
44934 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
44935 		value = &EG(uninitialized_zval);
44936 		goto free_and_exit_assign_obj;
44937 	}
44938 
44939 assign_object:
44940 	zobj = Z_OBJ_P(object);
44941 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44942 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
44943 			void **cache_slot = CACHE_ADDR(opline->extended_value);
44944 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44945 			zend_object *zobj = Z_OBJ_P(object);
44946 			zval *property_val;
44947 
44948 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44949 				property_val = OBJ_PROP(zobj, prop_offset);
44950 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
44951 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
44952 
44953 					if (UNEXPECTED(prop_info != NULL)) {
44954 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
44955 						goto free_and_exit_assign_obj;
44956 					} else {
44957 fast_assign_obj:
44958 						value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
44959 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44960 							ZVAL_COPY(EX_VAR(opline->result.var), value);
44961 						}
44962 						goto exit_assign_obj;
44963 					}
44964 				}
44965 			} else {
44966 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
44967 				if (EXPECTED(zobj->properties != NULL)) {
44968 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
44969 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
44970 							GC_DELREF(zobj->properties);
44971 						}
44972 						zobj->properties = zend_array_dup(zobj->properties);
44973 					}
44974 					property_val = zend_hash_find_known_hash(zobj->properties, name);
44975 					if (property_val) {
44976 						goto fast_assign_obj;
44977 					}
44978 				}
44979 
44980 				if (!zobj->ce->__set) {
44981 					if (EXPECTED(zobj->properties == NULL)) {
44982 						rebuild_object_properties(zobj);
44983 					}
44984 					if (IS_VAR == IS_CONST) {
44985 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
44986 							Z_ADDREF_P(value);
44987 						}
44988 					} else if (IS_VAR != IS_TMP_VAR) {
44989 						if (Z_ISREF_P(value)) {
44990 							if (IS_VAR == IS_VAR) {
44991 								zend_reference *ref = Z_REF_P(value);
44992 								if (GC_DELREF(ref) == 0) {
44993 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
44994 									efree_size(ref, sizeof(zend_reference));
44995 									value = &tmp;
44996 								} else {
44997 									value = Z_REFVAL_P(value);
44998 									Z_TRY_ADDREF_P(value);
44999 								}
45000 							} else {
45001 								value = Z_REFVAL_P(value);
45002 								Z_TRY_ADDREF_P(value);
45003 							}
45004 						} else if (IS_VAR == IS_CV) {
45005 							Z_TRY_ADDREF_P(value);
45006 						}
45007 						}
45008 					zend_hash_add_new(zobj->properties, name, value);
45009 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45010 						ZVAL_COPY(EX_VAR(opline->result.var), value);
45011 					}
45012 					goto exit_assign_obj;
45013 				}
45014 			}
45015 		}
45016 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45017 	} else {
45018 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
45019 		if (UNEXPECTED(!name)) {
45020 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45021 			UNDEF_RESULT();
45022 			goto exit_assign_obj;
45023 		}
45024 	}
45025 
45026 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
45027 		ZVAL_DEREF(value);
45028 	}
45029 
45030 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
45031 
45032 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45033 		zend_tmp_string_release(tmp_name);
45034 	}
45035 
45036 free_and_exit_assign_obj:
45037 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45038 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
45039 	}
45040 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45041 exit_assign_obj:
45042 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45043 
45044 	/* assign_obj has two opcodes! */
45045 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45046 }
45047 
45048 /* 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)45049 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45050 {
45051 	USE_OPLINE
45052 	zval *object, *value, tmp;
45053 	zend_object *zobj;
45054 	zend_string *name, *tmp_name;
45055 
45056 	SAVE_OPLINE();
45057 	object = EX_VAR(opline->op1.var);
45058 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
45059 
45060 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45061 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
45062 			object = Z_REFVAL_P(object);
45063 			goto assign_object;
45064 		}
45065 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
45066 		value = &EG(uninitialized_zval);
45067 		goto free_and_exit_assign_obj;
45068 	}
45069 
45070 assign_object:
45071 	zobj = Z_OBJ_P(object);
45072 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45073 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
45074 			void **cache_slot = CACHE_ADDR(opline->extended_value);
45075 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
45076 			zend_object *zobj = Z_OBJ_P(object);
45077 			zval *property_val;
45078 
45079 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
45080 				property_val = OBJ_PROP(zobj, prop_offset);
45081 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
45082 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
45083 
45084 					if (UNEXPECTED(prop_info != NULL)) {
45085 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
45086 						goto free_and_exit_assign_obj;
45087 					} else {
45088 fast_assign_obj:
45089 						value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
45090 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45091 							ZVAL_COPY(EX_VAR(opline->result.var), value);
45092 						}
45093 						goto exit_assign_obj;
45094 					}
45095 				}
45096 			} else {
45097 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45098 				if (EXPECTED(zobj->properties != NULL)) {
45099 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
45100 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
45101 							GC_DELREF(zobj->properties);
45102 						}
45103 						zobj->properties = zend_array_dup(zobj->properties);
45104 					}
45105 					property_val = zend_hash_find_known_hash(zobj->properties, name);
45106 					if (property_val) {
45107 						goto fast_assign_obj;
45108 					}
45109 				}
45110 
45111 				if (!zobj->ce->__set) {
45112 					if (EXPECTED(zobj->properties == NULL)) {
45113 						rebuild_object_properties(zobj);
45114 					}
45115 					if (IS_CV == IS_CONST) {
45116 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
45117 							Z_ADDREF_P(value);
45118 						}
45119 					} else if (IS_CV != IS_TMP_VAR) {
45120 						if (Z_ISREF_P(value)) {
45121 							if (IS_CV == IS_VAR) {
45122 								zend_reference *ref = Z_REF_P(value);
45123 								if (GC_DELREF(ref) == 0) {
45124 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
45125 									efree_size(ref, sizeof(zend_reference));
45126 									value = &tmp;
45127 								} else {
45128 									value = Z_REFVAL_P(value);
45129 									Z_TRY_ADDREF_P(value);
45130 								}
45131 							} else {
45132 								value = Z_REFVAL_P(value);
45133 								Z_TRY_ADDREF_P(value);
45134 							}
45135 						} else if (IS_CV == IS_CV) {
45136 							Z_TRY_ADDREF_P(value);
45137 						}
45138 						}
45139 					zend_hash_add_new(zobj->properties, name, value);
45140 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45141 						ZVAL_COPY(EX_VAR(opline->result.var), value);
45142 					}
45143 					goto exit_assign_obj;
45144 				}
45145 			}
45146 		}
45147 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45148 	} else {
45149 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
45150 		if (UNEXPECTED(!name)) {
45151 
45152 			UNDEF_RESULT();
45153 			goto exit_assign_obj;
45154 		}
45155 	}
45156 
45157 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
45158 		ZVAL_DEREF(value);
45159 	}
45160 
45161 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
45162 
45163 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45164 		zend_tmp_string_release(tmp_name);
45165 	}
45166 
45167 free_and_exit_assign_obj:
45168 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45169 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
45170 	}
45171 
45172 exit_assign_obj:
45173 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45174 
45175 	/* assign_obj has two opcodes! */
45176 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45177 }
45178 
45179 /* 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)45180 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45181 {
45182 	USE_OPLINE
45183 	zval *object_ptr, *orig_object_ptr;
45184 	zval *value;
45185 	zval *variable_ptr;
45186 	zval *dim;
45187 
45188 	SAVE_OPLINE();
45189 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
45190 
45191 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45192 try_assign_dim_array:
45193 		SEPARATE_ARRAY(object_ptr);
45194 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45195 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
45196 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
45197 				HashTable *ht = Z_ARRVAL_P(object_ptr);
45198 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
45199 					GC_ADDREF(ht);
45200 				}
45201 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45202 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
45203 					zend_array_destroy(ht);
45204 					goto assign_dim_error;
45205 				}
45206 			}
45207 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
45208 				ZVAL_DEREF(value);
45209 			}
45210 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
45211 			if (UNEXPECTED(value == NULL)) {
45212 				zend_cannot_add_element();
45213 				goto assign_dim_error;
45214 			} else if (IS_CONST == IS_CV) {
45215 				if (Z_REFCOUNTED_P(value)) {
45216 					Z_ADDREF_P(value);
45217 				}
45218 			} else if (IS_CONST == IS_VAR) {
45219 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
45220 				if (Z_ISREF_P(free_op_data)) {
45221 					if (Z_REFCOUNTED_P(value)) {
45222 						Z_ADDREF_P(value);
45223 					}
45224 					zval_ptr_dtor_nogc(free_op_data);
45225 				}
45226 			} else if (IS_CONST == IS_CONST) {
45227 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
45228 					Z_ADDREF_P(value);
45229 				}
45230 			}
45231 		} else {
45232 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45233 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45234 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45235 			} else {
45236 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45237 			}
45238 			if (UNEXPECTED(variable_ptr == NULL)) {
45239 				goto assign_dim_error;
45240 			}
45241 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
45242 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
45243 		}
45244 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45245 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45246 		}
45247 	} else {
45248 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45249 			object_ptr = Z_REFVAL_P(object_ptr);
45250 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45251 				goto try_assign_dim_array;
45252 			}
45253 		}
45254 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45255 			zend_object *obj = Z_OBJ_P(object_ptr);
45256 
45257 			GC_ADDREF(obj);
45258 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45259 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
45260 				dim = ZVAL_UNDEFINED_OP2();
45261 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45262 				dim++;
45263 			}
45264 
45265 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
45266 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
45267 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45268 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
45269 				ZVAL_DEREF(value);
45270 			}
45271 
45272 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
45273 
45274 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
45275 				zend_objects_store_del(obj);
45276 			}
45277 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
45278 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45279 				zend_use_new_element_for_string();
45280 
45281 				UNDEF_RESULT();
45282 			} else {
45283 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45284 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
45285 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45286 
45287 			}
45288 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
45289 			if (Z_ISREF_P(orig_object_ptr)
45290 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
45291 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
45292 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45293 
45294 				UNDEF_RESULT();
45295 			} else {
45296 				HashTable *ht = zend_new_array(8);
45297 				zend_uchar old_type = Z_TYPE_P(object_ptr);
45298 
45299 				ZVAL_ARR(object_ptr, ht);
45300 				if (UNEXPECTED(old_type == IS_FALSE)) {
45301 					GC_ADDREF(ht);
45302 					zend_false_to_array_deprecated();
45303 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
45304 						zend_array_destroy(ht);
45305 						goto assign_dim_error;
45306 					}
45307 				}
45308 				goto try_assign_dim_array;
45309 			}
45310 		} else {
45311 			zend_use_scalar_as_array();
45312 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45313 assign_dim_error:
45314 
45315 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45316 				ZVAL_NULL(EX_VAR(opline->result.var));
45317 			}
45318 		}
45319 	}
45320 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
45321 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45322 	}
45323 
45324 	/* assign_dim has two opcodes! */
45325 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45326 }
45327 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45328 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45329 {
45330 	USE_OPLINE
45331 	zval *object_ptr, *orig_object_ptr;
45332 	zval *value;
45333 	zval *variable_ptr;
45334 	zval *dim;
45335 
45336 	SAVE_OPLINE();
45337 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
45338 
45339 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45340 try_assign_dim_array:
45341 		SEPARATE_ARRAY(object_ptr);
45342 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45343 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
45344 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
45345 				HashTable *ht = Z_ARRVAL_P(object_ptr);
45346 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
45347 					GC_ADDREF(ht);
45348 				}
45349 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45350 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
45351 					zend_array_destroy(ht);
45352 					goto assign_dim_error;
45353 				}
45354 			}
45355 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
45356 				ZVAL_DEREF(value);
45357 			}
45358 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
45359 			if (UNEXPECTED(value == NULL)) {
45360 				zend_cannot_add_element();
45361 				goto assign_dim_error;
45362 			} else if (IS_TMP_VAR == IS_CV) {
45363 				if (Z_REFCOUNTED_P(value)) {
45364 					Z_ADDREF_P(value);
45365 				}
45366 			} else if (IS_TMP_VAR == IS_VAR) {
45367 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
45368 				if (Z_ISREF_P(free_op_data)) {
45369 					if (Z_REFCOUNTED_P(value)) {
45370 						Z_ADDREF_P(value);
45371 					}
45372 					zval_ptr_dtor_nogc(free_op_data);
45373 				}
45374 			} else if (IS_TMP_VAR == IS_CONST) {
45375 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
45376 					Z_ADDREF_P(value);
45377 				}
45378 			}
45379 		} else {
45380 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45381 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45382 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45383 			} else {
45384 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45385 			}
45386 			if (UNEXPECTED(variable_ptr == NULL)) {
45387 				goto assign_dim_error;
45388 			}
45389 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
45390 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
45391 		}
45392 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45393 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45394 		}
45395 	} else {
45396 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45397 			object_ptr = Z_REFVAL_P(object_ptr);
45398 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45399 				goto try_assign_dim_array;
45400 			}
45401 		}
45402 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45403 			zend_object *obj = Z_OBJ_P(object_ptr);
45404 
45405 			GC_ADDREF(obj);
45406 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45407 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
45408 				dim = ZVAL_UNDEFINED_OP2();
45409 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45410 				dim++;
45411 			}
45412 
45413 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
45414 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
45415 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45416 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
45417 				ZVAL_DEREF(value);
45418 			}
45419 
45420 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
45421 
45422 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45423 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
45424 				zend_objects_store_del(obj);
45425 			}
45426 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
45427 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45428 				zend_use_new_element_for_string();
45429 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45430 				UNDEF_RESULT();
45431 			} else {
45432 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45433 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
45434 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45435 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45436 			}
45437 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
45438 			if (Z_ISREF_P(orig_object_ptr)
45439 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
45440 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
45441 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45442 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45443 				UNDEF_RESULT();
45444 			} else {
45445 				HashTable *ht = zend_new_array(8);
45446 				zend_uchar old_type = Z_TYPE_P(object_ptr);
45447 
45448 				ZVAL_ARR(object_ptr, ht);
45449 				if (UNEXPECTED(old_type == IS_FALSE)) {
45450 					GC_ADDREF(ht);
45451 					zend_false_to_array_deprecated();
45452 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
45453 						zend_array_destroy(ht);
45454 						goto assign_dim_error;
45455 					}
45456 				}
45457 				goto try_assign_dim_array;
45458 			}
45459 		} else {
45460 			zend_use_scalar_as_array();
45461 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45462 assign_dim_error:
45463 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45464 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45465 				ZVAL_NULL(EX_VAR(opline->result.var));
45466 			}
45467 		}
45468 	}
45469 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
45470 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45471 	}
45472 
45473 	/* assign_dim has two opcodes! */
45474 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45475 }
45476 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45477 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45478 {
45479 	USE_OPLINE
45480 	zval *object_ptr, *orig_object_ptr;
45481 	zval *value;
45482 	zval *variable_ptr;
45483 	zval *dim;
45484 
45485 	SAVE_OPLINE();
45486 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
45487 
45488 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45489 try_assign_dim_array:
45490 		SEPARATE_ARRAY(object_ptr);
45491 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45492 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
45493 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
45494 				HashTable *ht = Z_ARRVAL_P(object_ptr);
45495 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
45496 					GC_ADDREF(ht);
45497 				}
45498 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45499 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
45500 					zend_array_destroy(ht);
45501 					goto assign_dim_error;
45502 				}
45503 			}
45504 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
45505 				ZVAL_DEREF(value);
45506 			}
45507 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
45508 			if (UNEXPECTED(value == NULL)) {
45509 				zend_cannot_add_element();
45510 				goto assign_dim_error;
45511 			} else if (IS_VAR == IS_CV) {
45512 				if (Z_REFCOUNTED_P(value)) {
45513 					Z_ADDREF_P(value);
45514 				}
45515 			} else if (IS_VAR == IS_VAR) {
45516 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
45517 				if (Z_ISREF_P(free_op_data)) {
45518 					if (Z_REFCOUNTED_P(value)) {
45519 						Z_ADDREF_P(value);
45520 					}
45521 					zval_ptr_dtor_nogc(free_op_data);
45522 				}
45523 			} else if (IS_VAR == IS_CONST) {
45524 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
45525 					Z_ADDREF_P(value);
45526 				}
45527 			}
45528 		} else {
45529 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45530 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45531 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45532 			} else {
45533 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45534 			}
45535 			if (UNEXPECTED(variable_ptr == NULL)) {
45536 				goto assign_dim_error;
45537 			}
45538 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
45539 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
45540 		}
45541 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45542 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45543 		}
45544 	} else {
45545 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45546 			object_ptr = Z_REFVAL_P(object_ptr);
45547 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45548 				goto try_assign_dim_array;
45549 			}
45550 		}
45551 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45552 			zend_object *obj = Z_OBJ_P(object_ptr);
45553 
45554 			GC_ADDREF(obj);
45555 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45556 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
45557 				dim = ZVAL_UNDEFINED_OP2();
45558 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45559 				dim++;
45560 			}
45561 
45562 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
45563 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
45564 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45565 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
45566 				ZVAL_DEREF(value);
45567 			}
45568 
45569 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
45570 
45571 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45572 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
45573 				zend_objects_store_del(obj);
45574 			}
45575 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
45576 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45577 				zend_use_new_element_for_string();
45578 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45579 				UNDEF_RESULT();
45580 			} else {
45581 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45582 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
45583 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45584 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45585 			}
45586 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
45587 			if (Z_ISREF_P(orig_object_ptr)
45588 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
45589 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
45590 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45591 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45592 				UNDEF_RESULT();
45593 			} else {
45594 				HashTable *ht = zend_new_array(8);
45595 				zend_uchar old_type = Z_TYPE_P(object_ptr);
45596 
45597 				ZVAL_ARR(object_ptr, ht);
45598 				if (UNEXPECTED(old_type == IS_FALSE)) {
45599 					GC_ADDREF(ht);
45600 					zend_false_to_array_deprecated();
45601 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
45602 						zend_array_destroy(ht);
45603 						goto assign_dim_error;
45604 					}
45605 				}
45606 				goto try_assign_dim_array;
45607 			}
45608 		} else {
45609 			zend_use_scalar_as_array();
45610 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45611 assign_dim_error:
45612 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45613 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45614 				ZVAL_NULL(EX_VAR(opline->result.var));
45615 			}
45616 		}
45617 	}
45618 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
45619 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45620 	}
45621 
45622 	/* assign_dim has two opcodes! */
45623 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45624 }
45625 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45626 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45627 {
45628 	USE_OPLINE
45629 	zval *object_ptr, *orig_object_ptr;
45630 	zval *value;
45631 	zval *variable_ptr;
45632 	zval *dim;
45633 
45634 	SAVE_OPLINE();
45635 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
45636 
45637 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45638 try_assign_dim_array:
45639 		SEPARATE_ARRAY(object_ptr);
45640 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45641 			value = EX_VAR((opline+1)->op1.var);
45642 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
45643 				HashTable *ht = Z_ARRVAL_P(object_ptr);
45644 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
45645 					GC_ADDREF(ht);
45646 				}
45647 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45648 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
45649 					zend_array_destroy(ht);
45650 					goto assign_dim_error;
45651 				}
45652 			}
45653 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
45654 				ZVAL_DEREF(value);
45655 			}
45656 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
45657 			if (UNEXPECTED(value == NULL)) {
45658 				zend_cannot_add_element();
45659 				goto assign_dim_error;
45660 			} else if (IS_CV == IS_CV) {
45661 				if (Z_REFCOUNTED_P(value)) {
45662 					Z_ADDREF_P(value);
45663 				}
45664 			} else if (IS_CV == IS_VAR) {
45665 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
45666 				if (Z_ISREF_P(free_op_data)) {
45667 					if (Z_REFCOUNTED_P(value)) {
45668 						Z_ADDREF_P(value);
45669 					}
45670 					zval_ptr_dtor_nogc(free_op_data);
45671 				}
45672 			} else if (IS_CV == IS_CONST) {
45673 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
45674 					Z_ADDREF_P(value);
45675 				}
45676 			}
45677 		} else {
45678 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45679 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45680 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45681 			} else {
45682 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45683 			}
45684 			if (UNEXPECTED(variable_ptr == NULL)) {
45685 				goto assign_dim_error;
45686 			}
45687 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
45688 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
45689 		}
45690 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45691 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45692 		}
45693 	} else {
45694 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45695 			object_ptr = Z_REFVAL_P(object_ptr);
45696 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45697 				goto try_assign_dim_array;
45698 			}
45699 		}
45700 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45701 			zend_object *obj = Z_OBJ_P(object_ptr);
45702 
45703 			GC_ADDREF(obj);
45704 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45705 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
45706 				dim = ZVAL_UNDEFINED_OP2();
45707 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45708 				dim++;
45709 			}
45710 
45711 			value = EX_VAR((opline+1)->op1.var);
45712 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
45713 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45714 			} else if (IS_CV & (IS_CV|IS_VAR)) {
45715 				ZVAL_DEREF(value);
45716 			}
45717 
45718 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
45719 
45720 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
45721 				zend_objects_store_del(obj);
45722 			}
45723 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
45724 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45725 				zend_use_new_element_for_string();
45726 
45727 				UNDEF_RESULT();
45728 			} else {
45729 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45730 				value = EX_VAR((opline+1)->op1.var);
45731 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45732 
45733 			}
45734 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
45735 			if (Z_ISREF_P(orig_object_ptr)
45736 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
45737 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
45738 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45739 
45740 				UNDEF_RESULT();
45741 			} else {
45742 				HashTable *ht = zend_new_array(8);
45743 				zend_uchar old_type = Z_TYPE_P(object_ptr);
45744 
45745 				ZVAL_ARR(object_ptr, ht);
45746 				if (UNEXPECTED(old_type == IS_FALSE)) {
45747 					GC_ADDREF(ht);
45748 					zend_false_to_array_deprecated();
45749 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
45750 						zend_array_destroy(ht);
45751 						goto assign_dim_error;
45752 					}
45753 				}
45754 				goto try_assign_dim_array;
45755 			}
45756 		} else {
45757 			zend_use_scalar_as_array();
45758 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45759 assign_dim_error:
45760 
45761 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45762 				ZVAL_NULL(EX_VAR(opline->result.var));
45763 			}
45764 		}
45765 	}
45766 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
45767 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45768 	}
45769 
45770 	/* assign_dim has two opcodes! */
45771 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45772 }
45773 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45774 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45775 {
45776 	USE_OPLINE
45777 	zval *property, *container, *value_ptr;
45778 
45779 	SAVE_OPLINE();
45780 
45781 	container = EX_VAR(opline->op1.var);
45782 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45783 
45784 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
45785 
45786 	if (1) {
45787 		if (IS_CV == IS_UNUSED) {
45788 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45789 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45790 			} else {
45791 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45792 			}
45793 		} else {
45794 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45795 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45796 			} else {
45797 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45798 			}
45799 		}
45800 	} else {
45801 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
45802 	}
45803 
45804 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45805 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
45806 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45807 }
45808 
45809 /* 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)45810 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45811 {
45812 	USE_OPLINE
45813 	zval *property, *container, *value_ptr;
45814 
45815 	SAVE_OPLINE();
45816 
45817 	container = EX_VAR(opline->op1.var);
45818 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45819 
45820 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
45821 
45822 	if (1) {
45823 		if (IS_CV == IS_UNUSED) {
45824 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45825 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45826 			} else {
45827 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45828 			}
45829 		} else {
45830 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45831 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45832 			} else {
45833 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45834 			}
45835 		}
45836 	} else {
45837 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
45838 	}
45839 
45840 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45841 
45842 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45843 }
45844 
45845 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45847 {
45848 	USE_OPLINE
45849 	zval *op1, *op2;
45850 	zend_string *op1_str, *op2_str, *str;
45851 
45852 
45853 	op1 = EX_VAR(opline->op1.var);
45854 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45855 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
45856 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
45857 		zend_string *op1_str = Z_STR_P(op1);
45858 		zend_string *op2_str = Z_STR_P(op2);
45859 		zend_string *str;
45860 
45861 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
45862 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
45863 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
45864 			} else {
45865 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
45866 			}
45867 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45868 				zend_string_release_ex(op1_str, 0);
45869 			}
45870 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
45871 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
45872 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
45873 			} else {
45874 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
45875 			}
45876 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45877 				zend_string_release_ex(op2_str, 0);
45878 			}
45879 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
45880 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
45881 		    size_t len = ZSTR_LEN(op1_str);
45882 
45883 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
45884 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
45885 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
45886 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45887 				zend_string_release_ex(op2_str, 0);
45888 			}
45889 		} else {
45890 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
45891 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
45892 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
45893 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
45894 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45895 				zend_string_release_ex(op1_str, 0);
45896 			}
45897 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45898 				zend_string_release_ex(op2_str, 0);
45899 			}
45900 		}
45901 		ZEND_VM_NEXT_OPCODE();
45902 	}
45903 
45904 	SAVE_OPLINE();
45905 	if (IS_CV == IS_CONST) {
45906 		op1_str = Z_STR_P(op1);
45907 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45908 		op1_str = zend_string_copy(Z_STR_P(op1));
45909 	} else {
45910 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45911 			ZVAL_UNDEFINED_OP1();
45912 		}
45913 		op1_str = zval_get_string_func(op1);
45914 	}
45915 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45916 		op2_str = Z_STR_P(op2);
45917 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45918 		op2_str = zend_string_copy(Z_STR_P(op2));
45919 	} else {
45920 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
45921 			ZVAL_UNDEFINED_OP2();
45922 		}
45923 		op2_str = zval_get_string_func(op2);
45924 	}
45925 	do {
45926 		if (IS_CV != IS_CONST) {
45927 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
45928 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45929 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
45930 						GC_ADDREF(op2_str);
45931 					}
45932 				}
45933 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
45934 				zend_string_release_ex(op1_str, 0);
45935 				break;
45936 			}
45937 		}
45938 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45939 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
45940 				if (IS_CV == IS_CONST) {
45941 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
45942 						GC_ADDREF(op1_str);
45943 					}
45944 				}
45945 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
45946 				zend_string_release_ex(op2_str, 0);
45947 				break;
45948 			}
45949 		}
45950 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
45951 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
45952 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
45953 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
45954 		if (IS_CV != IS_CONST) {
45955 			zend_string_release_ex(op1_str, 0);
45956 		}
45957 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45958 			zend_string_release_ex(op2_str, 0);
45959 		}
45960 	} while (0);
45961 
45962 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45963 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45964 }
45965 
ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45966 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45967 {
45968 	USE_OPLINE
45969 	zval *function_name;
45970 	zval *object;
45971 	zend_function *fbc;
45972 	zend_class_entry *called_scope;
45973 	zend_object *obj;
45974 	zend_execute_data *call;
45975 	uint32_t call_info;
45976 
45977 	SAVE_OPLINE();
45978 
45979 	object = EX_VAR(opline->op1.var);
45980 
45981 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45982 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45983 	}
45984 
45985 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
45986 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
45987 		do {
45988 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
45989 				function_name = Z_REFVAL_P(function_name);
45990 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
45991 					break;
45992 				}
45993 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
45994 				ZVAL_UNDEFINED_OP2();
45995 				if (UNEXPECTED(EG(exception) != NULL)) {
45996 
45997 					HANDLE_EXCEPTION();
45998 				}
45999 			}
46000 			zend_throw_error(NULL, "Method name must be a string");
46001 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46002 
46003 			HANDLE_EXCEPTION();
46004 		} while (0);
46005 	}
46006 
46007 	if (IS_CV == IS_UNUSED) {
46008 		obj = Z_OBJ_P(object);
46009 	} else {
46010 		do {
46011 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
46012 				obj = Z_OBJ_P(object);
46013 			} else {
46014 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
46015 					zend_reference *ref = Z_REF_P(object);
46016 
46017 					object = &ref->val;
46018 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
46019 						obj = Z_OBJ_P(object);
46020 						if (IS_CV & IS_VAR) {
46021 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
46022 								efree_size(ref, sizeof(zend_reference));
46023 							} else {
46024 								Z_ADDREF_P(object);
46025 							}
46026 						}
46027 						break;
46028 					}
46029 				}
46030 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
46031 					object = ZVAL_UNDEFINED_OP1();
46032 					if (UNEXPECTED(EG(exception) != NULL)) {
46033 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46034 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46035 						}
46036 						HANDLE_EXCEPTION();
46037 					}
46038 				}
46039 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46040 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46041 				}
46042 				zend_invalid_method_call(object, function_name);
46043 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46044 
46045 				HANDLE_EXCEPTION();
46046 			}
46047 		} while (0);
46048 	}
46049 
46050 	called_scope = obj->ce;
46051 
46052 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
46053 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
46054 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
46055 	} else {
46056 	    zend_object *orig_obj = obj;
46057 
46058 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46059 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46060 		}
46061 
46062 		/* First, locate the function. */
46063 		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));
46064 		if (UNEXPECTED(fbc == NULL)) {
46065 			if (EXPECTED(!EG(exception))) {
46066 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
46067 			}
46068 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46069 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
46070 				zend_objects_store_del(orig_obj);
46071 			}
46072 			HANDLE_EXCEPTION();
46073 		}
46074 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
46075 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
46076 		    EXPECTED(obj == orig_obj)) {
46077 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
46078 		}
46079 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
46080 			GC_ADDREF(obj); /* For $this pointer */
46081 			if (GC_DELREF(orig_obj) == 0) {
46082 				zend_objects_store_del(orig_obj);
46083 			}
46084 		}
46085 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
46086 			init_func_run_time_cache(&fbc->op_array);
46087 		}
46088 	}
46089 
46090 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46091 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46092 	}
46093 
46094 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
46095 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
46096 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
46097 			zend_objects_store_del(obj);
46098 			if (UNEXPECTED(EG(exception))) {
46099 				HANDLE_EXCEPTION();
46100 			}
46101 		}
46102 		/* call static method */
46103 		obj = (zend_object*)called_scope;
46104 		call_info = ZEND_CALL_NESTED_FUNCTION;
46105 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
46106 		if (IS_CV == IS_CV) {
46107 			GC_ADDREF(obj); /* For $this pointer */
46108 		}
46109 		/* CV may be changed indirectly (e.g. when it's a reference) */
46110 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
46111 	}
46112 
46113 	call = zend_vm_stack_push_call_frame(call_info,
46114 		fbc, opline->extended_value, obj);
46115 	call->prev_execute_data = EX(call);
46116 	EX(call) = call;
46117 
46118 	ZEND_VM_NEXT_OPCODE();
46119 }
46120 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46121 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46122 {
46123 	USE_OPLINE
46124 	zval *expr_ptr, new_expr;
46125 
46126 	SAVE_OPLINE();
46127 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
46128 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
46129 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
46130 		if (Z_ISREF_P(expr_ptr)) {
46131 			Z_ADDREF_P(expr_ptr);
46132 		} else {
46133 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
46134 		}
46135 
46136 	} else {
46137 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46138 		if (IS_CV == IS_TMP_VAR) {
46139 			/* pass */
46140 		} else if (IS_CV == IS_CONST) {
46141 			Z_TRY_ADDREF_P(expr_ptr);
46142 		} else if (IS_CV == IS_CV) {
46143 			ZVAL_DEREF(expr_ptr);
46144 			Z_TRY_ADDREF_P(expr_ptr);
46145 		} else /* if (IS_CV == IS_VAR) */ {
46146 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
46147 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
46148 
46149 				expr_ptr = Z_REFVAL_P(expr_ptr);
46150 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
46151 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
46152 					expr_ptr = &new_expr;
46153 					efree_size(ref, sizeof(zend_reference));
46154 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
46155 					Z_ADDREF_P(expr_ptr);
46156 				}
46157 			}
46158 		}
46159 	}
46160 
46161 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
46162 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46163 		zend_string *str;
46164 		zend_ulong hval;
46165 
46166 add_again:
46167 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
46168 			str = Z_STR_P(offset);
46169 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46170 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
46171 					goto num_index;
46172 				}
46173 			}
46174 str_index:
46175 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
46176 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
46177 			hval = Z_LVAL_P(offset);
46178 num_index:
46179 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
46180 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
46181 			offset = Z_REFVAL_P(offset);
46182 			goto add_again;
46183 		} else if (Z_TYPE_P(offset) == IS_NULL) {
46184 			str = ZSTR_EMPTY_ALLOC();
46185 			goto str_index;
46186 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
46187 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
46188 			goto num_index;
46189 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
46190 			hval = 0;
46191 			goto num_index;
46192 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
46193 			hval = 1;
46194 			goto num_index;
46195 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
46196 			zend_use_resource_as_offset(offset);
46197 			hval = Z_RES_HANDLE_P(offset);
46198 			goto num_index;
46199 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
46200 			ZVAL_UNDEFINED_OP2();
46201 			str = ZSTR_EMPTY_ALLOC();
46202 			goto str_index;
46203 		} else {
46204 			zend_illegal_offset();
46205 			zval_ptr_dtor_nogc(expr_ptr);
46206 		}
46207 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46208 	} else {
46209 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
46210 			zend_cannot_add_element();
46211 			zval_ptr_dtor_nogc(expr_ptr);
46212 		}
46213 	}
46214 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46215 }
46216 
ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46218 {
46219 	zval *array;
46220 	uint32_t size;
46221 	USE_OPLINE
46222 
46223 	array = EX_VAR(opline->result.var);
46224 	if (IS_CV != IS_UNUSED) {
46225 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
46226 		ZVAL_ARR(array, zend_new_array(size));
46227 		/* Explicitly initialize array as not-packed if flag is set */
46228 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
46229 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
46230 		}
46231 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46232 	} else {
46233 		ZVAL_ARR(array, zend_new_array(0));
46234 		ZEND_VM_NEXT_OPCODE();
46235 	}
46236 }
46237 
ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46238 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46239 {
46240 	USE_OPLINE
46241 	zval *container;
46242 	zval *offset;
46243 	zend_ulong hval;
46244 	zend_string *key;
46245 
46246 	SAVE_OPLINE();
46247 	container = EX_VAR(opline->op1.var);
46248 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46249 
46250 	do {
46251 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
46252 			HashTable *ht;
46253 
46254 unset_dim_array:
46255 			SEPARATE_ARRAY(container);
46256 			ht = Z_ARRVAL_P(container);
46257 offset_again:
46258 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
46259 				key = Z_STR_P(offset);
46260 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46261 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
46262 						goto num_index_dim;
46263 					}
46264 				}
46265 str_index_dim:
46266 				ZEND_ASSERT(ht != &EG(symbol_table));
46267 				zend_hash_del(ht, key);
46268 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
46269 				hval = Z_LVAL_P(offset);
46270 num_index_dim:
46271 				zend_hash_index_del(ht, hval);
46272 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
46273 				offset = Z_REFVAL_P(offset);
46274 				goto offset_again;
46275 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
46276 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
46277 				goto num_index_dim;
46278 			} else if (Z_TYPE_P(offset) == IS_NULL) {
46279 				key = ZSTR_EMPTY_ALLOC();
46280 				goto str_index_dim;
46281 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
46282 				hval = 0;
46283 				goto num_index_dim;
46284 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
46285 				hval = 1;
46286 				goto num_index_dim;
46287 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
46288 				zend_use_resource_as_offset(offset);
46289 				hval = Z_RES_HANDLE_P(offset);
46290 				goto num_index_dim;
46291 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
46292 				ZVAL_UNDEFINED_OP2();
46293 				key = ZSTR_EMPTY_ALLOC();
46294 				goto str_index_dim;
46295 			} else {
46296 				zend_type_error("Illegal offset type in unset");
46297 			}
46298 			break;
46299 		} else if (Z_ISREF_P(container)) {
46300 			container = Z_REFVAL_P(container);
46301 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
46302 				goto unset_dim_array;
46303 			}
46304 		}
46305 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
46306 			container = ZVAL_UNDEFINED_OP1();
46307 		}
46308 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
46309 			offset = ZVAL_UNDEFINED_OP2();
46310 		}
46311 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
46312 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
46313 				offset++;
46314 			}
46315 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
46316 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
46317 			zend_throw_error(NULL, "Cannot unset string offsets");
46318 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
46319 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
46320 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
46321 			zend_false_to_array_deprecated();
46322 		}
46323 	} while (0);
46324 
46325 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46326 
46327 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46328 }
46329 
ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46330 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46331 {
46332 	USE_OPLINE
46333 	zval *container;
46334 	zval *offset;
46335 	zend_string *name, *tmp_name;
46336 
46337 	SAVE_OPLINE();
46338 	container = EX_VAR(opline->op1.var);
46339 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46340 
46341 	do {
46342 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
46343 			if (Z_ISREF_P(container)) {
46344 				container = Z_REFVAL_P(container);
46345 				if (Z_TYPE_P(container) != IS_OBJECT) {
46346 					if (IS_CV == IS_CV
46347 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
46348 						ZVAL_UNDEFINED_OP1();
46349 					}
46350 					break;
46351 				}
46352 			} else {
46353 				break;
46354 			}
46355 		}
46356 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46357 			name = Z_STR_P(offset);
46358 		} else {
46359 			name = zval_try_get_tmp_string(offset, &tmp_name);
46360 			if (UNEXPECTED(!name)) {
46361 				break;
46362 			}
46363 		}
46364 		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));
46365 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46366 			zend_tmp_string_release(tmp_name);
46367 		}
46368 	} while (0);
46369 
46370 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46371 
46372 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46373 }
46374 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46375 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46376 {
46377 	USE_OPLINE
46378 	zval *container;
46379 	bool result;
46380 	zend_ulong hval;
46381 	zval *offset;
46382 
46383 	SAVE_OPLINE();
46384 	container = EX_VAR(opline->op1.var);
46385 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46386 
46387 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
46388 		HashTable *ht;
46389 		zval *value;
46390 		zend_string *str;
46391 
46392 isset_dim_obj_array:
46393 		ht = Z_ARRVAL_P(container);
46394 isset_again:
46395 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
46396 			str = Z_STR_P(offset);
46397 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46398 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
46399 					goto num_index_prop;
46400 				}
46401 			}
46402 			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
46403 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
46404 			hval = Z_LVAL_P(offset);
46405 num_index_prop:
46406 			value = zend_hash_index_find(ht, hval);
46407 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
46408 			offset = Z_REFVAL_P(offset);
46409 			goto isset_again;
46410 		} else {
46411 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
46412 			if (UNEXPECTED(EG(exception))) {
46413 				result = 0;
46414 				goto isset_dim_obj_exit;
46415 			}
46416 		}
46417 
46418 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
46419 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
46420 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
46421 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
46422 
46423 			if (IS_CV & (IS_CONST|IS_CV)) {
46424 				/* avoid exception check */
46425 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46426 				ZEND_VM_SMART_BRANCH(result, 0);
46427 			}
46428 		} else {
46429 			result = (value == NULL || !i_zend_is_true(value));
46430 		}
46431 		goto isset_dim_obj_exit;
46432 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
46433 		container = Z_REFVAL_P(container);
46434 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
46435 			goto isset_dim_obj_array;
46436 		}
46437 	}
46438 
46439 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
46440 		offset++;
46441 	}
46442 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
46443 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
46444 	} else {
46445 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
46446 	}
46447 
46448 isset_dim_obj_exit:
46449 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46450 
46451 	ZEND_VM_SMART_BRANCH(result, 1);
46452 }
46453 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46454 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46455 {
46456 	USE_OPLINE
46457 	zval *container;
46458 	int result;
46459 	zval *offset;
46460 	zend_string *name, *tmp_name;
46461 
46462 	SAVE_OPLINE();
46463 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
46464 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46465 
46466 	if (IS_CV == IS_CONST ||
46467 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
46468 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
46469 			container = Z_REFVAL_P(container);
46470 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
46471 				result = (opline->extended_value & ZEND_ISEMPTY);
46472 				goto isset_object_finish;
46473 			}
46474 		} else {
46475 			result = (opline->extended_value & ZEND_ISEMPTY);
46476 			goto isset_object_finish;
46477 		}
46478 	}
46479 
46480 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46481 		name = Z_STR_P(offset);
46482 	} else {
46483 		name = zval_try_get_tmp_string(offset, &tmp_name);
46484 		if (UNEXPECTED(!name)) {
46485 			result = 0;
46486 			goto isset_object_finish;
46487 		}
46488 	}
46489 
46490 	result =
46491 		(opline->extended_value & ZEND_ISEMPTY) ^
46492 		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));
46493 
46494 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46495 		zend_tmp_string_release(tmp_name);
46496 	}
46497 
46498 isset_object_finish:
46499 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46500 
46501 	ZEND_VM_SMART_BRANCH(result, 1);
46502 }
46503 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46504 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46505 {
46506 	USE_OPLINE
46507 
46508 	zval *key, *subject;
46509 	HashTable *ht;
46510 	bool result;
46511 
46512 	SAVE_OPLINE();
46513 
46514 	key = EX_VAR(opline->op1.var);
46515 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46516 
46517 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
46518 array_key_exists_array:
46519 		ht = Z_ARRVAL_P(subject);
46520 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
46521 	} else {
46522 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
46523 			subject = Z_REFVAL_P(subject);
46524 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
46525 				goto array_key_exists_array;
46526 			}
46527 		}
46528 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
46529 		result = 0;
46530 	}
46531 
46532 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46533 
46534 	ZEND_VM_SMART_BRANCH(result, 1);
46535 }
46536 
46537 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46538 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46539 {
46540 	USE_OPLINE
46541 
46542 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
46543 
46544 	SAVE_OPLINE();
46545 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
46546 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46547 	}
46548 
46549 	/* Destroy the previously yielded value */
46550 	zval_ptr_dtor(&generator->value);
46551 
46552 	/* Destroy the previously yielded key */
46553 	zval_ptr_dtor(&generator->key);
46554 
46555 	/* Set the new yielded value */
46556 	if (IS_CV != IS_UNUSED) {
46557 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
46558 			/* Constants and temporary variables aren't yieldable by reference,
46559 			 * but we still allow them with a notice. */
46560 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
46561 				zval *value;
46562 
46563 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
46564 
46565 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46566 				ZVAL_COPY_VALUE(&generator->value, value);
46567 				if (IS_CV == IS_CONST) {
46568 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
46569 						Z_ADDREF(generator->value);
46570 					}
46571 				}
46572 			} else {
46573 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
46574 
46575 				/* If a function call result is yielded and the function did
46576 				 * not return by reference we throw a notice. */
46577 				do {
46578 					if (IS_CV == IS_VAR) {
46579 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
46580 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
46581 						 && !Z_ISREF_P(value_ptr)) {
46582 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
46583 							ZVAL_COPY(&generator->value, value_ptr);
46584 							break;
46585 						}
46586 					}
46587 					if (Z_ISREF_P(value_ptr)) {
46588 						Z_ADDREF_P(value_ptr);
46589 					} else {
46590 						ZVAL_MAKE_REF_EX(value_ptr, 2);
46591 					}
46592 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
46593 				} while (0);
46594 
46595 			}
46596 		} else {
46597 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46598 
46599 			/* Consts, temporary variables and references need copying */
46600 			if (IS_CV == IS_CONST) {
46601 				ZVAL_COPY_VALUE(&generator->value, value);
46602 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
46603 					Z_ADDREF(generator->value);
46604 				}
46605 			} else if (IS_CV == IS_TMP_VAR) {
46606 				ZVAL_COPY_VALUE(&generator->value, value);
46607             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
46608 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
46609 
46610 			} else {
46611 				ZVAL_COPY_VALUE(&generator->value, value);
46612 				if (IS_CV == IS_CV) {
46613 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
46614 				}
46615 			}
46616 		}
46617 	} else {
46618 		/* If no value was specified yield null */
46619 		ZVAL_NULL(&generator->value);
46620 	}
46621 
46622 	/* Set the new yielded key */
46623 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
46624 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46625 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
46626 			key = Z_REFVAL_P(key);
46627 		}
46628 		ZVAL_COPY(&generator->key, key);
46629 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46630 
46631 		if (Z_TYPE(generator->key) == IS_LONG
46632 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
46633 		) {
46634 			generator->largest_used_integer_key = Z_LVAL(generator->key);
46635 		}
46636 	} else {
46637 		/* If no key was specified we use auto-increment keys */
46638 		generator->largest_used_integer_key++;
46639 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
46640 	}
46641 
46642 	if (RETURN_VALUE_USED(opline)) {
46643 		/* If the return value of yield is used set the send
46644 		 * target and initialize it to NULL */
46645 		generator->send_target = EX_VAR(opline->result.var);
46646 		ZVAL_NULL(generator->send_target);
46647 	} else {
46648 		generator->send_target = NULL;
46649 	}
46650 
46651 	/* We increment to the next op, so we are at the correct position when the
46652 	 * generator is resumed. */
46653 	ZEND_VM_INC_OPCODE();
46654 
46655 	/* The GOTO VM uses a local opline variable. We need to set the opline
46656 	 * variable in execute_data so we don't resume at an old position. */
46657 	SAVE_OPLINE();
46658 
46659 	ZEND_VM_RETURN();
46660 }
46661 
ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46662 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46663 {
46664 	USE_OPLINE
46665 	zval *op1, *op2;
46666 	bool result;
46667 
46668 	SAVE_OPLINE();
46669 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46670 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
46671 	result = fast_is_identical_function(op1, op2);
46672 
46673 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46674 	ZEND_VM_SMART_BRANCH(result, 1);
46675 }
46676 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46677 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46678 {
46679 	USE_OPLINE
46680 	zval *op1, *op2;
46681 	bool result;
46682 
46683 	SAVE_OPLINE();
46684 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46685 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
46686 	result = fast_is_not_identical_function(op1, op2);
46687 
46688 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46689 	ZEND_VM_SMART_BRANCH(result, 1);
46690 }
46691 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46692 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46693 {
46694 	USE_OPLINE
46695 	zval *value;
46696 	zval *variable_ptr;
46697 
46698 	SAVE_OPLINE();
46699 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
46700 	variable_ptr = EX_VAR(opline->op1.var);
46701 
46702 	value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
46703 	if (UNEXPECTED(0)) {
46704 		ZVAL_COPY(EX_VAR(opline->result.var), value);
46705 	}
46706 
46707 	/* zend_assign_to_variable() always takes care of op2, never free it! */
46708 
46709 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46710 }
46711 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46712 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46713 {
46714 	USE_OPLINE
46715 	zval *value;
46716 	zval *variable_ptr;
46717 
46718 	SAVE_OPLINE();
46719 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
46720 	variable_ptr = EX_VAR(opline->op1.var);
46721 
46722 	value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
46723 	if (UNEXPECTED(1)) {
46724 		ZVAL_COPY(EX_VAR(opline->result.var), value);
46725 	}
46726 
46727 	/* zend_assign_to_variable() always takes care of op2, never free it! */
46728 
46729 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46730 }
46731 
ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46733 {
46734 	USE_OPLINE
46735 	zval *op1, *op2;
46736 	bool result;
46737 
46738 	SAVE_OPLINE();
46739 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46740 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
46741 	result = fast_is_identical_function(op1, op2);
46742 
46743 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46744 	ZEND_VM_SMART_BRANCH(result, 1);
46745 }
46746 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46747 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46748 {
46749 	USE_OPLINE
46750 	zval *op1, *op2;
46751 	bool result;
46752 
46753 	SAVE_OPLINE();
46754 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46755 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
46756 	result = fast_is_not_identical_function(op1, op2);
46757 
46758 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46759 	ZEND_VM_SMART_BRANCH(result, 1);
46760 }
46761 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46762 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46763 {
46764 	USE_OPLINE
46765 	zval *value;
46766 	zval *variable_ptr;
46767 
46768 	SAVE_OPLINE();
46769 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46770 	variable_ptr = EX_VAR(opline->op1.var);
46771 
46772 	value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
46773 	if (UNEXPECTED(0)) {
46774 		ZVAL_COPY(EX_VAR(opline->result.var), value);
46775 	}
46776 
46777 	/* zend_assign_to_variable() always takes care of op2, never free it! */
46778 
46779 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46780 }
46781 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46782 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46783 {
46784 	USE_OPLINE
46785 	zval *value;
46786 	zval *variable_ptr;
46787 
46788 	SAVE_OPLINE();
46789 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46790 	variable_ptr = EX_VAR(opline->op1.var);
46791 
46792 	value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
46793 	if (UNEXPECTED(1)) {
46794 		ZVAL_COPY(EX_VAR(opline->result.var), value);
46795 	}
46796 
46797 	/* zend_assign_to_variable() always takes care of op2, never free it! */
46798 
46799 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46800 }
46801 
ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46803 {
46804 	USE_OPLINE
46805 	zval *variable_ptr;
46806 	zval *value_ptr;
46807 
46808 	SAVE_OPLINE();
46809 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46810 	variable_ptr = EX_VAR(opline->op1.var);
46811 
46812 	if (IS_CV == IS_VAR &&
46813 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
46814 
46815 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
46816 		variable_ptr = &EG(uninitialized_zval);
46817 	} else if (IS_VAR == IS_VAR &&
46818 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
46819 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
46820 
46821 		variable_ptr = zend_wrong_assign_to_variable_reference(
46822 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
46823 	} else {
46824 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
46825 	}
46826 
46827 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46828 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
46829 	}
46830 
46831 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46832 
46833 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46834 }
46835 
ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46837 {
46838 	USE_OPLINE
46839 	zval *expr;
46840 	bool result;
46841 
46842 	SAVE_OPLINE();
46843 	expr = EX_VAR(opline->op1.var);
46844 
46845 try_instanceof:
46846 	if (Z_TYPE_P(expr) == IS_OBJECT) {
46847 		zend_class_entry *ce;
46848 
46849 		if (IS_VAR == IS_CONST) {
46850 			ce = CACHED_PTR(opline->extended_value);
46851 			if (UNEXPECTED(ce == NULL)) {
46852 				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);
46853 				if (EXPECTED(ce)) {
46854 					CACHE_PTR(opline->extended_value, ce);
46855 				}
46856 			}
46857 		} else if (IS_VAR == IS_UNUSED) {
46858 			ce = zend_fetch_class(NULL, opline->op2.num);
46859 			if (UNEXPECTED(ce == NULL)) {
46860 
46861 				ZVAL_UNDEF(EX_VAR(opline->result.var));
46862 				HANDLE_EXCEPTION();
46863 			}
46864 		} else {
46865 			ce = Z_CE_P(EX_VAR(opline->op2.var));
46866 		}
46867 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
46868 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
46869 		expr = Z_REFVAL_P(expr);
46870 		goto try_instanceof;
46871 	} else {
46872 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
46873 			ZVAL_UNDEFINED_OP1();
46874 		}
46875 		result = 0;
46876 	}
46877 
46878 	ZEND_VM_SMART_BRANCH(result, 1);
46879 }
46880 
ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46881 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46882 {
46883 	USE_OPLINE
46884 	zval *var_ptr;
46885 	zval *value, *container, *dim;
46886 	HashTable *ht;
46887 
46888 	SAVE_OPLINE();
46889 	container = EX_VAR(opline->op1.var);
46890 
46891 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
46892 assign_dim_op_array:
46893 		SEPARATE_ARRAY(container);
46894 		ht = Z_ARRVAL_P(container);
46895 assign_dim_op_new_array:
46896 		dim = NULL;
46897 		if (IS_UNUSED == IS_UNUSED) {
46898 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
46899 			if (UNEXPECTED(!var_ptr)) {
46900 				zend_cannot_add_element();
46901 				goto assign_dim_op_ret_null;
46902 			}
46903 		} else {
46904 			if (IS_UNUSED == IS_CONST) {
46905 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
46906 			} else {
46907 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
46908 			}
46909 			if (UNEXPECTED(!var_ptr)) {
46910 				goto assign_dim_op_ret_null;
46911 			}
46912 		}
46913 
46914 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
46915 
46916 		do {
46917 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
46918 				zend_reference *ref = Z_REF_P(var_ptr);
46919 				var_ptr = Z_REFVAL_P(var_ptr);
46920 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
46921 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
46922 					break;
46923 				}
46924 			}
46925 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
46926 		} while (0);
46927 
46928 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46929 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
46930 		}
46931 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
46932 	} else {
46933 		if (EXPECTED(Z_ISREF_P(container))) {
46934 			container = Z_REFVAL_P(container);
46935 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
46936 				goto assign_dim_op_array;
46937 			}
46938 		}
46939 
46940 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
46941 			zend_object *obj = Z_OBJ_P(container);
46942 
46943 			dim = NULL;
46944 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46945 				dim++;
46946 			}
46947 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
46948 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
46949 			zend_uchar old_type;
46950 
46951 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
46952 				ZVAL_UNDEFINED_OP1();
46953 			}
46954 			ht = zend_new_array(8);
46955 			old_type = Z_TYPE_P(container);
46956 			ZVAL_ARR(container, ht);
46957 			if (UNEXPECTED(old_type == IS_FALSE)) {
46958 				GC_ADDREF(ht);
46959 				zend_false_to_array_deprecated();
46960 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
46961 					zend_array_destroy(ht);
46962 					goto assign_dim_op_ret_null;
46963 				}
46964 			}
46965 			goto assign_dim_op_new_array;
46966 		} else {
46967 			dim = NULL;
46968 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
46969 assign_dim_op_ret_null:
46970 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
46971 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46972 				ZVAL_NULL(EX_VAR(opline->result.var));
46973 			}
46974 		}
46975 	}
46976 
46977 
46978 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46979 }
46980 
zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)46981 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)
46982 {
46983 	USE_OPLINE
46984 	zval *varname;
46985 	zval *retval;
46986 	zend_string *name, *tmp_name;
46987 	HashTable *target_symbol_table;
46988 
46989 	SAVE_OPLINE();
46990 	varname = EX_VAR(opline->op1.var);
46991 
46992 	if (IS_CV == IS_CONST) {
46993 		name = Z_STR_P(varname);
46994 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
46995 		name = Z_STR_P(varname);
46996 		tmp_name = NULL;
46997 	} else {
46998 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
46999 			ZVAL_UNDEFINED_OP1();
47000 		}
47001 		name = zval_try_get_tmp_string(varname, &tmp_name);
47002 		if (UNEXPECTED(!name)) {
47003 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
47004 
47005 			}
47006 			ZVAL_UNDEF(EX_VAR(opline->result.var));
47007 			HANDLE_EXCEPTION();
47008 		}
47009 	}
47010 
47011 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
47012 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
47013 	if (retval == NULL) {
47014 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
47015 fetch_this:
47016 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
47017 			if (IS_CV != IS_CONST) {
47018 				zend_tmp_string_release(tmp_name);
47019 			}
47020 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47021 		}
47022 		if (type == BP_VAR_W) {
47023 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
47024 		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
47025 			retval = &EG(uninitialized_zval);
47026 		} else {
47027 			if (IS_CV == IS_CV) {
47028 				/* Keep name alive in case an error handler tries to free it. */
47029 				zend_string_addref(name);
47030 			}
47031 			zend_error(E_WARNING, "Undefined %svariable $%s",
47032 				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
47033 			if (type == BP_VAR_RW && !EG(exception)) {
47034 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
47035 			} else {
47036 				retval = &EG(uninitialized_zval);
47037 			}
47038 			if (IS_CV == IS_CV) {
47039 				zend_string_release(name);
47040 			}
47041 		}
47042 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
47043 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
47044 		retval = Z_INDIRECT_P(retval);
47045 		if (Z_TYPE_P(retval) == IS_UNDEF) {
47046 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
47047 				goto fetch_this;
47048 			}
47049 			if (type == BP_VAR_W) {
47050 				ZVAL_NULL(retval);
47051 			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
47052 				retval = &EG(uninitialized_zval);
47053 			} else {
47054 				zend_error(E_WARNING, "Undefined %svariable $%s",
47055 					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
47056 				if (type == BP_VAR_RW && !EG(exception)) {
47057 					ZVAL_NULL(retval);
47058 				} else {
47059 					retval = &EG(uninitialized_zval);
47060 				}
47061 			}
47062 		}
47063 	}
47064 
47065 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
47066 
47067 	}
47068 
47069 	if (IS_CV != IS_CONST) {
47070 		zend_tmp_string_release(tmp_name);
47071 	}
47072 
47073 	ZEND_ASSERT(retval != NULL);
47074 	if (type == BP_VAR_R || type == BP_VAR_IS) {
47075 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
47076 	} else {
47077 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
47078 	}
47079 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47080 }
47081 
ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47082 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47083 {
47084 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47085 }
47086 
ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47087 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47088 {
47089 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47090 }
47091 
ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47092 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47093 {
47094 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47095 }
47096 
ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47097 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47098 {
47099 	int fetch_type =
47100 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
47101 			BP_VAR_W : BP_VAR_R;
47102 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47103 }
47104 
ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47105 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47106 {
47107 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47108 }
47109 
ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47110 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47111 {
47112 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47113 }
47114 
47115 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47117 {
47118 	USE_OPLINE
47119 	zval *container;
47120 
47121 	SAVE_OPLINE();
47122 	container = EX_VAR(opline->op1.var);
47123 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
47124 
47125 	if (IS_CV == IS_VAR) {
47126 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
47127 	}
47128 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47129 }
47130 
ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47131 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47132 {
47133 	USE_OPLINE
47134 	zval *container;
47135 
47136 	SAVE_OPLINE();
47137 	container = EX_VAR(opline->op1.var);
47138 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
47139 
47140 	if (IS_CV == IS_VAR) {
47141 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
47142 	}
47143 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47144 }
47145 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47146 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47147 {
47148 #if 0
47149 	USE_OPLINE
47150 #endif
47151 
47152 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
47153         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
47154 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47155         }
47156 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47157 	} else {
47158 		if (IS_UNUSED == IS_UNUSED) {
47159 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47160 		}
47161 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47162 	}
47163 }
47164 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47165 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47166 {
47167 	USE_OPLINE
47168 	zval *object_ptr, *orig_object_ptr;
47169 	zval *value;
47170 	zval *variable_ptr;
47171 	zval *dim;
47172 
47173 	SAVE_OPLINE();
47174 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
47175 
47176 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47177 try_assign_dim_array:
47178 		SEPARATE_ARRAY(object_ptr);
47179 		if (IS_UNUSED == IS_UNUSED) {
47180 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
47181 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
47182 				HashTable *ht = Z_ARRVAL_P(object_ptr);
47183 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
47184 					GC_ADDREF(ht);
47185 				}
47186 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47187 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
47188 					zend_array_destroy(ht);
47189 					goto assign_dim_error;
47190 				}
47191 			}
47192 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
47193 				ZVAL_DEREF(value);
47194 			}
47195 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
47196 			if (UNEXPECTED(value == NULL)) {
47197 				zend_cannot_add_element();
47198 				goto assign_dim_error;
47199 			} else if (IS_CONST == IS_CV) {
47200 				if (Z_REFCOUNTED_P(value)) {
47201 					Z_ADDREF_P(value);
47202 				}
47203 			} else if (IS_CONST == IS_VAR) {
47204 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
47205 				if (Z_ISREF_P(free_op_data)) {
47206 					if (Z_REFCOUNTED_P(value)) {
47207 						Z_ADDREF_P(value);
47208 					}
47209 					zval_ptr_dtor_nogc(free_op_data);
47210 				}
47211 			} else if (IS_CONST == IS_CONST) {
47212 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
47213 					Z_ADDREF_P(value);
47214 				}
47215 			}
47216 		} else {
47217 			dim = NULL;
47218 			if (IS_UNUSED == IS_CONST) {
47219 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47220 			} else {
47221 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47222 			}
47223 			if (UNEXPECTED(variable_ptr == NULL)) {
47224 				goto assign_dim_error;
47225 			}
47226 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
47227 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
47228 		}
47229 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47230 			ZVAL_COPY(EX_VAR(opline->result.var), value);
47231 		}
47232 	} else {
47233 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
47234 			object_ptr = Z_REFVAL_P(object_ptr);
47235 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47236 				goto try_assign_dim_array;
47237 			}
47238 		}
47239 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
47240 			zend_object *obj = Z_OBJ_P(object_ptr);
47241 
47242 			GC_ADDREF(obj);
47243 			dim = NULL;
47244 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
47245 				dim = ZVAL_UNDEFINED_OP2();
47246 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
47247 				dim++;
47248 			}
47249 
47250 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
47251 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
47252 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47253 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
47254 				ZVAL_DEREF(value);
47255 			}
47256 
47257 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
47258 
47259 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
47260 				zend_objects_store_del(obj);
47261 			}
47262 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
47263 			if (IS_UNUSED == IS_UNUSED) {
47264 				zend_use_new_element_for_string();
47265 
47266 				UNDEF_RESULT();
47267 			} else {
47268 				dim = NULL;
47269 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
47270 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
47271 
47272 			}
47273 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
47274 			if (Z_ISREF_P(orig_object_ptr)
47275 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
47276 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
47277 				dim = NULL;
47278 
47279 				UNDEF_RESULT();
47280 			} else {
47281 				HashTable *ht = zend_new_array(8);
47282 				zend_uchar old_type = Z_TYPE_P(object_ptr);
47283 
47284 				ZVAL_ARR(object_ptr, ht);
47285 				if (UNEXPECTED(old_type == IS_FALSE)) {
47286 					GC_ADDREF(ht);
47287 					zend_false_to_array_deprecated();
47288 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
47289 						zend_array_destroy(ht);
47290 						goto assign_dim_error;
47291 					}
47292 				}
47293 				goto try_assign_dim_array;
47294 			}
47295 		} else {
47296 			zend_use_scalar_as_array();
47297 			dim = NULL;
47298 assign_dim_error:
47299 
47300 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47301 				ZVAL_NULL(EX_VAR(opline->result.var));
47302 			}
47303 		}
47304 	}
47305 	if (IS_UNUSED != IS_UNUSED) {
47306 
47307 	}
47308 
47309 	/* assign_dim has two opcodes! */
47310 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47311 }
47312 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47313 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47314 {
47315 	USE_OPLINE
47316 	zval *object_ptr, *orig_object_ptr;
47317 	zval *value;
47318 	zval *variable_ptr;
47319 	zval *dim;
47320 
47321 	SAVE_OPLINE();
47322 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
47323 
47324 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47325 try_assign_dim_array:
47326 		SEPARATE_ARRAY(object_ptr);
47327 		if (IS_UNUSED == IS_UNUSED) {
47328 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
47329 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
47330 				HashTable *ht = Z_ARRVAL_P(object_ptr);
47331 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
47332 					GC_ADDREF(ht);
47333 				}
47334 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47335 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
47336 					zend_array_destroy(ht);
47337 					goto assign_dim_error;
47338 				}
47339 			}
47340 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
47341 				ZVAL_DEREF(value);
47342 			}
47343 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
47344 			if (UNEXPECTED(value == NULL)) {
47345 				zend_cannot_add_element();
47346 				goto assign_dim_error;
47347 			} else if (IS_TMP_VAR == IS_CV) {
47348 				if (Z_REFCOUNTED_P(value)) {
47349 					Z_ADDREF_P(value);
47350 				}
47351 			} else if (IS_TMP_VAR == IS_VAR) {
47352 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
47353 				if (Z_ISREF_P(free_op_data)) {
47354 					if (Z_REFCOUNTED_P(value)) {
47355 						Z_ADDREF_P(value);
47356 					}
47357 					zval_ptr_dtor_nogc(free_op_data);
47358 				}
47359 			} else if (IS_TMP_VAR == IS_CONST) {
47360 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
47361 					Z_ADDREF_P(value);
47362 				}
47363 			}
47364 		} else {
47365 			dim = NULL;
47366 			if (IS_UNUSED == IS_CONST) {
47367 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47368 			} else {
47369 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47370 			}
47371 			if (UNEXPECTED(variable_ptr == NULL)) {
47372 				goto assign_dim_error;
47373 			}
47374 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
47375 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
47376 		}
47377 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47378 			ZVAL_COPY(EX_VAR(opline->result.var), value);
47379 		}
47380 	} else {
47381 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
47382 			object_ptr = Z_REFVAL_P(object_ptr);
47383 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47384 				goto try_assign_dim_array;
47385 			}
47386 		}
47387 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
47388 			zend_object *obj = Z_OBJ_P(object_ptr);
47389 
47390 			GC_ADDREF(obj);
47391 			dim = NULL;
47392 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
47393 				dim = ZVAL_UNDEFINED_OP2();
47394 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
47395 				dim++;
47396 			}
47397 
47398 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
47399 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
47400 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47401 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
47402 				ZVAL_DEREF(value);
47403 			}
47404 
47405 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
47406 
47407 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47408 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
47409 				zend_objects_store_del(obj);
47410 			}
47411 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
47412 			if (IS_UNUSED == IS_UNUSED) {
47413 				zend_use_new_element_for_string();
47414 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47415 				UNDEF_RESULT();
47416 			} else {
47417 				dim = NULL;
47418 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
47419 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
47420 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47421 			}
47422 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
47423 			if (Z_ISREF_P(orig_object_ptr)
47424 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
47425 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
47426 				dim = NULL;
47427 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47428 				UNDEF_RESULT();
47429 			} else {
47430 				HashTable *ht = zend_new_array(8);
47431 				zend_uchar old_type = Z_TYPE_P(object_ptr);
47432 
47433 				ZVAL_ARR(object_ptr, ht);
47434 				if (UNEXPECTED(old_type == IS_FALSE)) {
47435 					GC_ADDREF(ht);
47436 					zend_false_to_array_deprecated();
47437 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
47438 						zend_array_destroy(ht);
47439 						goto assign_dim_error;
47440 					}
47441 				}
47442 				goto try_assign_dim_array;
47443 			}
47444 		} else {
47445 			zend_use_scalar_as_array();
47446 			dim = NULL;
47447 assign_dim_error:
47448 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47449 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47450 				ZVAL_NULL(EX_VAR(opline->result.var));
47451 			}
47452 		}
47453 	}
47454 	if (IS_UNUSED != IS_UNUSED) {
47455 
47456 	}
47457 
47458 	/* assign_dim has two opcodes! */
47459 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47460 }
47461 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47462 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47463 {
47464 	USE_OPLINE
47465 	zval *object_ptr, *orig_object_ptr;
47466 	zval *value;
47467 	zval *variable_ptr;
47468 	zval *dim;
47469 
47470 	SAVE_OPLINE();
47471 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
47472 
47473 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47474 try_assign_dim_array:
47475 		SEPARATE_ARRAY(object_ptr);
47476 		if (IS_UNUSED == IS_UNUSED) {
47477 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47478 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
47479 				HashTable *ht = Z_ARRVAL_P(object_ptr);
47480 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
47481 					GC_ADDREF(ht);
47482 				}
47483 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47484 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
47485 					zend_array_destroy(ht);
47486 					goto assign_dim_error;
47487 				}
47488 			}
47489 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
47490 				ZVAL_DEREF(value);
47491 			}
47492 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
47493 			if (UNEXPECTED(value == NULL)) {
47494 				zend_cannot_add_element();
47495 				goto assign_dim_error;
47496 			} else if (IS_VAR == IS_CV) {
47497 				if (Z_REFCOUNTED_P(value)) {
47498 					Z_ADDREF_P(value);
47499 				}
47500 			} else if (IS_VAR == IS_VAR) {
47501 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
47502 				if (Z_ISREF_P(free_op_data)) {
47503 					if (Z_REFCOUNTED_P(value)) {
47504 						Z_ADDREF_P(value);
47505 					}
47506 					zval_ptr_dtor_nogc(free_op_data);
47507 				}
47508 			} else if (IS_VAR == IS_CONST) {
47509 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
47510 					Z_ADDREF_P(value);
47511 				}
47512 			}
47513 		} else {
47514 			dim = NULL;
47515 			if (IS_UNUSED == IS_CONST) {
47516 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47517 			} else {
47518 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47519 			}
47520 			if (UNEXPECTED(variable_ptr == NULL)) {
47521 				goto assign_dim_error;
47522 			}
47523 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47524 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
47525 		}
47526 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47527 			ZVAL_COPY(EX_VAR(opline->result.var), value);
47528 		}
47529 	} else {
47530 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
47531 			object_ptr = Z_REFVAL_P(object_ptr);
47532 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47533 				goto try_assign_dim_array;
47534 			}
47535 		}
47536 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
47537 			zend_object *obj = Z_OBJ_P(object_ptr);
47538 
47539 			GC_ADDREF(obj);
47540 			dim = NULL;
47541 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
47542 				dim = ZVAL_UNDEFINED_OP2();
47543 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
47544 				dim++;
47545 			}
47546 
47547 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47548 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
47549 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47550 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
47551 				ZVAL_DEREF(value);
47552 			}
47553 
47554 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
47555 
47556 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47557 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
47558 				zend_objects_store_del(obj);
47559 			}
47560 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
47561 			if (IS_UNUSED == IS_UNUSED) {
47562 				zend_use_new_element_for_string();
47563 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47564 				UNDEF_RESULT();
47565 			} else {
47566 				dim = NULL;
47567 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47568 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
47569 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47570 			}
47571 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
47572 			if (Z_ISREF_P(orig_object_ptr)
47573 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
47574 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
47575 				dim = NULL;
47576 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47577 				UNDEF_RESULT();
47578 			} else {
47579 				HashTable *ht = zend_new_array(8);
47580 				zend_uchar old_type = Z_TYPE_P(object_ptr);
47581 
47582 				ZVAL_ARR(object_ptr, ht);
47583 				if (UNEXPECTED(old_type == IS_FALSE)) {
47584 					GC_ADDREF(ht);
47585 					zend_false_to_array_deprecated();
47586 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
47587 						zend_array_destroy(ht);
47588 						goto assign_dim_error;
47589 					}
47590 				}
47591 				goto try_assign_dim_array;
47592 			}
47593 		} else {
47594 			zend_use_scalar_as_array();
47595 			dim = NULL;
47596 assign_dim_error:
47597 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47598 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47599 				ZVAL_NULL(EX_VAR(opline->result.var));
47600 			}
47601 		}
47602 	}
47603 	if (IS_UNUSED != IS_UNUSED) {
47604 
47605 	}
47606 
47607 	/* assign_dim has two opcodes! */
47608 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47609 }
47610 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47611 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47612 {
47613 	USE_OPLINE
47614 	zval *object_ptr, *orig_object_ptr;
47615 	zval *value;
47616 	zval *variable_ptr;
47617 	zval *dim;
47618 
47619 	SAVE_OPLINE();
47620 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
47621 
47622 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47623 try_assign_dim_array:
47624 		SEPARATE_ARRAY(object_ptr);
47625 		if (IS_UNUSED == IS_UNUSED) {
47626 			value = EX_VAR((opline+1)->op1.var);
47627 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
47628 				HashTable *ht = Z_ARRVAL_P(object_ptr);
47629 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
47630 					GC_ADDREF(ht);
47631 				}
47632 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47633 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
47634 					zend_array_destroy(ht);
47635 					goto assign_dim_error;
47636 				}
47637 			}
47638 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
47639 				ZVAL_DEREF(value);
47640 			}
47641 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
47642 			if (UNEXPECTED(value == NULL)) {
47643 				zend_cannot_add_element();
47644 				goto assign_dim_error;
47645 			} else if (IS_CV == IS_CV) {
47646 				if (Z_REFCOUNTED_P(value)) {
47647 					Z_ADDREF_P(value);
47648 				}
47649 			} else if (IS_CV == IS_VAR) {
47650 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
47651 				if (Z_ISREF_P(free_op_data)) {
47652 					if (Z_REFCOUNTED_P(value)) {
47653 						Z_ADDREF_P(value);
47654 					}
47655 					zval_ptr_dtor_nogc(free_op_data);
47656 				}
47657 			} else if (IS_CV == IS_CONST) {
47658 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
47659 					Z_ADDREF_P(value);
47660 				}
47661 			}
47662 		} else {
47663 			dim = NULL;
47664 			if (IS_UNUSED == IS_CONST) {
47665 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47666 			} else {
47667 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47668 			}
47669 			if (UNEXPECTED(variable_ptr == NULL)) {
47670 				goto assign_dim_error;
47671 			}
47672 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
47673 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
47674 		}
47675 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47676 			ZVAL_COPY(EX_VAR(opline->result.var), value);
47677 		}
47678 	} else {
47679 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
47680 			object_ptr = Z_REFVAL_P(object_ptr);
47681 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47682 				goto try_assign_dim_array;
47683 			}
47684 		}
47685 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
47686 			zend_object *obj = Z_OBJ_P(object_ptr);
47687 
47688 			GC_ADDREF(obj);
47689 			dim = NULL;
47690 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
47691 				dim = ZVAL_UNDEFINED_OP2();
47692 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
47693 				dim++;
47694 			}
47695 
47696 			value = EX_VAR((opline+1)->op1.var);
47697 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
47698 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47699 			} else if (IS_CV & (IS_CV|IS_VAR)) {
47700 				ZVAL_DEREF(value);
47701 			}
47702 
47703 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
47704 
47705 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
47706 				zend_objects_store_del(obj);
47707 			}
47708 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
47709 			if (IS_UNUSED == IS_UNUSED) {
47710 				zend_use_new_element_for_string();
47711 
47712 				UNDEF_RESULT();
47713 			} else {
47714 				dim = NULL;
47715 				value = EX_VAR((opline+1)->op1.var);
47716 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
47717 
47718 			}
47719 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
47720 			if (Z_ISREF_P(orig_object_ptr)
47721 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
47722 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
47723 				dim = NULL;
47724 
47725 				UNDEF_RESULT();
47726 			} else {
47727 				HashTable *ht = zend_new_array(8);
47728 				zend_uchar old_type = Z_TYPE_P(object_ptr);
47729 
47730 				ZVAL_ARR(object_ptr, ht);
47731 				if (UNEXPECTED(old_type == IS_FALSE)) {
47732 					GC_ADDREF(ht);
47733 					zend_false_to_array_deprecated();
47734 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
47735 						zend_array_destroy(ht);
47736 						goto assign_dim_error;
47737 					}
47738 				}
47739 				goto try_assign_dim_array;
47740 			}
47741 		} else {
47742 			zend_use_scalar_as_array();
47743 			dim = NULL;
47744 assign_dim_error:
47745 
47746 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47747 				ZVAL_NULL(EX_VAR(opline->result.var));
47748 			}
47749 		}
47750 	}
47751 	if (IS_UNUSED != IS_UNUSED) {
47752 
47753 	}
47754 
47755 	/* assign_dim has two opcodes! */
47756 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47757 }
47758 
ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47760 {
47761 	if (IS_CV == IS_UNUSED) {
47762 		SAVE_OPLINE();
47763 		zend_verify_missing_return_type(EX(func));
47764 		HANDLE_EXCEPTION();
47765 	} else {
47766 /* prevents "undefined variable opline" errors */
47767 #if 0 || (IS_CV != IS_UNUSED)
47768 		USE_OPLINE
47769 		zval *retval_ref, *retval_ptr;
47770 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
47771 		retval_ref = retval_ptr = EX_VAR(opline->op1.var);
47772 
47773 		if (IS_CV == IS_CONST) {
47774 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
47775 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
47776 		} else if (IS_CV == IS_VAR) {
47777 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
47778 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
47779 			}
47780 			ZVAL_DEREF(retval_ptr);
47781 		} else if (IS_CV == IS_CV) {
47782 			ZVAL_DEREF(retval_ptr);
47783 		}
47784 
47785 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
47786 			ZEND_VM_NEXT_OPCODE();
47787 		}
47788 
47789 		if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
47790 			SAVE_OPLINE();
47791 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
47792 			if (UNEXPECTED(EG(exception))) {
47793 				HANDLE_EXCEPTION();
47794 			}
47795 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
47796 				ZEND_VM_NEXT_OPCODE();
47797 			}
47798 		}
47799 
47800 		zend_reference *ref = NULL;
47801 		void *cache_slot = CACHE_ADDR(opline->op2.num);
47802 		if (UNEXPECTED(retval_ref != retval_ptr)) {
47803 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
47804 				ref = Z_REF_P(retval_ref);
47805 			} else {
47806 				/* A cast might happen - unwrap the reference if this is a by-value return */
47807 				if (Z_REFCOUNT_P(retval_ref) == 1) {
47808 					ZVAL_UNREF(retval_ref);
47809 				} else {
47810 					Z_DELREF_P(retval_ref);
47811 					ZVAL_COPY(retval_ref, retval_ptr);
47812 				}
47813 				retval_ptr = retval_ref;
47814 			}
47815 		}
47816 
47817 		SAVE_OPLINE();
47818 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
47819 			zend_verify_return_error(EX(func), retval_ptr);
47820 			HANDLE_EXCEPTION();
47821 		}
47822 		ZEND_VM_NEXT_OPCODE();
47823 #endif
47824 	}
47825 }
47826 
ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47827 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47828 {
47829 	USE_OPLINE
47830 	zval *varptr, *arg;
47831 
47832 	if (IS_UNUSED == IS_CONST) {
47833 		SAVE_OPLINE();
47834 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
47835 		uint32_t arg_num;
47836 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
47837 		if (UNEXPECTED(!arg)) {
47838 
47839 			HANDLE_EXCEPTION();
47840 		}
47841 	} else {
47842 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
47843 	}
47844 
47845 	varptr = EX_VAR(opline->op1.var);
47846 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
47847 		SAVE_OPLINE();
47848 		ZVAL_UNDEFINED_OP1();
47849 		ZVAL_NULL(arg);
47850 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47851 	}
47852 
47853 	if (IS_CV == IS_CV) {
47854 		ZVAL_COPY_DEREF(arg, varptr);
47855 	} else /* if (IS_CV == IS_VAR) */ {
47856 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
47857 			zend_refcounted *ref = Z_COUNTED_P(varptr);
47858 
47859 			varptr = Z_REFVAL_P(varptr);
47860 			ZVAL_COPY_VALUE(arg, varptr);
47861 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47862 				efree_size(ref, sizeof(zend_reference));
47863 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
47864 				Z_ADDREF_P(arg);
47865 			}
47866 		} else {
47867 			ZVAL_COPY_VALUE(arg, varptr);
47868 		}
47869 	}
47870 
47871 	ZEND_VM_NEXT_OPCODE();
47872 }
47873 
ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47874 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47875 {
47876 	USE_OPLINE
47877 	zval *varptr, *arg;
47878 
47879 	SAVE_OPLINE();
47880 	if (IS_UNUSED == IS_CONST) {
47881 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
47882 		uint32_t arg_num;
47883 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
47884 		if (UNEXPECTED(!arg)) {
47885 
47886 			HANDLE_EXCEPTION();
47887 		}
47888 	} else {
47889 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
47890 	}
47891 
47892 	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47893 	if (Z_ISREF_P(varptr)) {
47894 		Z_ADDREF_P(varptr);
47895 	} else {
47896 		ZVAL_MAKE_REF_EX(varptr, 2);
47897 	}
47898 	ZVAL_REF(arg, Z_REF_P(varptr));
47899 
47900 	ZEND_VM_NEXT_OPCODE();
47901 }
47902 
ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47903 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47904 {
47905 	USE_OPLINE
47906 	zval *varptr, *arg;
47907 	uint32_t arg_num;
47908 
47909 	if (IS_UNUSED == IS_CONST) {
47910 		SAVE_OPLINE();
47911 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
47912 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
47913 		if (UNEXPECTED(!arg)) {
47914 
47915 			HANDLE_EXCEPTION();
47916 		}
47917 	} else {
47918 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
47919 		arg_num = opline->op2.num;
47920 	}
47921 
47922 	if (EXPECTED(0)) {
47923 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
47924 			goto send_var_by_ref;
47925 		}
47926 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
47927 send_var_by_ref:
47928 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47929 		if (Z_ISREF_P(varptr)) {
47930 			Z_ADDREF_P(varptr);
47931 		} else {
47932 			ZVAL_MAKE_REF_EX(varptr, 2);
47933 		}
47934 		ZVAL_REF(arg, Z_REF_P(varptr));
47935 
47936 		ZEND_VM_NEXT_OPCODE();
47937 	}
47938 
47939 	varptr = EX_VAR(opline->op1.var);
47940 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
47941 		SAVE_OPLINE();
47942 		ZVAL_UNDEFINED_OP1();
47943 		ZVAL_NULL(arg);
47944 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47945 	}
47946 
47947 	if (IS_CV == IS_CV) {
47948 		ZVAL_COPY_DEREF(arg, varptr);
47949 	} else /* if (IS_CV == IS_VAR) */ {
47950 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
47951 			zend_refcounted *ref = Z_COUNTED_P(varptr);
47952 
47953 			varptr = Z_REFVAL_P(varptr);
47954 			ZVAL_COPY_VALUE(arg, varptr);
47955 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47956 				efree_size(ref, sizeof(zend_reference));
47957 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
47958 				Z_ADDREF_P(arg);
47959 			}
47960 		} else {
47961 			ZVAL_COPY_VALUE(arg, varptr);
47962 		}
47963 	}
47964 
47965 	ZEND_VM_NEXT_OPCODE();
47966 }
47967 
ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47968 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47969 {
47970 	USE_OPLINE
47971 	zval *varptr, *arg;
47972 	uint32_t arg_num;
47973 
47974 	if (IS_UNUSED == IS_CONST) {
47975 		SAVE_OPLINE();
47976 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
47977 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
47978 		if (UNEXPECTED(!arg)) {
47979 
47980 			HANDLE_EXCEPTION();
47981 		}
47982 	} else {
47983 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
47984 		arg_num = opline->op2.num;
47985 	}
47986 
47987 	if (EXPECTED(1)) {
47988 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
47989 			goto send_var_by_ref;
47990 		}
47991 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
47992 send_var_by_ref:
47993 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47994 		if (Z_ISREF_P(varptr)) {
47995 			Z_ADDREF_P(varptr);
47996 		} else {
47997 			ZVAL_MAKE_REF_EX(varptr, 2);
47998 		}
47999 		ZVAL_REF(arg, Z_REF_P(varptr));
48000 
48001 		ZEND_VM_NEXT_OPCODE();
48002 	}
48003 
48004 	varptr = EX_VAR(opline->op1.var);
48005 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
48006 		SAVE_OPLINE();
48007 		ZVAL_UNDEFINED_OP1();
48008 		ZVAL_NULL(arg);
48009 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48010 	}
48011 
48012 	if (IS_CV == IS_CV) {
48013 		ZVAL_COPY_DEREF(arg, varptr);
48014 	} else /* if (IS_CV == IS_VAR) */ {
48015 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
48016 			zend_refcounted *ref = Z_COUNTED_P(varptr);
48017 
48018 			varptr = Z_REFVAL_P(varptr);
48019 			ZVAL_COPY_VALUE(arg, varptr);
48020 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
48021 				efree_size(ref, sizeof(zend_reference));
48022 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
48023 				Z_ADDREF_P(arg);
48024 			}
48025 		} else {
48026 			ZVAL_COPY_VALUE(arg, varptr);
48027 		}
48028 	}
48029 
48030 	ZEND_VM_NEXT_OPCODE();
48031 }
48032 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48033 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48034 {
48035 	USE_OPLINE
48036 	zval *expr_ptr, new_expr;
48037 
48038 	SAVE_OPLINE();
48039 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
48040 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
48041 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
48042 		if (Z_ISREF_P(expr_ptr)) {
48043 			Z_ADDREF_P(expr_ptr);
48044 		} else {
48045 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
48046 		}
48047 
48048 	} else {
48049 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48050 		if (IS_CV == IS_TMP_VAR) {
48051 			/* pass */
48052 		} else if (IS_CV == IS_CONST) {
48053 			Z_TRY_ADDREF_P(expr_ptr);
48054 		} else if (IS_CV == IS_CV) {
48055 			ZVAL_DEREF(expr_ptr);
48056 			Z_TRY_ADDREF_P(expr_ptr);
48057 		} else /* if (IS_CV == IS_VAR) */ {
48058 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
48059 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
48060 
48061 				expr_ptr = Z_REFVAL_P(expr_ptr);
48062 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
48063 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
48064 					expr_ptr = &new_expr;
48065 					efree_size(ref, sizeof(zend_reference));
48066 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
48067 					Z_ADDREF_P(expr_ptr);
48068 				}
48069 			}
48070 		}
48071 	}
48072 
48073 	if (IS_UNUSED != IS_UNUSED) {
48074 		zval *offset = NULL;
48075 		zend_string *str;
48076 		zend_ulong hval;
48077 
48078 add_again:
48079 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
48080 			str = Z_STR_P(offset);
48081 			if (IS_UNUSED != IS_CONST) {
48082 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
48083 					goto num_index;
48084 				}
48085 			}
48086 str_index:
48087 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
48088 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
48089 			hval = Z_LVAL_P(offset);
48090 num_index:
48091 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
48092 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
48093 			offset = Z_REFVAL_P(offset);
48094 			goto add_again;
48095 		} else if (Z_TYPE_P(offset) == IS_NULL) {
48096 			str = ZSTR_EMPTY_ALLOC();
48097 			goto str_index;
48098 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
48099 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
48100 			goto num_index;
48101 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
48102 			hval = 0;
48103 			goto num_index;
48104 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
48105 			hval = 1;
48106 			goto num_index;
48107 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
48108 			zend_use_resource_as_offset(offset);
48109 			hval = Z_RES_HANDLE_P(offset);
48110 			goto num_index;
48111 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
48112 			ZVAL_UNDEFINED_OP2();
48113 			str = ZSTR_EMPTY_ALLOC();
48114 			goto str_index;
48115 		} else {
48116 			zend_illegal_offset();
48117 			zval_ptr_dtor_nogc(expr_ptr);
48118 		}
48119 
48120 	} else {
48121 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
48122 			zend_cannot_add_element();
48123 			zval_ptr_dtor_nogc(expr_ptr);
48124 		}
48125 	}
48126 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48127 }
48128 
ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48129 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48130 {
48131 	zval *array;
48132 	uint32_t size;
48133 	USE_OPLINE
48134 
48135 	array = EX_VAR(opline->result.var);
48136 	if (IS_CV != IS_UNUSED) {
48137 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
48138 		ZVAL_ARR(array, zend_new_array(size));
48139 		/* Explicitly initialize array as not-packed if flag is set */
48140 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
48141 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
48142 		}
48143 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48144 	} else {
48145 		ZVAL_ARR(array, zend_new_array(0));
48146 		ZEND_VM_NEXT_OPCODE();
48147 	}
48148 }
48149 
ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48150 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48151 {
48152 	USE_OPLINE
48153 	zval *var = EX_VAR(opline->op1.var);
48154 
48155 	if (Z_REFCOUNTED_P(var)) {
48156 		zend_refcounted *garbage = Z_COUNTED_P(var);
48157 
48158 		ZVAL_UNDEF(var);
48159 		SAVE_OPLINE();
48160 		if (!GC_DELREF(garbage)) {
48161 			rc_dtor_func(garbage);
48162 		} else {
48163 			gc_check_possible_root(garbage);
48164 		}
48165 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48166 	} else {
48167 		ZVAL_UNDEF(var);
48168 	}
48169 	ZEND_VM_NEXT_OPCODE();
48170 }
48171 
ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48172 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48173 {
48174 	USE_OPLINE
48175 	zval *varname;
48176 	zend_string *name, *tmp_name;
48177 	HashTable *target_symbol_table;
48178 
48179 	SAVE_OPLINE();
48180 
48181 	varname = EX_VAR(opline->op1.var);
48182 
48183 	if (IS_CV == IS_CONST) {
48184 		name = Z_STR_P(varname);
48185 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
48186 		name = Z_STR_P(varname);
48187 		tmp_name = NULL;
48188 	} else {
48189 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
48190 			varname = ZVAL_UNDEFINED_OP1();
48191 		}
48192 		name = zval_try_get_tmp_string(varname, &tmp_name);
48193 		if (UNEXPECTED(!name)) {
48194 
48195 			HANDLE_EXCEPTION();
48196 		}
48197 	}
48198 
48199 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
48200 	zend_hash_del_ind(target_symbol_table, name);
48201 
48202 	if (IS_CV != IS_CONST) {
48203 		zend_tmp_string_release(tmp_name);
48204 	}
48205 
48206 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48207 }
48208 
48209 /* 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)48210 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48211 {
48212 	USE_OPLINE
48213 	zval *value;
48214 
48215 	value = EX_VAR(opline->op1.var);
48216 	if (!(0)) {
48217 		if (Z_TYPE_P(value) > IS_NULL &&
48218 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
48219 			ZEND_VM_SMART_BRANCH_TRUE();
48220 		} else {
48221 			ZEND_VM_SMART_BRANCH_FALSE();
48222 		}
48223 	} else {
48224 		bool result;
48225 
48226 		SAVE_OPLINE();
48227 		result = !i_zend_is_true(value);
48228 		ZEND_VM_SMART_BRANCH(result, 1);
48229 	}
48230 }
48231 
ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48232 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48233 {
48234 	USE_OPLINE
48235 	zval *value;
48236 
48237 	value = EX_VAR(opline->op1.var);
48238 	if (!(1)) {
48239 		if (Z_TYPE_P(value) > IS_NULL &&
48240 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
48241 			ZEND_VM_SMART_BRANCH_TRUE();
48242 		} else {
48243 			ZEND_VM_SMART_BRANCH_FALSE();
48244 		}
48245 	} else {
48246 		bool result;
48247 
48248 		SAVE_OPLINE();
48249 		result = !i_zend_is_true(value);
48250 		ZEND_VM_SMART_BRANCH(result, 1);
48251 	}
48252 }
48253 
ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48254 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48255 {
48256 	USE_OPLINE
48257 	zval *value;
48258 	/* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
48259 	int result;
48260 	zval *varname;
48261 	zend_string *name, *tmp_name;
48262 	HashTable *target_symbol_table;
48263 
48264 	SAVE_OPLINE();
48265 	varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
48266 	if (IS_CV == IS_CONST) {
48267 		name = Z_STR_P(varname);
48268 	} else {
48269 		name = zval_get_tmp_string(varname, &tmp_name);
48270 	}
48271 
48272 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
48273 	value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
48274 
48275 	if (IS_CV != IS_CONST) {
48276 		zend_tmp_string_release(tmp_name);
48277 	}
48278 
48279 	if (!value) {
48280 		result = (opline->extended_value & ZEND_ISEMPTY);
48281 	} else {
48282 		if (Z_TYPE_P(value) == IS_INDIRECT) {
48283 			value = Z_INDIRECT_P(value);
48284 		}
48285 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
48286 			if (Z_ISREF_P(value)) {
48287 				value = Z_REFVAL_P(value);
48288 			}
48289 			result = Z_TYPE_P(value) > IS_NULL;
48290 		} else {
48291 			result = !i_zend_is_true(value);
48292 		}
48293 	}
48294 
48295 	ZEND_VM_SMART_BRANCH(result, 1);
48296 }
48297 
48298 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48299 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48300 {
48301 	USE_OPLINE
48302 	zval *expr;
48303 	bool result;
48304 
48305 	SAVE_OPLINE();
48306 	expr = EX_VAR(opline->op1.var);
48307 
48308 try_instanceof:
48309 	if (Z_TYPE_P(expr) == IS_OBJECT) {
48310 		zend_class_entry *ce;
48311 
48312 		if (IS_UNUSED == IS_CONST) {
48313 			ce = CACHED_PTR(opline->extended_value);
48314 			if (UNEXPECTED(ce == NULL)) {
48315 				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);
48316 				if (EXPECTED(ce)) {
48317 					CACHE_PTR(opline->extended_value, ce);
48318 				}
48319 			}
48320 		} else if (IS_UNUSED == IS_UNUSED) {
48321 			ce = zend_fetch_class(NULL, opline->op2.num);
48322 			if (UNEXPECTED(ce == NULL)) {
48323 
48324 				ZVAL_UNDEF(EX_VAR(opline->result.var));
48325 				HANDLE_EXCEPTION();
48326 			}
48327 		} else {
48328 			ce = Z_CE_P(EX_VAR(opline->op2.var));
48329 		}
48330 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
48331 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
48332 		expr = Z_REFVAL_P(expr);
48333 		goto try_instanceof;
48334 	} else {
48335 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
48336 			ZVAL_UNDEFINED_OP1();
48337 		}
48338 		result = 0;
48339 	}
48340 
48341 	ZEND_VM_SMART_BRANCH(result, 1);
48342 }
48343 
ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48344 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48345 {
48346 	USE_OPLINE
48347 
48348 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
48349 
48350 	SAVE_OPLINE();
48351 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
48352 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48353 	}
48354 
48355 	/* Destroy the previously yielded value */
48356 	zval_ptr_dtor(&generator->value);
48357 
48358 	/* Destroy the previously yielded key */
48359 	zval_ptr_dtor(&generator->key);
48360 
48361 	/* Set the new yielded value */
48362 	if (IS_CV != IS_UNUSED) {
48363 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
48364 			/* Constants and temporary variables aren't yieldable by reference,
48365 			 * but we still allow them with a notice. */
48366 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
48367 				zval *value;
48368 
48369 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
48370 
48371 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48372 				ZVAL_COPY_VALUE(&generator->value, value);
48373 				if (IS_CV == IS_CONST) {
48374 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
48375 						Z_ADDREF(generator->value);
48376 					}
48377 				}
48378 			} else {
48379 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
48380 
48381 				/* If a function call result is yielded and the function did
48382 				 * not return by reference we throw a notice. */
48383 				do {
48384 					if (IS_CV == IS_VAR) {
48385 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
48386 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
48387 						 && !Z_ISREF_P(value_ptr)) {
48388 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
48389 							ZVAL_COPY(&generator->value, value_ptr);
48390 							break;
48391 						}
48392 					}
48393 					if (Z_ISREF_P(value_ptr)) {
48394 						Z_ADDREF_P(value_ptr);
48395 					} else {
48396 						ZVAL_MAKE_REF_EX(value_ptr, 2);
48397 					}
48398 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
48399 				} while (0);
48400 
48401 			}
48402 		} else {
48403 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48404 
48405 			/* Consts, temporary variables and references need copying */
48406 			if (IS_CV == IS_CONST) {
48407 				ZVAL_COPY_VALUE(&generator->value, value);
48408 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
48409 					Z_ADDREF(generator->value);
48410 				}
48411 			} else if (IS_CV == IS_TMP_VAR) {
48412 				ZVAL_COPY_VALUE(&generator->value, value);
48413             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
48414 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
48415 
48416 			} else {
48417 				ZVAL_COPY_VALUE(&generator->value, value);
48418 				if (IS_CV == IS_CV) {
48419 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
48420 				}
48421 			}
48422 		}
48423 	} else {
48424 		/* If no value was specified yield null */
48425 		ZVAL_NULL(&generator->value);
48426 	}
48427 
48428 	/* Set the new yielded key */
48429 	if (IS_UNUSED != IS_UNUSED) {
48430 		zval *key = NULL;
48431 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
48432 			key = Z_REFVAL_P(key);
48433 		}
48434 		ZVAL_COPY(&generator->key, key);
48435 
48436 		if (Z_TYPE(generator->key) == IS_LONG
48437 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
48438 		) {
48439 			generator->largest_used_integer_key = Z_LVAL(generator->key);
48440 		}
48441 	} else {
48442 		/* If no key was specified we use auto-increment keys */
48443 		generator->largest_used_integer_key++;
48444 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
48445 	}
48446 
48447 	if (RETURN_VALUE_USED(opline)) {
48448 		/* If the return value of yield is used set the send
48449 		 * target and initialize it to NULL */
48450 		generator->send_target = EX_VAR(opline->result.var);
48451 		ZVAL_NULL(generator->send_target);
48452 	} else {
48453 		generator->send_target = NULL;
48454 	}
48455 
48456 	/* We increment to the next op, so we are at the correct position when the
48457 	 * generator is resumed. */
48458 	ZEND_VM_INC_OPCODE();
48459 
48460 	/* The GOTO VM uses a local opline variable. We need to set the opline
48461 	 * variable in execute_data so we don't resume at an old position. */
48462 	SAVE_OPLINE();
48463 
48464 	ZEND_VM_RETURN();
48465 }
48466 
ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48467 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48468 {
48469 	USE_OPLINE
48470 	HashTable *ht;
48471 	zval *value;
48472 	zval *variable_ptr;
48473 
48474 	variable_ptr = EX_VAR(opline->op1.var);
48475 
48476 	SAVE_OPLINE();
48477 
48478 	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
48479 	if (!ht) {
48480 		ht = zend_array_dup(EX(func)->op_array.static_variables);
48481 		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
48482 	}
48483 	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
48484 
48485 	value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));
48486 
48487 	if (opline->extended_value & ZEND_BIND_REF) {
48488 		if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
48489 			if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
48490 				HANDLE_EXCEPTION();
48491 			}
48492 		}
48493 
48494 		i_zval_ptr_dtor(variable_ptr);
48495 		if (UNEXPECTED(!Z_ISREF_P(value))) {
48496 			zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
48497 			GC_SET_REFCOUNT(ref, 2);
48498 			GC_TYPE_INFO(ref) = GC_REFERENCE;
48499 			ZVAL_COPY_VALUE(&ref->val, value);
48500 			ref->sources.ptr = NULL;
48501 			Z_REF_P(value) = ref;
48502 			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
48503 			ZVAL_REF(variable_ptr, ref);
48504 		} else {
48505 			Z_ADDREF_P(value);
48506 			ZVAL_REF(variable_ptr, Z_REF_P(value));
48507 		}
48508 	} else {
48509 		i_zval_ptr_dtor(variable_ptr);
48510 		ZVAL_COPY(variable_ptr, value);
48511 	}
48512 
48513 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48514 }
48515 
ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48516 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48517 {
48518 	USE_OPLINE
48519 	zval *op1 = EX_VAR(opline->op1.var);
48520 
48521 	if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
48522 		SAVE_OPLINE();
48523 		ZVAL_UNDEFINED_OP1();
48524 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48525 	}
48526 	ZEND_VM_NEXT_OPCODE();
48527 }
48528 
ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48530 {
48531 	USE_OPLINE
48532 	zval *op1 = EX_VAR(opline->op1.var);
48533 
48534 	if (IS_CV == IS_CV) {
48535 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
48536 			ZVAL_NEW_EMPTY_REF(op1);
48537 			Z_SET_REFCOUNT_P(op1, 2);
48538 			ZVAL_NULL(Z_REFVAL_P(op1));
48539 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
48540 		} else {
48541 			if (Z_ISREF_P(op1)) {
48542 				Z_ADDREF_P(op1);
48543 			} else {
48544 				ZVAL_MAKE_REF_EX(op1, 2);
48545 			}
48546 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
48547 		}
48548 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
48549 		op1 = Z_INDIRECT_P(op1);
48550 		if (EXPECTED(!Z_ISREF_P(op1))) {
48551 			ZVAL_MAKE_REF_EX(op1, 2);
48552 		} else {
48553 			GC_ADDREF(Z_REF_P(op1));
48554 		}
48555 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
48556 	} else {
48557 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
48558 	}
48559 	ZEND_VM_NEXT_OPCODE();
48560 }
48561 
ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48562 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48563 {
48564 	USE_OPLINE
48565 	zval *op1;
48566 	zend_long count;
48567 
48568 	SAVE_OPLINE();
48569 	op1 = EX_VAR(opline->op1.var);
48570 
48571 	while (1) {
48572 		if (Z_TYPE_P(op1) == IS_ARRAY) {
48573 			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
48574 			break;
48575 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
48576 			zend_object *zobj = Z_OBJ_P(op1);
48577 
48578 			/* first, we check if the handler is defined */
48579 			if (zobj->handlers->count_elements) {
48580 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
48581 					break;
48582 				}
48583 				if (UNEXPECTED(EG(exception))) {
48584 					count = 0;
48585 					break;
48586 				}
48587 			}
48588 
48589 			/* if not and the object implements Countable we call its count() method */
48590 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
48591 				zval retval;
48592 
48593 				zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
48594 				count = zval_get_long(&retval);
48595 				zval_ptr_dtor(&retval);
48596 				break;
48597 			}
48598 
48599 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
48600 		} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
48601 			op1 = Z_REFVAL_P(op1);
48602 			continue;
48603 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
48604 			ZVAL_UNDEFINED_OP1();
48605 		}
48606 		count = 0;
48607 		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_type_name(op1));
48608 		break;
48609 	}
48610 
48611 	ZVAL_LONG(EX_VAR(opline->result.var), count);
48612 
48613 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48614 }
48615 
ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48616 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48617 {
48618 	USE_OPLINE
48619 
48620 	if (IS_CV == IS_UNUSED) {
48621 		if (UNEXPECTED(!EX(func)->common.scope)) {
48622 			SAVE_OPLINE();
48623 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
48624 			ZVAL_UNDEF(EX_VAR(opline->result.var));
48625 			HANDLE_EXCEPTION();
48626 		} else {
48627 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
48628 			ZEND_VM_NEXT_OPCODE();
48629 		}
48630 	} else {
48631 		zval *op1;
48632 
48633 		SAVE_OPLINE();
48634 		op1 = EX_VAR(opline->op1.var);
48635 		while (1) {
48636 			if (Z_TYPE_P(op1) == IS_OBJECT) {
48637 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
48638 			} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
48639 				op1 = Z_REFVAL_P(op1);
48640 				continue;
48641 			} else {
48642 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
48643 					ZVAL_UNDEFINED_OP1();
48644 				}
48645 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
48646 				ZVAL_UNDEF(EX_VAR(opline->result.var));
48647 			}
48648 			break;
48649 		}
48650 
48651 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48652 	}
48653 }
48654 
ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48655 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48656 {
48657 	USE_OPLINE
48658 	zval *op1;
48659 	zend_string *type;
48660 
48661 	SAVE_OPLINE();
48662 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48663 	type = zend_zval_get_legacy_type(op1);
48664 	if (EXPECTED(type)) {
48665 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
48666 	} else {
48667 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
48668 	}
48669 
48670 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48671 }
48672 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48673 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48674 {
48675 	USE_OPLINE
48676 	zval *varptr, *arg;
48677 	uint32_t arg_num = opline->op2.num;
48678 
48679 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
48680 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48681 	}
48682 
48683 	varptr = EX_VAR(opline->op1.var);
48684 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
48685 
48686 	if (IS_CV == IS_CV) {
48687 		ZVAL_COPY(arg, varptr);
48688 	} else /* if (IS_CV == IS_VAR) */ {
48689 		ZVAL_COPY_VALUE(arg, varptr);
48690 	}
48691 
48692 	ZEND_VM_NEXT_OPCODE();
48693 }
48694 
ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48695 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48696 {
48697 	USE_OPLINE
48698 	zval *op1, *op2;
48699 
48700 	SAVE_OPLINE();
48701 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48702 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48703 	div_function(EX_VAR(opline->result.var), op1, op2);
48704 
48705 
48706 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48707 }
48708 
ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48709 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48710 {
48711 	USE_OPLINE
48712 	zval *op1, *op2;
48713 
48714 	SAVE_OPLINE();
48715 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48716 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48717 	pow_function(EX_VAR(opline->result.var), op1, op2);
48718 
48719 
48720 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48721 }
48722 
ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48723 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48724 {
48725 	USE_OPLINE
48726 	zval *op1, *op2;
48727 
48728 	op1 = EX_VAR(opline->op1.var);
48729 	op2 = EX_VAR(opline->op2.var);
48730 
48731 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
48732 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
48733 		zend_string *op1_str = Z_STR_P(op1);
48734 		zend_string *op2_str = Z_STR_P(op2);
48735 		zend_string *str;
48736 
48737 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
48738 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
48739 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
48740 			} else {
48741 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
48742 			}
48743 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48744 				zend_string_release_ex(op1_str, 0);
48745 			}
48746 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
48747 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
48748 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
48749 			} else {
48750 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
48751 			}
48752 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48753 				zend_string_release_ex(op2_str, 0);
48754 			}
48755 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
48756 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
48757 		    size_t len = ZSTR_LEN(op1_str);
48758 
48759 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
48760 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
48761 			}
48762 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
48763 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
48764 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
48765 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48766 				zend_string_release_ex(op2_str, 0);
48767 			}
48768 		} else {
48769 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
48770 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
48771 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
48772 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
48773 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48774 				zend_string_release_ex(op1_str, 0);
48775 			}
48776 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48777 				zend_string_release_ex(op2_str, 0);
48778 			}
48779 		}
48780 		ZEND_VM_NEXT_OPCODE();
48781 	} else {
48782 		SAVE_OPLINE();
48783 
48784 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
48785 			op1 = ZVAL_UNDEFINED_OP1();
48786 		}
48787 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
48788 			op2 = ZVAL_UNDEFINED_OP2();
48789 		}
48790 		concat_function(EX_VAR(opline->result.var), op1, op2);
48791 
48792 
48793 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48794 	}
48795 }
48796 
ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48797 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48798 {
48799 	USE_OPLINE
48800 	zval *op1, *op2;
48801 	bool result;
48802 
48803 	SAVE_OPLINE();
48804 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48805 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48806 	result = fast_is_identical_function(op1, op2);
48807 
48808 
48809 	ZEND_VM_SMART_BRANCH(result, 1);
48810 }
48811 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48812 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48813 {
48814 	USE_OPLINE
48815 	zval *op1, *op2;
48816 	bool result;
48817 
48818 	SAVE_OPLINE();
48819 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48820 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48821 	result = fast_is_not_identical_function(op1, op2);
48822 
48823 
48824 	ZEND_VM_SMART_BRANCH(result, 1);
48825 }
48826 
ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48827 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48828 {
48829 	USE_OPLINE
48830 	zval *op1, *op2;
48831 	double d1, d2;
48832 
48833 	op1 = EX_VAR(opline->op1.var);
48834 	op2 = EX_VAR(opline->op2.var);
48835 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
48836 		/* pass */
48837 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
48838 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48839 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
48840 is_equal_true:
48841 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
48842 			} else {
48843 is_equal_false:
48844 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
48845 			}
48846 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48847 			d1 = (double)Z_LVAL_P(op1);
48848 			d2 = Z_DVAL_P(op2);
48849 			goto is_equal_double;
48850 		}
48851 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
48852 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48853 			d1 = Z_DVAL_P(op1);
48854 			d2 = Z_DVAL_P(op2);
48855 is_equal_double:
48856 			if (d1 == d2) {
48857 				goto is_equal_true;
48858 			} else {
48859 				goto is_equal_false;
48860 			}
48861 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48862 			d1 = Z_DVAL_P(op1);
48863 			d2 = (double)Z_LVAL_P(op2);
48864 			goto is_equal_double;
48865 		}
48866 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
48867 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
48868 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
48869 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48870 				zval_ptr_dtor_str(op1);
48871 			}
48872 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48873 				zval_ptr_dtor_str(op2);
48874 			}
48875 			if (result) {
48876 				goto is_equal_true;
48877 			} else {
48878 				goto is_equal_false;
48879 			}
48880 		}
48881 	}
48882 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48883 }
48884 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48885 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48886 {
48887 	USE_OPLINE
48888 	zval *op1, *op2;
48889 	double d1, d2;
48890 
48891 	op1 = EX_VAR(opline->op1.var);
48892 	op2 = EX_VAR(opline->op2.var);
48893 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
48894 		/* pass */
48895 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
48896 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48897 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
48898 is_equal_true:
48899 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
48900 			} else {
48901 is_equal_false:
48902 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
48903 			}
48904 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48905 			d1 = (double)Z_LVAL_P(op1);
48906 			d2 = Z_DVAL_P(op2);
48907 			goto is_equal_double;
48908 		}
48909 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
48910 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48911 			d1 = Z_DVAL_P(op1);
48912 			d2 = Z_DVAL_P(op2);
48913 is_equal_double:
48914 			if (d1 == d2) {
48915 				goto is_equal_true;
48916 			} else {
48917 				goto is_equal_false;
48918 			}
48919 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48920 			d1 = Z_DVAL_P(op1);
48921 			d2 = (double)Z_LVAL_P(op2);
48922 			goto is_equal_double;
48923 		}
48924 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
48925 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
48926 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
48927 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48928 				zval_ptr_dtor_str(op1);
48929 			}
48930 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48931 				zval_ptr_dtor_str(op2);
48932 			}
48933 			if (result) {
48934 				goto is_equal_true;
48935 			} else {
48936 				goto is_equal_false;
48937 			}
48938 		}
48939 	}
48940 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48941 }
48942 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48943 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48944 {
48945 	USE_OPLINE
48946 	zval *op1, *op2;
48947 	double d1, d2;
48948 
48949 	op1 = EX_VAR(opline->op1.var);
48950 	op2 = EX_VAR(opline->op2.var);
48951 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
48952 		/* pass */
48953 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
48954 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48955 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
48956 is_equal_true:
48957 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
48958 			} else {
48959 is_equal_false:
48960 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
48961 			}
48962 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48963 			d1 = (double)Z_LVAL_P(op1);
48964 			d2 = Z_DVAL_P(op2);
48965 			goto is_equal_double;
48966 		}
48967 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
48968 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48969 			d1 = Z_DVAL_P(op1);
48970 			d2 = Z_DVAL_P(op2);
48971 is_equal_double:
48972 			if (d1 == d2) {
48973 				goto is_equal_true;
48974 			} else {
48975 				goto is_equal_false;
48976 			}
48977 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48978 			d1 = Z_DVAL_P(op1);
48979 			d2 = (double)Z_LVAL_P(op2);
48980 			goto is_equal_double;
48981 		}
48982 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
48983 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
48984 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
48985 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48986 				zval_ptr_dtor_str(op1);
48987 			}
48988 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48989 				zval_ptr_dtor_str(op2);
48990 			}
48991 			if (result) {
48992 				goto is_equal_true;
48993 			} else {
48994 				goto is_equal_false;
48995 			}
48996 		}
48997 	}
48998 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48999 }
49000 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49001 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49002 {
49003 	USE_OPLINE
49004 	zval *op1, *op2;
49005 	double d1, d2;
49006 
49007 	op1 = EX_VAR(opline->op1.var);
49008 	op2 = EX_VAR(opline->op2.var);
49009 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
49010 		/* pass */
49011 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
49012 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
49013 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
49014 is_not_equal_true:
49015 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
49016 			} else {
49017 is_not_equal_false:
49018 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
49019 			}
49020 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
49021 			d1 = (double)Z_LVAL_P(op1);
49022 			d2 = Z_DVAL_P(op2);
49023 			goto is_not_equal_double;
49024 		}
49025 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
49026 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
49027 			d1 = Z_DVAL_P(op1);
49028 			d2 = Z_DVAL_P(op2);
49029 is_not_equal_double:
49030 			if (d1 != d2) {
49031 				goto is_not_equal_true;
49032 			} else {
49033 				goto is_not_equal_false;
49034 			}
49035 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
49036 			d1 = Z_DVAL_P(op1);
49037 			d2 = (double)Z_LVAL_P(op2);
49038 			goto is_not_equal_double;
49039 		}
49040 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
49041 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
49042 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
49043 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49044 				zval_ptr_dtor_str(op1);
49045 			}
49046 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49047 				zval_ptr_dtor_str(op2);
49048 			}
49049 			if (!result) {
49050 				goto is_not_equal_true;
49051 			} else {
49052 				goto is_not_equal_false;
49053 			}
49054 		}
49055 	}
49056 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
49057 }
49058 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49060 {
49061 	USE_OPLINE
49062 	zval *op1, *op2;
49063 	double d1, d2;
49064 
49065 	op1 = EX_VAR(opline->op1.var);
49066 	op2 = EX_VAR(opline->op2.var);
49067 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
49068 		/* pass */
49069 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
49070 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
49071 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
49072 is_not_equal_true:
49073 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
49074 			} else {
49075 is_not_equal_false:
49076 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
49077 			}
49078 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
49079 			d1 = (double)Z_LVAL_P(op1);
49080 			d2 = Z_DVAL_P(op2);
49081 			goto is_not_equal_double;
49082 		}
49083 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
49084 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
49085 			d1 = Z_DVAL_P(op1);
49086 			d2 = Z_DVAL_P(op2);
49087 is_not_equal_double:
49088 			if (d1 != d2) {
49089 				goto is_not_equal_true;
49090 			} else {
49091 				goto is_not_equal_false;
49092 			}
49093 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
49094 			d1 = Z_DVAL_P(op1);
49095 			d2 = (double)Z_LVAL_P(op2);
49096 			goto is_not_equal_double;
49097 		}
49098 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
49099 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
49100 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
49101 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49102 				zval_ptr_dtor_str(op1);
49103 			}
49104 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49105 				zval_ptr_dtor_str(op2);
49106 			}
49107 			if (!result) {
49108 				goto is_not_equal_true;
49109 			} else {
49110 				goto is_not_equal_false;
49111 			}
49112 		}
49113 	}
49114 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
49115 }
49116 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49117 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49118 {
49119 	USE_OPLINE
49120 	zval *op1, *op2;
49121 	double d1, d2;
49122 
49123 	op1 = EX_VAR(opline->op1.var);
49124 	op2 = EX_VAR(opline->op2.var);
49125 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
49126 		/* pass */
49127 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
49128 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
49129 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
49130 is_not_equal_true:
49131 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
49132 			} else {
49133 is_not_equal_false:
49134 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
49135 			}
49136 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
49137 			d1 = (double)Z_LVAL_P(op1);
49138 			d2 = Z_DVAL_P(op2);
49139 			goto is_not_equal_double;
49140 		}
49141 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
49142 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
49143 			d1 = Z_DVAL_P(op1);
49144 			d2 = Z_DVAL_P(op2);
49145 is_not_equal_double:
49146 			if (d1 != d2) {
49147 				goto is_not_equal_true;
49148 			} else {
49149 				goto is_not_equal_false;
49150 			}
49151 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
49152 			d1 = Z_DVAL_P(op1);
49153 			d2 = (double)Z_LVAL_P(op2);
49154 			goto is_not_equal_double;
49155 		}
49156 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
49157 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
49158 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
49159 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49160 				zval_ptr_dtor_str(op1);
49161 			}
49162 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49163 				zval_ptr_dtor_str(op2);
49164 			}
49165 			if (!result) {
49166 				goto is_not_equal_true;
49167 			} else {
49168 				goto is_not_equal_false;
49169 			}
49170 		}
49171 	}
49172 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
49173 }
49174 
ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49176 {
49177 	USE_OPLINE
49178 	zval *op1, *op2;
49179 
49180 	SAVE_OPLINE();
49181 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49182 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49183 	compare_function(EX_VAR(opline->result.var), op1, op2);
49184 
49185 
49186 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49187 }
49188 
ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49189 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49190 {
49191 	USE_OPLINE
49192 	zval *op1, *op2;
49193 
49194 	SAVE_OPLINE();
49195 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49196 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49197 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
49198 
49199 
49200 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49201 }
49202 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49203 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49204 {
49205 	USE_OPLINE
49206 	zval *object;
49207 	zval *property;
49208 	zval *value;
49209 	zval *zptr;
49210 	void **cache_slot;
49211 	zend_property_info *prop_info;
49212 	zend_object *zobj;
49213 	zend_string *name, *tmp_name;
49214 
49215 	SAVE_OPLINE();
49216 	object = EX_VAR(opline->op1.var);
49217 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49218 
49219 	do {
49220 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
49221 
49222 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49223 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
49224 				object = Z_REFVAL_P(object);
49225 				goto assign_op_object;
49226 			}
49227 			if (IS_CV == IS_CV
49228 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
49229 				ZVAL_UNDEFINED_OP1();
49230 			}
49231 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
49232 			break;
49233 		}
49234 
49235 assign_op_object:
49236 		/* here we are sure we are dealing with an object */
49237 		zobj = Z_OBJ_P(object);
49238 		if (IS_CV == IS_CONST) {
49239 			name = Z_STR_P(property);
49240 		} else {
49241 			name = zval_try_get_tmp_string(property, &tmp_name);
49242 			if (UNEXPECTED(!name)) {
49243 				UNDEF_RESULT();
49244 				break;
49245 			}
49246 		}
49247 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
49248 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
49249 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
49250 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49251 					ZVAL_NULL(EX_VAR(opline->result.var));
49252 				}
49253 			} else {
49254 				zval *orig_zptr = zptr;
49255 				zend_reference *ref;
49256 
49257 				do {
49258 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
49259 						ref = Z_REF_P(zptr);
49260 						zptr = Z_REFVAL_P(zptr);
49261 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
49262 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
49263 							break;
49264 						}
49265 					}
49266 
49267 					if (IS_CV == IS_CONST) {
49268 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
49269 					} else {
49270 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
49271 					}
49272 					if (UNEXPECTED(prop_info)) {
49273 						/* special case for typed properties */
49274 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
49275 					} else {
49276 						zend_binary_op(zptr, zptr, value OPLINE_CC);
49277 					}
49278 				} while (0);
49279 
49280 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49281 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
49282 				}
49283 			}
49284 		} else {
49285 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
49286 		}
49287 		if (IS_CV != IS_CONST) {
49288 			zend_tmp_string_release(tmp_name);
49289 		}
49290 	} while (0);
49291 
49292 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
49293 
49294 
49295 	/* assign_obj has two opcodes! */
49296 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49297 }
49298 
49299 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49300 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49301 {
49302 	USE_OPLINE
49303 	zval *var_ptr;
49304 	zval *value, *container, *dim;
49305 	HashTable *ht;
49306 
49307 	SAVE_OPLINE();
49308 	container = EX_VAR(opline->op1.var);
49309 
49310 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49311 assign_dim_op_array:
49312 		SEPARATE_ARRAY(container);
49313 		ht = Z_ARRVAL_P(container);
49314 assign_dim_op_new_array:
49315 		dim = EX_VAR(opline->op2.var);
49316 		if (IS_CV == IS_UNUSED) {
49317 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
49318 			if (UNEXPECTED(!var_ptr)) {
49319 				zend_cannot_add_element();
49320 				goto assign_dim_op_ret_null;
49321 			}
49322 		} else {
49323 			if (IS_CV == IS_CONST) {
49324 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
49325 			} else {
49326 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
49327 			}
49328 			if (UNEXPECTED(!var_ptr)) {
49329 				goto assign_dim_op_ret_null;
49330 			}
49331 		}
49332 
49333 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
49334 
49335 		do {
49336 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
49337 				zend_reference *ref = Z_REF_P(var_ptr);
49338 				var_ptr = Z_REFVAL_P(var_ptr);
49339 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
49340 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
49341 					break;
49342 				}
49343 			}
49344 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
49345 		} while (0);
49346 
49347 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49348 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
49349 		}
49350 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
49351 	} else {
49352 		if (EXPECTED(Z_ISREF_P(container))) {
49353 			container = Z_REFVAL_P(container);
49354 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49355 				goto assign_dim_op_array;
49356 			}
49357 		}
49358 
49359 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
49360 			zend_object *obj = Z_OBJ_P(container);
49361 
49362 			dim = EX_VAR(opline->op2.var);
49363 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
49364 				dim++;
49365 			}
49366 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
49367 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
49368 			zend_uchar old_type;
49369 
49370 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
49371 				ZVAL_UNDEFINED_OP1();
49372 			}
49373 			ht = zend_new_array(8);
49374 			old_type = Z_TYPE_P(container);
49375 			ZVAL_ARR(container, ht);
49376 			if (UNEXPECTED(old_type == IS_FALSE)) {
49377 				GC_ADDREF(ht);
49378 				zend_false_to_array_deprecated();
49379 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
49380 					zend_array_destroy(ht);
49381 					goto assign_dim_op_ret_null;
49382 				}
49383 			}
49384 			goto assign_dim_op_new_array;
49385 		} else {
49386 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49387 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
49388 assign_dim_op_ret_null:
49389 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
49390 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49391 				ZVAL_NULL(EX_VAR(opline->result.var));
49392 			}
49393 		}
49394 	}
49395 
49396 
49397 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49398 }
49399 
ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49400 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49401 {
49402 	USE_OPLINE
49403 	zval *var_ptr;
49404 	zval *value;
49405 
49406 	SAVE_OPLINE();
49407 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49408 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
49409 
49410 	do {
49411 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
49412 			zend_reference *ref = Z_REF_P(var_ptr);
49413 			var_ptr = Z_REFVAL_P(var_ptr);
49414 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
49415 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
49416 				break;
49417 			}
49418 		}
49419 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
49420 	} while (0);
49421 
49422 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49423 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
49424 	}
49425 
49426 
49427 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49428 }
49429 
ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49430 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49431 {
49432 	USE_OPLINE
49433 	zval *object;
49434 	zval *property;
49435 	zval *zptr;
49436 	void **cache_slot;
49437 	zend_property_info *prop_info;
49438 	zend_object *zobj;
49439 	zend_string *name, *tmp_name;
49440 
49441 	SAVE_OPLINE();
49442 	object = EX_VAR(opline->op1.var);
49443 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49444 
49445 	do {
49446 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49447 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
49448 				object = Z_REFVAL_P(object);
49449 				goto pre_incdec_object;
49450 			}
49451 			if (IS_CV == IS_CV
49452 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
49453 				ZVAL_UNDEFINED_OP1();
49454 			}
49455 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
49456 			break;
49457 		}
49458 
49459 pre_incdec_object:
49460 		/* here we are sure we are dealing with an object */
49461 		zobj = Z_OBJ_P(object);
49462 		if (IS_CV == IS_CONST) {
49463 			name = Z_STR_P(property);
49464 		} else {
49465 			name = zval_try_get_tmp_string(property, &tmp_name);
49466 			if (UNEXPECTED(!name)) {
49467 				UNDEF_RESULT();
49468 				break;
49469 			}
49470 		}
49471 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
49472 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
49473 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
49474 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49475 					ZVAL_NULL(EX_VAR(opline->result.var));
49476 				}
49477 			} else {
49478 				if (IS_CV == IS_CONST) {
49479 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
49480 				} else {
49481 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
49482 				}
49483 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
49484 			}
49485 		} else {
49486 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
49487 		}
49488 		if (IS_CV != IS_CONST) {
49489 			zend_tmp_string_release(tmp_name);
49490 		}
49491 	} while (0);
49492 
49493 
49494 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49495 }
49496 
ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49497 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49498 {
49499 	USE_OPLINE
49500 	zval *object;
49501 	zval *property;
49502 	zval *zptr;
49503 	void **cache_slot;
49504 	zend_property_info *prop_info;
49505 	zend_object *zobj;
49506 	zend_string *name, *tmp_name;
49507 
49508 	SAVE_OPLINE();
49509 	object = EX_VAR(opline->op1.var);
49510 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49511 
49512 	do {
49513 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49514 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
49515 				object = Z_REFVAL_P(object);
49516 				goto post_incdec_object;
49517 			}
49518 			if (IS_CV == IS_CV
49519 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
49520 				ZVAL_UNDEFINED_OP1();
49521 			}
49522 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
49523 			break;
49524 		}
49525 
49526 post_incdec_object:
49527 		/* here we are sure we are dealing with an object */
49528 		zobj = Z_OBJ_P(object);
49529 		if (IS_CV == IS_CONST) {
49530 			name = Z_STR_P(property);
49531 		} else {
49532 			name = zval_try_get_tmp_string(property, &tmp_name);
49533 			if (UNEXPECTED(!name)) {
49534 				ZVAL_UNDEF(EX_VAR(opline->result.var));
49535 				break;
49536 			}
49537 		}
49538 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
49539 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
49540 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
49541 				ZVAL_NULL(EX_VAR(opline->result.var));
49542 			} else {
49543 				if (IS_CV == IS_CONST) {
49544 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
49545 				} else {
49546 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
49547 				}
49548 
49549 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
49550 			}
49551 		} else {
49552 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
49553 		}
49554 		if (IS_CV != IS_CONST) {
49555 			zend_tmp_string_release(tmp_name);
49556 		}
49557 	} while (0);
49558 
49559 
49560 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49561 }
49562 
ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49563 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49564 {
49565 	USE_OPLINE
49566 	zval *container, *dim, *value;
49567 
49568 	SAVE_OPLINE();
49569 	container = EX_VAR(opline->op1.var);
49570 	dim = EX_VAR(opline->op2.var);
49571 	if (IS_CV != IS_CONST) {
49572 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49573 fetch_dim_r_array:
49574 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
49575 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
49576 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
49577 			container = Z_REFVAL_P(container);
49578 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49579 				goto fetch_dim_r_array;
49580 			} else {
49581 				goto fetch_dim_r_slow;
49582 			}
49583 		} else {
49584 fetch_dim_r_slow:
49585 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
49586 				dim++;
49587 			}
49588 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
49589 		}
49590 	} else {
49591 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
49592 	}
49593 
49594 
49595 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49596 }
49597 
ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49598 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49599 {
49600 	USE_OPLINE
49601 	zval *container;
49602 
49603 	SAVE_OPLINE();
49604 	container = EX_VAR(opline->op1.var);
49605 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
49606 
49607 	if (IS_CV == IS_VAR) {
49608 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49609 	}
49610 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49611 }
49612 
ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49613 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49614 {
49615 	USE_OPLINE
49616 	zval *container;
49617 
49618 	SAVE_OPLINE();
49619 	container = EX_VAR(opline->op1.var);
49620 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
49621 
49622 	if (IS_CV == IS_VAR) {
49623 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49624 	}
49625 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49626 }
49627 
ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49628 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49629 {
49630 	USE_OPLINE
49631 	zval *container;
49632 
49633 	SAVE_OPLINE();
49634 	container = EX_VAR(opline->op1.var);
49635 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
49636 
49637 
49638 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49639 }
49640 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49642 {
49643 #if 0
49644 	USE_OPLINE
49645 #endif
49646 
49647 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
49648         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
49649 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49650         }
49651 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49652 	} else {
49653 		if (IS_CV == IS_UNUSED) {
49654 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49655 		}
49656 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49657 	}
49658 }
49659 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49660 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49661 {
49662 	USE_OPLINE
49663 	zval *container;
49664 
49665 	SAVE_OPLINE();
49666 	container = EX_VAR(opline->op1.var);
49667 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
49668 
49669 	if (IS_CV == IS_VAR) {
49670 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49671 	}
49672 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49673 }
49674 
ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49675 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49676 {
49677 	USE_OPLINE
49678 	zval *container;
49679 	void **cache_slot = NULL;
49680 
49681 	SAVE_OPLINE();
49682 	container = EX_VAR(opline->op1.var);
49683 
49684 	if (IS_CV == IS_CONST ||
49685 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
49686 	    do {
49687 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
49688 				container = Z_REFVAL_P(container);
49689 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
49690 					break;
49691 				}
49692 			}
49693 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49694 				ZVAL_UNDEFINED_OP1();
49695 			}
49696 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
49697 			ZVAL_NULL(EX_VAR(opline->result.var));
49698 			goto fetch_obj_r_finish;
49699 		} while (0);
49700 	}
49701 
49702 	/* here we are sure we are dealing with an object */
49703 	do {
49704 		zend_object *zobj = Z_OBJ_P(container);
49705 		zend_string *name, *tmp_name;
49706 		zval *retval;
49707 
49708 		if (IS_CV == IS_CONST) {
49709 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
49710 
49711 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
49712 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
49713 
49714 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
49715 					retval = OBJ_PROP(zobj, prop_offset);
49716 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
49717 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49718 							goto fetch_obj_r_copy;
49719 						} else {
49720 fetch_obj_r_fast_copy:
49721 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
49722 							ZEND_VM_NEXT_OPCODE();
49723 						}
49724 					}
49725 				} else if (EXPECTED(zobj->properties != NULL)) {
49726 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
49727 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
49728 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
49729 
49730 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
49731 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
49732 
49733 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
49734 						        (EXPECTED(p->key == name) ||
49735 						         (EXPECTED(p->h == ZSTR_H(name)) &&
49736 						          EXPECTED(p->key != NULL) &&
49737 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
49738 								retval = &p->val;
49739 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49740 									goto fetch_obj_r_copy;
49741 								} else {
49742 									goto fetch_obj_r_fast_copy;
49743 								}
49744 							}
49745 						}
49746 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
49747 					}
49748 					retval = zend_hash_find_known_hash(zobj->properties, name);
49749 					if (EXPECTED(retval)) {
49750 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
49751 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
49752 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49753 							goto fetch_obj_r_copy;
49754 						} else {
49755 							goto fetch_obj_r_fast_copy;
49756 						}
49757 					}
49758 				}
49759 			}
49760 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
49761 		} else {
49762 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
49763 			if (UNEXPECTED(!name)) {
49764 				ZVAL_UNDEF(EX_VAR(opline->result.var));
49765 				break;
49766 			}
49767 		}
49768 
49769 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
49770 #if ZEND_DEBUG
49771 		if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
49772 			zend_verify_internal_read_property_type(zobj, name, retval);
49773 		}
49774 #endif
49775 
49776 		if (IS_CV != IS_CONST) {
49777 			zend_tmp_string_release(tmp_name);
49778 		}
49779 
49780 		if (retval != EX_VAR(opline->result.var)) {
49781 fetch_obj_r_copy:
49782 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
49783 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
49784 			zend_unwrap_reference(retval);
49785 		}
49786 	} while (0);
49787 
49788 fetch_obj_r_finish:
49789 
49790 
49791 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49792 }
49793 
ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49794 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49795 {
49796 	USE_OPLINE
49797 	zval *property, *container, *result;
49798 
49799 	SAVE_OPLINE();
49800 
49801 	container = EX_VAR(opline->op1.var);
49802 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49803 	result = EX_VAR(opline->result.var);
49804 	zend_fetch_property_address(
49805 		result, container, IS_CV, property, IS_CV,
49806 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
49807 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC);
49808 
49809 	if (IS_CV == IS_VAR) {
49810 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49811 	}
49812 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49813 }
49814 
ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49815 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49816 {
49817 	USE_OPLINE
49818 	zval *property, *container, *result;
49819 
49820 	SAVE_OPLINE();
49821 	container = EX_VAR(opline->op1.var);
49822 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49823 	result = EX_VAR(opline->result.var);
49824 	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);
49825 
49826 	if (IS_CV == IS_VAR) {
49827 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49828 	}
49829 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49830 }
49831 
ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49833 {
49834 	USE_OPLINE
49835 	zval *container;
49836 	void **cache_slot = NULL;
49837 
49838 	SAVE_OPLINE();
49839 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
49840 
49841 	if (IS_CV == IS_CONST ||
49842 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
49843 		do {
49844 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
49845 				container = Z_REFVAL_P(container);
49846 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
49847 					break;
49848 				}
49849 			}
49850 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
49851 				ZVAL_UNDEFINED_OP2();
49852 			}
49853 			ZVAL_NULL(EX_VAR(opline->result.var));
49854 			goto fetch_obj_is_finish;
49855 		} while (0);
49856 	}
49857 
49858 	/* here we are sure we are dealing with an object */
49859 	do {
49860 		zend_object *zobj = Z_OBJ_P(container);
49861 		zend_string *name, *tmp_name;
49862 		zval *retval;
49863 
49864 		if (IS_CV == IS_CONST) {
49865 			cache_slot = CACHE_ADDR(opline->extended_value);
49866 
49867 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
49868 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
49869 
49870 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
49871 					retval = OBJ_PROP(zobj, prop_offset);
49872 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
49873 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49874 							goto fetch_obj_is_copy;
49875 						} else {
49876 fetch_obj_is_fast_copy:
49877 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
49878 							ZEND_VM_NEXT_OPCODE();
49879 						}
49880 					}
49881 				} else if (EXPECTED(zobj->properties != NULL)) {
49882 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
49883 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
49884 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
49885 
49886 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
49887 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
49888 
49889 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
49890 						        (EXPECTED(p->key == name) ||
49891 						         (EXPECTED(p->h == ZSTR_H(name)) &&
49892 						          EXPECTED(p->key != NULL) &&
49893 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
49894 								retval = &p->val;
49895 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49896 									goto fetch_obj_is_copy;
49897 								} else {
49898 									goto fetch_obj_is_fast_copy;
49899 								}
49900 							}
49901 						}
49902 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
49903 					}
49904 					retval = zend_hash_find_known_hash(zobj->properties, name);
49905 					if (EXPECTED(retval)) {
49906 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
49907 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
49908 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49909 							goto fetch_obj_is_copy;
49910 						} else {
49911 							goto fetch_obj_is_fast_copy;
49912 						}
49913 					}
49914 				}
49915 			}
49916 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
49917 		} else {
49918 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
49919 			if (UNEXPECTED(!name)) {
49920 				ZVAL_UNDEF(EX_VAR(opline->result.var));
49921 				break;
49922 			}
49923 		}
49924 
49925 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
49926 
49927 		if (IS_CV != IS_CONST) {
49928 			zend_tmp_string_release(tmp_name);
49929 		}
49930 
49931 		if (retval != EX_VAR(opline->result.var)) {
49932 fetch_obj_is_copy:
49933 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
49934 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
49935 			zend_unwrap_reference(retval);
49936 		}
49937 	} while (0);
49938 
49939 fetch_obj_is_finish:
49940 
49941 
49942 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49943 }
49944 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49945 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49946 {
49947 #if 0
49948 	USE_OPLINE
49949 #endif
49950 
49951 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
49952 		/* Behave like FETCH_OBJ_W */
49953 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
49954 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49955 		}
49956 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49957 	} else {
49958 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49959 	}
49960 }
49961 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49962 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49963 {
49964 	USE_OPLINE
49965 	zval *container, *property, *result;
49966 
49967 	SAVE_OPLINE();
49968 	container = EX_VAR(opline->op1.var);
49969 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49970 	result = EX_VAR(opline->result.var);
49971 	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);
49972 
49973 	if (IS_CV == IS_VAR) {
49974 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49975 	}
49976 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49977 }
49978 
ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49979 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49980 {
49981 	USE_OPLINE
49982 	zval *object, *value, tmp;
49983 	zend_object *zobj;
49984 	zend_string *name, *tmp_name;
49985 
49986 	SAVE_OPLINE();
49987 	object = EX_VAR(opline->op1.var);
49988 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
49989 
49990 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49991 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
49992 			object = Z_REFVAL_P(object);
49993 			goto assign_object;
49994 		}
49995 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
49996 		value = &EG(uninitialized_zval);
49997 		goto free_and_exit_assign_obj;
49998 	}
49999 
50000 assign_object:
50001 	zobj = Z_OBJ_P(object);
50002 	if (IS_CV == IS_CONST) {
50003 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
50004 			void **cache_slot = CACHE_ADDR(opline->extended_value);
50005 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
50006 			zend_object *zobj = Z_OBJ_P(object);
50007 			zval *property_val;
50008 
50009 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
50010 				property_val = OBJ_PROP(zobj, prop_offset);
50011 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
50012 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
50013 
50014 					if (UNEXPECTED(prop_info != NULL)) {
50015 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
50016 						goto free_and_exit_assign_obj;
50017 					} else {
50018 fast_assign_obj:
50019 						value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
50020 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50021 							ZVAL_COPY(EX_VAR(opline->result.var), value);
50022 						}
50023 						goto exit_assign_obj;
50024 					}
50025 				}
50026 			} else {
50027 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
50028 				if (EXPECTED(zobj->properties != NULL)) {
50029 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
50030 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
50031 							GC_DELREF(zobj->properties);
50032 						}
50033 						zobj->properties = zend_array_dup(zobj->properties);
50034 					}
50035 					property_val = zend_hash_find_known_hash(zobj->properties, name);
50036 					if (property_val) {
50037 						goto fast_assign_obj;
50038 					}
50039 				}
50040 
50041 				if (!zobj->ce->__set) {
50042 					if (EXPECTED(zobj->properties == NULL)) {
50043 						rebuild_object_properties(zobj);
50044 					}
50045 					if (IS_CONST == IS_CONST) {
50046 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
50047 							Z_ADDREF_P(value);
50048 						}
50049 					} else if (IS_CONST != IS_TMP_VAR) {
50050 						if (Z_ISREF_P(value)) {
50051 							if (IS_CONST == IS_VAR) {
50052 								zend_reference *ref = Z_REF_P(value);
50053 								if (GC_DELREF(ref) == 0) {
50054 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
50055 									efree_size(ref, sizeof(zend_reference));
50056 									value = &tmp;
50057 								} else {
50058 									value = Z_REFVAL_P(value);
50059 									Z_TRY_ADDREF_P(value);
50060 								}
50061 							} else {
50062 								value = Z_REFVAL_P(value);
50063 								Z_TRY_ADDREF_P(value);
50064 							}
50065 						} else if (IS_CONST == IS_CV) {
50066 							Z_TRY_ADDREF_P(value);
50067 						}
50068 						}
50069 					zend_hash_add_new(zobj->properties, name, value);
50070 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50071 						ZVAL_COPY(EX_VAR(opline->result.var), value);
50072 					}
50073 					goto exit_assign_obj;
50074 				}
50075 			}
50076 		}
50077 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
50078 	} else {
50079 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
50080 		if (UNEXPECTED(!name)) {
50081 
50082 			UNDEF_RESULT();
50083 			goto exit_assign_obj;
50084 		}
50085 	}
50086 
50087 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
50088 		ZVAL_DEREF(value);
50089 	}
50090 
50091 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
50092 
50093 	if (IS_CV != IS_CONST) {
50094 		zend_tmp_string_release(tmp_name);
50095 	}
50096 
50097 free_and_exit_assign_obj:
50098 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50099 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
50100 	}
50101 
50102 exit_assign_obj:
50103 
50104 
50105 	/* assign_obj has two opcodes! */
50106 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50107 }
50108 
50109 /* 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)50110 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50111 {
50112 	USE_OPLINE
50113 	zval *object, *value, tmp;
50114 	zend_object *zobj;
50115 	zend_string *name, *tmp_name;
50116 
50117 	SAVE_OPLINE();
50118 	object = EX_VAR(opline->op1.var);
50119 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
50120 
50121 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
50122 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
50123 			object = Z_REFVAL_P(object);
50124 			goto assign_object;
50125 		}
50126 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
50127 		value = &EG(uninitialized_zval);
50128 		goto free_and_exit_assign_obj;
50129 	}
50130 
50131 assign_object:
50132 	zobj = Z_OBJ_P(object);
50133 	if (IS_CV == IS_CONST) {
50134 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
50135 			void **cache_slot = CACHE_ADDR(opline->extended_value);
50136 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
50137 			zend_object *zobj = Z_OBJ_P(object);
50138 			zval *property_val;
50139 
50140 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
50141 				property_val = OBJ_PROP(zobj, prop_offset);
50142 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
50143 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
50144 
50145 					if (UNEXPECTED(prop_info != NULL)) {
50146 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
50147 						goto free_and_exit_assign_obj;
50148 					} else {
50149 fast_assign_obj:
50150 						value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
50151 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50152 							ZVAL_COPY(EX_VAR(opline->result.var), value);
50153 						}
50154 						goto exit_assign_obj;
50155 					}
50156 				}
50157 			} else {
50158 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
50159 				if (EXPECTED(zobj->properties != NULL)) {
50160 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
50161 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
50162 							GC_DELREF(zobj->properties);
50163 						}
50164 						zobj->properties = zend_array_dup(zobj->properties);
50165 					}
50166 					property_val = zend_hash_find_known_hash(zobj->properties, name);
50167 					if (property_val) {
50168 						goto fast_assign_obj;
50169 					}
50170 				}
50171 
50172 				if (!zobj->ce->__set) {
50173 					if (EXPECTED(zobj->properties == NULL)) {
50174 						rebuild_object_properties(zobj);
50175 					}
50176 					if (IS_TMP_VAR == IS_CONST) {
50177 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
50178 							Z_ADDREF_P(value);
50179 						}
50180 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
50181 						if (Z_ISREF_P(value)) {
50182 							if (IS_TMP_VAR == IS_VAR) {
50183 								zend_reference *ref = Z_REF_P(value);
50184 								if (GC_DELREF(ref) == 0) {
50185 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
50186 									efree_size(ref, sizeof(zend_reference));
50187 									value = &tmp;
50188 								} else {
50189 									value = Z_REFVAL_P(value);
50190 									Z_TRY_ADDREF_P(value);
50191 								}
50192 							} else {
50193 								value = Z_REFVAL_P(value);
50194 								Z_TRY_ADDREF_P(value);
50195 							}
50196 						} else if (IS_TMP_VAR == IS_CV) {
50197 							Z_TRY_ADDREF_P(value);
50198 						}
50199 						}
50200 					zend_hash_add_new(zobj->properties, name, value);
50201 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50202 						ZVAL_COPY(EX_VAR(opline->result.var), value);
50203 					}
50204 					goto exit_assign_obj;
50205 				}
50206 			}
50207 		}
50208 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
50209 	} else {
50210 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
50211 		if (UNEXPECTED(!name)) {
50212 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50213 			UNDEF_RESULT();
50214 			goto exit_assign_obj;
50215 		}
50216 	}
50217 
50218 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
50219 		ZVAL_DEREF(value);
50220 	}
50221 
50222 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
50223 
50224 	if (IS_CV != IS_CONST) {
50225 		zend_tmp_string_release(tmp_name);
50226 	}
50227 
50228 free_and_exit_assign_obj:
50229 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50230 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
50231 	}
50232 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50233 exit_assign_obj:
50234 
50235 
50236 	/* assign_obj has two opcodes! */
50237 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50238 }
50239 
50240 /* 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)50241 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50242 {
50243 	USE_OPLINE
50244 	zval *object, *value, tmp;
50245 	zend_object *zobj;
50246 	zend_string *name, *tmp_name;
50247 
50248 	SAVE_OPLINE();
50249 	object = EX_VAR(opline->op1.var);
50250 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50251 
50252 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
50253 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
50254 			object = Z_REFVAL_P(object);
50255 			goto assign_object;
50256 		}
50257 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
50258 		value = &EG(uninitialized_zval);
50259 		goto free_and_exit_assign_obj;
50260 	}
50261 
50262 assign_object:
50263 	zobj = Z_OBJ_P(object);
50264 	if (IS_CV == IS_CONST) {
50265 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
50266 			void **cache_slot = CACHE_ADDR(opline->extended_value);
50267 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
50268 			zend_object *zobj = Z_OBJ_P(object);
50269 			zval *property_val;
50270 
50271 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
50272 				property_val = OBJ_PROP(zobj, prop_offset);
50273 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
50274 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
50275 
50276 					if (UNEXPECTED(prop_info != NULL)) {
50277 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
50278 						goto free_and_exit_assign_obj;
50279 					} else {
50280 fast_assign_obj:
50281 						value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
50282 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50283 							ZVAL_COPY(EX_VAR(opline->result.var), value);
50284 						}
50285 						goto exit_assign_obj;
50286 					}
50287 				}
50288 			} else {
50289 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
50290 				if (EXPECTED(zobj->properties != NULL)) {
50291 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
50292 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
50293 							GC_DELREF(zobj->properties);
50294 						}
50295 						zobj->properties = zend_array_dup(zobj->properties);
50296 					}
50297 					property_val = zend_hash_find_known_hash(zobj->properties, name);
50298 					if (property_val) {
50299 						goto fast_assign_obj;
50300 					}
50301 				}
50302 
50303 				if (!zobj->ce->__set) {
50304 					if (EXPECTED(zobj->properties == NULL)) {
50305 						rebuild_object_properties(zobj);
50306 					}
50307 					if (IS_VAR == IS_CONST) {
50308 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
50309 							Z_ADDREF_P(value);
50310 						}
50311 					} else if (IS_VAR != IS_TMP_VAR) {
50312 						if (Z_ISREF_P(value)) {
50313 							if (IS_VAR == IS_VAR) {
50314 								zend_reference *ref = Z_REF_P(value);
50315 								if (GC_DELREF(ref) == 0) {
50316 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
50317 									efree_size(ref, sizeof(zend_reference));
50318 									value = &tmp;
50319 								} else {
50320 									value = Z_REFVAL_P(value);
50321 									Z_TRY_ADDREF_P(value);
50322 								}
50323 							} else {
50324 								value = Z_REFVAL_P(value);
50325 								Z_TRY_ADDREF_P(value);
50326 							}
50327 						} else if (IS_VAR == IS_CV) {
50328 							Z_TRY_ADDREF_P(value);
50329 						}
50330 						}
50331 					zend_hash_add_new(zobj->properties, name, value);
50332 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50333 						ZVAL_COPY(EX_VAR(opline->result.var), value);
50334 					}
50335 					goto exit_assign_obj;
50336 				}
50337 			}
50338 		}
50339 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
50340 	} else {
50341 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
50342 		if (UNEXPECTED(!name)) {
50343 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50344 			UNDEF_RESULT();
50345 			goto exit_assign_obj;
50346 		}
50347 	}
50348 
50349 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
50350 		ZVAL_DEREF(value);
50351 	}
50352 
50353 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
50354 
50355 	if (IS_CV != IS_CONST) {
50356 		zend_tmp_string_release(tmp_name);
50357 	}
50358 
50359 free_and_exit_assign_obj:
50360 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50361 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
50362 	}
50363 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50364 exit_assign_obj:
50365 
50366 
50367 	/* assign_obj has two opcodes! */
50368 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50369 }
50370 
50371 /* 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)50372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50373 {
50374 	USE_OPLINE
50375 	zval *object, *value, tmp;
50376 	zend_object *zobj;
50377 	zend_string *name, *tmp_name;
50378 
50379 	SAVE_OPLINE();
50380 	object = EX_VAR(opline->op1.var);
50381 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
50382 
50383 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
50384 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
50385 			object = Z_REFVAL_P(object);
50386 			goto assign_object;
50387 		}
50388 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
50389 		value = &EG(uninitialized_zval);
50390 		goto free_and_exit_assign_obj;
50391 	}
50392 
50393 assign_object:
50394 	zobj = Z_OBJ_P(object);
50395 	if (IS_CV == IS_CONST) {
50396 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
50397 			void **cache_slot = CACHE_ADDR(opline->extended_value);
50398 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
50399 			zend_object *zobj = Z_OBJ_P(object);
50400 			zval *property_val;
50401 
50402 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
50403 				property_val = OBJ_PROP(zobj, prop_offset);
50404 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
50405 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
50406 
50407 					if (UNEXPECTED(prop_info != NULL)) {
50408 						value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
50409 						goto free_and_exit_assign_obj;
50410 					} else {
50411 fast_assign_obj:
50412 						value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
50413 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50414 							ZVAL_COPY(EX_VAR(opline->result.var), value);
50415 						}
50416 						goto exit_assign_obj;
50417 					}
50418 				}
50419 			} else {
50420 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
50421 				if (EXPECTED(zobj->properties != NULL)) {
50422 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
50423 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
50424 							GC_DELREF(zobj->properties);
50425 						}
50426 						zobj->properties = zend_array_dup(zobj->properties);
50427 					}
50428 					property_val = zend_hash_find_known_hash(zobj->properties, name);
50429 					if (property_val) {
50430 						goto fast_assign_obj;
50431 					}
50432 				}
50433 
50434 				if (!zobj->ce->__set) {
50435 					if (EXPECTED(zobj->properties == NULL)) {
50436 						rebuild_object_properties(zobj);
50437 					}
50438 					if (IS_CV == IS_CONST) {
50439 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
50440 							Z_ADDREF_P(value);
50441 						}
50442 					} else if (IS_CV != IS_TMP_VAR) {
50443 						if (Z_ISREF_P(value)) {
50444 							if (IS_CV == IS_VAR) {
50445 								zend_reference *ref = Z_REF_P(value);
50446 								if (GC_DELREF(ref) == 0) {
50447 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
50448 									efree_size(ref, sizeof(zend_reference));
50449 									value = &tmp;
50450 								} else {
50451 									value = Z_REFVAL_P(value);
50452 									Z_TRY_ADDREF_P(value);
50453 								}
50454 							} else {
50455 								value = Z_REFVAL_P(value);
50456 								Z_TRY_ADDREF_P(value);
50457 							}
50458 						} else if (IS_CV == IS_CV) {
50459 							Z_TRY_ADDREF_P(value);
50460 						}
50461 						}
50462 					zend_hash_add_new(zobj->properties, name, value);
50463 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50464 						ZVAL_COPY(EX_VAR(opline->result.var), value);
50465 					}
50466 					goto exit_assign_obj;
50467 				}
50468 			}
50469 		}
50470 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
50471 	} else {
50472 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
50473 		if (UNEXPECTED(!name)) {
50474 
50475 			UNDEF_RESULT();
50476 			goto exit_assign_obj;
50477 		}
50478 	}
50479 
50480 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
50481 		ZVAL_DEREF(value);
50482 	}
50483 
50484 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
50485 
50486 	if (IS_CV != IS_CONST) {
50487 		zend_tmp_string_release(tmp_name);
50488 	}
50489 
50490 free_and_exit_assign_obj:
50491 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50492 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
50493 	}
50494 
50495 exit_assign_obj:
50496 
50497 
50498 	/* assign_obj has two opcodes! */
50499 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50500 }
50501 
50502 /* 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)50503 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50504 {
50505 	USE_OPLINE
50506 	zval *object_ptr, *orig_object_ptr;
50507 	zval *value;
50508 	zval *variable_ptr;
50509 	zval *dim;
50510 
50511 	SAVE_OPLINE();
50512 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
50513 
50514 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50515 try_assign_dim_array:
50516 		SEPARATE_ARRAY(object_ptr);
50517 		if (IS_CV == IS_UNUSED) {
50518 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
50519 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
50520 				HashTable *ht = Z_ARRVAL_P(object_ptr);
50521 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
50522 					GC_ADDREF(ht);
50523 				}
50524 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50525 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
50526 					zend_array_destroy(ht);
50527 					goto assign_dim_error;
50528 				}
50529 			}
50530 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
50531 				ZVAL_DEREF(value);
50532 			}
50533 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
50534 			if (UNEXPECTED(value == NULL)) {
50535 				zend_cannot_add_element();
50536 				goto assign_dim_error;
50537 			} else if (IS_CONST == IS_CV) {
50538 				if (Z_REFCOUNTED_P(value)) {
50539 					Z_ADDREF_P(value);
50540 				}
50541 			} else if (IS_CONST == IS_VAR) {
50542 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
50543 				if (Z_ISREF_P(free_op_data)) {
50544 					if (Z_REFCOUNTED_P(value)) {
50545 						Z_ADDREF_P(value);
50546 					}
50547 					zval_ptr_dtor_nogc(free_op_data);
50548 				}
50549 			} else if (IS_CONST == IS_CONST) {
50550 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
50551 					Z_ADDREF_P(value);
50552 				}
50553 			}
50554 		} else {
50555 			dim = EX_VAR(opline->op2.var);
50556 			if (IS_CV == IS_CONST) {
50557 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50558 			} else {
50559 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50560 			}
50561 			if (UNEXPECTED(variable_ptr == NULL)) {
50562 				goto assign_dim_error;
50563 			}
50564 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
50565 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
50566 		}
50567 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50568 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50569 		}
50570 	} else {
50571 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50572 			object_ptr = Z_REFVAL_P(object_ptr);
50573 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50574 				goto try_assign_dim_array;
50575 			}
50576 		}
50577 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50578 			zend_object *obj = Z_OBJ_P(object_ptr);
50579 
50580 			GC_ADDREF(obj);
50581 			dim = EX_VAR(opline->op2.var);
50582 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
50583 				dim = ZVAL_UNDEFINED_OP2();
50584 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
50585 				dim++;
50586 			}
50587 
50588 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
50589 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
50590 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50591 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
50592 				ZVAL_DEREF(value);
50593 			}
50594 
50595 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
50596 
50597 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
50598 				zend_objects_store_del(obj);
50599 			}
50600 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50601 			if (IS_CV == IS_UNUSED) {
50602 				zend_use_new_element_for_string();
50603 
50604 				UNDEF_RESULT();
50605 			} else {
50606 				dim = EX_VAR(opline->op2.var);
50607 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
50608 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
50609 
50610 			}
50611 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50612 			if (Z_ISREF_P(orig_object_ptr)
50613 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
50614 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
50615 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50616 
50617 				UNDEF_RESULT();
50618 			} else {
50619 				HashTable *ht = zend_new_array(8);
50620 				zend_uchar old_type = Z_TYPE_P(object_ptr);
50621 
50622 				ZVAL_ARR(object_ptr, ht);
50623 				if (UNEXPECTED(old_type == IS_FALSE)) {
50624 					GC_ADDREF(ht);
50625 					zend_false_to_array_deprecated();
50626 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
50627 						zend_array_destroy(ht);
50628 						goto assign_dim_error;
50629 					}
50630 				}
50631 				goto try_assign_dim_array;
50632 			}
50633 		} else {
50634 			zend_use_scalar_as_array();
50635 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50636 assign_dim_error:
50637 
50638 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50639 				ZVAL_NULL(EX_VAR(opline->result.var));
50640 			}
50641 		}
50642 	}
50643 	if (IS_CV != IS_UNUSED) {
50644 
50645 	}
50646 
50647 	/* assign_dim has two opcodes! */
50648 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50649 }
50650 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50651 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50652 {
50653 	USE_OPLINE
50654 	zval *object_ptr, *orig_object_ptr;
50655 	zval *value;
50656 	zval *variable_ptr;
50657 	zval *dim;
50658 
50659 	SAVE_OPLINE();
50660 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
50661 
50662 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50663 try_assign_dim_array:
50664 		SEPARATE_ARRAY(object_ptr);
50665 		if (IS_CV == IS_UNUSED) {
50666 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
50667 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
50668 				HashTable *ht = Z_ARRVAL_P(object_ptr);
50669 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
50670 					GC_ADDREF(ht);
50671 				}
50672 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50673 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
50674 					zend_array_destroy(ht);
50675 					goto assign_dim_error;
50676 				}
50677 			}
50678 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
50679 				ZVAL_DEREF(value);
50680 			}
50681 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
50682 			if (UNEXPECTED(value == NULL)) {
50683 				zend_cannot_add_element();
50684 				goto assign_dim_error;
50685 			} else if (IS_TMP_VAR == IS_CV) {
50686 				if (Z_REFCOUNTED_P(value)) {
50687 					Z_ADDREF_P(value);
50688 				}
50689 			} else if (IS_TMP_VAR == IS_VAR) {
50690 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
50691 				if (Z_ISREF_P(free_op_data)) {
50692 					if (Z_REFCOUNTED_P(value)) {
50693 						Z_ADDREF_P(value);
50694 					}
50695 					zval_ptr_dtor_nogc(free_op_data);
50696 				}
50697 			} else if (IS_TMP_VAR == IS_CONST) {
50698 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
50699 					Z_ADDREF_P(value);
50700 				}
50701 			}
50702 		} else {
50703 			dim = EX_VAR(opline->op2.var);
50704 			if (IS_CV == IS_CONST) {
50705 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50706 			} else {
50707 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50708 			}
50709 			if (UNEXPECTED(variable_ptr == NULL)) {
50710 				goto assign_dim_error;
50711 			}
50712 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
50713 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
50714 		}
50715 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50716 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50717 		}
50718 	} else {
50719 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50720 			object_ptr = Z_REFVAL_P(object_ptr);
50721 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50722 				goto try_assign_dim_array;
50723 			}
50724 		}
50725 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50726 			zend_object *obj = Z_OBJ_P(object_ptr);
50727 
50728 			GC_ADDREF(obj);
50729 			dim = EX_VAR(opline->op2.var);
50730 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
50731 				dim = ZVAL_UNDEFINED_OP2();
50732 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
50733 				dim++;
50734 			}
50735 
50736 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
50737 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
50738 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50739 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
50740 				ZVAL_DEREF(value);
50741 			}
50742 
50743 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
50744 
50745 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50746 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
50747 				zend_objects_store_del(obj);
50748 			}
50749 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50750 			if (IS_CV == IS_UNUSED) {
50751 				zend_use_new_element_for_string();
50752 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50753 				UNDEF_RESULT();
50754 			} else {
50755 				dim = EX_VAR(opline->op2.var);
50756 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
50757 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
50758 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50759 			}
50760 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50761 			if (Z_ISREF_P(orig_object_ptr)
50762 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
50763 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
50764 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50765 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50766 				UNDEF_RESULT();
50767 			} else {
50768 				HashTable *ht = zend_new_array(8);
50769 				zend_uchar old_type = Z_TYPE_P(object_ptr);
50770 
50771 				ZVAL_ARR(object_ptr, ht);
50772 				if (UNEXPECTED(old_type == IS_FALSE)) {
50773 					GC_ADDREF(ht);
50774 					zend_false_to_array_deprecated();
50775 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
50776 						zend_array_destroy(ht);
50777 						goto assign_dim_error;
50778 					}
50779 				}
50780 				goto try_assign_dim_array;
50781 			}
50782 		} else {
50783 			zend_use_scalar_as_array();
50784 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50785 assign_dim_error:
50786 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50787 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50788 				ZVAL_NULL(EX_VAR(opline->result.var));
50789 			}
50790 		}
50791 	}
50792 	if (IS_CV != IS_UNUSED) {
50793 
50794 	}
50795 
50796 	/* assign_dim has two opcodes! */
50797 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50798 }
50799 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50800 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50801 {
50802 	USE_OPLINE
50803 	zval *object_ptr, *orig_object_ptr;
50804 	zval *value;
50805 	zval *variable_ptr;
50806 	zval *dim;
50807 
50808 	SAVE_OPLINE();
50809 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
50810 
50811 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50812 try_assign_dim_array:
50813 		SEPARATE_ARRAY(object_ptr);
50814 		if (IS_CV == IS_UNUSED) {
50815 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50816 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
50817 				HashTable *ht = Z_ARRVAL_P(object_ptr);
50818 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
50819 					GC_ADDREF(ht);
50820 				}
50821 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50822 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
50823 					zend_array_destroy(ht);
50824 					goto assign_dim_error;
50825 				}
50826 			}
50827 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
50828 				ZVAL_DEREF(value);
50829 			}
50830 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
50831 			if (UNEXPECTED(value == NULL)) {
50832 				zend_cannot_add_element();
50833 				goto assign_dim_error;
50834 			} else if (IS_VAR == IS_CV) {
50835 				if (Z_REFCOUNTED_P(value)) {
50836 					Z_ADDREF_P(value);
50837 				}
50838 			} else if (IS_VAR == IS_VAR) {
50839 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
50840 				if (Z_ISREF_P(free_op_data)) {
50841 					if (Z_REFCOUNTED_P(value)) {
50842 						Z_ADDREF_P(value);
50843 					}
50844 					zval_ptr_dtor_nogc(free_op_data);
50845 				}
50846 			} else if (IS_VAR == IS_CONST) {
50847 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
50848 					Z_ADDREF_P(value);
50849 				}
50850 			}
50851 		} else {
50852 			dim = EX_VAR(opline->op2.var);
50853 			if (IS_CV == IS_CONST) {
50854 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50855 			} else {
50856 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50857 			}
50858 			if (UNEXPECTED(variable_ptr == NULL)) {
50859 				goto assign_dim_error;
50860 			}
50861 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50862 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
50863 		}
50864 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50865 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50866 		}
50867 	} else {
50868 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50869 			object_ptr = Z_REFVAL_P(object_ptr);
50870 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50871 				goto try_assign_dim_array;
50872 			}
50873 		}
50874 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50875 			zend_object *obj = Z_OBJ_P(object_ptr);
50876 
50877 			GC_ADDREF(obj);
50878 			dim = EX_VAR(opline->op2.var);
50879 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
50880 				dim = ZVAL_UNDEFINED_OP2();
50881 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
50882 				dim++;
50883 			}
50884 
50885 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50886 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
50887 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50888 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
50889 				ZVAL_DEREF(value);
50890 			}
50891 
50892 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
50893 
50894 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50895 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
50896 				zend_objects_store_del(obj);
50897 			}
50898 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50899 			if (IS_CV == IS_UNUSED) {
50900 				zend_use_new_element_for_string();
50901 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50902 				UNDEF_RESULT();
50903 			} else {
50904 				dim = EX_VAR(opline->op2.var);
50905 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50906 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
50907 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50908 			}
50909 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50910 			if (Z_ISREF_P(orig_object_ptr)
50911 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
50912 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
50913 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50914 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50915 				UNDEF_RESULT();
50916 			} else {
50917 				HashTable *ht = zend_new_array(8);
50918 				zend_uchar old_type = Z_TYPE_P(object_ptr);
50919 
50920 				ZVAL_ARR(object_ptr, ht);
50921 				if (UNEXPECTED(old_type == IS_FALSE)) {
50922 					GC_ADDREF(ht);
50923 					zend_false_to_array_deprecated();
50924 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
50925 						zend_array_destroy(ht);
50926 						goto assign_dim_error;
50927 					}
50928 				}
50929 				goto try_assign_dim_array;
50930 			}
50931 		} else {
50932 			zend_use_scalar_as_array();
50933 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50934 assign_dim_error:
50935 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50936 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50937 				ZVAL_NULL(EX_VAR(opline->result.var));
50938 			}
50939 		}
50940 	}
50941 	if (IS_CV != IS_UNUSED) {
50942 
50943 	}
50944 
50945 	/* assign_dim has two opcodes! */
50946 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50947 }
50948 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50949 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50950 {
50951 	USE_OPLINE
50952 	zval *object_ptr, *orig_object_ptr;
50953 	zval *value;
50954 	zval *variable_ptr;
50955 	zval *dim;
50956 
50957 	SAVE_OPLINE();
50958 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
50959 
50960 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50961 try_assign_dim_array:
50962 		SEPARATE_ARRAY(object_ptr);
50963 		if (IS_CV == IS_UNUSED) {
50964 			value = EX_VAR((opline+1)->op1.var);
50965 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
50966 				HashTable *ht = Z_ARRVAL_P(object_ptr);
50967 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
50968 					GC_ADDREF(ht);
50969 				}
50970 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50971 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
50972 					zend_array_destroy(ht);
50973 					goto assign_dim_error;
50974 				}
50975 			}
50976 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
50977 				ZVAL_DEREF(value);
50978 			}
50979 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
50980 			if (UNEXPECTED(value == NULL)) {
50981 				zend_cannot_add_element();
50982 				goto assign_dim_error;
50983 			} else if (IS_CV == IS_CV) {
50984 				if (Z_REFCOUNTED_P(value)) {
50985 					Z_ADDREF_P(value);
50986 				}
50987 			} else if (IS_CV == IS_VAR) {
50988 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
50989 				if (Z_ISREF_P(free_op_data)) {
50990 					if (Z_REFCOUNTED_P(value)) {
50991 						Z_ADDREF_P(value);
50992 					}
50993 					zval_ptr_dtor_nogc(free_op_data);
50994 				}
50995 			} else if (IS_CV == IS_CONST) {
50996 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
50997 					Z_ADDREF_P(value);
50998 				}
50999 			}
51000 		} else {
51001 			dim = EX_VAR(opline->op2.var);
51002 			if (IS_CV == IS_CONST) {
51003 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
51004 			} else {
51005 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
51006 			}
51007 			if (UNEXPECTED(variable_ptr == NULL)) {
51008 				goto assign_dim_error;
51009 			}
51010 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
51011 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
51012 		}
51013 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51014 			ZVAL_COPY(EX_VAR(opline->result.var), value);
51015 		}
51016 	} else {
51017 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
51018 			object_ptr = Z_REFVAL_P(object_ptr);
51019 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
51020 				goto try_assign_dim_array;
51021 			}
51022 		}
51023 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
51024 			zend_object *obj = Z_OBJ_P(object_ptr);
51025 
51026 			GC_ADDREF(obj);
51027 			dim = EX_VAR(opline->op2.var);
51028 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
51029 				dim = ZVAL_UNDEFINED_OP2();
51030 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
51031 				dim++;
51032 			}
51033 
51034 			value = EX_VAR((opline+1)->op1.var);
51035 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
51036 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
51037 			} else if (IS_CV & (IS_CV|IS_VAR)) {
51038 				ZVAL_DEREF(value);
51039 			}
51040 
51041 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
51042 
51043 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
51044 				zend_objects_store_del(obj);
51045 			}
51046 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
51047 			if (IS_CV == IS_UNUSED) {
51048 				zend_use_new_element_for_string();
51049 
51050 				UNDEF_RESULT();
51051 			} else {
51052 				dim = EX_VAR(opline->op2.var);
51053 				value = EX_VAR((opline+1)->op1.var);
51054 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
51055 
51056 			}
51057 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
51058 			if (Z_ISREF_P(orig_object_ptr)
51059 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
51060 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
51061 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51062 
51063 				UNDEF_RESULT();
51064 			} else {
51065 				HashTable *ht = zend_new_array(8);
51066 				zend_uchar old_type = Z_TYPE_P(object_ptr);
51067 
51068 				ZVAL_ARR(object_ptr, ht);
51069 				if (UNEXPECTED(old_type == IS_FALSE)) {
51070 					GC_ADDREF(ht);
51071 					zend_false_to_array_deprecated();
51072 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
51073 						zend_array_destroy(ht);
51074 						goto assign_dim_error;
51075 					}
51076 				}
51077 				goto try_assign_dim_array;
51078 			}
51079 		} else {
51080 			zend_use_scalar_as_array();
51081 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51082 assign_dim_error:
51083 
51084 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51085 				ZVAL_NULL(EX_VAR(opline->result.var));
51086 			}
51087 		}
51088 	}
51089 	if (IS_CV != IS_UNUSED) {
51090 
51091 	}
51092 
51093 	/* assign_dim has two opcodes! */
51094 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51095 }
51096 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51097 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51098 {
51099 	USE_OPLINE
51100 	zval *value;
51101 	zval *variable_ptr;
51102 
51103 	SAVE_OPLINE();
51104 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51105 	variable_ptr = EX_VAR(opline->op1.var);
51106 
51107 	value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
51108 	if (UNEXPECTED(0)) {
51109 		ZVAL_COPY(EX_VAR(opline->result.var), value);
51110 	}
51111 
51112 	/* zend_assign_to_variable() always takes care of op2, never free it! */
51113 
51114 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51115 }
51116 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51117 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51118 {
51119 	USE_OPLINE
51120 	zval *value;
51121 	zval *variable_ptr;
51122 
51123 	SAVE_OPLINE();
51124 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51125 	variable_ptr = EX_VAR(opline->op1.var);
51126 
51127 	value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
51128 	if (UNEXPECTED(1)) {
51129 		ZVAL_COPY(EX_VAR(opline->result.var), value);
51130 	}
51131 
51132 	/* zend_assign_to_variable() always takes care of op2, never free it! */
51133 
51134 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51135 }
51136 
ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51137 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51138 {
51139 	USE_OPLINE
51140 	zval *variable_ptr;
51141 	zval *value_ptr;
51142 
51143 	SAVE_OPLINE();
51144 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
51145 	variable_ptr = EX_VAR(opline->op1.var);
51146 
51147 	if (IS_CV == IS_VAR &&
51148 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
51149 
51150 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
51151 		variable_ptr = &EG(uninitialized_zval);
51152 	} else if (IS_CV == IS_VAR &&
51153 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
51154 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
51155 
51156 		variable_ptr = zend_wrong_assign_to_variable_reference(
51157 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51158 	} else {
51159 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
51160 	}
51161 
51162 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51163 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
51164 	}
51165 
51166 
51167 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51168 }
51169 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51170 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51171 {
51172 	USE_OPLINE
51173 	zval *property, *container, *value_ptr;
51174 
51175 	SAVE_OPLINE();
51176 
51177 	container = EX_VAR(opline->op1.var);
51178 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51179 
51180 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
51181 
51182 	if (1) {
51183 		if (IS_CV == IS_UNUSED) {
51184 			if (IS_CV == IS_CONST) {
51185 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51186 			} else {
51187 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51188 			}
51189 		} else {
51190 			if (IS_CV == IS_CONST) {
51191 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51192 			} else {
51193 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51194 			}
51195 		}
51196 	} else {
51197 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51198 	}
51199 
51200 
51201 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
51202 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51203 }
51204 
51205 /* 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)51206 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51207 {
51208 	USE_OPLINE
51209 	zval *property, *container, *value_ptr;
51210 
51211 	SAVE_OPLINE();
51212 
51213 	container = EX_VAR(opline->op1.var);
51214 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51215 
51216 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
51217 
51218 	if (1) {
51219 		if (IS_CV == IS_UNUSED) {
51220 			if (IS_CV == IS_CONST) {
51221 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51222 			} else {
51223 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51224 			}
51225 		} else {
51226 			if (IS_CV == IS_CONST) {
51227 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51228 			} else {
51229 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51230 			}
51231 		}
51232 	} else {
51233 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
51234 	}
51235 
51236 
51237 
51238 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51239 }
51240 
51241 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51242 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51243 {
51244 	USE_OPLINE
51245 	zval *op1, *op2;
51246 	zend_string *op1_str, *op2_str, *str;
51247 
51248 
51249 	op1 = EX_VAR(opline->op1.var);
51250 	op2 = EX_VAR(opline->op2.var);
51251 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
51252 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
51253 		zend_string *op1_str = Z_STR_P(op1);
51254 		zend_string *op2_str = Z_STR_P(op2);
51255 		zend_string *str;
51256 
51257 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
51258 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
51259 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
51260 			} else {
51261 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
51262 			}
51263 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
51264 				zend_string_release_ex(op1_str, 0);
51265 			}
51266 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
51267 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
51268 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
51269 			} else {
51270 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
51271 			}
51272 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
51273 				zend_string_release_ex(op2_str, 0);
51274 			}
51275 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
51276 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
51277 		    size_t len = ZSTR_LEN(op1_str);
51278 
51279 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
51280 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
51281 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
51282 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
51283 				zend_string_release_ex(op2_str, 0);
51284 			}
51285 		} else {
51286 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
51287 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
51288 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
51289 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
51290 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
51291 				zend_string_release_ex(op1_str, 0);
51292 			}
51293 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
51294 				zend_string_release_ex(op2_str, 0);
51295 			}
51296 		}
51297 		ZEND_VM_NEXT_OPCODE();
51298 	}
51299 
51300 	SAVE_OPLINE();
51301 	if (IS_CV == IS_CONST) {
51302 		op1_str = Z_STR_P(op1);
51303 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
51304 		op1_str = zend_string_copy(Z_STR_P(op1));
51305 	} else {
51306 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
51307 			ZVAL_UNDEFINED_OP1();
51308 		}
51309 		op1_str = zval_get_string_func(op1);
51310 	}
51311 	if (IS_CV == IS_CONST) {
51312 		op2_str = Z_STR_P(op2);
51313 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
51314 		op2_str = zend_string_copy(Z_STR_P(op2));
51315 	} else {
51316 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
51317 			ZVAL_UNDEFINED_OP2();
51318 		}
51319 		op2_str = zval_get_string_func(op2);
51320 	}
51321 	do {
51322 		if (IS_CV != IS_CONST) {
51323 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
51324 				if (IS_CV == IS_CONST) {
51325 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
51326 						GC_ADDREF(op2_str);
51327 					}
51328 				}
51329 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
51330 				zend_string_release_ex(op1_str, 0);
51331 				break;
51332 			}
51333 		}
51334 		if (IS_CV != IS_CONST) {
51335 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
51336 				if (IS_CV == IS_CONST) {
51337 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
51338 						GC_ADDREF(op1_str);
51339 					}
51340 				}
51341 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
51342 				zend_string_release_ex(op2_str, 0);
51343 				break;
51344 			}
51345 		}
51346 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
51347 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
51348 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
51349 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
51350 		if (IS_CV != IS_CONST) {
51351 			zend_string_release_ex(op1_str, 0);
51352 		}
51353 		if (IS_CV != IS_CONST) {
51354 			zend_string_release_ex(op2_str, 0);
51355 		}
51356 	} while (0);
51357 
51358 
51359 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51360 }
51361 
ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51362 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51363 {
51364 	USE_OPLINE
51365 	zval *function_name;
51366 	zval *object;
51367 	zend_function *fbc;
51368 	zend_class_entry *called_scope;
51369 	zend_object *obj;
51370 	zend_execute_data *call;
51371 	uint32_t call_info;
51372 
51373 	SAVE_OPLINE();
51374 
51375 	object = EX_VAR(opline->op1.var);
51376 
51377 	if (IS_CV != IS_CONST) {
51378 		function_name = EX_VAR(opline->op2.var);
51379 	}
51380 
51381 	if (IS_CV != IS_CONST &&
51382 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
51383 		do {
51384 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
51385 				function_name = Z_REFVAL_P(function_name);
51386 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
51387 					break;
51388 				}
51389 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
51390 				ZVAL_UNDEFINED_OP2();
51391 				if (UNEXPECTED(EG(exception) != NULL)) {
51392 
51393 					HANDLE_EXCEPTION();
51394 				}
51395 			}
51396 			zend_throw_error(NULL, "Method name must be a string");
51397 
51398 
51399 			HANDLE_EXCEPTION();
51400 		} while (0);
51401 	}
51402 
51403 	if (IS_CV == IS_UNUSED) {
51404 		obj = Z_OBJ_P(object);
51405 	} else {
51406 		do {
51407 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
51408 				obj = Z_OBJ_P(object);
51409 			} else {
51410 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
51411 					zend_reference *ref = Z_REF_P(object);
51412 
51413 					object = &ref->val;
51414 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
51415 						obj = Z_OBJ_P(object);
51416 						if (IS_CV & IS_VAR) {
51417 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
51418 								efree_size(ref, sizeof(zend_reference));
51419 							} else {
51420 								Z_ADDREF_P(object);
51421 							}
51422 						}
51423 						break;
51424 					}
51425 				}
51426 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
51427 					object = ZVAL_UNDEFINED_OP1();
51428 					if (UNEXPECTED(EG(exception) != NULL)) {
51429 						if (IS_CV != IS_CONST) {
51430 
51431 						}
51432 						HANDLE_EXCEPTION();
51433 					}
51434 				}
51435 				if (IS_CV == IS_CONST) {
51436 					function_name = EX_VAR(opline->op2.var);
51437 				}
51438 				zend_invalid_method_call(object, function_name);
51439 
51440 
51441 				HANDLE_EXCEPTION();
51442 			}
51443 		} while (0);
51444 	}
51445 
51446 	called_scope = obj->ce;
51447 
51448 	if (IS_CV == IS_CONST &&
51449 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
51450 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
51451 	} else {
51452 	    zend_object *orig_obj = obj;
51453 
51454 		if (IS_CV == IS_CONST) {
51455 			function_name = EX_VAR(opline->op2.var);
51456 		}
51457 
51458 		/* First, locate the function. */
51459 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
51460 		if (UNEXPECTED(fbc == NULL)) {
51461 			if (EXPECTED(!EG(exception))) {
51462 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
51463 			}
51464 
51465 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
51466 				zend_objects_store_del(orig_obj);
51467 			}
51468 			HANDLE_EXCEPTION();
51469 		}
51470 		if (IS_CV == IS_CONST &&
51471 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
51472 		    EXPECTED(obj == orig_obj)) {
51473 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
51474 		}
51475 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
51476 			GC_ADDREF(obj); /* For $this pointer */
51477 			if (GC_DELREF(orig_obj) == 0) {
51478 				zend_objects_store_del(orig_obj);
51479 			}
51480 		}
51481 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
51482 			init_func_run_time_cache(&fbc->op_array);
51483 		}
51484 	}
51485 
51486 	if (IS_CV != IS_CONST) {
51487 
51488 	}
51489 
51490 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
51491 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
51492 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
51493 			zend_objects_store_del(obj);
51494 			if (UNEXPECTED(EG(exception))) {
51495 				HANDLE_EXCEPTION();
51496 			}
51497 		}
51498 		/* call static method */
51499 		obj = (zend_object*)called_scope;
51500 		call_info = ZEND_CALL_NESTED_FUNCTION;
51501 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
51502 		if (IS_CV == IS_CV) {
51503 			GC_ADDREF(obj); /* For $this pointer */
51504 		}
51505 		/* CV may be changed indirectly (e.g. when it's a reference) */
51506 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
51507 	}
51508 
51509 	call = zend_vm_stack_push_call_frame(call_info,
51510 		fbc, opline->extended_value, obj);
51511 	call->prev_execute_data = EX(call);
51512 	EX(call) = call;
51513 
51514 	ZEND_VM_NEXT_OPCODE();
51515 }
51516 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51517 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51518 {
51519 	USE_OPLINE
51520 	zval *expr_ptr, new_expr;
51521 
51522 	SAVE_OPLINE();
51523 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
51524 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
51525 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
51526 		if (Z_ISREF_P(expr_ptr)) {
51527 			Z_ADDREF_P(expr_ptr);
51528 		} else {
51529 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
51530 		}
51531 
51532 	} else {
51533 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
51534 		if (IS_CV == IS_TMP_VAR) {
51535 			/* pass */
51536 		} else if (IS_CV == IS_CONST) {
51537 			Z_TRY_ADDREF_P(expr_ptr);
51538 		} else if (IS_CV == IS_CV) {
51539 			ZVAL_DEREF(expr_ptr);
51540 			Z_TRY_ADDREF_P(expr_ptr);
51541 		} else /* if (IS_CV == IS_VAR) */ {
51542 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
51543 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
51544 
51545 				expr_ptr = Z_REFVAL_P(expr_ptr);
51546 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
51547 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
51548 					expr_ptr = &new_expr;
51549 					efree_size(ref, sizeof(zend_reference));
51550 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
51551 					Z_ADDREF_P(expr_ptr);
51552 				}
51553 			}
51554 		}
51555 	}
51556 
51557 	if (IS_CV != IS_UNUSED) {
51558 		zval *offset = EX_VAR(opline->op2.var);
51559 		zend_string *str;
51560 		zend_ulong hval;
51561 
51562 add_again:
51563 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
51564 			str = Z_STR_P(offset);
51565 			if (IS_CV != IS_CONST) {
51566 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
51567 					goto num_index;
51568 				}
51569 			}
51570 str_index:
51571 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
51572 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
51573 			hval = Z_LVAL_P(offset);
51574 num_index:
51575 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
51576 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
51577 			offset = Z_REFVAL_P(offset);
51578 			goto add_again;
51579 		} else if (Z_TYPE_P(offset) == IS_NULL) {
51580 			str = ZSTR_EMPTY_ALLOC();
51581 			goto str_index;
51582 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
51583 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
51584 			goto num_index;
51585 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
51586 			hval = 0;
51587 			goto num_index;
51588 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
51589 			hval = 1;
51590 			goto num_index;
51591 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
51592 			zend_use_resource_as_offset(offset);
51593 			hval = Z_RES_HANDLE_P(offset);
51594 			goto num_index;
51595 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
51596 			ZVAL_UNDEFINED_OP2();
51597 			str = ZSTR_EMPTY_ALLOC();
51598 			goto str_index;
51599 		} else {
51600 			zend_illegal_offset();
51601 			zval_ptr_dtor_nogc(expr_ptr);
51602 		}
51603 
51604 	} else {
51605 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
51606 			zend_cannot_add_element();
51607 			zval_ptr_dtor_nogc(expr_ptr);
51608 		}
51609 	}
51610 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51611 }
51612 
ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51613 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51614 {
51615 	zval *array;
51616 	uint32_t size;
51617 	USE_OPLINE
51618 
51619 	array = EX_VAR(opline->result.var);
51620 	if (IS_CV != IS_UNUSED) {
51621 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
51622 		ZVAL_ARR(array, zend_new_array(size));
51623 		/* Explicitly initialize array as not-packed if flag is set */
51624 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
51625 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
51626 		}
51627 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51628 	} else {
51629 		ZVAL_ARR(array, zend_new_array(0));
51630 		ZEND_VM_NEXT_OPCODE();
51631 	}
51632 }
51633 
ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51634 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51635 {
51636 	USE_OPLINE
51637 	zval *container;
51638 	zval *offset;
51639 	zend_ulong hval;
51640 	zend_string *key;
51641 
51642 	SAVE_OPLINE();
51643 	container = EX_VAR(opline->op1.var);
51644 	offset = EX_VAR(opline->op2.var);
51645 
51646 	do {
51647 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51648 			HashTable *ht;
51649 
51650 unset_dim_array:
51651 			SEPARATE_ARRAY(container);
51652 			ht = Z_ARRVAL_P(container);
51653 offset_again:
51654 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
51655 				key = Z_STR_P(offset);
51656 				if (IS_CV != IS_CONST) {
51657 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
51658 						goto num_index_dim;
51659 					}
51660 				}
51661 str_index_dim:
51662 				ZEND_ASSERT(ht != &EG(symbol_table));
51663 				zend_hash_del(ht, key);
51664 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
51665 				hval = Z_LVAL_P(offset);
51666 num_index_dim:
51667 				zend_hash_index_del(ht, hval);
51668 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
51669 				offset = Z_REFVAL_P(offset);
51670 				goto offset_again;
51671 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
51672 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
51673 				goto num_index_dim;
51674 			} else if (Z_TYPE_P(offset) == IS_NULL) {
51675 				key = ZSTR_EMPTY_ALLOC();
51676 				goto str_index_dim;
51677 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
51678 				hval = 0;
51679 				goto num_index_dim;
51680 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
51681 				hval = 1;
51682 				goto num_index_dim;
51683 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
51684 				zend_use_resource_as_offset(offset);
51685 				hval = Z_RES_HANDLE_P(offset);
51686 				goto num_index_dim;
51687 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
51688 				ZVAL_UNDEFINED_OP2();
51689 				key = ZSTR_EMPTY_ALLOC();
51690 				goto str_index_dim;
51691 			} else {
51692 				zend_type_error("Illegal offset type in unset");
51693 			}
51694 			break;
51695 		} else if (Z_ISREF_P(container)) {
51696 			container = Z_REFVAL_P(container);
51697 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51698 				goto unset_dim_array;
51699 			}
51700 		}
51701 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
51702 			container = ZVAL_UNDEFINED_OP1();
51703 		}
51704 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
51705 			offset = ZVAL_UNDEFINED_OP2();
51706 		}
51707 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
51708 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
51709 				offset++;
51710 			}
51711 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
51712 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
51713 			zend_throw_error(NULL, "Cannot unset string offsets");
51714 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
51715 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
51716 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
51717 			zend_false_to_array_deprecated();
51718 		}
51719 	} while (0);
51720 
51721 
51722 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51723 }
51724 
ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51725 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51726 {
51727 	USE_OPLINE
51728 	zval *container;
51729 	zval *offset;
51730 	zend_string *name, *tmp_name;
51731 
51732 	SAVE_OPLINE();
51733 	container = EX_VAR(opline->op1.var);
51734 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51735 
51736 	do {
51737 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
51738 			if (Z_ISREF_P(container)) {
51739 				container = Z_REFVAL_P(container);
51740 				if (Z_TYPE_P(container) != IS_OBJECT) {
51741 					if (IS_CV == IS_CV
51742 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
51743 						ZVAL_UNDEFINED_OP1();
51744 					}
51745 					break;
51746 				}
51747 			} else {
51748 				break;
51749 			}
51750 		}
51751 		if (IS_CV == IS_CONST) {
51752 			name = Z_STR_P(offset);
51753 		} else {
51754 			name = zval_try_get_tmp_string(offset, &tmp_name);
51755 			if (UNEXPECTED(!name)) {
51756 				break;
51757 			}
51758 		}
51759 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
51760 		if (IS_CV != IS_CONST) {
51761 			zend_tmp_string_release(tmp_name);
51762 		}
51763 	} while (0);
51764 
51765 
51766 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51767 }
51768 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51770 {
51771 	USE_OPLINE
51772 	zval *container;
51773 	bool result;
51774 	zend_ulong hval;
51775 	zval *offset;
51776 
51777 	SAVE_OPLINE();
51778 	container = EX_VAR(opline->op1.var);
51779 	offset = EX_VAR(opline->op2.var);
51780 
51781 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51782 		HashTable *ht;
51783 		zval *value;
51784 		zend_string *str;
51785 
51786 isset_dim_obj_array:
51787 		ht = Z_ARRVAL_P(container);
51788 isset_again:
51789 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
51790 			str = Z_STR_P(offset);
51791 			if (IS_CV != IS_CONST) {
51792 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
51793 					goto num_index_prop;
51794 				}
51795 			}
51796 			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
51797 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
51798 			hval = Z_LVAL_P(offset);
51799 num_index_prop:
51800 			value = zend_hash_index_find(ht, hval);
51801 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
51802 			offset = Z_REFVAL_P(offset);
51803 			goto isset_again;
51804 		} else {
51805 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
51806 			if (UNEXPECTED(EG(exception))) {
51807 				result = 0;
51808 				goto isset_dim_obj_exit;
51809 			}
51810 		}
51811 
51812 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
51813 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
51814 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
51815 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
51816 
51817 			if (IS_CV & (IS_CONST|IS_CV)) {
51818 				/* avoid exception check */
51819 
51820 				ZEND_VM_SMART_BRANCH(result, 0);
51821 			}
51822 		} else {
51823 			result = (value == NULL || !i_zend_is_true(value));
51824 		}
51825 		goto isset_dim_obj_exit;
51826 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
51827 		container = Z_REFVAL_P(container);
51828 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51829 			goto isset_dim_obj_array;
51830 		}
51831 	}
51832 
51833 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
51834 		offset++;
51835 	}
51836 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
51837 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
51838 	} else {
51839 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
51840 	}
51841 
51842 isset_dim_obj_exit:
51843 
51844 
51845 	ZEND_VM_SMART_BRANCH(result, 1);
51846 }
51847 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51848 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51849 {
51850 	USE_OPLINE
51851 	zval *container;
51852 	int result;
51853 	zval *offset;
51854 	zend_string *name, *tmp_name;
51855 
51856 	SAVE_OPLINE();
51857 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
51858 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51859 
51860 	if (IS_CV == IS_CONST ||
51861 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
51862 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
51863 			container = Z_REFVAL_P(container);
51864 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
51865 				result = (opline->extended_value & ZEND_ISEMPTY);
51866 				goto isset_object_finish;
51867 			}
51868 		} else {
51869 			result = (opline->extended_value & ZEND_ISEMPTY);
51870 			goto isset_object_finish;
51871 		}
51872 	}
51873 
51874 	if (IS_CV == IS_CONST) {
51875 		name = Z_STR_P(offset);
51876 	} else {
51877 		name = zval_try_get_tmp_string(offset, &tmp_name);
51878 		if (UNEXPECTED(!name)) {
51879 			result = 0;
51880 			goto isset_object_finish;
51881 		}
51882 	}
51883 
51884 	result =
51885 		(opline->extended_value & ZEND_ISEMPTY) ^
51886 		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));
51887 
51888 	if (IS_CV != IS_CONST) {
51889 		zend_tmp_string_release(tmp_name);
51890 	}
51891 
51892 isset_object_finish:
51893 
51894 
51895 	ZEND_VM_SMART_BRANCH(result, 1);
51896 }
51897 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51898 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51899 {
51900 	USE_OPLINE
51901 
51902 	zval *key, *subject;
51903 	HashTable *ht;
51904 	bool result;
51905 
51906 	SAVE_OPLINE();
51907 
51908 	key = EX_VAR(opline->op1.var);
51909 	subject = EX_VAR(opline->op2.var);
51910 
51911 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
51912 array_key_exists_array:
51913 		ht = Z_ARRVAL_P(subject);
51914 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
51915 	} else {
51916 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
51917 			subject = Z_REFVAL_P(subject);
51918 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
51919 				goto array_key_exists_array;
51920 			}
51921 		}
51922 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
51923 		result = 0;
51924 	}
51925 
51926 
51927 	ZEND_VM_SMART_BRANCH(result, 1);
51928 }
51929 
51930 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51931 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51932 {
51933 	USE_OPLINE
51934 
51935 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
51936 
51937 	SAVE_OPLINE();
51938 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
51939 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51940 	}
51941 
51942 	/* Destroy the previously yielded value */
51943 	zval_ptr_dtor(&generator->value);
51944 
51945 	/* Destroy the previously yielded key */
51946 	zval_ptr_dtor(&generator->key);
51947 
51948 	/* Set the new yielded value */
51949 	if (IS_CV != IS_UNUSED) {
51950 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
51951 			/* Constants and temporary variables aren't yieldable by reference,
51952 			 * but we still allow them with a notice. */
51953 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
51954 				zval *value;
51955 
51956 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
51957 
51958 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
51959 				ZVAL_COPY_VALUE(&generator->value, value);
51960 				if (IS_CV == IS_CONST) {
51961 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
51962 						Z_ADDREF(generator->value);
51963 					}
51964 				}
51965 			} else {
51966 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
51967 
51968 				/* If a function call result is yielded and the function did
51969 				 * not return by reference we throw a notice. */
51970 				do {
51971 					if (IS_CV == IS_VAR) {
51972 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
51973 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
51974 						 && !Z_ISREF_P(value_ptr)) {
51975 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
51976 							ZVAL_COPY(&generator->value, value_ptr);
51977 							break;
51978 						}
51979 					}
51980 					if (Z_ISREF_P(value_ptr)) {
51981 						Z_ADDREF_P(value_ptr);
51982 					} else {
51983 						ZVAL_MAKE_REF_EX(value_ptr, 2);
51984 					}
51985 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
51986 				} while (0);
51987 
51988 			}
51989 		} else {
51990 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
51991 
51992 			/* Consts, temporary variables and references need copying */
51993 			if (IS_CV == IS_CONST) {
51994 				ZVAL_COPY_VALUE(&generator->value, value);
51995 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
51996 					Z_ADDREF(generator->value);
51997 				}
51998 			} else if (IS_CV == IS_TMP_VAR) {
51999 				ZVAL_COPY_VALUE(&generator->value, value);
52000             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
52001 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
52002 
52003 			} else {
52004 				ZVAL_COPY_VALUE(&generator->value, value);
52005 				if (IS_CV == IS_CV) {
52006 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
52007 				}
52008 			}
52009 		}
52010 	} else {
52011 		/* If no value was specified yield null */
52012 		ZVAL_NULL(&generator->value);
52013 	}
52014 
52015 	/* Set the new yielded key */
52016 	if (IS_CV != IS_UNUSED) {
52017 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52018 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
52019 			key = Z_REFVAL_P(key);
52020 		}
52021 		ZVAL_COPY(&generator->key, key);
52022 
52023 		if (Z_TYPE(generator->key) == IS_LONG
52024 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
52025 		) {
52026 			generator->largest_used_integer_key = Z_LVAL(generator->key);
52027 		}
52028 	} else {
52029 		/* If no key was specified we use auto-increment keys */
52030 		generator->largest_used_integer_key++;
52031 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
52032 	}
52033 
52034 	if (RETURN_VALUE_USED(opline)) {
52035 		/* If the return value of yield is used set the send
52036 		 * target and initialize it to NULL */
52037 		generator->send_target = EX_VAR(opline->result.var);
52038 		ZVAL_NULL(generator->send_target);
52039 	} else {
52040 		generator->send_target = NULL;
52041 	}
52042 
52043 	/* We increment to the next op, so we are at the correct position when the
52044 	 * generator is resumed. */
52045 	ZEND_VM_INC_OPCODE();
52046 
52047 	/* The GOTO VM uses a local opline variable. We need to set the opline
52048 	 * variable in execute_data so we don't resume at an old position. */
52049 	SAVE_OPLINE();
52050 
52051 	ZEND_VM_RETURN();
52052 }
52053 
ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52054 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52055 {
52056 	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
52057 	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
52058 	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
52059 	USE_OPLINE
52060 	zval *op1, *op2;
52061 	bool result;
52062 
52063 	op1 = EX_VAR(opline->op1.var);
52064 	op2 = EX_VAR(opline->op2.var);
52065 	result = fast_is_identical_function(op1, op2);
52066 	/* Free is a no-op for const/cv */
52067 	ZEND_VM_SMART_BRANCH(result, 0);
52068 }
52069 
ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52070 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52071 {
52072 	USE_OPLINE
52073 	zval *op1, *op2;
52074 	bool result;
52075 
52076 	op1 = EX_VAR(opline->op1.var);
52077 	op2 = EX_VAR(opline->op2.var);
52078 	result = fast_is_identical_function(op1, op2);
52079 	/* Free is a no-op for const/cv */
52080 	ZEND_VM_SMART_BRANCH(!result, 0);
52081 }
52082 
ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52084 {
52085 	USE_OPLINE
52086 
52087 	SAVE_OPLINE();
52088 	zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
52089 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
52090 }
52091 
52092 
52093 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
52094 # undef ZEND_VM_TAIL_CALL
52095 # undef ZEND_VM_CONTINUE
52096 # undef ZEND_VM_RETURN
52097 
52098 # define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE()
52099 # define ZEND_VM_CONTINUE()      HYBRID_NEXT()
52100 # define ZEND_VM_RETURN()        goto HYBRID_HALT_LABEL
52101 #endif
52102 
52103 
52104 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
52105 # pragma GCC push_options
52106 # pragma GCC optimize("no-gcse")
52107 # pragma GCC optimize("no-ivopts")
52108 #endif
execute_ex(zend_execute_data * ex)52109 ZEND_API void execute_ex(zend_execute_data *ex)
52110 {
52111 	DCL_OPLINE
52112 
52113 #if defined(ZEND_VM_IP_GLOBAL_REG) || defined(ZEND_VM_FP_GLOBAL_REG)
52114 	struct {
52115 #ifdef ZEND_VM_IP_GLOBAL_REG
52116 		const zend_op *orig_opline;
52117 #endif
52118 #ifdef ZEND_VM_FP_GLOBAL_REG
52119 		zend_execute_data *orig_execute_data;
52120 #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
52121 		char hybrid_jit_red_zone[ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE];
52122 #endif
52123 #endif
52124 	} vm_stack_data;
52125 #endif
52126 #ifdef ZEND_VM_IP_GLOBAL_REG
52127 	vm_stack_data.orig_opline = opline;
52128 #endif
52129 #ifdef ZEND_VM_FP_GLOBAL_REG
52130 	vm_stack_data.orig_execute_data = execute_data;
52131 	execute_data = ex;
52132 #else
52133 	zend_execute_data *execute_data = ex;
52134 #endif
52135 
52136 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
52137 	if (UNEXPECTED(execute_data == NULL)) {
52138 		static const void * const labels[] = {
52139 			(void*)&&ZEND_NOP_SPEC_LABEL,
52140 			(void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
52141 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
52142 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
52143 			(void*)&&ZEND_NULL_LABEL,
52144 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
52145 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
52146 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52147 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52148 			(void*)&&ZEND_NULL_LABEL,
52149 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52150 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
52151 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52152 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52153 			(void*)&&ZEND_NULL_LABEL,
52154 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52155 			(void*)&&ZEND_NULL_LABEL,
52156 			(void*)&&ZEND_NULL_LABEL,
52157 			(void*)&&ZEND_NULL_LABEL,
52158 			(void*)&&ZEND_NULL_LABEL,
52159 			(void*)&&ZEND_NULL_LABEL,
52160 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
52161 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52162 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52163 			(void*)&&ZEND_NULL_LABEL,
52164 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52165 			(void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
52166 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
52167 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
52168 			(void*)&&ZEND_NULL_LABEL,
52169 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
52170 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
52171 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
52172 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
52173 			(void*)&&ZEND_NULL_LABEL,
52174 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
52175 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
52176 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
52177 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
52178 			(void*)&&ZEND_NULL_LABEL,
52179 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
52180 			(void*)&&ZEND_NULL_LABEL,
52181 			(void*)&&ZEND_NULL_LABEL,
52182 			(void*)&&ZEND_NULL_LABEL,
52183 			(void*)&&ZEND_NULL_LABEL,
52184 			(void*)&&ZEND_NULL_LABEL,
52185 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
52186 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
52187 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
52188 			(void*)&&ZEND_NULL_LABEL,
52189 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
52190 			(void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
52191 			(void*)&&ZEND_NULL_LABEL,
52192 			(void*)&&ZEND_NULL_LABEL,
52193 			(void*)&&ZEND_NULL_LABEL,
52194 			(void*)&&ZEND_NULL_LABEL,
52195 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
52196 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52197 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52198 			(void*)&&ZEND_NULL_LABEL,
52199 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52200 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
52201 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52202 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52203 			(void*)&&ZEND_NULL_LABEL,
52204 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52205 			(void*)&&ZEND_NULL_LABEL,
52206 			(void*)&&ZEND_NULL_LABEL,
52207 			(void*)&&ZEND_NULL_LABEL,
52208 			(void*)&&ZEND_NULL_LABEL,
52209 			(void*)&&ZEND_NULL_LABEL,
52210 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
52211 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52212 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52213 			(void*)&&ZEND_NULL_LABEL,
52214 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52215 			(void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
52216 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
52217 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
52218 			(void*)&&ZEND_NULL_LABEL,
52219 			(void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
52220 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
52221 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
52222 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
52223 			(void*)&&ZEND_NULL_LABEL,
52224 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
52225 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
52226 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
52227 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
52228 			(void*)&&ZEND_NULL_LABEL,
52229 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
52230 			(void*)&&ZEND_NULL_LABEL,
52231 			(void*)&&ZEND_NULL_LABEL,
52232 			(void*)&&ZEND_NULL_LABEL,
52233 			(void*)&&ZEND_NULL_LABEL,
52234 			(void*)&&ZEND_NULL_LABEL,
52235 			(void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
52236 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
52237 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
52238 			(void*)&&ZEND_NULL_LABEL,
52239 			(void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
52240 			(void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
52241 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
52242 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
52243 			(void*)&&ZEND_NULL_LABEL,
52244 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
52245 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
52246 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52247 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52248 			(void*)&&ZEND_NULL_LABEL,
52249 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52250 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
52251 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52252 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52253 			(void*)&&ZEND_NULL_LABEL,
52254 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52255 			(void*)&&ZEND_NULL_LABEL,
52256 			(void*)&&ZEND_NULL_LABEL,
52257 			(void*)&&ZEND_NULL_LABEL,
52258 			(void*)&&ZEND_NULL_LABEL,
52259 			(void*)&&ZEND_NULL_LABEL,
52260 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
52261 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52262 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52263 			(void*)&&ZEND_NULL_LABEL,
52264 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
52265 			(void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
52266 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
52267 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
52268 			(void*)&&ZEND_NULL_LABEL,
52269 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
52270 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
52271 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52272 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52273 			(void*)&&ZEND_NULL_LABEL,
52274 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52275 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
52276 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52277 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52278 			(void*)&&ZEND_NULL_LABEL,
52279 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52280 			(void*)&&ZEND_NULL_LABEL,
52281 			(void*)&&ZEND_NULL_LABEL,
52282 			(void*)&&ZEND_NULL_LABEL,
52283 			(void*)&&ZEND_NULL_LABEL,
52284 			(void*)&&ZEND_NULL_LABEL,
52285 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
52286 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52287 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52288 			(void*)&&ZEND_NULL_LABEL,
52289 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52290 			(void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
52291 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
52292 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
52293 			(void*)&&ZEND_NULL_LABEL,
52294 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
52295 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
52296 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52297 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52298 			(void*)&&ZEND_NULL_LABEL,
52299 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52300 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
52301 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52302 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52303 			(void*)&&ZEND_NULL_LABEL,
52304 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52305 			(void*)&&ZEND_NULL_LABEL,
52306 			(void*)&&ZEND_NULL_LABEL,
52307 			(void*)&&ZEND_NULL_LABEL,
52308 			(void*)&&ZEND_NULL_LABEL,
52309 			(void*)&&ZEND_NULL_LABEL,
52310 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
52311 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52312 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52313 			(void*)&&ZEND_NULL_LABEL,
52314 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52315 			(void*)&&ZEND_NULL_LABEL,
52316 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
52317 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
52318 			(void*)&&ZEND_NULL_LABEL,
52319 			(void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
52320 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
52321 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
52322 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
52323 			(void*)&&ZEND_NULL_LABEL,
52324 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
52325 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
52326 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
52327 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
52328 			(void*)&&ZEND_NULL_LABEL,
52329 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
52330 			(void*)&&ZEND_NULL_LABEL,
52331 			(void*)&&ZEND_NULL_LABEL,
52332 			(void*)&&ZEND_NULL_LABEL,
52333 			(void*)&&ZEND_NULL_LABEL,
52334 			(void*)&&ZEND_NULL_LABEL,
52335 			(void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
52336 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
52337 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
52338 			(void*)&&ZEND_NULL_LABEL,
52339 			(void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
52340 			(void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
52341 			(void*)&&ZEND_NULL_LABEL,
52342 			(void*)&&ZEND_NULL_LABEL,
52343 			(void*)&&ZEND_NULL_LABEL,
52344 			(void*)&&ZEND_NULL_LABEL,
52345 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
52346 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52347 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52348 			(void*)&&ZEND_NULL_LABEL,
52349 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52350 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
52351 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52352 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52353 			(void*)&&ZEND_NULL_LABEL,
52354 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52355 			(void*)&&ZEND_NULL_LABEL,
52356 			(void*)&&ZEND_NULL_LABEL,
52357 			(void*)&&ZEND_NULL_LABEL,
52358 			(void*)&&ZEND_NULL_LABEL,
52359 			(void*)&&ZEND_NULL_LABEL,
52360 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
52361 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52362 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52363 			(void*)&&ZEND_NULL_LABEL,
52364 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52365 			(void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
52366 			(void*)&&ZEND_NULL_LABEL,
52367 			(void*)&&ZEND_NULL_LABEL,
52368 			(void*)&&ZEND_NULL_LABEL,
52369 			(void*)&&ZEND_NULL_LABEL,
52370 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
52371 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
52372 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
52373 			(void*)&&ZEND_NULL_LABEL,
52374 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
52375 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
52376 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
52377 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
52378 			(void*)&&ZEND_NULL_LABEL,
52379 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
52380 			(void*)&&ZEND_NULL_LABEL,
52381 			(void*)&&ZEND_NULL_LABEL,
52382 			(void*)&&ZEND_NULL_LABEL,
52383 			(void*)&&ZEND_NULL_LABEL,
52384 			(void*)&&ZEND_NULL_LABEL,
52385 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
52386 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
52387 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
52388 			(void*)&&ZEND_NULL_LABEL,
52389 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
52390 			(void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
52391 			(void*)&&ZEND_NULL_LABEL,
52392 			(void*)&&ZEND_NULL_LABEL,
52393 			(void*)&&ZEND_NULL_LABEL,
52394 			(void*)&&ZEND_NULL_LABEL,
52395 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
52396 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52397 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52398 			(void*)&&ZEND_NULL_LABEL,
52399 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52400 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
52401 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52402 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52403 			(void*)&&ZEND_NULL_LABEL,
52404 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52405 			(void*)&&ZEND_NULL_LABEL,
52406 			(void*)&&ZEND_NULL_LABEL,
52407 			(void*)&&ZEND_NULL_LABEL,
52408 			(void*)&&ZEND_NULL_LABEL,
52409 			(void*)&&ZEND_NULL_LABEL,
52410 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
52411 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52412 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52413 			(void*)&&ZEND_NULL_LABEL,
52414 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
52415 			(void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
52416 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
52417 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
52418 			(void*)&&ZEND_NULL_LABEL,
52419 			(void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
52420 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
52421 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
52422 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
52423 			(void*)&&ZEND_NULL_LABEL,
52424 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
52425 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
52426 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
52427 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
52428 			(void*)&&ZEND_NULL_LABEL,
52429 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
52430 			(void*)&&ZEND_NULL_LABEL,
52431 			(void*)&&ZEND_NULL_LABEL,
52432 			(void*)&&ZEND_NULL_LABEL,
52433 			(void*)&&ZEND_NULL_LABEL,
52434 			(void*)&&ZEND_NULL_LABEL,
52435 			(void*)&&ZEND_POW_SPEC_CV_CONST_LABEL,
52436 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
52437 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
52438 			(void*)&&ZEND_NULL_LABEL,
52439 			(void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
52440 			(void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
52441 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
52442 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
52443 			(void*)&&ZEND_NULL_LABEL,
52444 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
52445 			(void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
52446 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
52447 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
52448 			(void*)&&ZEND_NULL_LABEL,
52449 			(void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
52450 			(void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
52451 			(void*)&&ZEND_NULL_LABEL,
52452 			(void*)&&ZEND_NULL_LABEL,
52453 			(void*)&&ZEND_NULL_LABEL,
52454 			(void*)&&ZEND_NULL_LABEL,
52455 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
52456 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
52457 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
52458 			(void*)&&ZEND_NULL_LABEL,
52459 			(void*)&&ZEND_NULL_LABEL,
52460 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
52461 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
52462 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
52463 			(void*)&&ZEND_NULL_LABEL,
52464 			(void*)&&ZEND_NULL_LABEL,
52465 			(void*)&&ZEND_NULL_LABEL,
52466 			(void*)&&ZEND_NULL_LABEL,
52467 			(void*)&&ZEND_NULL_LABEL,
52468 			(void*)&&ZEND_NULL_LABEL,
52469 			(void*)&&ZEND_NULL_LABEL,
52470 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
52471 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
52472 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
52473 			(void*)&&ZEND_NULL_LABEL,
52474 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
52475 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
52476 			(void*)&&ZEND_NULL_LABEL,
52477 			(void*)&&ZEND_NULL_LABEL,
52478 			(void*)&&ZEND_NULL_LABEL,
52479 			(void*)&&ZEND_NULL_LABEL,
52480 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
52481 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
52482 			(void*)&&ZEND_NULL_LABEL,
52483 			(void*)&&ZEND_NULL_LABEL,
52484 			(void*)&&ZEND_NULL_LABEL,
52485 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
52486 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
52487 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
52488 			(void*)&&ZEND_NULL_LABEL,
52489 			(void*)&&ZEND_NULL_LABEL,
52490 			(void*)&&ZEND_NULL_LABEL,
52491 			(void*)&&ZEND_NULL_LABEL,
52492 			(void*)&&ZEND_NULL_LABEL,
52493 			(void*)&&ZEND_NULL_LABEL,
52494 			(void*)&&ZEND_NULL_LABEL,
52495 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
52496 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
52497 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
52498 			(void*)&&ZEND_NULL_LABEL,
52499 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
52500 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
52501 			(void*)&&ZEND_NULL_LABEL,
52502 			(void*)&&ZEND_NULL_LABEL,
52503 			(void*)&&ZEND_NULL_LABEL,
52504 			(void*)&&ZEND_NULL_LABEL,
52505 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
52506 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
52507 			(void*)&&ZEND_NULL_LABEL,
52508 			(void*)&&ZEND_NULL_LABEL,
52509 			(void*)&&ZEND_NULL_LABEL,
52510 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
52511 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
52512 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
52513 			(void*)&&ZEND_NULL_LABEL,
52514 			(void*)&&ZEND_NULL_LABEL,
52515 			(void*)&&ZEND_NULL_LABEL,
52516 			(void*)&&ZEND_NULL_LABEL,
52517 			(void*)&&ZEND_NULL_LABEL,
52518 			(void*)&&ZEND_NULL_LABEL,
52519 			(void*)&&ZEND_NULL_LABEL,
52520 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
52521 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
52522 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
52523 			(void*)&&ZEND_NULL_LABEL,
52524 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
52525 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
52526 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
52527 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
52528 			(void*)&&ZEND_NULL_LABEL,
52529 			(void*)&&ZEND_NULL_LABEL,
52530 			(void*)&&ZEND_NULL_LABEL,
52531 			(void*)&&ZEND_NULL_LABEL,
52532 			(void*)&&ZEND_NULL_LABEL,
52533 			(void*)&&ZEND_NULL_LABEL,
52534 			(void*)&&ZEND_NULL_LABEL,
52535 			(void*)&&ZEND_NULL_LABEL,
52536 			(void*)&&ZEND_NULL_LABEL,
52537 			(void*)&&ZEND_NULL_LABEL,
52538 			(void*)&&ZEND_NULL_LABEL,
52539 			(void*)&&ZEND_NULL_LABEL,
52540 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
52541 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
52542 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
52543 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
52544 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
52545 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
52546 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
52547 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
52548 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
52549 			(void*)&&ZEND_NULL_LABEL,
52550 			(void*)&&ZEND_NULL_LABEL,
52551 			(void*)&&ZEND_NULL_LABEL,
52552 			(void*)&&ZEND_NULL_LABEL,
52553 			(void*)&&ZEND_NULL_LABEL,
52554 			(void*)&&ZEND_NULL_LABEL,
52555 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
52556 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
52557 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
52558 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
52559 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
52560 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
52561 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
52562 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
52563 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
52564 			(void*)&&ZEND_NULL_LABEL,
52565 			(void*)&&ZEND_NULL_LABEL,
52566 			(void*)&&ZEND_NULL_LABEL,
52567 			(void*)&&ZEND_NULL_LABEL,
52568 			(void*)&&ZEND_NULL_LABEL,
52569 			(void*)&&ZEND_NULL_LABEL,
52570 			(void*)&&ZEND_NULL_LABEL,
52571 			(void*)&&ZEND_NULL_LABEL,
52572 			(void*)&&ZEND_NULL_LABEL,
52573 			(void*)&&ZEND_NULL_LABEL,
52574 			(void*)&&ZEND_NULL_LABEL,
52575 			(void*)&&ZEND_NULL_LABEL,
52576 			(void*)&&ZEND_NULL_LABEL,
52577 			(void*)&&ZEND_NULL_LABEL,
52578 			(void*)&&ZEND_NULL_LABEL,
52579 			(void*)&&ZEND_NULL_LABEL,
52580 			(void*)&&ZEND_NULL_LABEL,
52581 			(void*)&&ZEND_NULL_LABEL,
52582 			(void*)&&ZEND_NULL_LABEL,
52583 			(void*)&&ZEND_NULL_LABEL,
52584 			(void*)&&ZEND_NULL_LABEL,
52585 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
52586 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
52587 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
52588 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
52589 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
52590 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
52591 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
52592 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
52593 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
52594 			(void*)&&ZEND_NULL_LABEL,
52595 			(void*)&&ZEND_NULL_LABEL,
52596 			(void*)&&ZEND_NULL_LABEL,
52597 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
52598 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
52599 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
52600 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
52601 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
52602 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
52603 			(void*)&&ZEND_NULL_LABEL,
52604 			(void*)&&ZEND_NULL_LABEL,
52605 			(void*)&&ZEND_NULL_LABEL,
52606 			(void*)&&ZEND_NULL_LABEL,
52607 			(void*)&&ZEND_NULL_LABEL,
52608 			(void*)&&ZEND_NULL_LABEL,
52609 			(void*)&&ZEND_NULL_LABEL,
52610 			(void*)&&ZEND_NULL_LABEL,
52611 			(void*)&&ZEND_NULL_LABEL,
52612 			(void*)&&ZEND_NULL_LABEL,
52613 			(void*)&&ZEND_NULL_LABEL,
52614 			(void*)&&ZEND_NULL_LABEL,
52615 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
52616 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
52617 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
52618 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
52619 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
52620 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
52621 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
52622 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
52623 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
52624 			(void*)&&ZEND_NULL_LABEL,
52625 			(void*)&&ZEND_NULL_LABEL,
52626 			(void*)&&ZEND_NULL_LABEL,
52627 			(void*)&&ZEND_NULL_LABEL,
52628 			(void*)&&ZEND_NULL_LABEL,
52629 			(void*)&&ZEND_NULL_LABEL,
52630 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
52631 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
52632 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
52633 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
52634 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
52635 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
52636 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
52637 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
52638 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
52639 			(void*)&&ZEND_NULL_LABEL,
52640 			(void*)&&ZEND_NULL_LABEL,
52641 			(void*)&&ZEND_NULL_LABEL,
52642 			(void*)&&ZEND_NULL_LABEL,
52643 			(void*)&&ZEND_NULL_LABEL,
52644 			(void*)&&ZEND_NULL_LABEL,
52645 			(void*)&&ZEND_NULL_LABEL,
52646 			(void*)&&ZEND_NULL_LABEL,
52647 			(void*)&&ZEND_NULL_LABEL,
52648 			(void*)&&ZEND_NULL_LABEL,
52649 			(void*)&&ZEND_NULL_LABEL,
52650 			(void*)&&ZEND_NULL_LABEL,
52651 			(void*)&&ZEND_NULL_LABEL,
52652 			(void*)&&ZEND_NULL_LABEL,
52653 			(void*)&&ZEND_NULL_LABEL,
52654 			(void*)&&ZEND_NULL_LABEL,
52655 			(void*)&&ZEND_NULL_LABEL,
52656 			(void*)&&ZEND_NULL_LABEL,
52657 			(void*)&&ZEND_NULL_LABEL,
52658 			(void*)&&ZEND_NULL_LABEL,
52659 			(void*)&&ZEND_NULL_LABEL,
52660 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
52661 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
52662 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
52663 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
52664 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
52665 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
52666 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
52667 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
52668 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
52669 			(void*)&&ZEND_NULL_LABEL,
52670 			(void*)&&ZEND_NULL_LABEL,
52671 			(void*)&&ZEND_NULL_LABEL,
52672 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
52673 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
52674 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
52675 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
52676 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
52677 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
52678 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
52679 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52680 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52681 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
52682 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52683 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52684 			(void*)&&ZEND_NULL_LABEL,
52685 			(void*)&&ZEND_NULL_LABEL,
52686 			(void*)&&ZEND_NULL_LABEL,
52687 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
52688 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52689 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52690 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
52691 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52692 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52693 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52694 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52695 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52696 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52697 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52698 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52699 			(void*)&&ZEND_NULL_LABEL,
52700 			(void*)&&ZEND_NULL_LABEL,
52701 			(void*)&&ZEND_NULL_LABEL,
52702 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52703 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52704 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52705 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
52706 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52707 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52708 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52709 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52710 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52711 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52712 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52713 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52714 			(void*)&&ZEND_NULL_LABEL,
52715 			(void*)&&ZEND_NULL_LABEL,
52716 			(void*)&&ZEND_NULL_LABEL,
52717 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52718 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52719 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52720 			(void*)&&ZEND_NULL_LABEL,
52721 			(void*)&&ZEND_NULL_LABEL,
52722 			(void*)&&ZEND_NULL_LABEL,
52723 			(void*)&&ZEND_NULL_LABEL,
52724 			(void*)&&ZEND_NULL_LABEL,
52725 			(void*)&&ZEND_NULL_LABEL,
52726 			(void*)&&ZEND_NULL_LABEL,
52727 			(void*)&&ZEND_NULL_LABEL,
52728 			(void*)&&ZEND_NULL_LABEL,
52729 			(void*)&&ZEND_NULL_LABEL,
52730 			(void*)&&ZEND_NULL_LABEL,
52731 			(void*)&&ZEND_NULL_LABEL,
52732 			(void*)&&ZEND_NULL_LABEL,
52733 			(void*)&&ZEND_NULL_LABEL,
52734 			(void*)&&ZEND_NULL_LABEL,
52735 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
52736 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52737 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52738 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52739 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52740 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52741 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52742 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52743 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52744 			(void*)&&ZEND_NULL_LABEL,
52745 			(void*)&&ZEND_NULL_LABEL,
52746 			(void*)&&ZEND_NULL_LABEL,
52747 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52748 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52749 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52750 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
52751 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
52752 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
52753 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
52754 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52755 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52756 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
52757 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52758 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52759 			(void*)&&ZEND_NULL_LABEL,
52760 			(void*)&&ZEND_NULL_LABEL,
52761 			(void*)&&ZEND_NULL_LABEL,
52762 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
52763 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52764 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52765 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
52766 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52767 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52768 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52769 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52770 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52771 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52772 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52773 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52774 			(void*)&&ZEND_NULL_LABEL,
52775 			(void*)&&ZEND_NULL_LABEL,
52776 			(void*)&&ZEND_NULL_LABEL,
52777 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52778 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52779 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52780 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
52781 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52782 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52783 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52784 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52785 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52786 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52787 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52788 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52789 			(void*)&&ZEND_NULL_LABEL,
52790 			(void*)&&ZEND_NULL_LABEL,
52791 			(void*)&&ZEND_NULL_LABEL,
52792 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52793 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52794 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52795 			(void*)&&ZEND_NULL_LABEL,
52796 			(void*)&&ZEND_NULL_LABEL,
52797 			(void*)&&ZEND_NULL_LABEL,
52798 			(void*)&&ZEND_NULL_LABEL,
52799 			(void*)&&ZEND_NULL_LABEL,
52800 			(void*)&&ZEND_NULL_LABEL,
52801 			(void*)&&ZEND_NULL_LABEL,
52802 			(void*)&&ZEND_NULL_LABEL,
52803 			(void*)&&ZEND_NULL_LABEL,
52804 			(void*)&&ZEND_NULL_LABEL,
52805 			(void*)&&ZEND_NULL_LABEL,
52806 			(void*)&&ZEND_NULL_LABEL,
52807 			(void*)&&ZEND_NULL_LABEL,
52808 			(void*)&&ZEND_NULL_LABEL,
52809 			(void*)&&ZEND_NULL_LABEL,
52810 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
52811 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52812 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52813 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52814 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52815 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52816 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52817 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52818 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52819 			(void*)&&ZEND_NULL_LABEL,
52820 			(void*)&&ZEND_NULL_LABEL,
52821 			(void*)&&ZEND_NULL_LABEL,
52822 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52823 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52824 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52825 			(void*)&&ZEND_NULL_LABEL,
52826 			(void*)&&ZEND_NULL_LABEL,
52827 			(void*)&&ZEND_NULL_LABEL,
52828 			(void*)&&ZEND_NULL_LABEL,
52829 			(void*)&&ZEND_NULL_LABEL,
52830 			(void*)&&ZEND_NULL_LABEL,
52831 			(void*)&&ZEND_NULL_LABEL,
52832 			(void*)&&ZEND_NULL_LABEL,
52833 			(void*)&&ZEND_NULL_LABEL,
52834 			(void*)&&ZEND_NULL_LABEL,
52835 			(void*)&&ZEND_NULL_LABEL,
52836 			(void*)&&ZEND_NULL_LABEL,
52837 			(void*)&&ZEND_NULL_LABEL,
52838 			(void*)&&ZEND_NULL_LABEL,
52839 			(void*)&&ZEND_NULL_LABEL,
52840 			(void*)&&ZEND_NULL_LABEL,
52841 			(void*)&&ZEND_NULL_LABEL,
52842 			(void*)&&ZEND_NULL_LABEL,
52843 			(void*)&&ZEND_NULL_LABEL,
52844 			(void*)&&ZEND_NULL_LABEL,
52845 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
52846 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
52847 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
52848 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
52849 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
52850 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
52851 			(void*)&&ZEND_NULL_LABEL,
52852 			(void*)&&ZEND_NULL_LABEL,
52853 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
52854 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL,
52855 			(void*)&&ZEND_NULL_LABEL,
52856 			(void*)&&ZEND_NULL_LABEL,
52857 			(void*)&&ZEND_NULL_LABEL,
52858 			(void*)&&ZEND_NULL_LABEL,
52859 			(void*)&&ZEND_NULL_LABEL,
52860 			(void*)&&ZEND_NULL_LABEL,
52861 			(void*)&&ZEND_NULL_LABEL,
52862 			(void*)&&ZEND_NULL_LABEL,
52863 			(void*)&&ZEND_NULL_LABEL,
52864 			(void*)&&ZEND_NULL_LABEL,
52865 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
52866 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
52867 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
52868 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
52869 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
52870 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
52871 			(void*)&&ZEND_NULL_LABEL,
52872 			(void*)&&ZEND_NULL_LABEL,
52873 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
52874 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL,
52875 			(void*)&&ZEND_NULL_LABEL,
52876 			(void*)&&ZEND_NULL_LABEL,
52877 			(void*)&&ZEND_NULL_LABEL,
52878 			(void*)&&ZEND_NULL_LABEL,
52879 			(void*)&&ZEND_NULL_LABEL,
52880 			(void*)&&ZEND_NULL_LABEL,
52881 			(void*)&&ZEND_NULL_LABEL,
52882 			(void*)&&ZEND_NULL_LABEL,
52883 			(void*)&&ZEND_NULL_LABEL,
52884 			(void*)&&ZEND_NULL_LABEL,
52885 			(void*)&&ZEND_NULL_LABEL,
52886 			(void*)&&ZEND_NULL_LABEL,
52887 			(void*)&&ZEND_NULL_LABEL,
52888 			(void*)&&ZEND_NULL_LABEL,
52889 			(void*)&&ZEND_NULL_LABEL,
52890 			(void*)&&ZEND_NULL_LABEL,
52891 			(void*)&&ZEND_NULL_LABEL,
52892 			(void*)&&ZEND_NULL_LABEL,
52893 			(void*)&&ZEND_NULL_LABEL,
52894 			(void*)&&ZEND_NULL_LABEL,
52895 			(void*)&&ZEND_NULL_LABEL,
52896 			(void*)&&ZEND_NULL_LABEL,
52897 			(void*)&&ZEND_NULL_LABEL,
52898 			(void*)&&ZEND_NULL_LABEL,
52899 			(void*)&&ZEND_NULL_LABEL,
52900 			(void*)&&ZEND_NULL_LABEL,
52901 			(void*)&&ZEND_NULL_LABEL,
52902 			(void*)&&ZEND_NULL_LABEL,
52903 			(void*)&&ZEND_NULL_LABEL,
52904 			(void*)&&ZEND_NULL_LABEL,
52905 			(void*)&&ZEND_NULL_LABEL,
52906 			(void*)&&ZEND_NULL_LABEL,
52907 			(void*)&&ZEND_NULL_LABEL,
52908 			(void*)&&ZEND_NULL_LABEL,
52909 			(void*)&&ZEND_NULL_LABEL,
52910 			(void*)&&ZEND_NULL_LABEL,
52911 			(void*)&&ZEND_NULL_LABEL,
52912 			(void*)&&ZEND_NULL_LABEL,
52913 			(void*)&&ZEND_NULL_LABEL,
52914 			(void*)&&ZEND_NULL_LABEL,
52915 			(void*)&&ZEND_NULL_LABEL,
52916 			(void*)&&ZEND_NULL_LABEL,
52917 			(void*)&&ZEND_NULL_LABEL,
52918 			(void*)&&ZEND_NULL_LABEL,
52919 			(void*)&&ZEND_NULL_LABEL,
52920 			(void*)&&ZEND_NULL_LABEL,
52921 			(void*)&&ZEND_NULL_LABEL,
52922 			(void*)&&ZEND_NULL_LABEL,
52923 			(void*)&&ZEND_NULL_LABEL,
52924 			(void*)&&ZEND_NULL_LABEL,
52925 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
52926 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
52927 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
52928 			(void*)&&ZEND_NULL_LABEL,
52929 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
52930 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
52931 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
52932 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
52933 			(void*)&&ZEND_NULL_LABEL,
52934 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
52935 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
52936 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
52937 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
52938 			(void*)&&ZEND_NULL_LABEL,
52939 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
52940 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
52941 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
52942 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
52943 			(void*)&&ZEND_NULL_LABEL,
52944 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
52945 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
52946 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
52947 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
52948 			(void*)&&ZEND_NULL_LABEL,
52949 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL,
52950 			(void*)&&ZEND_NULL_LABEL,
52951 			(void*)&&ZEND_NULL_LABEL,
52952 			(void*)&&ZEND_NULL_LABEL,
52953 			(void*)&&ZEND_NULL_LABEL,
52954 			(void*)&&ZEND_NULL_LABEL,
52955 			(void*)&&ZEND_NULL_LABEL,
52956 			(void*)&&ZEND_NULL_LABEL,
52957 			(void*)&&ZEND_NULL_LABEL,
52958 			(void*)&&ZEND_NULL_LABEL,
52959 			(void*)&&ZEND_NULL_LABEL,
52960 			(void*)&&ZEND_NULL_LABEL,
52961 			(void*)&&ZEND_NULL_LABEL,
52962 			(void*)&&ZEND_NULL_LABEL,
52963 			(void*)&&ZEND_NULL_LABEL,
52964 			(void*)&&ZEND_NULL_LABEL,
52965 			(void*)&&ZEND_NULL_LABEL,
52966 			(void*)&&ZEND_NULL_LABEL,
52967 			(void*)&&ZEND_NULL_LABEL,
52968 			(void*)&&ZEND_NULL_LABEL,
52969 			(void*)&&ZEND_NULL_LABEL,
52970 			(void*)&&ZEND_NULL_LABEL,
52971 			(void*)&&ZEND_NULL_LABEL,
52972 			(void*)&&ZEND_NULL_LABEL,
52973 			(void*)&&ZEND_NULL_LABEL,
52974 			(void*)&&ZEND_NULL_LABEL,
52975 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
52976 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
52977 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
52978 			(void*)&&ZEND_NULL_LABEL,
52979 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
52980 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
52981 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
52982 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
52983 			(void*)&&ZEND_NULL_LABEL,
52984 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
52985 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
52986 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
52987 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
52988 			(void*)&&ZEND_NULL_LABEL,
52989 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
52990 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
52991 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
52992 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
52993 			(void*)&&ZEND_NULL_LABEL,
52994 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
52995 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
52996 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
52997 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
52998 			(void*)&&ZEND_NULL_LABEL,
52999 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL,
53000 			(void*)&&ZEND_NULL_LABEL,
53001 			(void*)&&ZEND_NULL_LABEL,
53002 			(void*)&&ZEND_NULL_LABEL,
53003 			(void*)&&ZEND_NULL_LABEL,
53004 			(void*)&&ZEND_NULL_LABEL,
53005 			(void*)&&ZEND_NULL_LABEL,
53006 			(void*)&&ZEND_NULL_LABEL,
53007 			(void*)&&ZEND_NULL_LABEL,
53008 			(void*)&&ZEND_NULL_LABEL,
53009 			(void*)&&ZEND_NULL_LABEL,
53010 			(void*)&&ZEND_NULL_LABEL,
53011 			(void*)&&ZEND_NULL_LABEL,
53012 			(void*)&&ZEND_NULL_LABEL,
53013 			(void*)&&ZEND_NULL_LABEL,
53014 			(void*)&&ZEND_NULL_LABEL,
53015 			(void*)&&ZEND_NULL_LABEL,
53016 			(void*)&&ZEND_NULL_LABEL,
53017 			(void*)&&ZEND_NULL_LABEL,
53018 			(void*)&&ZEND_NULL_LABEL,
53019 			(void*)&&ZEND_NULL_LABEL,
53020 			(void*)&&ZEND_NULL_LABEL,
53021 			(void*)&&ZEND_NULL_LABEL,
53022 			(void*)&&ZEND_NULL_LABEL,
53023 			(void*)&&ZEND_NULL_LABEL,
53024 			(void*)&&ZEND_NULL_LABEL,
53025 			(void*)&&ZEND_NULL_LABEL,
53026 			(void*)&&ZEND_NULL_LABEL,
53027 			(void*)&&ZEND_NULL_LABEL,
53028 			(void*)&&ZEND_NULL_LABEL,
53029 			(void*)&&ZEND_NULL_LABEL,
53030 			(void*)&&ZEND_NULL_LABEL,
53031 			(void*)&&ZEND_NULL_LABEL,
53032 			(void*)&&ZEND_NULL_LABEL,
53033 			(void*)&&ZEND_NULL_LABEL,
53034 			(void*)&&ZEND_NULL_LABEL,
53035 			(void*)&&ZEND_NULL_LABEL,
53036 			(void*)&&ZEND_NULL_LABEL,
53037 			(void*)&&ZEND_NULL_LABEL,
53038 			(void*)&&ZEND_NULL_LABEL,
53039 			(void*)&&ZEND_NULL_LABEL,
53040 			(void*)&&ZEND_NULL_LABEL,
53041 			(void*)&&ZEND_NULL_LABEL,
53042 			(void*)&&ZEND_NULL_LABEL,
53043 			(void*)&&ZEND_NULL_LABEL,
53044 			(void*)&&ZEND_NULL_LABEL,
53045 			(void*)&&ZEND_NULL_LABEL,
53046 			(void*)&&ZEND_NULL_LABEL,
53047 			(void*)&&ZEND_NULL_LABEL,
53048 			(void*)&&ZEND_NULL_LABEL,
53049 			(void*)&&ZEND_NULL_LABEL,
53050 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
53051 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
53052 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
53053 			(void*)&&ZEND_NULL_LABEL,
53054 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
53055 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
53056 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
53057 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
53058 			(void*)&&ZEND_NULL_LABEL,
53059 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
53060 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
53061 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
53062 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
53063 			(void*)&&ZEND_NULL_LABEL,
53064 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
53065 			(void*)&&ZEND_NULL_LABEL,
53066 			(void*)&&ZEND_NULL_LABEL,
53067 			(void*)&&ZEND_NULL_LABEL,
53068 			(void*)&&ZEND_NULL_LABEL,
53069 			(void*)&&ZEND_NULL_LABEL,
53070 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
53071 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
53072 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
53073 			(void*)&&ZEND_NULL_LABEL,
53074 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
53075 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
53076 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
53077 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
53078 			(void*)&&ZEND_NULL_LABEL,
53079 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
53080 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
53081 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
53082 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
53083 			(void*)&&ZEND_NULL_LABEL,
53084 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
53085 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
53086 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
53087 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
53088 			(void*)&&ZEND_NULL_LABEL,
53089 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
53090 			(void*)&&ZEND_NULL_LABEL,
53091 			(void*)&&ZEND_NULL_LABEL,
53092 			(void*)&&ZEND_NULL_LABEL,
53093 			(void*)&&ZEND_NULL_LABEL,
53094 			(void*)&&ZEND_NULL_LABEL,
53095 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
53096 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
53097 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
53098 			(void*)&&ZEND_NULL_LABEL,
53099 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
53100 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
53101 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
53102 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
53103 			(void*)&&ZEND_NULL_LABEL,
53104 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
53105 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
53106 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
53107 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
53108 			(void*)&&ZEND_NULL_LABEL,
53109 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
53110 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
53111 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
53112 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
53113 			(void*)&&ZEND_NULL_LABEL,
53114 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
53115 			(void*)&&ZEND_NULL_LABEL,
53116 			(void*)&&ZEND_NULL_LABEL,
53117 			(void*)&&ZEND_NULL_LABEL,
53118 			(void*)&&ZEND_NULL_LABEL,
53119 			(void*)&&ZEND_NULL_LABEL,
53120 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
53121 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
53122 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
53123 			(void*)&&ZEND_NULL_LABEL,
53124 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
53125 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_LABEL,
53126 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_LABEL,
53127 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_LABEL,
53128 			(void*)&&ZEND_NULL_LABEL,
53129 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_LABEL,
53130 			(void*)&&ZEND_NULL_LABEL,
53131 			(void*)&&ZEND_NULL_LABEL,
53132 			(void*)&&ZEND_NULL_LABEL,
53133 			(void*)&&ZEND_NULL_LABEL,
53134 			(void*)&&ZEND_NULL_LABEL,
53135 			(void*)&&ZEND_NULL_LABEL,
53136 			(void*)&&ZEND_NULL_LABEL,
53137 			(void*)&&ZEND_NULL_LABEL,
53138 			(void*)&&ZEND_NULL_LABEL,
53139 			(void*)&&ZEND_NULL_LABEL,
53140 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CONST_LABEL,
53141 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
53142 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
53143 			(void*)&&ZEND_NULL_LABEL,
53144 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CV_LABEL,
53145 			(void*)&&ZEND_NULL_LABEL,
53146 			(void*)&&ZEND_NULL_LABEL,
53147 			(void*)&&ZEND_NULL_LABEL,
53148 			(void*)&&ZEND_NULL_LABEL,
53149 			(void*)&&ZEND_NULL_LABEL,
53150 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CONST_LABEL,
53151 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
53152 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
53153 			(void*)&&ZEND_NULL_LABEL,
53154 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CV_LABEL,
53155 			(void*)&&ZEND_NULL_LABEL,
53156 			(void*)&&ZEND_NULL_LABEL,
53157 			(void*)&&ZEND_NULL_LABEL,
53158 			(void*)&&ZEND_NULL_LABEL,
53159 			(void*)&&ZEND_NULL_LABEL,
53160 			(void*)&&ZEND_NULL_LABEL,
53161 			(void*)&&ZEND_NULL_LABEL,
53162 			(void*)&&ZEND_NULL_LABEL,
53163 			(void*)&&ZEND_NULL_LABEL,
53164 			(void*)&&ZEND_NULL_LABEL,
53165 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_LABEL,
53166 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
53167 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
53168 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_LABEL,
53169 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_LABEL,
53170 			(void*)&&ZEND_NULL_LABEL,
53171 			(void*)&&ZEND_NULL_LABEL,
53172 			(void*)&&ZEND_NULL_LABEL,
53173 			(void*)&&ZEND_NULL_LABEL,
53174 			(void*)&&ZEND_NULL_LABEL,
53175 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_LABEL,
53176 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
53177 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
53178 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_LABEL,
53179 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_LABEL,
53180 			(void*)&&ZEND_NULL_LABEL,
53181 			(void*)&&ZEND_NULL_LABEL,
53182 			(void*)&&ZEND_NULL_LABEL,
53183 			(void*)&&ZEND_NULL_LABEL,
53184 			(void*)&&ZEND_NULL_LABEL,
53185 			(void*)&&ZEND_NULL_LABEL,
53186 			(void*)&&ZEND_NULL_LABEL,
53187 			(void*)&&ZEND_NULL_LABEL,
53188 			(void*)&&ZEND_NULL_LABEL,
53189 			(void*)&&ZEND_NULL_LABEL,
53190 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_LABEL,
53191 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
53192 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
53193 			(void*)&&ZEND_NULL_LABEL,
53194 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_LABEL,
53195 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_LABEL,
53196 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
53197 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
53198 			(void*)&&ZEND_NULL_LABEL,
53199 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_LABEL,
53200 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_LABEL,
53201 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
53202 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
53203 			(void*)&&ZEND_NULL_LABEL,
53204 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_LABEL,
53205 			(void*)&&ZEND_ASSIGN_STATIC_PROP_OP_SPEC_LABEL,
53206 			(void*)&&ZEND_NULL_LABEL,
53207 			(void*)&&ZEND_NULL_LABEL,
53208 			(void*)&&ZEND_NULL_LABEL,
53209 			(void*)&&ZEND_NULL_LABEL,
53210 			(void*)&&ZEND_NULL_LABEL,
53211 			(void*)&&ZEND_NULL_LABEL,
53212 			(void*)&&ZEND_NULL_LABEL,
53213 			(void*)&&ZEND_NULL_LABEL,
53214 			(void*)&&ZEND_NULL_LABEL,
53215 			(void*)&&ZEND_NULL_LABEL,
53216 			(void*)&&ZEND_NULL_LABEL,
53217 			(void*)&&ZEND_NULL_LABEL,
53218 			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
53219 			(void*)&&ZEND_NULL_LABEL,
53220 			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_LABEL,
53221 			(void*)&&ZEND_NULL_LABEL,
53222 			(void*)&&ZEND_NULL_LABEL,
53223 			(void*)&&ZEND_NULL_LABEL,
53224 			(void*)&&ZEND_NULL_LABEL,
53225 			(void*)&&ZEND_NULL_LABEL,
53226 			(void*)&&ZEND_NULL_LABEL,
53227 			(void*)&&ZEND_NULL_LABEL,
53228 			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL,
53229 			(void*)&&ZEND_NULL_LABEL,
53230 			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
53231 			(void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
53232 			(void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
53233 			(void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
53234 			(void*)&&ZEND_NULL_LABEL,
53235 			(void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
53236 			(void*)&&ZEND_NULL_LABEL,
53237 			(void*)&&ZEND_NULL_LABEL,
53238 			(void*)&&ZEND_NULL_LABEL,
53239 			(void*)&&ZEND_NULL_LABEL,
53240 			(void*)&&ZEND_NULL_LABEL,
53241 			(void*)&&ZEND_NULL_LABEL,
53242 			(void*)&&ZEND_NULL_LABEL,
53243 			(void*)&&ZEND_NULL_LABEL,
53244 			(void*)&&ZEND_NULL_LABEL,
53245 			(void*)&&ZEND_NULL_LABEL,
53246 			(void*)&&ZEND_NULL_LABEL,
53247 			(void*)&&ZEND_NULL_LABEL,
53248 			(void*)&&ZEND_NULL_LABEL,
53249 			(void*)&&ZEND_NULL_LABEL,
53250 			(void*)&&ZEND_NULL_LABEL,
53251 			(void*)&&ZEND_NULL_LABEL,
53252 			(void*)&&ZEND_NULL_LABEL,
53253 			(void*)&&ZEND_NULL_LABEL,
53254 			(void*)&&ZEND_NULL_LABEL,
53255 			(void*)&&ZEND_NULL_LABEL,
53256 			(void*)&&ZEND_NULL_LABEL,
53257 			(void*)&&ZEND_NULL_LABEL,
53258 			(void*)&&ZEND_NULL_LABEL,
53259 			(void*)&&ZEND_NULL_LABEL,
53260 			(void*)&&ZEND_NULL_LABEL,
53261 			(void*)&&ZEND_NULL_LABEL,
53262 			(void*)&&ZEND_NULL_LABEL,
53263 			(void*)&&ZEND_NULL_LABEL,
53264 			(void*)&&ZEND_NULL_LABEL,
53265 			(void*)&&ZEND_NULL_LABEL,
53266 			(void*)&&ZEND_NULL_LABEL,
53267 			(void*)&&ZEND_NULL_LABEL,
53268 			(void*)&&ZEND_NULL_LABEL,
53269 			(void*)&&ZEND_NULL_LABEL,
53270 			(void*)&&ZEND_NULL_LABEL,
53271 			(void*)&&ZEND_NULL_LABEL,
53272 			(void*)&&ZEND_NULL_LABEL,
53273 			(void*)&&ZEND_NULL_LABEL,
53274 			(void*)&&ZEND_NULL_LABEL,
53275 			(void*)&&ZEND_NULL_LABEL,
53276 			(void*)&&ZEND_NULL_LABEL,
53277 			(void*)&&ZEND_NULL_LABEL,
53278 			(void*)&&ZEND_NULL_LABEL,
53279 			(void*)&&ZEND_NULL_LABEL,
53280 			(void*)&&ZEND_NULL_LABEL,
53281 			(void*)&&ZEND_NULL_LABEL,
53282 			(void*)&&ZEND_NULL_LABEL,
53283 			(void*)&&ZEND_NULL_LABEL,
53284 			(void*)&&ZEND_NULL_LABEL,
53285 			(void*)&&ZEND_NULL_LABEL,
53286 			(void*)&&ZEND_NULL_LABEL,
53287 			(void*)&&ZEND_NULL_LABEL,
53288 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
53289 			(void*)&&ZEND_NULL_LABEL,
53290 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
53291 			(void*)&&ZEND_NULL_LABEL,
53292 			(void*)&&ZEND_NULL_LABEL,
53293 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
53294 			(void*)&&ZEND_NULL_LABEL,
53295 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
53296 			(void*)&&ZEND_NULL_LABEL,
53297 			(void*)&&ZEND_NULL_LABEL,
53298 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
53299 			(void*)&&ZEND_NULL_LABEL,
53300 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
53301 			(void*)&&ZEND_NULL_LABEL,
53302 			(void*)&&ZEND_NULL_LABEL,
53303 			(void*)&&ZEND_NULL_LABEL,
53304 			(void*)&&ZEND_NULL_LABEL,
53305 			(void*)&&ZEND_NULL_LABEL,
53306 			(void*)&&ZEND_NULL_LABEL,
53307 			(void*)&&ZEND_NULL_LABEL,
53308 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
53309 			(void*)&&ZEND_NULL_LABEL,
53310 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_LABEL,
53311 			(void*)&&ZEND_NULL_LABEL,
53312 			(void*)&&ZEND_NULL_LABEL,
53313 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
53314 			(void*)&&ZEND_NULL_LABEL,
53315 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
53316 			(void*)&&ZEND_NULL_LABEL,
53317 			(void*)&&ZEND_NULL_LABEL,
53318 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
53319 			(void*)&&ZEND_NULL_LABEL,
53320 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
53321 			(void*)&&ZEND_NULL_LABEL,
53322 			(void*)&&ZEND_NULL_LABEL,
53323 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
53324 			(void*)&&ZEND_NULL_LABEL,
53325 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
53326 			(void*)&&ZEND_NULL_LABEL,
53327 			(void*)&&ZEND_NULL_LABEL,
53328 			(void*)&&ZEND_NULL_LABEL,
53329 			(void*)&&ZEND_NULL_LABEL,
53330 			(void*)&&ZEND_NULL_LABEL,
53331 			(void*)&&ZEND_NULL_LABEL,
53332 			(void*)&&ZEND_NULL_LABEL,
53333 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
53334 			(void*)&&ZEND_NULL_LABEL,
53335 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
53336 			(void*)&&ZEND_NULL_LABEL,
53337 			(void*)&&ZEND_NULL_LABEL,
53338 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
53339 			(void*)&&ZEND_NULL_LABEL,
53340 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_LABEL,
53341 			(void*)&&ZEND_NULL_LABEL,
53342 			(void*)&&ZEND_NULL_LABEL,
53343 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
53344 			(void*)&&ZEND_NULL_LABEL,
53345 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
53346 			(void*)&&ZEND_NULL_LABEL,
53347 			(void*)&&ZEND_NULL_LABEL,
53348 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
53349 			(void*)&&ZEND_NULL_LABEL,
53350 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
53351 			(void*)&&ZEND_NULL_LABEL,
53352 			(void*)&&ZEND_NULL_LABEL,
53353 			(void*)&&ZEND_NULL_LABEL,
53354 			(void*)&&ZEND_NULL_LABEL,
53355 			(void*)&&ZEND_NULL_LABEL,
53356 			(void*)&&ZEND_NULL_LABEL,
53357 			(void*)&&ZEND_NULL_LABEL,
53358 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_LABEL,
53359 			(void*)&&ZEND_NULL_LABEL,
53360 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_LABEL,
53361 			(void*)&&ZEND_ASSIGN_STATIC_PROP_REF_SPEC_LABEL,
53362 			(void*)&&ZEND_NULL_LABEL,
53363 			(void*)&&ZEND_NULL_LABEL,
53364 			(void*)&&ZEND_NULL_LABEL,
53365 			(void*)&&ZEND_NULL_LABEL,
53366 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
53367 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
53368 			(void*)&&ZEND_NULL_LABEL,
53369 			(void*)&&ZEND_NULL_LABEL,
53370 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
53371 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
53372 			(void*)&&ZEND_NULL_LABEL,
53373 			(void*)&&ZEND_NULL_LABEL,
53374 			(void*)&&ZEND_NULL_LABEL,
53375 			(void*)&&ZEND_NULL_LABEL,
53376 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
53377 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
53378 			(void*)&&ZEND_NULL_LABEL,
53379 			(void*)&&ZEND_NULL_LABEL,
53380 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
53381 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
53382 			(void*)&&ZEND_NULL_LABEL,
53383 			(void*)&&ZEND_NULL_LABEL,
53384 			(void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
53385 			(void*)&&ZEND_NULL_LABEL,
53386 			(void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
53387 			(void*)&&ZEND_NULL_LABEL,
53388 			(void*)&&ZEND_NULL_LABEL,
53389 			(void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
53390 			(void*)&&ZEND_NULL_LABEL,
53391 			(void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
53392 			(void*)&&ZEND_PRE_INC_STATIC_PROP_SPEC_LABEL,
53393 			(void*)&&ZEND_POST_INC_STATIC_PROP_SPEC_LABEL,
53394 			(void*)&&ZEND_JMP_SPEC_LABEL,
53395 			(void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
53396 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
53397 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
53398 			(void*)&&ZEND_NULL_LABEL,
53399 			(void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
53400 			(void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
53401 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
53402 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
53403 			(void*)&&ZEND_NULL_LABEL,
53404 			(void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
53405 			(void*)&&ZEND_JMPZNZ_SPEC_CONST_LABEL,
53406 			(void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
53407 			(void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
53408 			(void*)&&ZEND_NULL_LABEL,
53409 			(void*)&&ZEND_JMPZNZ_SPEC_CV_LABEL,
53410 			(void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
53411 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
53412 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
53413 			(void*)&&ZEND_NULL_LABEL,
53414 			(void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
53415 			(void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
53416 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
53417 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
53418 			(void*)&&ZEND_NULL_LABEL,
53419 			(void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
53420 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
53421 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
53422 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
53423 			(void*)&&ZEND_NULL_LABEL,
53424 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
53425 			(void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
53426 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
53427 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
53428 			(void*)&&ZEND_NULL_LABEL,
53429 			(void*)&&ZEND_NULL_LABEL,
53430 			(void*)&&ZEND_NULL_LABEL,
53431 			(void*)&&ZEND_NULL_LABEL,
53432 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_LABEL,
53433 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
53434 			(void*)&&ZEND_NULL_LABEL,
53435 			(void*)&&ZEND_NULL_LABEL,
53436 			(void*)&&ZEND_CAST_SPEC_CONST_LABEL,
53437 			(void*)&&ZEND_CAST_SPEC_TMP_LABEL,
53438 			(void*)&&ZEND_CAST_SPEC_VAR_LABEL,
53439 			(void*)&&ZEND_NULL_LABEL,
53440 			(void*)&&ZEND_CAST_SPEC_CV_LABEL,
53441 			(void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
53442 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
53443 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
53444 			(void*)&&ZEND_NULL_LABEL,
53445 			(void*)&&ZEND_BOOL_SPEC_CV_LABEL,
53446 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
53447 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
53448 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
53449 			(void*)&&ZEND_NULL_LABEL,
53450 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
53451 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
53452 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53453 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53454 			(void*)&&ZEND_NULL_LABEL,
53455 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
53456 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
53457 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53458 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53459 			(void*)&&ZEND_NULL_LABEL,
53460 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
53461 			(void*)&&ZEND_NULL_LABEL,
53462 			(void*)&&ZEND_NULL_LABEL,
53463 			(void*)&&ZEND_NULL_LABEL,
53464 			(void*)&&ZEND_NULL_LABEL,
53465 			(void*)&&ZEND_NULL_LABEL,
53466 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
53467 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
53468 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
53469 			(void*)&&ZEND_NULL_LABEL,
53470 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
53471 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
53472 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
53473 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
53474 			(void*)&&ZEND_NULL_LABEL,
53475 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
53476 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
53477 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
53478 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
53479 			(void*)&&ZEND_NULL_LABEL,
53480 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
53481 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
53482 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
53483 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
53484 			(void*)&&ZEND_NULL_LABEL,
53485 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
53486 			(void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
53487 			(void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
53488 			(void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
53489 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
53490 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
53491 			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
53492 			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
53493 			(void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
53494 			(void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
53495 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
53496 			(void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
53497 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
53498 			(void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
53499 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
53500 			(void*)&&ZEND_NULL_LABEL,
53501 			(void*)&&ZEND_NULL_LABEL,
53502 			(void*)&&ZEND_RETURN_SPEC_CV_LABEL,
53503 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
53504 			(void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
53505 			(void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
53506 			(void*)&&ZEND_SEND_VAL_SPEC_CONST_CONST_LABEL,
53507 			(void*)&&ZEND_NULL_LABEL,
53508 			(void*)&&ZEND_NULL_LABEL,
53509 			(void*)&&ZEND_SEND_VAL_SPEC_CONST_UNUSED_LABEL,
53510 			(void*)&&ZEND_NULL_LABEL,
53511 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
53512 			(void*)&&ZEND_NULL_LABEL,
53513 			(void*)&&ZEND_NULL_LABEL,
53514 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
53515 			(void*)&&ZEND_NULL_LABEL,
53516 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
53517 			(void*)&&ZEND_NULL_LABEL,
53518 			(void*)&&ZEND_NULL_LABEL,
53519 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
53520 			(void*)&&ZEND_NULL_LABEL,
53521 			(void*)&&ZEND_NULL_LABEL,
53522 			(void*)&&ZEND_NULL_LABEL,
53523 			(void*)&&ZEND_NULL_LABEL,
53524 			(void*)&&ZEND_NULL_LABEL,
53525 			(void*)&&ZEND_NULL_LABEL,
53526 			(void*)&&ZEND_NULL_LABEL,
53527 			(void*)&&ZEND_NULL_LABEL,
53528 			(void*)&&ZEND_NULL_LABEL,
53529 			(void*)&&ZEND_NULL_LABEL,
53530 			(void*)&&ZEND_NULL_LABEL,
53531 			(void*)&&ZEND_NULL_LABEL,
53532 			(void*)&&ZEND_NULL_LABEL,
53533 			(void*)&&ZEND_NULL_LABEL,
53534 			(void*)&&ZEND_NULL_LABEL,
53535 			(void*)&&ZEND_NULL_LABEL,
53536 			(void*)&&ZEND_NULL_LABEL,
53537 			(void*)&&ZEND_NULL_LABEL,
53538 			(void*)&&ZEND_NULL_LABEL,
53539 			(void*)&&ZEND_NULL_LABEL,
53540 			(void*)&&ZEND_NULL_LABEL,
53541 			(void*)&&ZEND_NULL_LABEL,
53542 			(void*)&&ZEND_NULL_LABEL,
53543 			(void*)&&ZEND_NULL_LABEL,
53544 			(void*)&&ZEND_NULL_LABEL,
53545 			(void*)&&ZEND_NULL_LABEL,
53546 			(void*)&&ZEND_NULL_LABEL,
53547 			(void*)&&ZEND_NULL_LABEL,
53548 			(void*)&&ZEND_NULL_LABEL,
53549 			(void*)&&ZEND_NULL_LABEL,
53550 			(void*)&&ZEND_NULL_LABEL,
53551 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
53552 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
53553 			(void*)&&ZEND_NULL_LABEL,
53554 			(void*)&&ZEND_NULL_LABEL,
53555 			(void*)&&ZEND_NULL_LABEL,
53556 			(void*)&&ZEND_NULL_LABEL,
53557 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_LABEL,
53558 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
53559 			(void*)&&ZEND_NULL_LABEL,
53560 			(void*)&&ZEND_NULL_LABEL,
53561 			(void*)&&ZEND_NULL_LABEL,
53562 			(void*)&&ZEND_NULL_LABEL,
53563 			(void*)&&ZEND_NULL_LABEL,
53564 			(void*)&&ZEND_NULL_LABEL,
53565 			(void*)&&ZEND_NULL_LABEL,
53566 			(void*)&&ZEND_NULL_LABEL,
53567 			(void*)&&ZEND_NULL_LABEL,
53568 			(void*)&&ZEND_NULL_LABEL,
53569 			(void*)&&ZEND_NULL_LABEL,
53570 			(void*)&&ZEND_NULL_LABEL,
53571 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
53572 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
53573 			(void*)&&ZEND_NULL_LABEL,
53574 			(void*)&&ZEND_NULL_LABEL,
53575 			(void*)&&ZEND_NULL_LABEL,
53576 			(void*)&&ZEND_NULL_LABEL,
53577 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_LABEL,
53578 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_LABEL,
53579 			(void*)&&ZEND_NULL_LABEL,
53580 			(void*)&&ZEND_NULL_LABEL,
53581 			(void*)&&ZEND_NULL_LABEL,
53582 			(void*)&&ZEND_NULL_LABEL,
53583 			(void*)&&ZEND_NULL_LABEL,
53584 			(void*)&&ZEND_NULL_LABEL,
53585 			(void*)&&ZEND_NULL_LABEL,
53586 			(void*)&&ZEND_NULL_LABEL,
53587 			(void*)&&ZEND_NULL_LABEL,
53588 			(void*)&&ZEND_NULL_LABEL,
53589 			(void*)&&ZEND_NULL_LABEL,
53590 			(void*)&&ZEND_NULL_LABEL,
53591 			(void*)&&ZEND_SEND_REF_SPEC_VAR_CONST_LABEL,
53592 			(void*)&&ZEND_NULL_LABEL,
53593 			(void*)&&ZEND_NULL_LABEL,
53594 			(void*)&&ZEND_SEND_REF_SPEC_VAR_UNUSED_LABEL,
53595 			(void*)&&ZEND_NULL_LABEL,
53596 			(void*)&&ZEND_NULL_LABEL,
53597 			(void*)&&ZEND_NULL_LABEL,
53598 			(void*)&&ZEND_NULL_LABEL,
53599 			(void*)&&ZEND_NULL_LABEL,
53600 			(void*)&&ZEND_NULL_LABEL,
53601 			(void*)&&ZEND_SEND_REF_SPEC_CV_CONST_LABEL,
53602 			(void*)&&ZEND_NULL_LABEL,
53603 			(void*)&&ZEND_NULL_LABEL,
53604 			(void*)&&ZEND_SEND_REF_SPEC_CV_UNUSED_LABEL,
53605 			(void*)&&ZEND_NULL_LABEL,
53606 			(void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL,
53607 			(void*)&&ZEND_NULL_LABEL,
53608 			(void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL,
53609 			(void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL,
53610 			(void*)&&ZEND_NULL_LABEL,
53611 			(void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
53612 			(void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
53613 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
53614 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
53615 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
53616 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
53617 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
53618 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
53619 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
53620 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
53621 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
53622 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
53623 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
53624 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
53625 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
53626 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
53627 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
53628 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_LABEL,
53629 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
53630 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
53631 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_LABEL,
53632 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CV_LABEL,
53633 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
53634 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
53635 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
53636 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
53637 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
53638 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
53639 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
53640 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
53641 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
53642 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
53643 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
53644 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
53645 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
53646 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
53647 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
53648 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
53649 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
53650 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
53651 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
53652 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_LABEL,
53653 			(void*)&&ZEND_NULL_LABEL,
53654 			(void*)&&ZEND_NULL_LABEL,
53655 			(void*)&&ZEND_NULL_LABEL,
53656 			(void*)&&ZEND_NULL_LABEL,
53657 			(void*)&&ZEND_NULL_LABEL,
53658 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
53659 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
53660 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
53661 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
53662 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
53663 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
53664 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
53665 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
53666 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
53667 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
53668 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
53669 			(void*)&&ZEND_NULL_LABEL,
53670 			(void*)&&ZEND_NULL_LABEL,
53671 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
53672 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
53673 			(void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
53674 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
53675 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
53676 			(void*)&&ZEND_NULL_LABEL,
53677 			(void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL,
53678 			(void*)&&ZEND_NULL_LABEL,
53679 			(void*)&&ZEND_NULL_LABEL,
53680 			(void*)&&ZEND_NULL_LABEL,
53681 			(void*)&&ZEND_NULL_LABEL,
53682 			(void*)&&ZEND_NULL_LABEL,
53683 			(void*)&&ZEND_NULL_LABEL,
53684 			(void*)&&ZEND_NULL_LABEL,
53685 			(void*)&&ZEND_NULL_LABEL,
53686 			(void*)&&ZEND_NULL_LABEL,
53687 			(void*)&&ZEND_NULL_LABEL,
53688 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL,
53689 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
53690 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
53691 			(void*)&&ZEND_NULL_LABEL,
53692 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL,
53693 			(void*)&&ZEND_NULL_LABEL,
53694 			(void*)&&ZEND_NULL_LABEL,
53695 			(void*)&&ZEND_NULL_LABEL,
53696 			(void*)&&ZEND_NULL_LABEL,
53697 			(void*)&&ZEND_NULL_LABEL,
53698 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL,
53699 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
53700 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
53701 			(void*)&&ZEND_NULL_LABEL,
53702 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
53703 			(void*)&&ZEND_NULL_LABEL,
53704 			(void*)&&ZEND_NULL_LABEL,
53705 			(void*)&&ZEND_NULL_LABEL,
53706 			(void*)&&ZEND_NULL_LABEL,
53707 			(void*)&&ZEND_NULL_LABEL,
53708 			(void*)&&ZEND_NULL_LABEL,
53709 			(void*)&&ZEND_NULL_LABEL,
53710 			(void*)&&ZEND_NULL_LABEL,
53711 			(void*)&&ZEND_NULL_LABEL,
53712 			(void*)&&ZEND_NULL_LABEL,
53713 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
53714 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
53715 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
53716 			(void*)&&ZEND_NULL_LABEL,
53717 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
53718 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
53719 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53720 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53721 			(void*)&&ZEND_NULL_LABEL,
53722 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
53723 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
53724 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
53725 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
53726 			(void*)&&ZEND_NULL_LABEL,
53727 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
53728 			(void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
53729 			(void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
53730 			(void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
53731 			(void*)&&ZEND_NULL_LABEL,
53732 			(void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
53733 			(void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
53734 			(void*)&&ZEND_EXIT_SPEC_LABEL,
53735 			(void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
53736 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
53737 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
53738 			(void*)&&ZEND_NULL_LABEL,
53739 			(void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
53740 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
53741 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
53742 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
53743 			(void*)&&ZEND_NULL_LABEL,
53744 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
53745 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
53746 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
53747 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
53748 			(void*)&&ZEND_NULL_LABEL,
53749 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
53750 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
53751 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
53752 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
53753 			(void*)&&ZEND_NULL_LABEL,
53754 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
53755 			(void*)&&ZEND_NULL_LABEL,
53756 			(void*)&&ZEND_NULL_LABEL,
53757 			(void*)&&ZEND_NULL_LABEL,
53758 			(void*)&&ZEND_NULL_LABEL,
53759 			(void*)&&ZEND_NULL_LABEL,
53760 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
53761 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
53762 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
53763 			(void*)&&ZEND_NULL_LABEL,
53764 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
53765 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
53766 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
53767 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
53768 			(void*)&&ZEND_NULL_LABEL,
53769 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
53770 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
53771 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
53772 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
53773 			(void*)&&ZEND_NULL_LABEL,
53774 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
53775 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
53776 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
53777 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
53778 			(void*)&&ZEND_NULL_LABEL,
53779 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
53780 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
53781 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
53782 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
53783 			(void*)&&ZEND_NULL_LABEL,
53784 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
53785 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
53786 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
53787 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
53788 			(void*)&&ZEND_NULL_LABEL,
53789 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
53790 			(void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
53791 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
53792 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
53793 			(void*)&&ZEND_NULL_LABEL,
53794 			(void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
53795 			(void*)&&ZEND_NULL_LABEL,
53796 			(void*)&&ZEND_NULL_LABEL,
53797 			(void*)&&ZEND_NULL_LABEL,
53798 			(void*)&&ZEND_NULL_LABEL,
53799 			(void*)&&ZEND_NULL_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_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
53806 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
53807 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
53808 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
53809 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL,
53810 			(void*)&&ZEND_NULL_LABEL,
53811 			(void*)&&ZEND_NULL_LABEL,
53812 			(void*)&&ZEND_NULL_LABEL,
53813 			(void*)&&ZEND_NULL_LABEL,
53814 			(void*)&&ZEND_NULL_LABEL,
53815 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
53816 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
53817 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
53818 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
53819 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
53820 			(void*)&&ZEND_NULL_LABEL,
53821 			(void*)&&ZEND_NULL_LABEL,
53822 			(void*)&&ZEND_NULL_LABEL,
53823 			(void*)&&ZEND_NULL_LABEL,
53824 			(void*)&&ZEND_NULL_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_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
53831 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
53832 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
53833 			(void*)&&ZEND_NULL_LABEL,
53834 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
53835 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
53836 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
53837 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
53838 			(void*)&&ZEND_NULL_LABEL,
53839 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
53840 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
53841 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
53842 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
53843 			(void*)&&ZEND_NULL_LABEL,
53844 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
53845 			(void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
53846 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
53847 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
53848 			(void*)&&ZEND_NULL_LABEL,
53849 			(void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_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_NULL_LABEL,
53856 			(void*)&&ZEND_NULL_LABEL,
53857 			(void*)&&ZEND_NULL_LABEL,
53858 			(void*)&&ZEND_NULL_LABEL,
53859 			(void*)&&ZEND_NULL_LABEL,
53860 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
53861 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
53862 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
53863 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
53864 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_LABEL,
53865 			(void*)&&ZEND_NULL_LABEL,
53866 			(void*)&&ZEND_NULL_LABEL,
53867 			(void*)&&ZEND_NULL_LABEL,
53868 			(void*)&&ZEND_NULL_LABEL,
53869 			(void*)&&ZEND_NULL_LABEL,
53870 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
53871 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
53872 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
53873 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
53874 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_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_NULL_LABEL,
53881 			(void*)&&ZEND_NULL_LABEL,
53882 			(void*)&&ZEND_NULL_LABEL,
53883 			(void*)&&ZEND_NULL_LABEL,
53884 			(void*)&&ZEND_NULL_LABEL,
53885 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
53886 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
53887 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
53888 			(void*)&&ZEND_NULL_LABEL,
53889 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
53890 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
53891 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
53892 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
53893 			(void*)&&ZEND_NULL_LABEL,
53894 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
53895 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
53896 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
53897 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
53898 			(void*)&&ZEND_NULL_LABEL,
53899 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
53900 			(void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
53901 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
53902 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
53903 			(void*)&&ZEND_NULL_LABEL,
53904 			(void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
53905 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
53906 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
53907 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
53908 			(void*)&&ZEND_NULL_LABEL,
53909 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
53910 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
53911 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53912 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53913 			(void*)&&ZEND_NULL_LABEL,
53914 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
53915 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
53916 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53917 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53918 			(void*)&&ZEND_NULL_LABEL,
53919 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
53920 			(void*)&&ZEND_NULL_LABEL,
53921 			(void*)&&ZEND_NULL_LABEL,
53922 			(void*)&&ZEND_NULL_LABEL,
53923 			(void*)&&ZEND_NULL_LABEL,
53924 			(void*)&&ZEND_NULL_LABEL,
53925 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
53926 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
53927 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
53928 			(void*)&&ZEND_NULL_LABEL,
53929 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
53930 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
53931 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
53932 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
53933 			(void*)&&ZEND_NULL_LABEL,
53934 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
53935 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
53936 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53937 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53938 			(void*)&&ZEND_NULL_LABEL,
53939 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
53940 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
53941 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53942 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53943 			(void*)&&ZEND_NULL_LABEL,
53944 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
53945 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
53946 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
53947 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
53948 			(void*)&&ZEND_NULL_LABEL,
53949 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
53950 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
53951 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
53952 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
53953 			(void*)&&ZEND_NULL_LABEL,
53954 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
53955 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
53956 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
53957 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
53958 			(void*)&&ZEND_NULL_LABEL,
53959 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
53960 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
53961 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
53962 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
53963 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
53964 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
53965 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
53966 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
53967 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
53968 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
53969 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
53970 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
53971 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
53972 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
53973 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
53974 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_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_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
53981 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
53982 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
53983 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
53984 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
53985 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
53986 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
53987 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
53988 			(void*)&&ZEND_NULL_LABEL,
53989 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
53990 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
53991 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
53992 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
53993 			(void*)&&ZEND_NULL_LABEL,
53994 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
53995 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
53996 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
53997 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
53998 			(void*)&&ZEND_NULL_LABEL,
53999 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
54000 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
54001 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
54002 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
54003 			(void*)&&ZEND_NULL_LABEL,
54004 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
54005 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
54006 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
54007 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
54008 			(void*)&&ZEND_NULL_LABEL,
54009 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
54010 			(void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
54011 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
54012 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
54013 			(void*)&&ZEND_NULL_LABEL,
54014 			(void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
54015 			(void*)&&ZEND_NULL_LABEL,
54016 			(void*)&&ZEND_NULL_LABEL,
54017 			(void*)&&ZEND_NULL_LABEL,
54018 			(void*)&&ZEND_NULL_LABEL,
54019 			(void*)&&ZEND_NULL_LABEL,
54020 			(void*)&&ZEND_NULL_LABEL,
54021 			(void*)&&ZEND_NULL_LABEL,
54022 			(void*)&&ZEND_NULL_LABEL,
54023 			(void*)&&ZEND_NULL_LABEL,
54024 			(void*)&&ZEND_NULL_LABEL,
54025 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
54026 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
54027 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
54028 			(void*)&&ZEND_NULL_LABEL,
54029 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL,
54030 			(void*)&&ZEND_NULL_LABEL,
54031 			(void*)&&ZEND_NULL_LABEL,
54032 			(void*)&&ZEND_NULL_LABEL,
54033 			(void*)&&ZEND_NULL_LABEL,
54034 			(void*)&&ZEND_NULL_LABEL,
54035 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
54036 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
54037 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
54038 			(void*)&&ZEND_NULL_LABEL,
54039 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
54040 			(void*)&&ZEND_NULL_LABEL,
54041 			(void*)&&ZEND_NULL_LABEL,
54042 			(void*)&&ZEND_NULL_LABEL,
54043 			(void*)&&ZEND_NULL_LABEL,
54044 			(void*)&&ZEND_NULL_LABEL,
54045 			(void*)&&ZEND_NULL_LABEL,
54046 			(void*)&&ZEND_NULL_LABEL,
54047 			(void*)&&ZEND_NULL_LABEL,
54048 			(void*)&&ZEND_NULL_LABEL,
54049 			(void*)&&ZEND_NULL_LABEL,
54050 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
54051 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
54052 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
54053 			(void*)&&ZEND_NULL_LABEL,
54054 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
54055 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
54056 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
54057 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
54058 			(void*)&&ZEND_NULL_LABEL,
54059 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
54060 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
54061 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
54062 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
54063 			(void*)&&ZEND_NULL_LABEL,
54064 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
54065 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL,
54066 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
54067 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
54068 			(void*)&&ZEND_NULL_LABEL,
54069 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL,
54070 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
54071 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
54072 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
54073 			(void*)&&ZEND_NULL_LABEL,
54074 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
54075 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
54076 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
54077 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
54078 			(void*)&&ZEND_NULL_LABEL,
54079 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
54080 			(void*)&&ZEND_NULL_LABEL,
54081 			(void*)&&ZEND_NULL_LABEL,
54082 			(void*)&&ZEND_NULL_LABEL,
54083 			(void*)&&ZEND_NULL_LABEL,
54084 			(void*)&&ZEND_NULL_LABEL,
54085 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
54086 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
54087 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
54088 			(void*)&&ZEND_NULL_LABEL,
54089 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
54090 			(void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
54091 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
54092 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
54093 			(void*)&&ZEND_NULL_LABEL,
54094 			(void*)&&ZEND_NULL_LABEL,
54095 			(void*)&&ZEND_NULL_LABEL,
54096 			(void*)&&ZEND_NULL_LABEL,
54097 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_LABEL,
54098 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_LABEL,
54099 			(void*)&&ZEND_NULL_LABEL,
54100 			(void*)&&ZEND_NULL_LABEL,
54101 			(void*)&&ZEND_EXT_STMT_SPEC_LABEL,
54102 			(void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
54103 			(void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
54104 			(void*)&&ZEND_EXT_NOP_SPEC_LABEL,
54105 			(void*)&&ZEND_TICKS_SPEC_LABEL,
54106 			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_LABEL,
54107 			(void*)&&ZEND_NULL_LABEL,
54108 			(void*)&&ZEND_NULL_LABEL,
54109 			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_LABEL,
54110 			(void*)&&ZEND_NULL_LABEL,
54111 			(void*)&&ZEND_CATCH_SPEC_CONST_LABEL,
54112 			(void*)&&ZEND_THROW_SPEC_CONST_LABEL,
54113 			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
54114 			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
54115 			(void*)&&ZEND_NULL_LABEL,
54116 			(void*)&&ZEND_THROW_SPEC_CV_LABEL,
54117 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL,
54118 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
54119 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
54120 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL,
54121 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL,
54122 			(void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
54123 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
54124 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
54125 			(void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
54126 			(void*)&&ZEND_CLONE_SPEC_CV_LABEL,
54127 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
54128 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
54129 			(void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
54130 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
54131 			(void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
54132 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
54133 			(void*)&&ZEND_NULL_LABEL,
54134 			(void*)&&ZEND_NULL_LABEL,
54135 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
54136 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
54137 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
54138 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
54139 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
54140 			(void*)&&ZEND_NULL_LABEL,
54141 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
54142 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
54143 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
54144 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
54145 			(void*)&&ZEND_NULL_LABEL,
54146 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
54147 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
54148 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
54149 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
54150 			(void*)&&ZEND_NULL_LABEL,
54151 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
54152 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
54153 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
54154 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
54155 			(void*)&&ZEND_NULL_LABEL,
54156 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
54157 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
54158 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
54159 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
54160 			(void*)&&ZEND_NULL_LABEL,
54161 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
54162 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
54163 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
54164 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
54165 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
54166 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_LABEL,
54167 			(void*)&&ZEND_NULL_LABEL,
54168 			(void*)&&ZEND_NULL_LABEL,
54169 			(void*)&&ZEND_NULL_LABEL,
54170 			(void*)&&ZEND_NULL_LABEL,
54171 			(void*)&&ZEND_NULL_LABEL,
54172 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
54173 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
54174 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
54175 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
54176 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
54177 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
54178 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
54179 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
54180 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
54181 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
54182 			(void*)&&ZEND_NULL_LABEL,
54183 			(void*)&&ZEND_NULL_LABEL,
54184 			(void*)&&ZEND_NULL_LABEL,
54185 			(void*)&&ZEND_NULL_LABEL,
54186 			(void*)&&ZEND_NULL_LABEL,
54187 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
54188 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
54189 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
54190 			(void*)&&ZEND_NULL_LABEL,
54191 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
54192 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
54193 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
54194 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
54195 			(void*)&&ZEND_NULL_LABEL,
54196 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
54197 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
54198 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
54199 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
54200 			(void*)&&ZEND_NULL_LABEL,
54201 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
54202 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
54203 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
54204 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
54205 			(void*)&&ZEND_NULL_LABEL,
54206 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
54207 			(void*)&&ZEND_NULL_LABEL,
54208 			(void*)&&ZEND_NULL_LABEL,
54209 			(void*)&&ZEND_NULL_LABEL,
54210 			(void*)&&ZEND_NULL_LABEL,
54211 			(void*)&&ZEND_NULL_LABEL,
54212 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
54213 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
54214 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
54215 			(void*)&&ZEND_NULL_LABEL,
54216 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
54217 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
54218 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
54219 			(void*)&&ZEND_NULL_LABEL,
54220 			(void*)&&ZEND_NULL_LABEL,
54221 			(void*)&&ZEND_NULL_LABEL,
54222 			(void*)&&ZEND_NULL_LABEL,
54223 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_LABEL,
54224 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_LABEL,
54225 			(void*)&&ZEND_NULL_LABEL,
54226 			(void*)&&ZEND_NULL_LABEL,
54227 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
54228 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
54229 			(void*)&&ZEND_NULL_LABEL,
54230 			(void*)&&ZEND_NULL_LABEL,
54231 			(void*)&&ZEND_NULL_LABEL,
54232 			(void*)&&ZEND_NULL_LABEL,
54233 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_LABEL,
54234 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_LABEL,
54235 			(void*)&&ZEND_NULL_LABEL,
54236 			(void*)&&ZEND_NULL_LABEL,
54237 			(void*)&&ZEND_NULL_LABEL,
54238 			(void*)&&ZEND_NULL_LABEL,
54239 			(void*)&&ZEND_NULL_LABEL,
54240 			(void*)&&ZEND_NULL_LABEL,
54241 			(void*)&&ZEND_NULL_LABEL,
54242 			(void*)&&ZEND_NULL_LABEL,
54243 			(void*)&&ZEND_NULL_LABEL,
54244 			(void*)&&ZEND_NULL_LABEL,
54245 			(void*)&&ZEND_NULL_LABEL,
54246 			(void*)&&ZEND_NULL_LABEL,
54247 			(void*)&&ZEND_NULL_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_NULL_LABEL,
54261 			(void*)&&ZEND_NULL_LABEL,
54262 			(void*)&&ZEND_NULL_LABEL,
54263 			(void*)&&ZEND_NULL_LABEL,
54264 			(void*)&&ZEND_NULL_LABEL,
54265 			(void*)&&ZEND_NULL_LABEL,
54266 			(void*)&&ZEND_NULL_LABEL,
54267 			(void*)&&ZEND_NULL_LABEL,
54268 			(void*)&&ZEND_NULL_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_NULL_LABEL,
54276 			(void*)&&ZEND_NULL_LABEL,
54277 			(void*)&&ZEND_SEND_VAR_SPEC_VAR_CONST_LABEL,
54278 			(void*)&&ZEND_NULL_LABEL,
54279 			(void*)&&ZEND_NULL_LABEL,
54280 			(void*)&&ZEND_SEND_VAR_SPEC_VAR_UNUSED_LABEL,
54281 			(void*)&&ZEND_NULL_LABEL,
54282 			(void*)&&ZEND_NULL_LABEL,
54283 			(void*)&&ZEND_NULL_LABEL,
54284 			(void*)&&ZEND_NULL_LABEL,
54285 			(void*)&&ZEND_NULL_LABEL,
54286 			(void*)&&ZEND_NULL_LABEL,
54287 			(void*)&&ZEND_SEND_VAR_SPEC_CV_CONST_LABEL,
54288 			(void*)&&ZEND_NULL_LABEL,
54289 			(void*)&&ZEND_NULL_LABEL,
54290 			(void*)&&ZEND_SEND_VAR_SPEC_CV_UNUSED_LABEL,
54291 			(void*)&&ZEND_NULL_LABEL,
54292 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
54293 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
54294 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
54295 			(void*)&&ZEND_NULL_LABEL,
54296 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
54297 			(void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
54298 			(void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
54299 			(void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
54300 			(void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
54301 			(void*)&&ZEND_NULL_LABEL,
54302 			(void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
54303 			(void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
54304 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
54305 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
54306 			(void*)&&ZEND_NULL_LABEL,
54307 			(void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
54308 			(void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
54309 			(void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
54310 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
54311 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
54312 			(void*)&&ZEND_NULL_LABEL,
54313 			(void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
54314 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
54315 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
54316 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
54317 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
54318 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
54319 			(void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
54320 			(void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
54321 			(void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
54322 			(void*)&&ZEND_NULL_LABEL,
54323 			(void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
54324 			(void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
54325 			(void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
54326 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
54327 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
54328 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
54329 			(void*)&&ZEND_NULL_LABEL,
54330 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
54331 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
54332 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
54333 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
54334 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
54335 			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
54336 			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
54337 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
54338 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
54339 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
54340 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
54341 			(void*)&&ZEND_NULL_LABEL,
54342 			(void*)&&ZEND_NULL_LABEL,
54343 			(void*)&&ZEND_NULL_LABEL,
54344 			(void*)&&ZEND_NULL_LABEL,
54345 			(void*)&&ZEND_NULL_LABEL,
54346 			(void*)&&ZEND_NULL_LABEL,
54347 			(void*)&&ZEND_NULL_LABEL,
54348 			(void*)&&ZEND_NULL_LABEL,
54349 			(void*)&&ZEND_NULL_LABEL,
54350 			(void*)&&ZEND_NULL_LABEL,
54351 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
54352 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
54353 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
54354 			(void*)&&ZEND_NULL_LABEL,
54355 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
54356 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
54357 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
54358 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
54359 			(void*)&&ZEND_NULL_LABEL,
54360 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
54361 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
54362 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
54363 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
54364 			(void*)&&ZEND_NULL_LABEL,
54365 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_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_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
54377 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
54378 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
54379 			(void*)&&ZEND_NULL_LABEL,
54380 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
54381 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
54382 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
54383 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
54384 			(void*)&&ZEND_NULL_LABEL,
54385 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
54386 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
54387 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
54388 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
54389 			(void*)&&ZEND_NULL_LABEL,
54390 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
54391 			(void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
54392 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
54393 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
54394 			(void*)&&ZEND_NULL_LABEL,
54395 			(void*)&&ZEND_ECHO_SPEC_CV_LABEL,
54396 			(void*)&&ZEND_NULL_LABEL,
54397 			(void*)&&ZEND_NULL_LABEL,
54398 			(void*)&&ZEND_NULL_LABEL,
54399 			(void*)&&ZEND_NULL_LABEL,
54400 			(void*)&&ZEND_NULL_LABEL,
54401 			(void*)&&ZEND_NULL_LABEL,
54402 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
54403 			(void*)&&ZEND_NULL_LABEL,
54404 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
54405 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
54406 			(void*)&&ZEND_NULL_LABEL,
54407 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
54408 			(void*)&&ZEND_NULL_LABEL,
54409 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
54410 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
54411 			(void*)&&ZEND_NULL_LABEL,
54412 			(void*)&&ZEND_NULL_LABEL,
54413 			(void*)&&ZEND_NULL_LABEL,
54414 			(void*)&&ZEND_NULL_LABEL,
54415 			(void*)&&ZEND_NULL_LABEL,
54416 			(void*)&&ZEND_NULL_LABEL,
54417 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
54418 			(void*)&&ZEND_NULL_LABEL,
54419 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
54420 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
54421 			(void*)&&ZEND_NULL_LABEL,
54422 			(void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
54423 			(void*)&&ZEND_NULL_LABEL,
54424 			(void*)&&ZEND_NULL_LABEL,
54425 			(void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
54426 			(void*)&&ZEND_NULL_LABEL,
54427 			(void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
54428 			(void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
54429 			(void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_LABEL,
54430 			(void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
54431 			(void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL,
54432 			(void*)&&ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_LABEL,
54433 			(void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
54434 			(void*)&&ZEND_ADD_ARRAY_UNPACK_SPEC_LABEL,
54435 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
54436 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
54437 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
54438 			(void*)&&ZEND_NULL_LABEL,
54439 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
54440 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
54441 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
54442 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
54443 			(void*)&&ZEND_NULL_LABEL,
54444 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
54445 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
54446 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
54447 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
54448 			(void*)&&ZEND_NULL_LABEL,
54449 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
54450 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
54451 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
54452 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
54453 			(void*)&&ZEND_NULL_LABEL,
54454 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
54455 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
54456 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
54457 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
54458 			(void*)&&ZEND_NULL_LABEL,
54459 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
54460 			(void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
54461 			(void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
54462 			(void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
54463 			(void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
54464 			(void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
54465 			(void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
54466 			(void*)&&ZEND_NULL_LABEL,
54467 			(void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
54468 			(void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
54469 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL,
54470 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL,
54471 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL,
54472 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
54473 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
54474 			(void*)&&ZEND_NULL_LABEL,
54475 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL,
54476 			(void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
54477 			(void*)&&ZEND_NULL_LABEL,
54478 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
54479 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
54480 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
54481 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_CV_LABEL,
54482 			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
54483 			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_LABEL,
54484 			(void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
54485 			(void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
54486 			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
54487 			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
54488 			(void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
54489 			(void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
54490 			(void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
54491 			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
54492 			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
54493 			(void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
54494 			(void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
54495 			(void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
54496 			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
54497 			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
54498 			(void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
54499 			(void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
54500 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
54501 			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
54502 			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
54503 			(void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
54504 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
54505 			(void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
54506 			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
54507 			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
54508 			(void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
54509 			(void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
54510 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
54511 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
54512 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
54513 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
54514 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
54515 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
54516 			(void*)&&ZEND_NULL_LABEL,
54517 			(void*)&&ZEND_NULL_LABEL,
54518 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
54519 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
54520 			(void*)&&ZEND_FAST_CALL_SPEC_LABEL,
54521 			(void*)&&ZEND_FAST_RET_SPEC_LABEL,
54522 			(void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
54523 			(void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
54524 			(void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
54525 			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
54526 			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
54527 			(void*)&&ZEND_NULL_LABEL,
54528 			(void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
54529 			(void*)&&ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_LABEL,
54530 			(void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
54531 			(void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
54532 			(void*)&&ZEND_COALESCE_SPEC_TMP_LABEL,
54533 			(void*)&&ZEND_COALESCE_SPEC_VAR_LABEL,
54534 			(void*)&&ZEND_NULL_LABEL,
54535 			(void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
54536 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
54537 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
54538 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
54539 			(void*)&&ZEND_NULL_LABEL,
54540 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
54541 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
54542 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
54543 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
54544 			(void*)&&ZEND_NULL_LABEL,
54545 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
54546 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
54547 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
54548 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
54549 			(void*)&&ZEND_NULL_LABEL,
54550 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_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_SPACESHIP_SPEC_CV_CONST_LABEL,
54557 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
54558 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
54559 			(void*)&&ZEND_NULL_LABEL,
54560 			(void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
54561 			(void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
54562 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
54563 			(void*)&&ZEND_NULL_LABEL,
54564 			(void*)&&ZEND_NULL_LABEL,
54565 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
54566 			(void*)&&ZEND_NULL_LABEL,
54567 			(void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_LABEL,
54568 			(void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_LABEL,
54569 			(void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_LABEL,
54570 			(void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_LABEL,
54571 			(void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_LABEL,
54572 			(void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_LABEL,
54573 			(void*)&&ZEND_UNSET_STATIC_PROP_SPEC_LABEL,
54574 			(void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_LABEL,
54575 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
54576 			(void*)&&ZEND_NULL_LABEL,
54577 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
54578 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
54579 			(void*)&&ZEND_NULL_LABEL,
54580 			(void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
54581 			(void*)&&ZEND_BIND_STATIC_SPEC_CV_UNUSED_LABEL,
54582 			(void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
54583 			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_LABEL,
54584 			(void*)&&ZEND_NULL_LABEL,
54585 			(void*)&&ZEND_NULL_LABEL,
54586 			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
54587 			(void*)&&ZEND_NULL_LABEL,
54588 			(void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
54589 			(void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
54590 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
54591 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
54592 			(void*)&&ZEND_NULL_LABEL,
54593 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
54594 			(void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
54595 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
54596 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
54597 			(void*)&&ZEND_NULL_LABEL,
54598 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
54599 			(void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
54600 			(void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
54601 			(void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
54602 			(void*)&&ZEND_NULL_LABEL,
54603 			(void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
54604 			(void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
54605 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
54606 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
54607 			(void*)&&ZEND_NULL_LABEL,
54608 			(void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
54609 			(void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
54610 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
54611 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
54612 			(void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
54613 			(void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
54614 			(void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
54615 			(void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
54616 			(void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
54617 			(void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
54618 			(void*)&&ZEND_NULL_LABEL,
54619 			(void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
54620 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_LABEL,
54621 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
54622 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
54623 			(void*)&&ZEND_NULL_LABEL,
54624 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_LABEL,
54625 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
54626 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
54627 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
54628 			(void*)&&ZEND_NULL_LABEL,
54629 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
54630 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
54631 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
54632 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
54633 			(void*)&&ZEND_NULL_LABEL,
54634 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
54635 			(void*)&&ZEND_NULL_LABEL,
54636 			(void*)&&ZEND_NULL_LABEL,
54637 			(void*)&&ZEND_NULL_LABEL,
54638 			(void*)&&ZEND_NULL_LABEL,
54639 			(void*)&&ZEND_NULL_LABEL,
54640 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_LABEL,
54641 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
54642 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
54643 			(void*)&&ZEND_NULL_LABEL,
54644 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_LABEL,
54645 			(void*)&&ZEND_MATCH_SPEC_CONST_CONST_LABEL,
54646 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
54647 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
54648 			(void*)&&ZEND_NULL_LABEL,
54649 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_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_CASE_STRICT_SPEC_TMP_CONST_LABEL,
54656 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_TMP_LABEL,
54657 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_VAR_LABEL,
54658 			(void*)&&ZEND_NULL_LABEL,
54659 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_CV_LABEL,
54660 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CONST_LABEL,
54661 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_TMP_LABEL,
54662 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_VAR_LABEL,
54663 			(void*)&&ZEND_NULL_LABEL,
54664 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CV_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_MATCH_ERROR_SPEC_CONST_UNUSED_LABEL,
54676 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
54677 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
54678 			(void*)&&ZEND_NULL_LABEL,
54679 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
54680 			(void*)&&ZEND_JMP_NULL_SPEC_CONST_LABEL,
54681 			(void*)&&ZEND_JMP_NULL_SPEC_TMP_LABEL,
54682 			(void*)&&ZEND_JMP_NULL_SPEC_VAR_LABEL,
54683 			(void*)&&ZEND_NULL_LABEL,
54684 			(void*)&&ZEND_JMP_NULL_SPEC_CV_LABEL,
54685 			(void*)&&ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_LABEL,
54686 			(void*)&&ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_LABEL,
54687 			(void*)&&ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_LABEL,
54688 			(void*)&&ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_LABEL,
54689 			(void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
54690 			(void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
54691 			(void*)&&ZEND_NULL_LABEL,
54692 			(void*)&&ZEND_NULL_LABEL,
54693 			(void*)&&ZEND_NULL_LABEL,
54694 			(void*)&&ZEND_NULL_LABEL,
54695 			(void*)&&ZEND_NULL_LABEL,
54696 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54697 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54698 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54699 			(void*)&&ZEND_NULL_LABEL,
54700 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54701 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54702 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54703 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54704 			(void*)&&ZEND_NULL_LABEL,
54705 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54706 			(void*)&&ZEND_NULL_LABEL,
54707 			(void*)&&ZEND_NULL_LABEL,
54708 			(void*)&&ZEND_NULL_LABEL,
54709 			(void*)&&ZEND_NULL_LABEL,
54710 			(void*)&&ZEND_NULL_LABEL,
54711 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54712 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54713 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54714 			(void*)&&ZEND_NULL_LABEL,
54715 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54716 			(void*)&&ZEND_NULL_LABEL,
54717 			(void*)&&ZEND_NULL_LABEL,
54718 			(void*)&&ZEND_NULL_LABEL,
54719 			(void*)&&ZEND_NULL_LABEL,
54720 			(void*)&&ZEND_NULL_LABEL,
54721 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
54722 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54723 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54724 			(void*)&&ZEND_NULL_LABEL,
54725 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54726 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
54727 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54728 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54729 			(void*)&&ZEND_NULL_LABEL,
54730 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54731 			(void*)&&ZEND_NULL_LABEL,
54732 			(void*)&&ZEND_NULL_LABEL,
54733 			(void*)&&ZEND_NULL_LABEL,
54734 			(void*)&&ZEND_NULL_LABEL,
54735 			(void*)&&ZEND_NULL_LABEL,
54736 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
54737 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54738 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54739 			(void*)&&ZEND_NULL_LABEL,
54740 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54741 			(void*)&&ZEND_NULL_LABEL,
54742 			(void*)&&ZEND_NULL_LABEL,
54743 			(void*)&&ZEND_NULL_LABEL,
54744 			(void*)&&ZEND_NULL_LABEL,
54745 			(void*)&&ZEND_NULL_LABEL,
54746 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54747 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54748 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54749 			(void*)&&ZEND_NULL_LABEL,
54750 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54751 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54752 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54753 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54754 			(void*)&&ZEND_NULL_LABEL,
54755 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54756 			(void*)&&ZEND_NULL_LABEL,
54757 			(void*)&&ZEND_NULL_LABEL,
54758 			(void*)&&ZEND_NULL_LABEL,
54759 			(void*)&&ZEND_NULL_LABEL,
54760 			(void*)&&ZEND_NULL_LABEL,
54761 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54762 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54763 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54764 			(void*)&&ZEND_NULL_LABEL,
54765 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54766 			(void*)&&ZEND_NULL_LABEL,
54767 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
54768 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
54769 			(void*)&&ZEND_NULL_LABEL,
54770 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
54771 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54772 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54773 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54774 			(void*)&&ZEND_NULL_LABEL,
54775 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54776 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54777 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54778 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54779 			(void*)&&ZEND_NULL_LABEL,
54780 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54781 			(void*)&&ZEND_NULL_LABEL,
54782 			(void*)&&ZEND_NULL_LABEL,
54783 			(void*)&&ZEND_NULL_LABEL,
54784 			(void*)&&ZEND_NULL_LABEL,
54785 			(void*)&&ZEND_NULL_LABEL,
54786 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54787 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54788 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54789 			(void*)&&ZEND_NULL_LABEL,
54790 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54791 			(void*)&&ZEND_NULL_LABEL,
54792 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
54793 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
54794 			(void*)&&ZEND_NULL_LABEL,
54795 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
54796 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
54797 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54798 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54799 			(void*)&&ZEND_NULL_LABEL,
54800 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54801 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
54802 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54803 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54804 			(void*)&&ZEND_NULL_LABEL,
54805 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54806 			(void*)&&ZEND_NULL_LABEL,
54807 			(void*)&&ZEND_NULL_LABEL,
54808 			(void*)&&ZEND_NULL_LABEL,
54809 			(void*)&&ZEND_NULL_LABEL,
54810 			(void*)&&ZEND_NULL_LABEL,
54811 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
54812 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54813 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54814 			(void*)&&ZEND_NULL_LABEL,
54815 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54816 			(void*)&&ZEND_NULL_LABEL,
54817 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54818 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54819 			(void*)&&ZEND_NULL_LABEL,
54820 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54821 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54822 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54823 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54824 			(void*)&&ZEND_NULL_LABEL,
54825 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54826 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54827 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54828 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54829 			(void*)&&ZEND_NULL_LABEL,
54830 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54831 			(void*)&&ZEND_NULL_LABEL,
54832 			(void*)&&ZEND_NULL_LABEL,
54833 			(void*)&&ZEND_NULL_LABEL,
54834 			(void*)&&ZEND_NULL_LABEL,
54835 			(void*)&&ZEND_NULL_LABEL,
54836 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54837 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54838 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54839 			(void*)&&ZEND_NULL_LABEL,
54840 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54841 			(void*)&&ZEND_NULL_LABEL,
54842 			(void*)&&ZEND_NULL_LABEL,
54843 			(void*)&&ZEND_NULL_LABEL,
54844 			(void*)&&ZEND_NULL_LABEL,
54845 			(void*)&&ZEND_NULL_LABEL,
54846 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54847 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54848 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54849 			(void*)&&ZEND_NULL_LABEL,
54850 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54851 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54852 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54853 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54854 			(void*)&&ZEND_NULL_LABEL,
54855 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_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_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54862 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54863 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54864 			(void*)&&ZEND_NULL_LABEL,
54865 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_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_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54872 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54873 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54874 			(void*)&&ZEND_NULL_LABEL,
54875 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54876 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54877 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54878 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54879 			(void*)&&ZEND_NULL_LABEL,
54880 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_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_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54887 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54888 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54889 			(void*)&&ZEND_NULL_LABEL,
54890 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_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_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54897 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54898 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54899 			(void*)&&ZEND_NULL_LABEL,
54900 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54901 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54902 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54903 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54904 			(void*)&&ZEND_NULL_LABEL,
54905 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54912 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54913 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54914 			(void*)&&ZEND_NULL_LABEL,
54915 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54932 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54933 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54934 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54935 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54936 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54937 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54938 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54939 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54940 			(void*)&&ZEND_NULL_LABEL,
54941 			(void*)&&ZEND_NULL_LABEL,
54942 			(void*)&&ZEND_NULL_LABEL,
54943 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54944 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54945 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54946 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54947 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54948 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54949 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54950 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54951 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54952 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54953 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54954 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54955 			(void*)&&ZEND_NULL_LABEL,
54956 			(void*)&&ZEND_NULL_LABEL,
54957 			(void*)&&ZEND_NULL_LABEL,
54958 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54959 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54960 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54961 			(void*)&&ZEND_NULL_LABEL,
54962 			(void*)&&ZEND_NULL_LABEL,
54963 			(void*)&&ZEND_NULL_LABEL,
54964 			(void*)&&ZEND_NULL_LABEL,
54965 			(void*)&&ZEND_NULL_LABEL,
54966 			(void*)&&ZEND_NULL_LABEL,
54967 			(void*)&&ZEND_NULL_LABEL,
54968 			(void*)&&ZEND_NULL_LABEL,
54969 			(void*)&&ZEND_NULL_LABEL,
54970 			(void*)&&ZEND_NULL_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_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54977 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54978 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54979 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54980 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54981 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54982 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54983 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54984 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54985 			(void*)&&ZEND_NULL_LABEL,
54986 			(void*)&&ZEND_NULL_LABEL,
54987 			(void*)&&ZEND_NULL_LABEL,
54988 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54989 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54990 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54991 			(void*)&&ZEND_NULL_LABEL,
54992 			(void*)&&ZEND_NULL_LABEL,
54993 			(void*)&&ZEND_NULL_LABEL,
54994 			(void*)&&ZEND_NULL_LABEL,
54995 			(void*)&&ZEND_NULL_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_NULL_LABEL,
55004 			(void*)&&ZEND_NULL_LABEL,
55005 			(void*)&&ZEND_NULL_LABEL,
55006 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55007 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55008 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55009 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55010 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55011 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55012 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55013 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55014 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55015 			(void*)&&ZEND_NULL_LABEL,
55016 			(void*)&&ZEND_NULL_LABEL,
55017 			(void*)&&ZEND_NULL_LABEL,
55018 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55019 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55020 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55021 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55022 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55023 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55024 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55025 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55026 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55027 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55028 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55029 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55030 			(void*)&&ZEND_NULL_LABEL,
55031 			(void*)&&ZEND_NULL_LABEL,
55032 			(void*)&&ZEND_NULL_LABEL,
55033 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55034 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55035 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55036 			(void*)&&ZEND_NULL_LABEL,
55037 			(void*)&&ZEND_NULL_LABEL,
55038 			(void*)&&ZEND_NULL_LABEL,
55039 			(void*)&&ZEND_NULL_LABEL,
55040 			(void*)&&ZEND_NULL_LABEL,
55041 			(void*)&&ZEND_NULL_LABEL,
55042 			(void*)&&ZEND_NULL_LABEL,
55043 			(void*)&&ZEND_NULL_LABEL,
55044 			(void*)&&ZEND_NULL_LABEL,
55045 			(void*)&&ZEND_NULL_LABEL,
55046 			(void*)&&ZEND_NULL_LABEL,
55047 			(void*)&&ZEND_NULL_LABEL,
55048 			(void*)&&ZEND_NULL_LABEL,
55049 			(void*)&&ZEND_NULL_LABEL,
55050 			(void*)&&ZEND_NULL_LABEL,
55051 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55052 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55053 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55054 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55055 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55056 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55057 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55058 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55059 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55060 			(void*)&&ZEND_NULL_LABEL,
55061 			(void*)&&ZEND_NULL_LABEL,
55062 			(void*)&&ZEND_NULL_LABEL,
55063 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55064 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55065 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55066 			(void*)&&ZEND_NULL_LABEL,
55067 			(void*)&&ZEND_NULL_LABEL,
55068 			(void*)&&ZEND_NULL_LABEL,
55069 			(void*)&&ZEND_NULL_LABEL,
55070 			(void*)&&ZEND_NULL_LABEL,
55071 			(void*)&&ZEND_NULL_LABEL,
55072 			(void*)&&ZEND_NULL_LABEL,
55073 			(void*)&&ZEND_NULL_LABEL,
55074 			(void*)&&ZEND_NULL_LABEL,
55075 			(void*)&&ZEND_NULL_LABEL,
55076 			(void*)&&ZEND_NULL_LABEL,
55077 			(void*)&&ZEND_NULL_LABEL,
55078 			(void*)&&ZEND_NULL_LABEL,
55079 			(void*)&&ZEND_NULL_LABEL,
55080 			(void*)&&ZEND_NULL_LABEL,
55081 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
55082 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55083 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55084 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55085 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55086 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55087 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55088 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55089 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55090 			(void*)&&ZEND_NULL_LABEL,
55091 			(void*)&&ZEND_NULL_LABEL,
55092 			(void*)&&ZEND_NULL_LABEL,
55093 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55094 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55095 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55096 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
55097 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55098 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55099 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55100 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55101 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55102 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55103 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55104 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55105 			(void*)&&ZEND_NULL_LABEL,
55106 			(void*)&&ZEND_NULL_LABEL,
55107 			(void*)&&ZEND_NULL_LABEL,
55108 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55109 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55110 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55111 			(void*)&&ZEND_NULL_LABEL,
55112 			(void*)&&ZEND_NULL_LABEL,
55113 			(void*)&&ZEND_NULL_LABEL,
55114 			(void*)&&ZEND_NULL_LABEL,
55115 			(void*)&&ZEND_NULL_LABEL,
55116 			(void*)&&ZEND_NULL_LABEL,
55117 			(void*)&&ZEND_NULL_LABEL,
55118 			(void*)&&ZEND_NULL_LABEL,
55119 			(void*)&&ZEND_NULL_LABEL,
55120 			(void*)&&ZEND_NULL_LABEL,
55121 			(void*)&&ZEND_NULL_LABEL,
55122 			(void*)&&ZEND_NULL_LABEL,
55123 			(void*)&&ZEND_NULL_LABEL,
55124 			(void*)&&ZEND_NULL_LABEL,
55125 			(void*)&&ZEND_NULL_LABEL,
55126 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
55127 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55128 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55129 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55130 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55131 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55132 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55133 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55134 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55135 			(void*)&&ZEND_NULL_LABEL,
55136 			(void*)&&ZEND_NULL_LABEL,
55137 			(void*)&&ZEND_NULL_LABEL,
55138 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55139 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55140 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55141 			(void*)&&ZEND_NULL_LABEL,
55142 			(void*)&&ZEND_NULL_LABEL,
55143 			(void*)&&ZEND_NULL_LABEL,
55144 			(void*)&&ZEND_NULL_LABEL,
55145 			(void*)&&ZEND_NULL_LABEL,
55146 			(void*)&&ZEND_NULL_LABEL,
55147 			(void*)&&ZEND_NULL_LABEL,
55148 			(void*)&&ZEND_NULL_LABEL,
55149 			(void*)&&ZEND_NULL_LABEL,
55150 			(void*)&&ZEND_NULL_LABEL,
55151 			(void*)&&ZEND_NULL_LABEL,
55152 			(void*)&&ZEND_NULL_LABEL,
55153 			(void*)&&ZEND_NULL_LABEL,
55154 			(void*)&&ZEND_NULL_LABEL,
55155 			(void*)&&ZEND_NULL_LABEL,
55156 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55157 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55158 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55159 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55160 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55161 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55162 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55163 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55164 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55165 			(void*)&&ZEND_NULL_LABEL,
55166 			(void*)&&ZEND_NULL_LABEL,
55167 			(void*)&&ZEND_NULL_LABEL,
55168 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55169 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55170 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55171 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55172 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55173 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55174 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55175 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55176 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55177 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55178 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55179 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55180 			(void*)&&ZEND_NULL_LABEL,
55181 			(void*)&&ZEND_NULL_LABEL,
55182 			(void*)&&ZEND_NULL_LABEL,
55183 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55184 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55185 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_LABEL,
55192 			(void*)&&ZEND_NULL_LABEL,
55193 			(void*)&&ZEND_NULL_LABEL,
55194 			(void*)&&ZEND_NULL_LABEL,
55195 			(void*)&&ZEND_NULL_LABEL,
55196 			(void*)&&ZEND_NULL_LABEL,
55197 			(void*)&&ZEND_NULL_LABEL,
55198 			(void*)&&ZEND_NULL_LABEL,
55199 			(void*)&&ZEND_NULL_LABEL,
55200 			(void*)&&ZEND_NULL_LABEL,
55201 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55202 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55203 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55204 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55205 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55206 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55207 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55208 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55209 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55210 			(void*)&&ZEND_NULL_LABEL,
55211 			(void*)&&ZEND_NULL_LABEL,
55212 			(void*)&&ZEND_NULL_LABEL,
55213 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55214 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55215 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55216 			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
55217 			(void*)&&ZEND_NULL_LABEL,
55218 			(void*)&&ZEND_NULL_LABEL,
55219 			(void*)&&ZEND_NULL_LABEL,
55220 			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
55221 			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
55222 			(void*)&&ZEND_NULL_LABEL,
55223 			(void*)&&ZEND_NULL_LABEL,
55224 			(void*)&&ZEND_NULL_LABEL,
55225 			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
55226 			(void*)&&ZEND_NULL_LABEL,
55227 			(void*)&&ZEND_NULL_LABEL,
55228 			(void*)&&ZEND_NULL_LABEL,
55229 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
55230 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55231 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55232 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
55233 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55234 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55235 			(void*)&&ZEND_NULL_LABEL,
55236 			(void*)&&ZEND_NULL_LABEL,
55237 			(void*)&&ZEND_NULL_LABEL,
55238 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
55239 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55240 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55241 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
55242 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55243 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55244 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55245 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55246 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55247 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55248 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55249 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55250 			(void*)&&ZEND_NULL_LABEL,
55251 			(void*)&&ZEND_NULL_LABEL,
55252 			(void*)&&ZEND_NULL_LABEL,
55253 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55254 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55255 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55256 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
55257 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55258 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55259 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55260 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55261 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55262 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55263 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55264 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55265 			(void*)&&ZEND_NULL_LABEL,
55266 			(void*)&&ZEND_NULL_LABEL,
55267 			(void*)&&ZEND_NULL_LABEL,
55268 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55269 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55270 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55271 			(void*)&&ZEND_NULL_LABEL,
55272 			(void*)&&ZEND_NULL_LABEL,
55273 			(void*)&&ZEND_NULL_LABEL,
55274 			(void*)&&ZEND_NULL_LABEL,
55275 			(void*)&&ZEND_NULL_LABEL,
55276 			(void*)&&ZEND_NULL_LABEL,
55277 			(void*)&&ZEND_NULL_LABEL,
55278 			(void*)&&ZEND_NULL_LABEL,
55279 			(void*)&&ZEND_NULL_LABEL,
55280 			(void*)&&ZEND_NULL_LABEL,
55281 			(void*)&&ZEND_NULL_LABEL,
55282 			(void*)&&ZEND_NULL_LABEL,
55283 			(void*)&&ZEND_NULL_LABEL,
55284 			(void*)&&ZEND_NULL_LABEL,
55285 			(void*)&&ZEND_NULL_LABEL,
55286 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
55287 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55288 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55289 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55290 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55291 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55292 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55293 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55294 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55295 			(void*)&&ZEND_NULL_LABEL,
55296 			(void*)&&ZEND_NULL_LABEL,
55297 			(void*)&&ZEND_NULL_LABEL,
55298 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55299 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55300 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55301 			(void*)&&ZEND_NULL_LABEL,
55302 			(void*)&&ZEND_NULL_LABEL,
55303 			(void*)&&ZEND_NULL_LABEL,
55304 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
55305 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55306 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55307 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
55308 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55309 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55310 			(void*)&&ZEND_NULL_LABEL,
55311 			(void*)&&ZEND_NULL_LABEL,
55312 			(void*)&&ZEND_NULL_LABEL,
55313 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
55314 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55315 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55316 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55317 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55318 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55319 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55320 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55321 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55322 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55323 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55324 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55325 			(void*)&&ZEND_NULL_LABEL,
55326 			(void*)&&ZEND_NULL_LABEL,
55327 			(void*)&&ZEND_NULL_LABEL,
55328 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55329 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55330 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55331 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55332 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55333 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55334 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55335 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55336 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55337 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55338 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55339 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55340 			(void*)&&ZEND_NULL_LABEL,
55341 			(void*)&&ZEND_NULL_LABEL,
55342 			(void*)&&ZEND_NULL_LABEL,
55343 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55344 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55345 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_LABEL,
55354 			(void*)&&ZEND_NULL_LABEL,
55355 			(void*)&&ZEND_NULL_LABEL,
55356 			(void*)&&ZEND_NULL_LABEL,
55357 			(void*)&&ZEND_NULL_LABEL,
55358 			(void*)&&ZEND_NULL_LABEL,
55359 			(void*)&&ZEND_NULL_LABEL,
55360 			(void*)&&ZEND_NULL_LABEL,
55361 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55362 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55363 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55364 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55365 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55366 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55367 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55368 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55369 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55370 			(void*)&&ZEND_NULL_LABEL,
55371 			(void*)&&ZEND_NULL_LABEL,
55372 			(void*)&&ZEND_NULL_LABEL,
55373 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55374 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55375 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55376 			(void*)&&ZEND_NULL_LABEL,
55377 			(void*)&&ZEND_NULL_LABEL,
55378 			(void*)&&ZEND_NULL_LABEL,
55379 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
55380 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55381 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55382 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
55383 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55384 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55385 			(void*)&&ZEND_NULL_LABEL,
55386 			(void*)&&ZEND_NULL_LABEL,
55387 			(void*)&&ZEND_NULL_LABEL,
55388 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
55389 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55390 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55391 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
55392 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55393 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55394 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55395 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55396 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55397 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55398 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55399 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55400 			(void*)&&ZEND_NULL_LABEL,
55401 			(void*)&&ZEND_NULL_LABEL,
55402 			(void*)&&ZEND_NULL_LABEL,
55403 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55404 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55405 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55406 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
55407 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55408 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55409 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55410 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55411 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55412 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55413 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55414 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55415 			(void*)&&ZEND_NULL_LABEL,
55416 			(void*)&&ZEND_NULL_LABEL,
55417 			(void*)&&ZEND_NULL_LABEL,
55418 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55419 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55420 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55421 			(void*)&&ZEND_NULL_LABEL,
55422 			(void*)&&ZEND_NULL_LABEL,
55423 			(void*)&&ZEND_NULL_LABEL,
55424 			(void*)&&ZEND_NULL_LABEL,
55425 			(void*)&&ZEND_NULL_LABEL,
55426 			(void*)&&ZEND_NULL_LABEL,
55427 			(void*)&&ZEND_NULL_LABEL,
55428 			(void*)&&ZEND_NULL_LABEL,
55429 			(void*)&&ZEND_NULL_LABEL,
55430 			(void*)&&ZEND_NULL_LABEL,
55431 			(void*)&&ZEND_NULL_LABEL,
55432 			(void*)&&ZEND_NULL_LABEL,
55433 			(void*)&&ZEND_NULL_LABEL,
55434 			(void*)&&ZEND_NULL_LABEL,
55435 			(void*)&&ZEND_NULL_LABEL,
55436 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
55437 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55438 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55439 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55440 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55441 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55442 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55443 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55444 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55445 			(void*)&&ZEND_NULL_LABEL,
55446 			(void*)&&ZEND_NULL_LABEL,
55447 			(void*)&&ZEND_NULL_LABEL,
55448 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
55449 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55450 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55451 			(void*)&&ZEND_NULL_LABEL,
55452 			(void*)&&ZEND_NULL_LABEL,
55453 			(void*)&&ZEND_NULL_LABEL,
55454 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
55455 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55456 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55457 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
55458 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55459 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55460 			(void*)&&ZEND_NULL_LABEL,
55461 			(void*)&&ZEND_NULL_LABEL,
55462 			(void*)&&ZEND_NULL_LABEL,
55463 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
55464 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
55465 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
55466 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55467 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55468 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55469 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55470 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55471 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55472 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55473 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55474 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55475 			(void*)&&ZEND_NULL_LABEL,
55476 			(void*)&&ZEND_NULL_LABEL,
55477 			(void*)&&ZEND_NULL_LABEL,
55478 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55479 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55480 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55481 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55482 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55483 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55484 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55485 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55486 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55487 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55488 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55489 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55490 			(void*)&&ZEND_NULL_LABEL,
55491 			(void*)&&ZEND_NULL_LABEL,
55492 			(void*)&&ZEND_NULL_LABEL,
55493 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55494 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55495 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55496 			(void*)&&ZEND_NULL_LABEL,
55497 			(void*)&&ZEND_NULL_LABEL,
55498 			(void*)&&ZEND_NULL_LABEL,
55499 			(void*)&&ZEND_NULL_LABEL,
55500 			(void*)&&ZEND_NULL_LABEL,
55501 			(void*)&&ZEND_NULL_LABEL,
55502 			(void*)&&ZEND_NULL_LABEL,
55503 			(void*)&&ZEND_NULL_LABEL,
55504 			(void*)&&ZEND_NULL_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_NULL_LABEL,
55511 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
55512 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
55513 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
55514 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55515 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55516 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55517 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55518 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55519 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55520 			(void*)&&ZEND_NULL_LABEL,
55521 			(void*)&&ZEND_NULL_LABEL,
55522 			(void*)&&ZEND_NULL_LABEL,
55523 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
55524 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
55525 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
55526 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
55527 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
55528 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
55529 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL,
55530 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
55531 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
55532 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
55533 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL,
55534 			(void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
55535 			(void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL,
55536 			(void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
55537 			(void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL,
55538 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_CONST_LABEL,
55539 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
55540 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
55541 			(void*)&&ZEND_NULL_LABEL,
55542 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
55543 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
55544 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
55545 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
55546 			(void*)&&ZEND_NULL_LABEL,
55547 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
55548 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
55549 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
55550 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
55551 			(void*)&&ZEND_NULL_LABEL,
55552 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
55553 			(void*)&&ZEND_NULL_LABEL,
55554 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
55555 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
55556 			(void*)&&ZEND_NULL_LABEL,
55557 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
55558 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
55559 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
55560 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
55561 			(void*)&&ZEND_NULL_LABEL,
55562 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
55563 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
55564 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
55565 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
55566 			(void*)&&ZEND_NULL_LABEL,
55567 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
55568 			(void*)&&ZEND_NULL_LABEL,
55569 			(void*)&&ZEND_NULL_LABEL,
55570 			(void*)&&ZEND_NULL_LABEL,
55571 			(void*)&&ZEND_NULL_LABEL,
55572 			(void*)&&ZEND_NULL_LABEL,
55573 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
55574 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
55575 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
55576 			(void*)&&ZEND_NULL_LABEL,
55577 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
55578 			(void*)&&ZEND_NULL_LABEL,
55579 			(void*)&&ZEND_NULL_LABEL,
55580 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
55581 			(void*)&&ZEND_NULL_LABEL,
55582 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
55583 			(void*)&&ZEND_NULL_LABEL,
55584 			(void*)&&ZEND_NULL_LABEL,
55585 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_LABEL,
55586 			(void*)&&ZEND_NULL_LABEL,
55587 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_LABEL,
55588 			(void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL,
55589 			(void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL,
55590 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
55591 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
55592 			(void*)&&ZEND_NULL_LABEL
55593 		};
55594 		zend_opcode_handlers = (const void **) labels;
55595 		zend_handlers_count = sizeof(labels) / sizeof(void*);
55596 		memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
55597 		hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
55598 #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
55599 		memset(vm_stack_data.hybrid_jit_red_zone, 0, ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE);
55600 #endif
55601 		if (zend_touch_vm_stack_data) {
55602 			zend_touch_vm_stack_data(&vm_stack_data);
55603 		}
55604 		goto HYBRID_HALT_LABEL;
55605 	}
55606 #endif
55607 
55608 	LOAD_OPLINE();
55609 	ZEND_VM_LOOP_INTERRUPT_CHECK();
55610 
55611 	while (1) {
55612 #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
55613 			int ret;
55614 #endif
55615 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
55616 		HYBRID_SWITCH() {
55617 #else
55618 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
55619 		((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55620 		if (UNEXPECTED(!OPLINE)) {
55621 #else
55622 		if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
55623 #endif
55624 #endif
55625 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
55626 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC):
55627 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
55628 				ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55629 				HYBRID_BREAK();
55630 			HYBRID_CASE(ZEND_PRE_INC_STATIC_PROP_SPEC):
55631 				VM_TRACE(ZEND_PRE_INC_STATIC_PROP_SPEC)
55632 				ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55633 				HYBRID_BREAK();
55634 			HYBRID_CASE(ZEND_POST_INC_STATIC_PROP_SPEC):
55635 				VM_TRACE(ZEND_POST_INC_STATIC_PROP_SPEC)
55636 				ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55637 				HYBRID_BREAK();
55638 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC):
55639 				VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC)
55640 				ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55641 				HYBRID_BREAK();
55642 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC):
55643 				VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC)
55644 				ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55645 				HYBRID_BREAK();
55646 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC):
55647 				VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC)
55648 				ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55649 				HYBRID_BREAK();
55650 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC):
55651 				VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
55652 				ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55653 				HYBRID_BREAK();
55654 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC):
55655 				VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
55656 				ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55657 				HYBRID_BREAK();
55658 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC):
55659 				VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC)
55660 				ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55661 				HYBRID_BREAK();
55662 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST):
55663 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
55664 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55665 				HYBRID_BREAK();
55666 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP):
55667 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
55668 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55669 				HYBRID_BREAK();
55670 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR):
55671 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
55672 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55673 				HYBRID_BREAK();
55674 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV):
55675 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
55676 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55677 				HYBRID_BREAK();
55678 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC):
55679 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
55680 				ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55681 				HYBRID_BREAK();
55682 zend_leave_helper_SPEC_LABEL:
55683 {
55684 	zend_execute_data *old_execute_data;
55685 	uint32_t call_info = EX_CALL_INFO();
55686 	SAVE_OPLINE();
55687 
55688 	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)) {
55689 		EG(current_execute_data) = EX(prev_execute_data);
55690 		i_free_compiled_variables(execute_data);
55691 
55692 #ifdef ZEND_PREFER_RELOAD
55693 		call_info = EX_CALL_INFO();
55694 #endif
55695 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
55696 			OBJ_RELEASE(Z_OBJ(execute_data->This));
55697 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
55698 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
55699 		}
55700 		EG(vm_stack_top) = (zval*)execute_data;
55701 		execute_data = EX(prev_execute_data);
55702 
55703 		if (UNEXPECTED(EG(exception) != NULL)) {
55704 			zend_rethrow_exception(execute_data);
55705 			HANDLE_EXCEPTION_LEAVE();
55706 		}
55707 
55708 		LOAD_NEXT_OPLINE();
55709 		ZEND_VM_LEAVE();
55710 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
55711 		EG(current_execute_data) = EX(prev_execute_data);
55712 		i_free_compiled_variables(execute_data);
55713 
55714 #ifdef ZEND_PREFER_RELOAD
55715 		call_info = EX_CALL_INFO();
55716 #endif
55717 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
55718 			zend_clean_and_cache_symbol_table(EX(symbol_table));
55719 		}
55720 
55721 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
55722 			zend_free_extra_named_params(EX(extra_named_params));
55723 		}
55724 
55725 		/* Free extra args before releasing the closure,
55726 		 * as that may free the op_array. */
55727 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
55728 
55729 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
55730 			OBJ_RELEASE(Z_OBJ(execute_data->This));
55731 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
55732 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
55733 		}
55734 
55735 		old_execute_data = execute_data;
55736 		execute_data = EX(prev_execute_data);
55737 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
55738 
55739 		if (UNEXPECTED(EG(exception) != NULL)) {
55740 			zend_rethrow_exception(execute_data);
55741 			HANDLE_EXCEPTION_LEAVE();
55742 		}
55743 
55744 		LOAD_NEXT_OPLINE();
55745 		ZEND_VM_LEAVE();
55746 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
55747 		zend_detach_symbol_table(execute_data);
55748 		zend_destroy_static_vars(&EX(func)->op_array);
55749 		destroy_op_array(&EX(func)->op_array);
55750 		efree_size(EX(func), sizeof(zend_op_array));
55751 #ifdef ZEND_PREFER_RELOAD
55752 		call_info = EX_CALL_INFO();
55753 #endif
55754 		old_execute_data = execute_data;
55755 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
55756 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
55757 
55758 		zend_attach_symbol_table(execute_data);
55759 		if (UNEXPECTED(EG(exception) != NULL)) {
55760 			zend_rethrow_exception(execute_data);
55761 			HANDLE_EXCEPTION_LEAVE();
55762 		}
55763 
55764 		LOAD_NEXT_OPLINE();
55765 		ZEND_VM_LEAVE();
55766 	} else {
55767 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
55768 			EG(current_execute_data) = EX(prev_execute_data);
55769 			i_free_compiled_variables(execute_data);
55770 #ifdef ZEND_PREFER_RELOAD
55771 			call_info = EX_CALL_INFO();
55772 #endif
55773 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
55774 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
55775 					zend_clean_and_cache_symbol_table(EX(symbol_table));
55776 				}
55777 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
55778 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
55779 					zend_free_extra_named_params(EX(extra_named_params));
55780 				}
55781 			}
55782 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
55783 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
55784 			}
55785 			ZEND_VM_RETURN();
55786 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
55787 			zend_array *symbol_table = EX(symbol_table);
55788 
55789 			zend_detach_symbol_table(execute_data);
55790 			old_execute_data = EX(prev_execute_data);
55791 			while (old_execute_data) {
55792 				if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
55793 					if (old_execute_data->symbol_table == symbol_table) {
55794 						zend_attach_symbol_table(old_execute_data);
55795 					}
55796 					break;
55797 				}
55798 				old_execute_data = old_execute_data->prev_execute_data;
55799 			}
55800 			EG(current_execute_data) = EX(prev_execute_data);
55801 			ZEND_VM_RETURN();
55802 		}
55803 	}
55804 }
55805 
55806 			HYBRID_CASE(ZEND_JMP_SPEC):
55807 				VM_TRACE(ZEND_JMP_SPEC)
55808 				ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55809 				HYBRID_BREAK();
55810 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
55811 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
55812 				ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55813 				HYBRID_BREAK();
55814 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
55815 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
55816 				ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55817 				HYBRID_BREAK();
55818 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
55819 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
55820 				ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55821 				HYBRID_BREAK();
55822 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
55823 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
55824 				ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55825 				HYBRID_BREAK();
55826 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_OBSERVER):
55827 				VM_TRACE(ZEND_DO_UCALL_SPEC_OBSERVER)
55828 				ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55829 				HYBRID_BREAK();
55830 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
55831 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
55832 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55833 				HYBRID_BREAK();
55834 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
55835 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
55836 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55837 				HYBRID_BREAK();
55838 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER):
55839 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER)
55840 				ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55841 				HYBRID_BREAK();
55842 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
55843 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
55844 				ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55845 				HYBRID_BREAK();
55846 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
55847 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
55848 				ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55849 				HYBRID_BREAK();
55850 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_OBSERVER):
55851 				VM_TRACE(ZEND_DO_FCALL_SPEC_OBSERVER)
55852 				ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55853 				HYBRID_BREAK();
55854 			HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
55855 				VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
55856 				ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55857 				HYBRID_BREAK();
55858 			HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
55859 				VM_TRACE(ZEND_SEND_UNPACK_SPEC)
55860 				ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55861 				HYBRID_BREAK();
55862 			HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
55863 				VM_TRACE(ZEND_SEND_ARRAY_SPEC)
55864 				ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55865 				HYBRID_BREAK();
55866 			HYBRID_CASE(ZEND_RECV_NOTYPE_SPEC):
55867 				VM_TRACE(ZEND_RECV_NOTYPE_SPEC)
55868 				ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55869 				HYBRID_BREAK();
55870 			HYBRID_CASE(ZEND_ADD_ARRAY_UNPACK_SPEC):
55871 				VM_TRACE(ZEND_ADD_ARRAY_UNPACK_SPEC)
55872 				ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55873 				HYBRID_BREAK();
55874 			HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC):
55875 				VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC)
55876 				ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55877 				HYBRID_BREAK();
55878 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC):
55879 				VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
55880 				ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55881 				HYBRID_BREAK();
55882 			HYBRID_CASE(ZEND_EXIT_SPEC):
55883 				VM_TRACE(ZEND_EXIT_SPEC)
55884 				ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55885 				HYBRID_BREAK();
55886 			HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
55887 				VM_TRACE(ZEND_BEGIN_SILENCE_SPEC)
55888 				ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55889 				HYBRID_BREAK();
55890 			HYBRID_CASE(ZEND_EXT_STMT_SPEC):
55891 				VM_TRACE(ZEND_EXT_STMT_SPEC)
55892 				ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55893 				HYBRID_BREAK();
55894 			HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
55895 				VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC)
55896 				ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55897 				HYBRID_BREAK();
55898 			HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
55899 				VM_TRACE(ZEND_EXT_FCALL_END_SPEC)
55900 				ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55901 				HYBRID_BREAK();
55902 			HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
55903 				VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC)
55904 				ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55905 				HYBRID_BREAK();
55906 			HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
55907 				VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC)
55908 				ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55909 				HYBRID_BREAK();
55910 			HYBRID_CASE(ZEND_TICKS_SPEC):
55911 				VM_TRACE(ZEND_TICKS_SPEC)
55912 				ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55913 				HYBRID_BREAK();
55914 			HYBRID_CASE(ZEND_EXT_NOP_SPEC):
55915 				VM_TRACE(ZEND_EXT_NOP_SPEC)
55916 				ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55917 				HYBRID_BREAK();
55918 			HYBRID_CASE(ZEND_NOP_SPEC):
55919 				VM_TRACE(ZEND_NOP_SPEC)
55920 				ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55921 				HYBRID_BREAK();
55922 			HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
55923 				VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
55924 				ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55925 				HYBRID_BREAK();
55926 			HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
55927 				VM_TRACE(ZEND_USER_OPCODE_SPEC)
55928 				ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55929 				HYBRID_BREAK();
55930 			HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
55931 				VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC)
55932 				ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55933 				HYBRID_BREAK();
55934 			HYBRID_CASE(ZEND_FAST_CALL_SPEC):
55935 				VM_TRACE(ZEND_FAST_CALL_SPEC)
55936 				ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55937 				HYBRID_BREAK();
55938 			HYBRID_CASE(ZEND_FAST_RET_SPEC):
55939 				VM_TRACE(ZEND_FAST_RET_SPEC)
55940 				ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55941 				HYBRID_BREAK();
55942 			HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
55943 				VM_TRACE(ZEND_ASSERT_CHECK_SPEC)
55944 				ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55945 				HYBRID_BREAK();
55946 			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
55947 				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
55948 				ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55949 				HYBRID_BREAK();
55950 			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER):
55951 				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
55952 				ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55953 				HYBRID_BREAK();
55954 			HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
55955 				VM_TRACE(ZEND_JMP_FORWARD_SPEC)
55956 				ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55957 				HYBRID_BREAK();
55958 			HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
55959 				VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
55960 				ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55961 				HYBRID_BREAK();
55962 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
55963 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
55964 				ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55965 				HYBRID_BREAK();
55966 			HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
55967 				VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
55968 				ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55969 				HYBRID_BREAK();
55970 			HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
55971 				VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST)
55972 				ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55973 				HYBRID_BREAK();
55974 			HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
55975 				VM_TRACE(ZEND_RECV_INIT_SPEC_CONST)
55976 				ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55977 				HYBRID_BREAK();
55978 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
55979 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
55980 				ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55981 				HYBRID_BREAK();
55982 			HYBRID_CASE(ZEND_RECV_SPEC_UNUSED):
55983 				VM_TRACE(ZEND_RECV_SPEC_UNUSED)
55984 				ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55985 				HYBRID_BREAK();
55986 			HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED):
55987 				VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED)
55988 				ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55989 				HYBRID_BREAK();
55990 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
55991 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
55992 				ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55993 				HYBRID_BREAK();
55994 			HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
55995 				VM_TRACE(ZEND_BW_NOT_SPEC_CONST)
55996 				ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55997 				HYBRID_BREAK();
55998 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
55999 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST)
56000 				ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56001 				HYBRID_BREAK();
56002 			HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
56003 				VM_TRACE(ZEND_ECHO_SPEC_CONST)
56004 				ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56005 				HYBRID_BREAK();
56006 			HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
56007 				VM_TRACE(ZEND_JMPZ_SPEC_CONST)
56008 				ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56009 				HYBRID_BREAK();
56010 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
56011 				VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
56012 				ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56013 				HYBRID_BREAK();
56014 			HYBRID_CASE(ZEND_JMPZNZ_SPEC_CONST):
56015 				VM_TRACE(ZEND_JMPZNZ_SPEC_CONST)
56016 				ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56017 				HYBRID_BREAK();
56018 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
56019 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
56020 				ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56021 				HYBRID_BREAK();
56022 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
56023 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST)
56024 				ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56025 				HYBRID_BREAK();
56026 			HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
56027 				VM_TRACE(ZEND_RETURN_SPEC_CONST)
56028 {
56029 	USE_OPLINE
56030 	zval *retval_ptr;
56031 	zval *return_value;
56032 
56033 	retval_ptr = RT_CONSTANT(opline, opline->op1);
56034 	return_value = EX(return_value);
56035 
56036 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
56037 		SAVE_OPLINE();
56038 		retval_ptr = ZVAL_UNDEFINED_OP1();
56039 		if (return_value) {
56040 			ZVAL_NULL(return_value);
56041 		}
56042 	} else if (!return_value) {
56043 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
56044 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
56045 				SAVE_OPLINE();
56046 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
56047 			}
56048 		}
56049 	} else {
56050 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
56051 			ZVAL_COPY_VALUE(return_value, retval_ptr);
56052 			if (IS_CONST == IS_CONST) {
56053 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
56054 					Z_ADDREF_P(return_value);
56055 				}
56056 			}
56057 		} else if (IS_CONST == IS_CV) {
56058 			do {
56059 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
56060 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
56061 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
56062 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
56063 							ZVAL_COPY_VALUE(return_value, retval_ptr);
56064 							if (GC_MAY_LEAK(ref)) {
56065 								SAVE_OPLINE();
56066 								gc_possible_root(ref);
56067 							}
56068 							ZVAL_NULL(retval_ptr);
56069 							break;
56070 						} else {
56071 							Z_ADDREF_P(retval_ptr);
56072 						}
56073 					} else {
56074 						retval_ptr = Z_REFVAL_P(retval_ptr);
56075 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
56076 							Z_ADDREF_P(retval_ptr);
56077 						}
56078 					}
56079 				}
56080 				ZVAL_COPY_VALUE(return_value, retval_ptr);
56081 			} while (0);
56082 		} else /* if (IS_CONST == IS_VAR) */ {
56083 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
56084 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
56085 
56086 				retval_ptr = Z_REFVAL_P(retval_ptr);
56087 				ZVAL_COPY_VALUE(return_value, retval_ptr);
56088 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
56089 					efree_size(ref, sizeof(zend_reference));
56090 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
56091 					Z_ADDREF_P(retval_ptr);
56092 				}
56093 			} else {
56094 				ZVAL_COPY_VALUE(return_value, retval_ptr);
56095 			}
56096 		}
56097 	}
56098 
56099 
56100 
56101 	goto zend_leave_helper_SPEC_LABEL;
56102 }
56103 
56104 			HYBRID_CASE(ZEND_RETURN_SPEC_OBSERVER):
56105 				VM_TRACE(ZEND_RETURN_SPEC_OBSERVER)
56106 {
56107 	USE_OPLINE
56108 	zval *retval_ptr;
56109 	zval *return_value;
56110 	zval observer_retval;
56111 
56112 	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
56113 	return_value = EX(return_value);
56114 	if (!return_value) { return_value = &observer_retval; };
56115 	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
56116 		SAVE_OPLINE();
56117 		retval_ptr = ZVAL_UNDEFINED_OP1();
56118 		if (return_value) {
56119 			ZVAL_NULL(return_value);
56120 		}
56121 	} else if (!return_value) {
56122 		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
56123 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
56124 				SAVE_OPLINE();
56125 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
56126 			}
56127 		}
56128 	} else {
56129 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
56130 			ZVAL_COPY_VALUE(return_value, retval_ptr);
56131 			if (opline->op1_type == IS_CONST) {
56132 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
56133 					Z_ADDREF_P(return_value);
56134 				}
56135 			}
56136 		} else if (opline->op1_type == IS_CV) {
56137 			do {
56138 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
56139 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
56140 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
56141 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
56142 							ZVAL_COPY_VALUE(return_value, retval_ptr);
56143 							if (GC_MAY_LEAK(ref)) {
56144 								SAVE_OPLINE();
56145 								gc_possible_root(ref);
56146 							}
56147 							ZVAL_NULL(retval_ptr);
56148 							break;
56149 						} else {
56150 							Z_ADDREF_P(retval_ptr);
56151 						}
56152 					} else {
56153 						retval_ptr = Z_REFVAL_P(retval_ptr);
56154 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
56155 							Z_ADDREF_P(retval_ptr);
56156 						}
56157 					}
56158 				}
56159 				ZVAL_COPY_VALUE(return_value, retval_ptr);
56160 			} while (0);
56161 		} else /* if (opline->op1_type == IS_VAR) */ {
56162 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
56163 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
56164 
56165 				retval_ptr = Z_REFVAL_P(retval_ptr);
56166 				ZVAL_COPY_VALUE(return_value, retval_ptr);
56167 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
56168 					efree_size(ref, sizeof(zend_reference));
56169 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
56170 					Z_ADDREF_P(retval_ptr);
56171 				}
56172 			} else {
56173 				ZVAL_COPY_VALUE(return_value, retval_ptr);
56174 			}
56175 		}
56176 	}
56177 	SAVE_OPLINE();
56178 	zend_observer_fcall_end(execute_data, return_value);
56179 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
56180 	goto zend_leave_helper_SPEC_LABEL;
56181 }
56182 
56183 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
56184 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
56185 				ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56186 				HYBRID_BREAK();
56187 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_OBSERVER):
56188 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_OBSERVER)
56189 				ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56190 				HYBRID_BREAK();
56191 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
56192 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
56193 				ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56194 				HYBRID_BREAK();
56195 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER):
56196 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER)
56197 				ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56198 				HYBRID_BREAK();
56199 			HYBRID_CASE(ZEND_THROW_SPEC_CONST):
56200 				VM_TRACE(ZEND_THROW_SPEC_CONST)
56201 				ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56202 				HYBRID_BREAK();
56203 			HYBRID_CASE(ZEND_CATCH_SPEC_CONST):
56204 				VM_TRACE(ZEND_CATCH_SPEC_CONST)
56205 				ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56206 				HYBRID_BREAK();
56207 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
56208 				VM_TRACE(ZEND_SEND_USER_SPEC_CONST)
56209 				ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56210 				HYBRID_BREAK();
56211 			HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
56212 				VM_TRACE(ZEND_BOOL_SPEC_CONST)
56213 				ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56214 				HYBRID_BREAK();
56215 			HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
56216 				VM_TRACE(ZEND_CLONE_SPEC_CONST)
56217 				ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56218 				HYBRID_BREAK();
56219 			HYBRID_CASE(ZEND_CAST_SPEC_CONST):
56220 				VM_TRACE(ZEND_CAST_SPEC_CONST)
56221 				ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56222 				HYBRID_BREAK();
56223 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
56224 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
56225 				ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56226 				HYBRID_BREAK();
56227 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER):
56228 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER)
56229 				ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56230 				HYBRID_BREAK();
56231 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
56232 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
56233 				ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56234 				HYBRID_BREAK();
56235 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
56236 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST)
56237 				ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56238 				HYBRID_BREAK();
56239 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
56240 				VM_TRACE(ZEND_JMP_SET_SPEC_CONST)
56241 				ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56242 				HYBRID_BREAK();
56243 			HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
56244 				VM_TRACE(ZEND_COALESCE_SPEC_CONST)
56245 				ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56246 				HYBRID_BREAK();
56247 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CONST):
56248 				VM_TRACE(ZEND_JMP_NULL_SPEC_CONST)
56249 				ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56250 				HYBRID_BREAK();
56251 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
56252 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST)
56253 				ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56254 				HYBRID_BREAK();
56255 			HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST):
56256 				VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST)
56257 				ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56258 				HYBRID_BREAK();
56259 			HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST):
56260 				VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST)
56261 				ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56262 				HYBRID_BREAK();
56263 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
56264 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST)
56265 				ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56266 				HYBRID_BREAK();
56267 			HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
56268 				VM_TRACE(ZEND_STRLEN_SPEC_CONST)
56269 				ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56270 				HYBRID_BREAK();
56271 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
56272 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST)
56273 				ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56274 				HYBRID_BREAK();
56275 			HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
56276 				VM_TRACE(ZEND_DEFINED_SPEC_CONST)
56277 				ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56278 				HYBRID_BREAK();
56279 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_CONST):
56280 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
56281 				ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56282 				HYBRID_BREAK();
56283 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
56284 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
56285 				ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56286 				HYBRID_BREAK();
56287 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
56288 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
56289 				ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56290 				HYBRID_BREAK();
56291 			HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST):
56292 				VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
56293 				ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56294 				HYBRID_BREAK();
56295 			HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST):
56296 				VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
56297 				ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56298 				HYBRID_BREAK();
56299 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
56300 				VM_TRACE(ZEND_ADD_SPEC_CONST_CONST)
56301 				ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56302 				HYBRID_BREAK();
56303 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
56304 				VM_TRACE(ZEND_SUB_SPEC_CONST_CONST)
56305 				ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56306 				HYBRID_BREAK();
56307 			HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
56308 				VM_TRACE(ZEND_MUL_SPEC_CONST_CONST)
56309 				ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56310 				HYBRID_BREAK();
56311 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
56312 				VM_TRACE(ZEND_DIV_SPEC_CONST_CONST)
56313 				ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56314 				HYBRID_BREAK();
56315 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
56316 				VM_TRACE(ZEND_MOD_SPEC_CONST_CONST)
56317 				ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56318 				HYBRID_BREAK();
56319 			HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
56320 				VM_TRACE(ZEND_SL_SPEC_CONST_CONST)
56321 				ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56322 				HYBRID_BREAK();
56323 			HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
56324 				VM_TRACE(ZEND_SR_SPEC_CONST_CONST)
56325 				ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56326 				HYBRID_BREAK();
56327 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
56328 				VM_TRACE(ZEND_POW_SPEC_CONST_CONST)
56329 				ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56330 				HYBRID_BREAK();
56331 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
56332 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
56333 				ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56334 				HYBRID_BREAK();
56335 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
56336 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
56337 				ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56338 				HYBRID_BREAK();
56339 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
56340 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST)
56341 				ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56342 				HYBRID_BREAK();
56343 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
56344 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
56345 				ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56346 				HYBRID_BREAK();
56347 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
56348 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST)
56349 				ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56350 				HYBRID_BREAK();
56351 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
56352 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
56353 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56354 				HYBRID_BREAK();
56355 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
56356 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST)
56357 				ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56358 				HYBRID_BREAK();
56359 			HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
56360 				VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST)
56361 				ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56362 				HYBRID_BREAK();
56363 			HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
56364 				VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST)
56365 				ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56366 				HYBRID_BREAK();
56367 			HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
56368 				VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST)
56369 				ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56370 				HYBRID_BREAK();
56371 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
56372 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST)
56373 				ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56374 				HYBRID_BREAK();
56375 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
56376 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
56377 				ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56378 				HYBRID_BREAK();
56379 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
56380 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
56381 				ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56382 				HYBRID_BREAK();
56383 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
56384 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
56385 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56386 				HYBRID_BREAK();
56387 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
56388 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
56389 				ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56390 				HYBRID_BREAK();
56391 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
56392 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
56393 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56394 				HYBRID_BREAK();
56395 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
56396 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
56397 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56398 				HYBRID_BREAK();
56399 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST):
56400 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
56401 				ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56402 				HYBRID_BREAK();
56403 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
56404 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
56405 				ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56406 				HYBRID_BREAK();
56407 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
56408 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
56409 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56410 				HYBRID_BREAK();
56411 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
56412 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
56413 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56414 				HYBRID_BREAK();
56415 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
56416 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
56417 				ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56418 				HYBRID_BREAK();
56419 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_CONST):
56420 				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_CONST)
56421 				ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56422 				HYBRID_BREAK();
56423 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST):
56424 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST)
56425 				ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56426 				HYBRID_BREAK();
56427 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
56428 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
56429 				ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56430 				HYBRID_BREAK();
56431 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
56432 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
56433 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56434 				HYBRID_BREAK();
56435 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
56436 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
56437 				ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56438 				HYBRID_BREAK();
56439 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
56440 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
56441 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56442 				HYBRID_BREAK();
56443 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
56444 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
56445 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56446 				HYBRID_BREAK();
56447 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST):
56448 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
56449 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56450 				HYBRID_BREAK();
56451 			HYBRID_CASE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST):
56452 				VM_TRACE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
56453 				ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56454 				HYBRID_BREAK();
56455 			HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
56456 				VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
56457 				ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56458 				HYBRID_BREAK();
56459 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
56460 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST)
56461 				ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56462 				HYBRID_BREAK();
56463 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
56464 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
56465 				ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56466 				HYBRID_BREAK();
56467 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
56468 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
56469 				ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56470 				HYBRID_BREAK();
56471 			HYBRID_CASE(ZEND_MATCH_SPEC_CONST_CONST):
56472 				VM_TRACE(ZEND_MATCH_SPEC_CONST_CONST)
56473 				ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56474 				HYBRID_BREAK();
56475 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
56476 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST)
56477 				ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56478 				HYBRID_BREAK();
56479 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVARCV):
56480 				VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVARCV)
56481 				ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56482 				HYBRID_BREAK();
56483 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVARCV):
56484 				VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVARCV)
56485 				ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56486 				HYBRID_BREAK();
56487 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVARCV):
56488 				VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVARCV)
56489 				ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56490 				HYBRID_BREAK();
56491 			HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVARCV):
56492 				VM_TRACE(ZEND_SL_SPEC_CONST_TMPVARCV)
56493 				ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56494 				HYBRID_BREAK();
56495 			HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVARCV):
56496 				VM_TRACE(ZEND_SR_SPEC_CONST_TMPVARCV)
56497 				ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56498 				HYBRID_BREAK();
56499 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV):
56500 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
56501 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56502 				HYBRID_BREAK();
56503 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ):
56504 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
56505 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56506 				HYBRID_BREAK();
56507 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ):
56508 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
56509 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56510 				HYBRID_BREAK();
56511 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV):
56512 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
56513 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56514 				HYBRID_BREAK();
56515 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ):
56516 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
56517 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56518 				HYBRID_BREAK();
56519 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ):
56520 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
56521 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56522 				HYBRID_BREAK();
56523 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
56524 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
56525 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56526 				HYBRID_BREAK();
56527 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
56528 				VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
56529 				ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56530 				HYBRID_BREAK();
56531 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
56532 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
56533 				ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56534 				HYBRID_BREAK();
56535 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
56536 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
56537 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56538 				HYBRID_BREAK();
56539 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
56540 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
56541 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56542 				HYBRID_BREAK();
56543 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
56544 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
56545 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56546 				HYBRID_BREAK();
56547 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
56548 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
56549 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56550 				HYBRID_BREAK();
56551 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
56552 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
56553 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56554 				HYBRID_BREAK();
56555 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
56556 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
56557 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56558 				HYBRID_BREAK();
56559 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
56560 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
56561 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56562 				HYBRID_BREAK();
56563 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
56564 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
56565 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56566 				HYBRID_BREAK();
56567 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
56568 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
56569 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56570 				HYBRID_BREAK();
56571 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
56572 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
56573 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56574 				HYBRID_BREAK();
56575 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
56576 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
56577 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56578 				HYBRID_BREAK();
56579 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
56580 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
56581 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56582 				HYBRID_BREAK();
56583 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV):
56584 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
56585 				ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56586 				HYBRID_BREAK();
56587 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
56588 				VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR)
56589 				ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56590 				HYBRID_BREAK();
56591 			HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
56592 				VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR)
56593 				ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56594 				HYBRID_BREAK();
56595 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
56596 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR)
56597 				ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56598 				HYBRID_BREAK();
56599 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
56600 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
56601 				ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56602 				HYBRID_BREAK();
56603 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
56604 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
56605 				ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56606 				HYBRID_BREAK();
56607 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
56608 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
56609 				ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56610 				HYBRID_BREAK();
56611 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
56612 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
56613 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56614 				HYBRID_BREAK();
56615 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
56616 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
56617 				ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56618 				HYBRID_BREAK();
56619 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
56620 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
56621 				ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56622 				HYBRID_BREAK();
56623 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
56624 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
56625 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56626 				HYBRID_BREAK();
56627 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR):
56628 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
56629 				ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56630 				HYBRID_BREAK();
56631 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
56632 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
56633 				ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56634 				HYBRID_BREAK();
56635 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
56636 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
56637 				ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56638 				HYBRID_BREAK();
56639 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
56640 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
56641 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56642 				HYBRID_BREAK();
56643 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
56644 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
56645 				ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56646 				HYBRID_BREAK();
56647 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
56648 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
56649 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56650 				HYBRID_BREAK();
56651 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
56652 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
56653 				ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56654 				HYBRID_BREAK();
56655 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
56656 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
56657 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56658 				HYBRID_BREAK();
56659 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
56660 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
56661 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56662 				HYBRID_BREAK();
56663 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR):
56664 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
56665 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56666 				HYBRID_BREAK();
56667 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMPVAR):
56668 				VM_TRACE(ZEND_YIELD_SPEC_CONST_TMPVAR)
56669 				ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56670 				HYBRID_BREAK();
56671 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
56672 				VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED)
56673 				ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56674 				HYBRID_BREAK();
56675 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
56676 				VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED)
56677 				ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56678 				HYBRID_BREAK();
56679 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
56680 				VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
56681 				ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56682 				HYBRID_BREAK();
56683 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
56684 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
56685 				ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56686 				HYBRID_BREAK();
56687 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
56688 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
56689 				ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56690 				HYBRID_BREAK();
56691 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
56692 				VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
56693 				ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56694 				HYBRID_BREAK();
56695 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
56696 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
56697 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56698 				HYBRID_BREAK();
56699 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
56700 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
56701 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56702 				HYBRID_BREAK();
56703 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
56704 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
56705 				ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56706 				HYBRID_BREAK();
56707 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_UNUSED):
56708 				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_UNUSED)
56709 				ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56710 				HYBRID_BREAK();
56711 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED):
56712 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED)
56713 				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56714 				HYBRID_BREAK();
56715 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK):
56716 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK)
56717 				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56718 				HYBRID_BREAK();
56719 			HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED):
56720 				VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED)
56721 				ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56722 				HYBRID_BREAK();
56723 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
56724 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
56725 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56726 				HYBRID_BREAK();
56727 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
56728 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
56729 				ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56730 				HYBRID_BREAK();
56731 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
56732 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
56733 				ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56734 				HYBRID_BREAK();
56735 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
56736 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
56737 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56738 				HYBRID_BREAK();
56739 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
56740 				VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED)
56741 				ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56742 				HYBRID_BREAK();
56743 			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED):
56744 				VM_TRACE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED)
56745 				ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56746 				HYBRID_BREAK();
56747 			HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
56748 				VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED)
56749 				ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56750 				HYBRID_BREAK();
56751 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
56752 				VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
56753 				ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56754 				HYBRID_BREAK();
56755 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
56756 				VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
56757 				ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56758 				HYBRID_BREAK();
56759 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
56760 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
56761 				ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56762 				HYBRID_BREAK();
56763 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
56764 				VM_TRACE(ZEND_DIV_SPEC_CONST_CV)
56765 				ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56766 				HYBRID_BREAK();
56767 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
56768 				VM_TRACE(ZEND_POW_SPEC_CONST_CV)
56769 				ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56770 				HYBRID_BREAK();
56771 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
56772 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV)
56773 				ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56774 				HYBRID_BREAK();
56775 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
56776 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV)
56777 				ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56778 				HYBRID_BREAK();
56779 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
56780 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
56781 				ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56782 				HYBRID_BREAK();
56783 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
56784 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
56785 				ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56786 				HYBRID_BREAK();
56787 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
56788 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
56789 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56790 				HYBRID_BREAK();
56791 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
56792 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
56793 				ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56794 				HYBRID_BREAK();
56795 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
56796 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
56797 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56798 				HYBRID_BREAK();
56799 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
56800 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
56801 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56802 				HYBRID_BREAK();
56803 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV):
56804 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
56805 				ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56806 				HYBRID_BREAK();
56807 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
56808 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV)
56809 				ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56810 				HYBRID_BREAK();
56811 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
56812 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
56813 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56814 				HYBRID_BREAK();
56815 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
56816 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
56817 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56818 				HYBRID_BREAK();
56819 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
56820 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
56821 				ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56822 				HYBRID_BREAK();
56823 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
56824 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
56825 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56826 				HYBRID_BREAK();
56827 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
56828 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV)
56829 				ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56830 				HYBRID_BREAK();
56831 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
56832 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
56833 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56834 				HYBRID_BREAK();
56835 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
56836 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
56837 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56838 				HYBRID_BREAK();
56839 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV):
56840 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
56841 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56842 				HYBRID_BREAK();
56843 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
56844 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CV)
56845 				ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56846 				HYBRID_BREAK();
56847 			HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVARCV):
56848 				VM_TRACE(ZEND_BW_NOT_SPEC_TMPVARCV)
56849 				ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56850 				HYBRID_BREAK();
56851 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
56852 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
56853 				ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56854 				HYBRID_BREAK();
56855 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
56856 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
56857 				ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56858 				HYBRID_BREAK();
56859 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
56860 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
56861 				ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56862 				HYBRID_BREAK();
56863 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_CONST):
56864 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_CONST)
56865 				ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56866 				HYBRID_BREAK();
56867 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_CONST):
56868 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_CONST)
56869 				ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56870 				HYBRID_BREAK();
56871 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_CONST):
56872 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_CONST)
56873 				ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56874 				HYBRID_BREAK();
56875 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_CONST):
56876 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_CONST)
56877 				ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56878 				HYBRID_BREAK();
56879 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_CONST):
56880 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_CONST)
56881 				ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56882 				HYBRID_BREAK();
56883 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_CONST):
56884 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_CONST)
56885 				ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56886 				HYBRID_BREAK();
56887 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST):
56888 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
56889 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56890 				HYBRID_BREAK();
56891 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ):
56892 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
56893 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56894 				HYBRID_BREAK();
56895 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ):
56896 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
56897 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56898 				HYBRID_BREAK();
56899 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST):
56900 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
56901 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56902 				HYBRID_BREAK();
56903 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ):
56904 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
56905 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56906 				HYBRID_BREAK();
56907 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ):
56908 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
56909 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56910 				HYBRID_BREAK();
56911 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_CONST):
56912 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
56913 				ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56914 				HYBRID_BREAK();
56915 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_CONST):
56916 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
56917 				ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56918 				HYBRID_BREAK();
56919 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST):
56920 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
56921 				ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56922 				HYBRID_BREAK();
56923 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST):
56924 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
56925 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56926 				HYBRID_BREAK();
56927 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST):
56928 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
56929 				ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56930 				HYBRID_BREAK();
56931 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST):
56932 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
56933 				ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56934 				HYBRID_BREAK();
56935 			HYBRID_CASE(ZEND_MATCH_SPEC_TMPVARCV_CONST):
56936 				VM_TRACE(ZEND_MATCH_SPEC_TMPVARCV_CONST)
56937 				ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56938 				HYBRID_BREAK();
56939 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
56940 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
56941 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56942 				HYBRID_BREAK();
56943 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST):
56944 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
56945 				ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56946 				HYBRID_BREAK();
56947 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST):
56948 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
56949 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56950 				HYBRID_BREAK();
56951 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
56952 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
56953 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56954 				HYBRID_BREAK();
56955 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
56956 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
56957 				ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56958 				HYBRID_BREAK();
56959 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
56960 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
56961 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56962 				HYBRID_BREAK();
56963 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
56964 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
56965 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56966 				HYBRID_BREAK();
56967 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST):
56968 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
56969 				ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56970 				HYBRID_BREAK();
56971 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST):
56972 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
56973 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56974 				HYBRID_BREAK();
56975 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST):
56976 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
56977 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56978 				HYBRID_BREAK();
56979 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
56980 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
56981 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56982 				HYBRID_BREAK();
56983 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
56984 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
56985 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56986 				HYBRID_BREAK();
56987 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
56988 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
56989 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56990 				HYBRID_BREAK();
56991 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
56992 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
56993 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56994 				HYBRID_BREAK();
56995 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
56996 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
56997 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56998 				HYBRID_BREAK();
56999 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST):
57000 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
57001 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57002 				HYBRID_BREAK();
57003 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
57004 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
57005 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57006 				HYBRID_BREAK();
57007 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
57008 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
57009 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57010 				HYBRID_BREAK();
57011 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
57012 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
57013 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57014 				HYBRID_BREAK();
57015 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
57016 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
57017 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57018 				HYBRID_BREAK();
57019 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
57020 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
57021 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57022 				HYBRID_BREAK();
57023 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
57024 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
57025 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57026 				HYBRID_BREAK();
57027 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
57028 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
57029 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57030 				HYBRID_BREAK();
57031 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
57032 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
57033 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57034 				HYBRID_BREAK();
57035 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
57036 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
57037 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57038 				HYBRID_BREAK();
57039 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
57040 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
57041 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57042 				HYBRID_BREAK();
57043 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
57044 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
57045 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57046 				HYBRID_BREAK();
57047 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
57048 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
57049 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57050 				HYBRID_BREAK();
57051 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
57052 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
57053 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57054 				HYBRID_BREAK();
57055 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
57056 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
57057 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57058 				HYBRID_BREAK();
57059 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
57060 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
57061 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57062 				HYBRID_BREAK();
57063 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
57064 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
57065 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57066 				HYBRID_BREAK();
57067 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
57068 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
57069 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57070 				HYBRID_BREAK();
57071 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV):
57072 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
57073 				ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57074 				HYBRID_BREAK();
57075 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV):
57076 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
57077 				ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57078 				HYBRID_BREAK();
57079 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV):
57080 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
57081 				ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57082 				HYBRID_BREAK();
57083 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV):
57084 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
57085 				ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57086 				HYBRID_BREAK();
57087 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV):
57088 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
57089 				ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57090 				HYBRID_BREAK();
57091 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV):
57092 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
57093 				ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57094 				HYBRID_BREAK();
57095 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV):
57096 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
57097 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57098 				HYBRID_BREAK();
57099 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57100 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57101 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57102 				HYBRID_BREAK();
57103 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57104 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57105 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57106 				HYBRID_BREAK();
57107 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV):
57108 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
57109 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57110 				HYBRID_BREAK();
57111 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57112 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57113 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57114 				HYBRID_BREAK();
57115 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57116 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57117 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57118 				HYBRID_BREAK();
57119 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV):
57120 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
57121 				ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57122 				HYBRID_BREAK();
57123 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV):
57124 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
57125 				ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57126 				HYBRID_BREAK();
57127 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV):
57128 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
57129 				ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57130 				HYBRID_BREAK();
57131 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
57132 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
57133 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57134 				HYBRID_BREAK();
57135 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
57136 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
57137 				ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57138 				HYBRID_BREAK();
57139 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
57140 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
57141 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57142 				HYBRID_BREAK();
57143 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
57144 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
57145 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57146 				HYBRID_BREAK();
57147 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
57148 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
57149 				ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57150 				HYBRID_BREAK();
57151 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
57152 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
57153 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57154 				HYBRID_BREAK();
57155 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
57156 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
57157 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57158 				HYBRID_BREAK();
57159 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
57160 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
57161 				ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57162 				HYBRID_BREAK();
57163 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
57164 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
57165 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57166 				HYBRID_BREAK();
57167 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
57168 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
57169 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57170 				HYBRID_BREAK();
57171 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57172 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57173 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57174 				HYBRID_BREAK();
57175 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57176 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57177 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57178 				HYBRID_BREAK();
57179 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
57180 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
57181 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57182 				HYBRID_BREAK();
57183 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57184 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57185 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57186 				HYBRID_BREAK();
57187 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57188 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57189 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57190 				HYBRID_BREAK();
57191 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
57192 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
57193 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57194 				HYBRID_BREAK();
57195 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57196 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57197 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57198 				HYBRID_BREAK();
57199 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57200 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57201 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57202 				HYBRID_BREAK();
57203 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
57204 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
57205 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57206 				HYBRID_BREAK();
57207 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57208 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57209 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57210 				HYBRID_BREAK();
57211 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57212 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57213 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57214 				HYBRID_BREAK();
57215 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
57216 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
57217 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57218 				HYBRID_BREAK();
57219 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57220 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57221 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57222 				HYBRID_BREAK();
57223 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57224 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57225 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57226 				HYBRID_BREAK();
57227 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
57228 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
57229 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57230 				HYBRID_BREAK();
57231 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57232 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57233 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57234 				HYBRID_BREAK();
57235 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57236 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57237 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57238 				HYBRID_BREAK();
57239 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
57240 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
57241 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57242 				HYBRID_BREAK();
57243 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57244 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57245 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57246 				HYBRID_BREAK();
57247 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57248 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57249 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57250 				HYBRID_BREAK();
57251 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
57252 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
57253 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57254 				HYBRID_BREAK();
57255 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
57256 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
57257 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57258 				HYBRID_BREAK();
57259 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
57260 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
57261 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57262 				HYBRID_BREAK();
57263 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR):
57264 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
57265 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57266 				HYBRID_BREAK();
57267 			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED):
57268 				VM_TRACE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED)
57269 				ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57270 				HYBRID_BREAK();
57271 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV):
57272 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
57273 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57274 				HYBRID_BREAK();
57275 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
57276 				VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR)
57277 				ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57278 				HYBRID_BREAK();
57279 			HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
57280 				VM_TRACE(ZEND_ECHO_SPEC_TMPVAR)
57281 				ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57282 				HYBRID_BREAK();
57283 			HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
57284 				VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR)
57285 				ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57286 				HYBRID_BREAK();
57287 			HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
57288 				VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
57289 				ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57290 				HYBRID_BREAK();
57291 			HYBRID_CASE(ZEND_JMPZNZ_SPEC_TMPVAR):
57292 				VM_TRACE(ZEND_JMPZNZ_SPEC_TMPVAR)
57293 				ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57294 				HYBRID_BREAK();
57295 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
57296 				VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
57297 				ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57298 				HYBRID_BREAK();
57299 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
57300 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR)
57301 				ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57302 				HYBRID_BREAK();
57303 			HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
57304 				VM_TRACE(ZEND_FREE_SPEC_TMPVAR)
57305 				ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57306 				HYBRID_BREAK();
57307 			HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
57308 				VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR)
57309 				ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57310 				HYBRID_BREAK();
57311 			HYBRID_CASE(ZEND_THROW_SPEC_TMPVAR):
57312 				VM_TRACE(ZEND_THROW_SPEC_TMPVAR)
57313 				ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57314 				HYBRID_BREAK();
57315 			HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
57316 				VM_TRACE(ZEND_BOOL_SPEC_TMPVAR)
57317 				ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57318 				HYBRID_BREAK();
57319 			HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
57320 				VM_TRACE(ZEND_CLONE_SPEC_TMPVAR)
57321 				ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57322 				HYBRID_BREAK();
57323 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
57324 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
57325 				ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57326 				HYBRID_BREAK();
57327 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
57328 				VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
57329 				ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57330 				HYBRID_BREAK();
57331 			HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
57332 				VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
57333 				ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57334 				HYBRID_BREAK();
57335 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR):
57336 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR)
57337 				ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57338 				HYBRID_BREAK();
57339 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR):
57340 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR)
57341 				ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57342 				HYBRID_BREAK();
57343 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
57344 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST)
57345 				ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57346 				HYBRID_BREAK();
57347 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
57348 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST)
57349 				ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57350 				HYBRID_BREAK();
57351 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
57352 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST)
57353 				ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57354 				HYBRID_BREAK();
57355 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
57356 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
57357 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57358 				HYBRID_BREAK();
57359 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
57360 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
57361 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57362 				HYBRID_BREAK();
57363 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
57364 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
57365 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57366 				HYBRID_BREAK();
57367 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
57368 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
57369 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57370 				HYBRID_BREAK();
57371 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
57372 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
57373 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57374 				HYBRID_BREAK();
57375 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
57376 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
57377 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57378 				HYBRID_BREAK();
57379 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
57380 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
57381 				ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57382 				HYBRID_BREAK();
57383 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
57384 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
57385 				ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57386 				HYBRID_BREAK();
57387 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
57388 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
57389 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57390 				HYBRID_BREAK();
57391 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
57392 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
57393 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57394 				HYBRID_BREAK();
57395 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST):
57396 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
57397 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57398 				HYBRID_BREAK();
57399 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
57400 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
57401 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57402 				HYBRID_BREAK();
57403 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
57404 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
57405 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57406 				HYBRID_BREAK();
57407 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
57408 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
57409 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57410 				HYBRID_BREAK();
57411 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST):
57412 				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST)
57413 				ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57414 				HYBRID_BREAK();
57415 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
57416 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST)
57417 				ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57418 				HYBRID_BREAK();
57419 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
57420 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
57421 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57422 				HYBRID_BREAK();
57423 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
57424 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
57425 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57426 				HYBRID_BREAK();
57427 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST):
57428 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
57429 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57430 				HYBRID_BREAK();
57431 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
57432 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
57433 				ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57434 				HYBRID_BREAK();
57435 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
57436 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
57437 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57438 				HYBRID_BREAK();
57439 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV):
57440 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
57441 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57442 				HYBRID_BREAK();
57443 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
57444 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
57445 				ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57446 				HYBRID_BREAK();
57447 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
57448 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR)
57449 				ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57450 				HYBRID_BREAK();
57451 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
57452 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
57453 				ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57454 				HYBRID_BREAK();
57455 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
57456 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
57457 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57458 				HYBRID_BREAK();
57459 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
57460 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
57461 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57462 				HYBRID_BREAK();
57463 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
57464 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
57465 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57466 				HYBRID_BREAK();
57467 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
57468 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
57469 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57470 				HYBRID_BREAK();
57471 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
57472 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
57473 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57474 				HYBRID_BREAK();
57475 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
57476 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
57477 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57478 				HYBRID_BREAK();
57479 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
57480 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
57481 				ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57482 				HYBRID_BREAK();
57483 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
57484 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
57485 				ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57486 				HYBRID_BREAK();
57487 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
57488 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
57489 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57490 				HYBRID_BREAK();
57491 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
57492 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
57493 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57494 				HYBRID_BREAK();
57495 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR):
57496 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
57497 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57498 				HYBRID_BREAK();
57499 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
57500 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
57501 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57502 				HYBRID_BREAK();
57503 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
57504 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
57505 				ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57506 				HYBRID_BREAK();
57507 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
57508 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
57509 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57510 				HYBRID_BREAK();
57511 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
57512 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
57513 				ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57514 				HYBRID_BREAK();
57515 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
57516 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
57517 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57518 				HYBRID_BREAK();
57519 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
57520 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
57521 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57522 				HYBRID_BREAK();
57523 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR):
57524 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
57525 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57526 				HYBRID_BREAK();
57527 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
57528 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
57529 				ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57530 				HYBRID_BREAK();
57531 			HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
57532 				VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
57533 				ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57534 				HYBRID_BREAK();
57535 			HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
57536 				VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
57537 				ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57538 				HYBRID_BREAK();
57539 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
57540 				VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
57541 				ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57542 				HYBRID_BREAK();
57543 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
57544 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
57545 				ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57546 				HYBRID_BREAK();
57547 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
57548 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
57549 				ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57550 				HYBRID_BREAK();
57551 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
57552 				VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
57553 				ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57554 				HYBRID_BREAK();
57555 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED):
57556 				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED)
57557 				ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57558 				HYBRID_BREAK();
57559 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
57560 				VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
57561 				ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57562 				HYBRID_BREAK();
57563 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
57564 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
57565 				ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57566 				HYBRID_BREAK();
57567 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
57568 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
57569 				ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57570 				HYBRID_BREAK();
57571 			HYBRID_CASE(ZEND_COUNT_SPEC_TMPVAR_UNUSED):
57572 				VM_TRACE(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
57573 				ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57574 				HYBRID_BREAK();
57575 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED):
57576 				VM_TRACE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
57577 				ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57578 				HYBRID_BREAK();
57579 			HYBRID_CASE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED):
57580 				VM_TRACE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
57581 				ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57582 				HYBRID_BREAK();
57583 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
57584 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV)
57585 				ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57586 				HYBRID_BREAK();
57587 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
57588 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV)
57589 				ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57590 				HYBRID_BREAK();
57591 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
57592 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV)
57593 				ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57594 				HYBRID_BREAK();
57595 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
57596 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
57597 				ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57598 				HYBRID_BREAK();
57599 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
57600 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
57601 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57602 				HYBRID_BREAK();
57603 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
57604 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
57605 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57606 				HYBRID_BREAK();
57607 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV):
57608 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
57609 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57610 				HYBRID_BREAK();
57611 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
57612 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
57613 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57614 				HYBRID_BREAK();
57615 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
57616 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
57617 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57618 				HYBRID_BREAK();
57619 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
57620 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
57621 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57622 				HYBRID_BREAK();
57623 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
57624 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV)
57625 				ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57626 				HYBRID_BREAK();
57627 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
57628 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
57629 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57630 				HYBRID_BREAK();
57631 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
57632 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
57633 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57634 				HYBRID_BREAK();
57635 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV):
57636 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
57637 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57638 				HYBRID_BREAK();
57639 			HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
57640 				VM_TRACE(ZEND_RETURN_SPEC_TMP)
57641 {
57642 	USE_OPLINE
57643 	zval *retval_ptr;
57644 	zval *return_value;
57645 
57646 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
57647 	return_value = EX(return_value);
57648 
57649 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
57650 		SAVE_OPLINE();
57651 		retval_ptr = ZVAL_UNDEFINED_OP1();
57652 		if (return_value) {
57653 			ZVAL_NULL(return_value);
57654 		}
57655 	} else if (!return_value) {
57656 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
57657 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
57658 				SAVE_OPLINE();
57659 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
57660 			}
57661 		}
57662 	} else {
57663 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
57664 			ZVAL_COPY_VALUE(return_value, retval_ptr);
57665 			if (IS_TMP_VAR == IS_CONST) {
57666 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
57667 					Z_ADDREF_P(return_value);
57668 				}
57669 			}
57670 		} else if (IS_TMP_VAR == IS_CV) {
57671 			do {
57672 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57673 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
57674 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
57675 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57676 							ZVAL_COPY_VALUE(return_value, retval_ptr);
57677 							if (GC_MAY_LEAK(ref)) {
57678 								SAVE_OPLINE();
57679 								gc_possible_root(ref);
57680 							}
57681 							ZVAL_NULL(retval_ptr);
57682 							break;
57683 						} else {
57684 							Z_ADDREF_P(retval_ptr);
57685 						}
57686 					} else {
57687 						retval_ptr = Z_REFVAL_P(retval_ptr);
57688 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57689 							Z_ADDREF_P(retval_ptr);
57690 						}
57691 					}
57692 				}
57693 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57694 			} while (0);
57695 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
57696 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
57697 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57698 
57699 				retval_ptr = Z_REFVAL_P(retval_ptr);
57700 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57701 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
57702 					efree_size(ref, sizeof(zend_reference));
57703 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57704 					Z_ADDREF_P(retval_ptr);
57705 				}
57706 			} else {
57707 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57708 			}
57709 		}
57710 	}
57711 
57712 
57713 
57714 	goto zend_leave_helper_SPEC_LABEL;
57715 }
57716 
57717 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
57718 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
57719 				ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57720 				HYBRID_BREAK();
57721 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
57722 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
57723 				ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57724 				HYBRID_BREAK();
57725 			HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
57726 				VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
57727 				ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57728 				HYBRID_BREAK();
57729 			HYBRID_CASE(ZEND_CAST_SPEC_TMP):
57730 				VM_TRACE(ZEND_CAST_SPEC_TMP)
57731 				ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57732 				HYBRID_BREAK();
57733 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
57734 				VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP)
57735 				ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57736 				HYBRID_BREAK();
57737 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
57738 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP)
57739 				ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57740 				HYBRID_BREAK();
57741 			HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
57742 				VM_TRACE(ZEND_END_SILENCE_SPEC_TMP)
57743 				ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57744 				HYBRID_BREAK();
57745 			HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
57746 				VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
57747 				ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57748 				HYBRID_BREAK();
57749 			HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
57750 				VM_TRACE(ZEND_COALESCE_SPEC_TMP)
57751 				ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57752 				HYBRID_BREAK();
57753 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMP):
57754 				VM_TRACE(ZEND_JMP_NULL_SPEC_TMP)
57755 				ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57756 				HYBRID_BREAK();
57757 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
57758 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
57759 				ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57760 				HYBRID_BREAK();
57761 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
57762 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
57763 				ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57764 				HYBRID_BREAK();
57765 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CONST):
57766 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CONST)
57767 				ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57768 				HYBRID_BREAK();
57769 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
57770 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
57771 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57772 				HYBRID_BREAK();
57773 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
57774 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
57775 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57776 				HYBRID_BREAK();
57777 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
57778 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
57779 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57780 				HYBRID_BREAK();
57781 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
57782 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
57783 				ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57784 				HYBRID_BREAK();
57785 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
57786 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST)
57787 				ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57788 				HYBRID_BREAK();
57789 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST):
57790 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST)
57791 				ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57792 				HYBRID_BREAK();
57793 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
57794 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
57795 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57796 				HYBRID_BREAK();
57797 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
57798 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
57799 				ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57800 				HYBRID_BREAK();
57801 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
57802 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST)
57803 				ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57804 				HYBRID_BREAK();
57805 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
57806 				VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST)
57807 				ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57808 				HYBRID_BREAK();
57809 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
57810 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
57811 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57812 				HYBRID_BREAK();
57813 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
57814 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
57815 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57816 				HYBRID_BREAK();
57817 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
57818 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
57819 				ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57820 				HYBRID_BREAK();
57821 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
57822 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
57823 				ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57824 				HYBRID_BREAK();
57825 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
57826 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
57827 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57828 				HYBRID_BREAK();
57829 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
57830 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
57831 				ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57832 				HYBRID_BREAK();
57833 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMPVAR):
57834 				VM_TRACE(ZEND_YIELD_SPEC_TMP_TMPVAR)
57835 				ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57836 				HYBRID_BREAK();
57837 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
57838 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
57839 				ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57840 				HYBRID_BREAK();
57841 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_TMP):
57842 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_TMP)
57843 				ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57844 				HYBRID_BREAK();
57845 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
57846 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
57847 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57848 				HYBRID_BREAK();
57849 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_VAR):
57850 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_VAR)
57851 				ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57852 				HYBRID_BREAK();
57853 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
57854 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
57855 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57856 				HYBRID_BREAK();
57857 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
57858 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
57859 				ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57860 				HYBRID_BREAK();
57861 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED):
57862 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED)
57863 				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57864 				HYBRID_BREAK();
57865 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK):
57866 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK)
57867 				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57868 				HYBRID_BREAK();
57869 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
57870 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
57871 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57872 				HYBRID_BREAK();
57873 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
57874 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
57875 				ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57876 				HYBRID_BREAK();
57877 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
57878 				VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED)
57879 				ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57880 				HYBRID_BREAK();
57881 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
57882 				VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
57883 				ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57884 				HYBRID_BREAK();
57885 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CV):
57886 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CV)
57887 				ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57888 				HYBRID_BREAK();
57889 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
57890 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
57891 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57892 				HYBRID_BREAK();
57893 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
57894 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
57895 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57896 				HYBRID_BREAK();
57897 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
57898 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
57899 				ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57900 				HYBRID_BREAK();
57901 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
57902 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV)
57903 				ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57904 				HYBRID_BREAK();
57905 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
57906 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
57907 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57908 				HYBRID_BREAK();
57909 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
57910 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV)
57911 				ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57912 				HYBRID_BREAK();
57913 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
57914 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CV)
57915 				ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57916 				HYBRID_BREAK();
57917 			HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
57918 				VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
57919 				ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57920 				HYBRID_BREAK();
57921 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
57922 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
57923 				ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57924 				HYBRID_BREAK();
57925 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
57926 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
57927 				ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57928 				HYBRID_BREAK();
57929 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
57930 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
57931 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57932 				HYBRID_BREAK();
57933 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
57934 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
57935 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57936 				HYBRID_BREAK();
57937 			HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
57938 				VM_TRACE(ZEND_POST_INC_SPEC_VAR)
57939 				ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57940 				HYBRID_BREAK();
57941 			HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
57942 				VM_TRACE(ZEND_POST_DEC_SPEC_VAR)
57943 				ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57944 				HYBRID_BREAK();
57945 			HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
57946 				VM_TRACE(ZEND_RETURN_SPEC_VAR)
57947 {
57948 	USE_OPLINE
57949 	zval *retval_ptr;
57950 	zval *return_value;
57951 
57952 	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
57953 	return_value = EX(return_value);
57954 
57955 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
57956 		SAVE_OPLINE();
57957 		retval_ptr = ZVAL_UNDEFINED_OP1();
57958 		if (return_value) {
57959 			ZVAL_NULL(return_value);
57960 		}
57961 	} else if (!return_value) {
57962 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
57963 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
57964 				SAVE_OPLINE();
57965 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
57966 			}
57967 		}
57968 	} else {
57969 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
57970 			ZVAL_COPY_VALUE(return_value, retval_ptr);
57971 			if (IS_VAR == IS_CONST) {
57972 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
57973 					Z_ADDREF_P(return_value);
57974 				}
57975 			}
57976 		} else if (IS_VAR == IS_CV) {
57977 			do {
57978 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57979 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
57980 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
57981 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57982 							ZVAL_COPY_VALUE(return_value, retval_ptr);
57983 							if (GC_MAY_LEAK(ref)) {
57984 								SAVE_OPLINE();
57985 								gc_possible_root(ref);
57986 							}
57987 							ZVAL_NULL(retval_ptr);
57988 							break;
57989 						} else {
57990 							Z_ADDREF_P(retval_ptr);
57991 						}
57992 					} else {
57993 						retval_ptr = Z_REFVAL_P(retval_ptr);
57994 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57995 							Z_ADDREF_P(retval_ptr);
57996 						}
57997 					}
57998 				}
57999 				ZVAL_COPY_VALUE(return_value, retval_ptr);
58000 			} while (0);
58001 		} else /* if (IS_VAR == IS_VAR) */ {
58002 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
58003 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
58004 
58005 				retval_ptr = Z_REFVAL_P(retval_ptr);
58006 				ZVAL_COPY_VALUE(return_value, retval_ptr);
58007 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
58008 					efree_size(ref, sizeof(zend_reference));
58009 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
58010 					Z_ADDREF_P(retval_ptr);
58011 				}
58012 			} else {
58013 				ZVAL_COPY_VALUE(return_value, retval_ptr);
58014 			}
58015 		}
58016 	}
58017 
58018 
58019 
58020 	goto zend_leave_helper_SPEC_LABEL;
58021 }
58022 
58023 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
58024 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
58025 				ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58026 				HYBRID_BREAK();
58027 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
58028 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
58029 				ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58030 				HYBRID_BREAK();
58031 			HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
58032 				VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
58033 				ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58034 				HYBRID_BREAK();
58035 			HYBRID_CASE(ZEND_CAST_SPEC_VAR):
58036 				VM_TRACE(ZEND_CAST_SPEC_VAR)
58037 				ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58038 				HYBRID_BREAK();
58039 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
58040 				VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR)
58041 				ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58042 				HYBRID_BREAK();
58043 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
58044 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR)
58045 				ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58046 				HYBRID_BREAK();
58047 			HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
58048 				VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR)
58049 				ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58050 				HYBRID_BREAK();
58051 			HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
58052 				VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR)
58053 				ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58054 				HYBRID_BREAK();
58055 			HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
58056 				VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
58057 				ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58058 				HYBRID_BREAK();
58059 			HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
58060 				VM_TRACE(ZEND_COALESCE_SPEC_VAR)
58061 				ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58062 				HYBRID_BREAK();
58063 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_VAR):
58064 				VM_TRACE(ZEND_JMP_NULL_SPEC_VAR)
58065 				ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58066 				HYBRID_BREAK();
58067 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
58068 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
58069 				ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58070 				HYBRID_BREAK();
58071 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
58072 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
58073 				ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58074 				HYBRID_BREAK();
58075 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
58076 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
58077 				ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58078 				HYBRID_BREAK();
58079 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CONST):
58080 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CONST)
58081 				ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58082 				HYBRID_BREAK();
58083 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
58084 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
58085 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58086 				HYBRID_BREAK();
58087 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST):
58088 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
58089 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58090 				HYBRID_BREAK();
58091 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST):
58092 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
58093 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58094 				HYBRID_BREAK();
58095 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CONST):
58096 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
58097 				ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58098 				HYBRID_BREAK();
58099 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
58100 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
58101 				ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58102 				HYBRID_BREAK();
58103 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
58104 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
58105 				ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58106 				HYBRID_BREAK();
58107 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
58108 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
58109 				ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58110 				HYBRID_BREAK();
58111 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
58112 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
58113 				ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58114 				HYBRID_BREAK();
58115 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
58116 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
58117 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58118 				HYBRID_BREAK();
58119 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
58120 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
58121 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58122 				HYBRID_BREAK();
58123 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
58124 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
58125 				ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58126 				HYBRID_BREAK();
58127 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
58128 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
58129 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58130 				HYBRID_BREAK();
58131 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
58132 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
58133 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58134 				HYBRID_BREAK();
58135 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
58136 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
58137 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58138 				HYBRID_BREAK();
58139 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST):
58140 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
58141 				ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58142 				HYBRID_BREAK();
58143 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
58144 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
58145 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58146 				HYBRID_BREAK();
58147 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
58148 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
58149 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58150 				HYBRID_BREAK();
58151 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
58152 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
58153 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58154 				HYBRID_BREAK();
58155 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
58156 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
58157 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58158 				HYBRID_BREAK();
58159 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
58160 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
58161 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58162 				HYBRID_BREAK();
58163 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
58164 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
58165 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58166 				HYBRID_BREAK();
58167 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
58168 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
58169 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58170 				HYBRID_BREAK();
58171 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
58172 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
58173 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58174 				HYBRID_BREAK();
58175 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
58176 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
58177 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58178 				HYBRID_BREAK();
58179 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
58180 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
58181 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58182 				HYBRID_BREAK();
58183 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR):
58184 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
58185 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58186 				HYBRID_BREAK();
58187 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV):
58188 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
58189 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58190 				HYBRID_BREAK();
58191 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
58192 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
58193 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58194 				HYBRID_BREAK();
58195 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_CONST):
58196 				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_CONST)
58197 				ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58198 				HYBRID_BREAK();
58199 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST):
58200 				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST)
58201 				ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58202 				HYBRID_BREAK();
58203 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST):
58204 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST)
58205 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58206 				HYBRID_BREAK();
58207 			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_CONST):
58208 				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_CONST)
58209 				ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58210 				HYBRID_BREAK();
58211 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST):
58212 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST)
58213 				ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58214 				HYBRID_BREAK();
58215 			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST):
58216 				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST)
58217 				ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58218 				HYBRID_BREAK();
58219 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
58220 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
58221 				ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58222 				HYBRID_BREAK();
58223 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
58224 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
58225 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58226 				HYBRID_BREAK();
58227 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
58228 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
58229 				ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58230 				HYBRID_BREAK();
58231 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
58232 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST)
58233 				ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58234 				HYBRID_BREAK();
58235 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
58236 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
58237 				ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58238 				HYBRID_BREAK();
58239 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
58240 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST)
58241 				ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58242 				HYBRID_BREAK();
58243 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
58244 				VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
58245 				ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58246 				HYBRID_BREAK();
58247 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR):
58248 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
58249 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58250 				HYBRID_BREAK();
58251 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR):
58252 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
58253 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58254 				HYBRID_BREAK();
58255 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR):
58256 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
58257 				ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58258 				HYBRID_BREAK();
58259 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
58260 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
58261 				ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58262 				HYBRID_BREAK();
58263 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
58264 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
58265 				ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58266 				HYBRID_BREAK();
58267 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
58268 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
58269 				ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58270 				HYBRID_BREAK();
58271 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
58272 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
58273 				ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58274 				HYBRID_BREAK();
58275 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
58276 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
58277 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58278 				HYBRID_BREAK();
58279 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
58280 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
58281 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58282 				HYBRID_BREAK();
58283 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
58284 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
58285 				ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58286 				HYBRID_BREAK();
58287 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
58288 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
58289 				ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58290 				HYBRID_BREAK();
58291 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
58292 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
58293 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58294 				HYBRID_BREAK();
58295 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
58296 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
58297 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58298 				HYBRID_BREAK();
58299 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR):
58300 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
58301 				ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58302 				HYBRID_BREAK();
58303 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
58304 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
58305 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58306 				HYBRID_BREAK();
58307 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
58308 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
58309 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58310 				HYBRID_BREAK();
58311 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
58312 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
58313 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58314 				HYBRID_BREAK();
58315 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
58316 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
58317 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58318 				HYBRID_BREAK();
58319 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
58320 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
58321 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58322 				HYBRID_BREAK();
58323 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
58324 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
58325 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58326 				HYBRID_BREAK();
58327 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
58328 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
58329 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58330 				HYBRID_BREAK();
58331 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
58332 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
58333 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58334 				HYBRID_BREAK();
58335 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR):
58336 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
58337 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58338 				HYBRID_BREAK();
58339 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV):
58340 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
58341 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58342 				HYBRID_BREAK();
58343 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
58344 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
58345 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58346 				HYBRID_BREAK();
58347 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
58348 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
58349 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58350 				HYBRID_BREAK();
58351 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
58352 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
58353 				ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58354 				HYBRID_BREAK();
58355 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
58356 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
58357 				ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58358 				HYBRID_BREAK();
58359 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
58360 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
58361 				ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58362 				HYBRID_BREAK();
58363 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMPVAR):
58364 				VM_TRACE(ZEND_YIELD_SPEC_VAR_TMPVAR)
58365 				ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58366 				HYBRID_BREAK();
58367 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
58368 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
58369 				ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58370 				HYBRID_BREAK();
58371 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_TMP):
58372 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_TMP)
58373 				ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58374 				HYBRID_BREAK();
58375 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
58376 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
58377 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58378 				HYBRID_BREAK();
58379 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
58380 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
58381 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58382 				HYBRID_BREAK();
58383 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
58384 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
58385 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58386 				HYBRID_BREAK();
58387 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
58388 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
58389 				ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58390 				HYBRID_BREAK();
58391 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_VAR):
58392 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_VAR)
58393 				ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58394 				HYBRID_BREAK();
58395 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
58396 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
58397 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58398 				HYBRID_BREAK();
58399 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
58400 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
58401 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58402 				HYBRID_BREAK();
58403 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
58404 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
58405 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58406 				HYBRID_BREAK();
58407 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
58408 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
58409 				ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58410 				HYBRID_BREAK();
58411 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED):
58412 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
58413 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58414 				HYBRID_BREAK();
58415 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
58416 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
58417 				ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58418 				HYBRID_BREAK();
58419 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
58420 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
58421 				ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58422 				HYBRID_BREAK();
58423 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
58424 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
58425 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58426 				HYBRID_BREAK();
58427 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
58428 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
58429 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58430 				HYBRID_BREAK();
58431 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
58432 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
58433 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58434 				HYBRID_BREAK();
58435 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
58436 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
58437 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58438 				HYBRID_BREAK();
58439 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
58440 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
58441 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58442 				HYBRID_BREAK();
58443 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
58444 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
58445 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58446 				HYBRID_BREAK();
58447 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
58448 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
58449 				ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58450 				HYBRID_BREAK();
58451 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_UNUSED):
58452 				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_UNUSED)
58453 				ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58454 				HYBRID_BREAK();
58455 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED):
58456 				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED)
58457 				ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58458 				HYBRID_BREAK();
58459 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED):
58460 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED)
58461 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58462 				HYBRID_BREAK();
58463 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK):
58464 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK)
58465 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58466 				HYBRID_BREAK();
58467 			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_UNUSED):
58468 				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_UNUSED)
58469 				ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58470 				HYBRID_BREAK();
58471 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED):
58472 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED)
58473 				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58474 				HYBRID_BREAK();
58475 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK):
58476 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK)
58477 				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58478 				HYBRID_BREAK();
58479 			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED):
58480 				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED)
58481 				ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58482 				HYBRID_BREAK();
58483 			HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED):
58484 				VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED)
58485 				ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58486 				HYBRID_BREAK();
58487 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
58488 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
58489 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58490 				HYBRID_BREAK();
58491 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
58492 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
58493 				ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58494 				HYBRID_BREAK();
58495 			HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
58496 				VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED)
58497 				ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58498 				HYBRID_BREAK();
58499 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
58500 				VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED)
58501 				ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58502 				HYBRID_BREAK();
58503 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
58504 				VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
58505 				ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58506 				HYBRID_BREAK();
58507 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
58508 				VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
58509 				ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58510 				HYBRID_BREAK();
58511 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED):
58512 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED)
58513 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58514 				HYBRID_BREAK();
58515 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CV):
58516 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CV)
58517 				ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58518 				HYBRID_BREAK();
58519 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV):
58520 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
58521 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58522 				HYBRID_BREAK();
58523 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV):
58524 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
58525 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58526 				HYBRID_BREAK();
58527 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CV):
58528 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CV)
58529 				ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58530 				HYBRID_BREAK();
58531 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
58532 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
58533 				ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58534 				HYBRID_BREAK();
58535 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
58536 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
58537 				ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58538 				HYBRID_BREAK();
58539 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
58540 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
58541 				ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58542 				HYBRID_BREAK();
58543 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
58544 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
58545 				ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58546 				HYBRID_BREAK();
58547 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
58548 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
58549 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58550 				HYBRID_BREAK();
58551 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
58552 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
58553 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58554 				HYBRID_BREAK();
58555 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
58556 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
58557 				ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58558 				HYBRID_BREAK();
58559 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
58560 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
58561 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58562 				HYBRID_BREAK();
58563 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
58564 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
58565 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58566 				HYBRID_BREAK();
58567 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
58568 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
58569 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58570 				HYBRID_BREAK();
58571 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV):
58572 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
58573 				ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58574 				HYBRID_BREAK();
58575 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
58576 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
58577 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58578 				HYBRID_BREAK();
58579 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
58580 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
58581 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58582 				HYBRID_BREAK();
58583 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
58584 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
58585 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58586 				HYBRID_BREAK();
58587 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
58588 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
58589 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58590 				HYBRID_BREAK();
58591 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
58592 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
58593 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58594 				HYBRID_BREAK();
58595 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
58596 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
58597 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58598 				HYBRID_BREAK();
58599 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
58600 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
58601 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58602 				HYBRID_BREAK();
58603 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
58604 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
58605 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58606 				HYBRID_BREAK();
58607 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
58608 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
58609 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58610 				HYBRID_BREAK();
58611 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
58612 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
58613 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58614 				HYBRID_BREAK();
58615 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
58616 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
58617 				ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58618 				HYBRID_BREAK();
58619 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR):
58620 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
58621 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58622 				HYBRID_BREAK();
58623 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV):
58624 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
58625 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58626 				HYBRID_BREAK();
58627 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
58628 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
58629 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58630 				HYBRID_BREAK();
58631 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
58632 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
58633 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58634 				HYBRID_BREAK();
58635 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
58636 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV)
58637 				ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58638 				HYBRID_BREAK();
58639 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
58640 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV)
58641 				ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58642 				HYBRID_BREAK();
58643 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
58644 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV)
58645 				ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58646 				HYBRID_BREAK();
58647 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
58648 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CV)
58649 				ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58650 				HYBRID_BREAK();
58651 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
58652 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
58653 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58654 				HYBRID_BREAK();
58655 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
58656 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
58657 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58658 				HYBRID_BREAK();
58659 			HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
58660 				VM_TRACE(ZEND_CLONE_SPEC_UNUSED)
58661 				ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58662 				HYBRID_BREAK();
58663 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED):
58664 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
58665 				ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58666 				HYBRID_BREAK();
58667 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST):
58668 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
58669 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58670 				HYBRID_BREAK();
58671 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
58672 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
58673 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58674 				HYBRID_BREAK();
58675 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
58676 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
58677 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58678 				HYBRID_BREAK();
58679 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
58680 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
58681 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58682 				HYBRID_BREAK();
58683 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
58684 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
58685 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58686 				HYBRID_BREAK();
58687 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
58688 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
58689 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58690 				HYBRID_BREAK();
58691 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
58692 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
58693 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58694 				HYBRID_BREAK();
58695 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
58696 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
58697 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58698 				HYBRID_BREAK();
58699 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
58700 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
58701 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58702 				HYBRID_BREAK();
58703 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
58704 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
58705 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58706 				HYBRID_BREAK();
58707 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
58708 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
58709 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58710 				HYBRID_BREAK();
58711 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
58712 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
58713 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58714 				HYBRID_BREAK();
58715 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
58716 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
58717 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58718 				HYBRID_BREAK();
58719 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR):
58720 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
58721 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58722 				HYBRID_BREAK();
58723 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV):
58724 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
58725 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58726 				HYBRID_BREAK();
58727 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
58728 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
58729 				ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58730 				HYBRID_BREAK();
58731 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST):
58732 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
58733 				ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58734 				HYBRID_BREAK();
58735 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
58736 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
58737 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58738 				HYBRID_BREAK();
58739 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
58740 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
58741 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58742 				HYBRID_BREAK();
58743 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST):
58744 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST)
58745 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58746 				HYBRID_BREAK();
58747 			HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
58748 				VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
58749 				ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58750 				HYBRID_BREAK();
58751 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST):
58752 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
58753 				ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58754 				HYBRID_BREAK();
58755 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST):
58756 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
58757 				ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58758 				HYBRID_BREAK();
58759 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
58760 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
58761 				ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58762 				HYBRID_BREAK();
58763 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
58764 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
58765 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58766 				HYBRID_BREAK();
58767 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
58768 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST)
58769 				ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58770 				HYBRID_BREAK();
58771 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR):
58772 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
58773 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58774 				HYBRID_BREAK();
58775 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
58776 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
58777 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58778 				HYBRID_BREAK();
58779 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
58780 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
58781 				ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58782 				HYBRID_BREAK();
58783 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
58784 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
58785 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58786 				HYBRID_BREAK();
58787 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
58788 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
58789 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58790 				HYBRID_BREAK();
58791 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
58792 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
58793 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58794 				HYBRID_BREAK();
58795 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
58796 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
58797 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58798 				HYBRID_BREAK();
58799 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
58800 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
58801 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58802 				HYBRID_BREAK();
58803 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
58804 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
58805 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58806 				HYBRID_BREAK();
58807 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
58808 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
58809 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58810 				HYBRID_BREAK();
58811 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
58812 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
58813 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58814 				HYBRID_BREAK();
58815 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
58816 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
58817 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58818 				HYBRID_BREAK();
58819 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
58820 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
58821 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58822 				HYBRID_BREAK();
58823 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
58824 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
58825 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58826 				HYBRID_BREAK();
58827 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
58828 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
58829 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58830 				HYBRID_BREAK();
58831 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
58832 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
58833 				ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58834 				HYBRID_BREAK();
58835 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR):
58836 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
58837 				ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58838 				HYBRID_BREAK();
58839 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
58840 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
58841 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58842 				HYBRID_BREAK();
58843 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR):
58844 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
58845 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58846 				HYBRID_BREAK();
58847 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR):
58848 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
58849 				ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58850 				HYBRID_BREAK();
58851 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
58852 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
58853 				ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58854 				HYBRID_BREAK();
58855 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
58856 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
58857 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58858 				HYBRID_BREAK();
58859 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMPVAR):
58860 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMPVAR)
58861 				ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58862 				HYBRID_BREAK();
58863 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED):
58864 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
58865 				ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58866 				HYBRID_BREAK();
58867 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
58868 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
58869 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58870 				HYBRID_BREAK();
58871 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
58872 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
58873 				ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58874 				HYBRID_BREAK();
58875 			HYBRID_CASE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED):
58876 				VM_TRACE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED)
58877 				ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58878 				HYBRID_BREAK();
58879 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED):
58880 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED)
58881 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58882 				HYBRID_BREAK();
58883 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK):
58884 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK)
58885 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58886 				HYBRID_BREAK();
58887 			HYBRID_CASE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED):
58888 				VM_TRACE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED)
58889 				ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58890 				HYBRID_BREAK();
58891 			HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED):
58892 				VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
58893 				ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58894 				HYBRID_BREAK();
58895 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED):
58896 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
58897 				ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58898 				HYBRID_BREAK();
58899 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
58900 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
58901 				ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58902 				HYBRID_BREAK();
58903 			HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
58904 				VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
58905 				ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58906 				HYBRID_BREAK();
58907 			HYBRID_CASE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED):
58908 				VM_TRACE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED)
58909 				ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58910 				HYBRID_BREAK();
58911 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
58912 				VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
58913 				ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58914 				HYBRID_BREAK();
58915 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
58916 				VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
58917 				ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58918 				HYBRID_BREAK();
58919 			HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
58920 				VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
58921 				ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58922 				HYBRID_BREAK();
58923 			HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
58924 				VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
58925 				ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58926 				HYBRID_BREAK();
58927 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
58928 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
58929 				ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58930 				HYBRID_BREAK();
58931 			HYBRID_CASE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED):
58932 				VM_TRACE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED)
58933 				ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58934 				HYBRID_BREAK();
58935 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV):
58936 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
58937 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58938 				HYBRID_BREAK();
58939 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
58940 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
58941 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58942 				HYBRID_BREAK();
58943 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
58944 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
58945 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58946 				HYBRID_BREAK();
58947 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
58948 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
58949 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58950 				HYBRID_BREAK();
58951 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
58952 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
58953 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58954 				HYBRID_BREAK();
58955 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
58956 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
58957 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58958 				HYBRID_BREAK();
58959 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
58960 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
58961 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58962 				HYBRID_BREAK();
58963 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
58964 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
58965 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58966 				HYBRID_BREAK();
58967 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
58968 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
58969 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58970 				HYBRID_BREAK();
58971 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
58972 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
58973 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58974 				HYBRID_BREAK();
58975 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
58976 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
58977 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58978 				HYBRID_BREAK();
58979 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
58980 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
58981 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58982 				HYBRID_BREAK();
58983 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
58984 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
58985 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58986 				HYBRID_BREAK();
58987 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR):
58988 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
58989 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58990 				HYBRID_BREAK();
58991 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV):
58992 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
58993 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58994 				HYBRID_BREAK();
58995 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
58996 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
58997 				ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58998 				HYBRID_BREAK();
58999 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV):
59000 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
59001 				ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59002 				HYBRID_BREAK();
59003 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
59004 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
59005 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59006 				HYBRID_BREAK();
59007 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV):
59008 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
59009 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59010 				HYBRID_BREAK();
59011 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV):
59012 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
59013 				ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59014 				HYBRID_BREAK();
59015 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
59016 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
59017 				ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59018 				HYBRID_BREAK();
59019 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
59020 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
59021 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59022 				HYBRID_BREAK();
59023 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
59024 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV)
59025 				ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59026 				HYBRID_BREAK();
59027 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
59028 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CV)
59029 				ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59030 				HYBRID_BREAK();
59031 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
59032 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
59033 				ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59034 				HYBRID_BREAK();
59035 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
59036 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
59037 				ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59038 				HYBRID_BREAK();
59039 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
59040 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
59041 				ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59042 				HYBRID_BREAK();
59043 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
59044 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
59045 				ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59046 				HYBRID_BREAK();
59047 			HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
59048 				VM_TRACE(ZEND_POST_INC_SPEC_CV)
59049 				ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59050 				HYBRID_BREAK();
59051 			HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
59052 				VM_TRACE(ZEND_POST_DEC_SPEC_CV)
59053 				ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59054 				HYBRID_BREAK();
59055 			HYBRID_CASE(ZEND_ECHO_SPEC_CV):
59056 				VM_TRACE(ZEND_ECHO_SPEC_CV)
59057 				ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59058 				HYBRID_BREAK();
59059 			HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
59060 				VM_TRACE(ZEND_JMPZ_SPEC_CV)
59061 				ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59062 				HYBRID_BREAK();
59063 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
59064 				VM_TRACE(ZEND_JMPNZ_SPEC_CV)
59065 				ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59066 				HYBRID_BREAK();
59067 			HYBRID_CASE(ZEND_JMPZNZ_SPEC_CV):
59068 				VM_TRACE(ZEND_JMPZNZ_SPEC_CV)
59069 				ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59070 				HYBRID_BREAK();
59071 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
59072 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
59073 				ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59074 				HYBRID_BREAK();
59075 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
59076 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV)
59077 				ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59078 				HYBRID_BREAK();
59079 			HYBRID_CASE(ZEND_RETURN_SPEC_CV):
59080 				VM_TRACE(ZEND_RETURN_SPEC_CV)
59081 {
59082 	USE_OPLINE
59083 	zval *retval_ptr;
59084 	zval *return_value;
59085 
59086 	retval_ptr = EX_VAR(opline->op1.var);
59087 	return_value = EX(return_value);
59088 
59089 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
59090 		SAVE_OPLINE();
59091 		retval_ptr = ZVAL_UNDEFINED_OP1();
59092 		if (return_value) {
59093 			ZVAL_NULL(return_value);
59094 		}
59095 	} else if (!return_value) {
59096 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
59097 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
59098 				SAVE_OPLINE();
59099 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
59100 			}
59101 		}
59102 	} else {
59103 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
59104 			ZVAL_COPY_VALUE(return_value, retval_ptr);
59105 			if (IS_CV == IS_CONST) {
59106 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
59107 					Z_ADDREF_P(return_value);
59108 				}
59109 			}
59110 		} else if (IS_CV == IS_CV) {
59111 			do {
59112 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59113 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
59114 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
59115 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
59116 							ZVAL_COPY_VALUE(return_value, retval_ptr);
59117 							if (GC_MAY_LEAK(ref)) {
59118 								SAVE_OPLINE();
59119 								gc_possible_root(ref);
59120 							}
59121 							ZVAL_NULL(retval_ptr);
59122 							break;
59123 						} else {
59124 							Z_ADDREF_P(retval_ptr);
59125 						}
59126 					} else {
59127 						retval_ptr = Z_REFVAL_P(retval_ptr);
59128 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59129 							Z_ADDREF_P(retval_ptr);
59130 						}
59131 					}
59132 				}
59133 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59134 			} while (0);
59135 		} else /* if (IS_CV == IS_VAR) */ {
59136 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
59137 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
59138 
59139 				retval_ptr = Z_REFVAL_P(retval_ptr);
59140 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59141 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
59142 					efree_size(ref, sizeof(zend_reference));
59143 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59144 					Z_ADDREF_P(retval_ptr);
59145 				}
59146 			} else {
59147 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59148 			}
59149 		}
59150 	}
59151 
59152 
59153 
59154 	goto zend_leave_helper_SPEC_LABEL;
59155 }
59156 
59157 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
59158 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
59159 				ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59160 				HYBRID_BREAK();
59161 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
59162 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
59163 				ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59164 				HYBRID_BREAK();
59165 			HYBRID_CASE(ZEND_THROW_SPEC_CV):
59166 				VM_TRACE(ZEND_THROW_SPEC_CV)
59167 				ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59168 				HYBRID_BREAK();
59169 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
59170 				VM_TRACE(ZEND_SEND_USER_SPEC_CV)
59171 				ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59172 				HYBRID_BREAK();
59173 			HYBRID_CASE(ZEND_BOOL_SPEC_CV):
59174 				VM_TRACE(ZEND_BOOL_SPEC_CV)
59175 				ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59176 				HYBRID_BREAK();
59177 			HYBRID_CASE(ZEND_CLONE_SPEC_CV):
59178 				VM_TRACE(ZEND_CLONE_SPEC_CV)
59179 				ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59180 				HYBRID_BREAK();
59181 			HYBRID_CASE(ZEND_CAST_SPEC_CV):
59182 				VM_TRACE(ZEND_CAST_SPEC_CV)
59183 				ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59184 				HYBRID_BREAK();
59185 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
59186 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
59187 				ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59188 				HYBRID_BREAK();
59189 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
59190 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
59191 				ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59192 				HYBRID_BREAK();
59193 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
59194 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV)
59195 				ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59196 				HYBRID_BREAK();
59197 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
59198 				VM_TRACE(ZEND_JMP_SET_SPEC_CV)
59199 				ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59200 				HYBRID_BREAK();
59201 			HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
59202 				VM_TRACE(ZEND_COALESCE_SPEC_CV)
59203 				ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59204 				HYBRID_BREAK();
59205 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CV):
59206 				VM_TRACE(ZEND_JMP_NULL_SPEC_CV)
59207 				ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59208 				HYBRID_BREAK();
59209 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
59210 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
59211 				ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59212 				HYBRID_BREAK();
59213 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
59214 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CV)
59215 				ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59216 				HYBRID_BREAK();
59217 			HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
59218 				VM_TRACE(ZEND_STRLEN_SPEC_CV)
59219 				ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59220 				HYBRID_BREAK();
59221 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
59222 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV)
59223 				ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59224 				HYBRID_BREAK();
59225 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_CV):
59226 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_CV)
59227 				ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59228 				HYBRID_BREAK();
59229 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
59230 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
59231 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59232 				HYBRID_BREAK();
59233 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
59234 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
59235 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59236 				HYBRID_BREAK();
59237 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED):
59238 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
59239 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59240 				HYBRID_BREAK();
59241 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED):
59242 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
59243 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59244 				HYBRID_BREAK();
59245 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
59246 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
59247 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59248 				HYBRID_BREAK();
59249 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
59250 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
59251 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59252 				HYBRID_BREAK();
59253 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED):
59254 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
59255 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59256 				HYBRID_BREAK();
59257 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED):
59258 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
59259 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59260 				HYBRID_BREAK();
59261 			HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV):
59262 				VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
59263 				ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59264 				HYBRID_BREAK();
59265 			HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV):
59266 				VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV)
59267 				ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59268 				HYBRID_BREAK();
59269 			HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV):
59270 				VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
59271 				ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59272 				HYBRID_BREAK();
59273 			HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV):
59274 				VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV)
59275 				ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59276 				HYBRID_BREAK();
59277 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
59278 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
59279 				ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59280 				HYBRID_BREAK();
59281 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
59282 				VM_TRACE(ZEND_DIV_SPEC_CV_CONST)
59283 				ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59284 				HYBRID_BREAK();
59285 			HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
59286 				VM_TRACE(ZEND_POW_SPEC_CV_CONST)
59287 				ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59288 				HYBRID_BREAK();
59289 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
59290 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST)
59291 				ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59292 				HYBRID_BREAK();
59293 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
59294 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
59295 				ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59296 				HYBRID_BREAK();
59297 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
59298 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
59299 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59300 				HYBRID_BREAK();
59301 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
59302 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST)
59303 				ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59304 				HYBRID_BREAK();
59305 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ):
59306 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
59307 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59308 				HYBRID_BREAK();
59309 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ):
59310 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
59311 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59312 				HYBRID_BREAK();
59313 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
59314 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
59315 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59316 				HYBRID_BREAK();
59317 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ):
59318 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
59319 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59320 				HYBRID_BREAK();
59321 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ):
59322 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
59323 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59324 				HYBRID_BREAK();
59325 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
59326 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST)
59327 				ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59328 				HYBRID_BREAK();
59329 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
59330 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST)
59331 				ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59332 				HYBRID_BREAK();
59333 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST):
59334 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
59335 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59336 				HYBRID_BREAK();
59337 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST):
59338 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
59339 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59340 				HYBRID_BREAK();
59341 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CONST):
59342 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CONST)
59343 				ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59344 				HYBRID_BREAK();
59345 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
59346 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
59347 				ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59348 				HYBRID_BREAK();
59349 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
59350 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
59351 				ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59352 				HYBRID_BREAK();
59353 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
59354 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
59355 				ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59356 				HYBRID_BREAK();
59357 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
59358 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
59359 				ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59360 				HYBRID_BREAK();
59361 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
59362 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
59363 				ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59364 				HYBRID_BREAK();
59365 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
59366 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
59367 				ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59368 				HYBRID_BREAK();
59369 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
59370 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
59371 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59372 				HYBRID_BREAK();
59373 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
59374 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
59375 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59376 				HYBRID_BREAK();
59377 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
59378 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
59379 				ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59380 				HYBRID_BREAK();
59381 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
59382 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
59383 				ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59384 				HYBRID_BREAK();
59385 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
59386 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
59387 				ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59388 				HYBRID_BREAK();
59389 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
59390 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
59391 				ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59392 				HYBRID_BREAK();
59393 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
59394 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
59395 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59396 				HYBRID_BREAK();
59397 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
59398 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
59399 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59400 				HYBRID_BREAK();
59401 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
59402 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
59403 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59404 				HYBRID_BREAK();
59405 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
59406 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
59407 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59408 				HYBRID_BREAK();
59409 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
59410 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
59411 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59412 				HYBRID_BREAK();
59413 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
59414 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
59415 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59416 				HYBRID_BREAK();
59417 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
59418 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
59419 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59420 				HYBRID_BREAK();
59421 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
59422 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
59423 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59424 				HYBRID_BREAK();
59425 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
59426 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
59427 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59428 				HYBRID_BREAK();
59429 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
59430 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
59431 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59432 				HYBRID_BREAK();
59433 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
59434 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
59435 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59436 				HYBRID_BREAK();
59437 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
59438 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
59439 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59440 				HYBRID_BREAK();
59441 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR):
59442 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
59443 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59444 				HYBRID_BREAK();
59445 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV):
59446 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
59447 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59448 				HYBRID_BREAK();
59449 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
59450 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST)
59451 				ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59452 				HYBRID_BREAK();
59453 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
59454 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
59455 				ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59456 				HYBRID_BREAK();
59457 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_CONST):
59458 				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_CONST)
59459 				ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59460 				HYBRID_BREAK();
59461 			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_CONST):
59462 				VM_TRACE(ZEND_SEND_REF_SPEC_CV_CONST)
59463 				ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59464 				HYBRID_BREAK();
59465 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_CONST):
59466 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_CONST)
59467 				ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59468 				HYBRID_BREAK();
59469 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
59470 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
59471 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59472 				HYBRID_BREAK();
59473 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
59474 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST)
59475 				ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59476 				HYBRID_BREAK();
59477 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
59478 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST)
59479 				ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59480 				HYBRID_BREAK();
59481 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
59482 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST)
59483 				ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59484 				HYBRID_BREAK();
59485 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
59486 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
59487 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59488 				HYBRID_BREAK();
59489 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
59490 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
59491 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59492 				HYBRID_BREAK();
59493 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST):
59494 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
59495 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59496 				HYBRID_BREAK();
59497 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
59498 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST)
59499 				ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59500 				HYBRID_BREAK();
59501 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
59502 				VM_TRACE(ZEND_YIELD_SPEC_CV_CONST)
59503 				ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59504 				HYBRID_BREAK();
59505 			HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
59506 				VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
59507 				ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59508 				HYBRID_BREAK();
59509 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
59510 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST)
59511 				ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59512 				HYBRID_BREAK();
59513 			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST):
59514 				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST)
59515 				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59516 				HYBRID_BREAK();
59517 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST):
59518 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST)
59519 				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59520 				HYBRID_BREAK();
59521 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
59522 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
59523 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59524 				HYBRID_BREAK();
59525 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV):
59526 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
59527 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59528 				HYBRID_BREAK();
59529 			HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
59530 				VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR)
59531 				ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59532 				HYBRID_BREAK();
59533 			HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
59534 				VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR)
59535 				ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59536 				HYBRID_BREAK();
59537 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
59538 				VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR)
59539 				ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59540 				HYBRID_BREAK();
59541 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
59542 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
59543 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59544 				HYBRID_BREAK();
59545 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ):
59546 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
59547 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59548 				HYBRID_BREAK();
59549 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
59550 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
59551 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59552 				HYBRID_BREAK();
59553 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
59554 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
59555 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59556 				HYBRID_BREAK();
59557 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ):
59558 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
59559 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59560 				HYBRID_BREAK();
59561 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
59562 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
59563 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59564 				HYBRID_BREAK();
59565 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
59566 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
59567 				ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59568 				HYBRID_BREAK();
59569 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
59570 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
59571 				ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59572 				HYBRID_BREAK();
59573 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR):
59574 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
59575 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59576 				HYBRID_BREAK();
59577 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR):
59578 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
59579 				ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59580 				HYBRID_BREAK();
59581 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR):
59582 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
59583 				ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59584 				HYBRID_BREAK();
59585 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
59586 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
59587 				ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59588 				HYBRID_BREAK();
59589 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
59590 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
59591 				ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59592 				HYBRID_BREAK();
59593 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
59594 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
59595 				ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59596 				HYBRID_BREAK();
59597 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
59598 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
59599 				ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59600 				HYBRID_BREAK();
59601 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
59602 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
59603 				ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59604 				HYBRID_BREAK();
59605 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
59606 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
59607 				ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59608 				HYBRID_BREAK();
59609 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
59610 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
59611 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59612 				HYBRID_BREAK();
59613 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
59614 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
59615 				ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59616 				HYBRID_BREAK();
59617 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
59618 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
59619 				ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59620 				HYBRID_BREAK();
59621 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
59622 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
59623 				ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59624 				HYBRID_BREAK();
59625 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
59626 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
59627 				ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59628 				HYBRID_BREAK();
59629 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
59630 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
59631 				ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59632 				HYBRID_BREAK();
59633 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
59634 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
59635 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59636 				HYBRID_BREAK();
59637 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
59638 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
59639 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59640 				HYBRID_BREAK();
59641 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
59642 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
59643 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59644 				HYBRID_BREAK();
59645 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
59646 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
59647 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59648 				HYBRID_BREAK();
59649 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
59650 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
59651 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59652 				HYBRID_BREAK();
59653 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
59654 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
59655 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59656 				HYBRID_BREAK();
59657 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
59658 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
59659 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59660 				HYBRID_BREAK();
59661 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
59662 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
59663 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59664 				HYBRID_BREAK();
59665 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
59666 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
59667 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59668 				HYBRID_BREAK();
59669 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
59670 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
59671 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59672 				HYBRID_BREAK();
59673 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR):
59674 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
59675 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59676 				HYBRID_BREAK();
59677 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV):
59678 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
59679 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59680 				HYBRID_BREAK();
59681 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
59682 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
59683 				ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59684 				HYBRID_BREAK();
59685 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
59686 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
59687 				ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59688 				HYBRID_BREAK();
59689 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
59690 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
59691 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59692 				HYBRID_BREAK();
59693 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
59694 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
59695 				ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59696 				HYBRID_BREAK();
59697 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
59698 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
59699 				ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59700 				HYBRID_BREAK();
59701 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
59702 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
59703 				ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59704 				HYBRID_BREAK();
59705 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
59706 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
59707 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59708 				HYBRID_BREAK();
59709 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
59710 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
59711 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59712 				HYBRID_BREAK();
59713 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR):
59714 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
59715 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59716 				HYBRID_BREAK();
59717 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMPVAR):
59718 				VM_TRACE(ZEND_YIELD_SPEC_CV_TMPVAR)
59719 				ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59720 				HYBRID_BREAK();
59721 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
59722 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
59723 				ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59724 				HYBRID_BREAK();
59725 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
59726 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
59727 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59728 				HYBRID_BREAK();
59729 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
59730 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
59731 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59732 				HYBRID_BREAK();
59733 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
59734 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
59735 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59736 				HYBRID_BREAK();
59737 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
59738 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
59739 				ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59740 				HYBRID_BREAK();
59741 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
59742 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
59743 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59744 				HYBRID_BREAK();
59745 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
59746 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
59747 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59748 				HYBRID_BREAK();
59749 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
59750 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
59751 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59752 				HYBRID_BREAK();
59753 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
59754 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR)
59755 				ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59756 				HYBRID_BREAK();
59757 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
59758 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR)
59759 				ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59760 				HYBRID_BREAK();
59761 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED):
59762 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
59763 				ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59764 				HYBRID_BREAK();
59765 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
59766 				VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED)
59767 				ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59768 				HYBRID_BREAK();
59769 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
59770 				VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED)
59771 				ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59772 				HYBRID_BREAK();
59773 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
59774 				VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED)
59775 				ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59776 				HYBRID_BREAK();
59777 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
59778 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
59779 				ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59780 				HYBRID_BREAK();
59781 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
59782 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
59783 				ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59784 				HYBRID_BREAK();
59785 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
59786 				VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED)
59787 				ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59788 				HYBRID_BREAK();
59789 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
59790 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
59791 				ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59792 				HYBRID_BREAK();
59793 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
59794 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
59795 				ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59796 				HYBRID_BREAK();
59797 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
59798 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
59799 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59800 				HYBRID_BREAK();
59801 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
59802 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
59803 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59804 				HYBRID_BREAK();
59805 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
59806 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
59807 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59808 				HYBRID_BREAK();
59809 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
59810 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
59811 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59812 				HYBRID_BREAK();
59813 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
59814 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
59815 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59816 				HYBRID_BREAK();
59817 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
59818 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
59819 				ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59820 				HYBRID_BREAK();
59821 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_UNUSED):
59822 				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_UNUSED)
59823 				ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59824 				HYBRID_BREAK();
59825 			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_UNUSED):
59826 				VM_TRACE(ZEND_SEND_REF_SPEC_CV_UNUSED)
59827 				ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59828 				HYBRID_BREAK();
59829 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED):
59830 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED)
59831 				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59832 				HYBRID_BREAK();
59833 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK):
59834 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK)
59835 				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59836 				HYBRID_BREAK();
59837 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
59838 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
59839 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59840 				HYBRID_BREAK();
59841 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
59842 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
59843 				ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59844 				HYBRID_BREAK();
59845 			HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
59846 				VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED)
59847 				ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59848 				HYBRID_BREAK();
59849 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
59850 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
59851 				ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59852 				HYBRID_BREAK();
59853 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET):
59854 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
59855 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59856 				HYBRID_BREAK();
59857 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY):
59858 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
59859 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59860 				HYBRID_BREAK();
59861 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
59862 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
59863 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59864 				HYBRID_BREAK();
59865 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
59866 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
59867 				ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59868 				HYBRID_BREAK();
59869 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
59870 				VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
59871 				ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59872 				HYBRID_BREAK();
59873 			HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV_UNUSED):
59874 				VM_TRACE(ZEND_BIND_STATIC_SPEC_CV_UNUSED)
59875 				ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59876 				HYBRID_BREAK();
59877 			HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
59878 				VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
59879 				ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59880 				HYBRID_BREAK();
59881 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
59882 				VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED)
59883 				ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59884 				HYBRID_BREAK();
59885 			HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
59886 				VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED)
59887 				ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59888 				HYBRID_BREAK();
59889 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
59890 				VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED)
59891 				ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59892 				HYBRID_BREAK();
59893 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
59894 				VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED)
59895 				ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59896 				HYBRID_BREAK();
59897 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED):
59898 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED)
59899 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59900 				HYBRID_BREAK();
59901 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
59902 				VM_TRACE(ZEND_DIV_SPEC_CV_CV)
59903 				ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59904 				HYBRID_BREAK();
59905 			HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
59906 				VM_TRACE(ZEND_POW_SPEC_CV_CV)
59907 				ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59908 				HYBRID_BREAK();
59909 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
59910 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CV)
59911 				ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59912 				HYBRID_BREAK();
59913 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
59914 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV)
59915 				ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59916 				HYBRID_BREAK();
59917 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
59918 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
59919 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59920 				HYBRID_BREAK();
59921 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
59922 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV)
59923 				ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59924 				HYBRID_BREAK();
59925 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ):
59926 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
59927 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59928 				HYBRID_BREAK();
59929 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ):
59930 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
59931 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59932 				HYBRID_BREAK();
59933 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
59934 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
59935 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59936 				HYBRID_BREAK();
59937 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ):
59938 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
59939 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59940 				HYBRID_BREAK();
59941 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ):
59942 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
59943 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59944 				HYBRID_BREAK();
59945 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
59946 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV)
59947 				ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59948 				HYBRID_BREAK();
59949 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
59950 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV)
59951 				ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59952 				HYBRID_BREAK();
59953 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV):
59954 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
59955 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59956 				HYBRID_BREAK();
59957 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV):
59958 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
59959 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59960 				HYBRID_BREAK();
59961 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CV):
59962 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CV)
59963 				ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59964 				HYBRID_BREAK();
59965 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
59966 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
59967 				ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59968 				HYBRID_BREAK();
59969 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
59970 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV)
59971 				ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59972 				HYBRID_BREAK();
59973 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
59974 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV)
59975 				ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59976 				HYBRID_BREAK();
59977 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
59978 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV)
59979 				ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59980 				HYBRID_BREAK();
59981 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
59982 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
59983 				ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59984 				HYBRID_BREAK();
59985 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
59986 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
59987 				ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59988 				HYBRID_BREAK();
59989 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
59990 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
59991 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59992 				HYBRID_BREAK();
59993 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
59994 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
59995 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59996 				HYBRID_BREAK();
59997 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
59998 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
59999 				ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60000 				HYBRID_BREAK();
60001 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
60002 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
60003 				ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60004 				HYBRID_BREAK();
60005 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
60006 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
60007 				ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60008 				HYBRID_BREAK();
60009 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
60010 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
60011 				ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60012 				HYBRID_BREAK();
60013 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
60014 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
60015 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60016 				HYBRID_BREAK();
60017 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
60018 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
60019 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60020 				HYBRID_BREAK();
60021 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
60022 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
60023 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60024 				HYBRID_BREAK();
60025 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
60026 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
60027 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60028 				HYBRID_BREAK();
60029 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
60030 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
60031 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60032 				HYBRID_BREAK();
60033 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
60034 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
60035 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60036 				HYBRID_BREAK();
60037 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
60038 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
60039 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60040 				HYBRID_BREAK();
60041 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
60042 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
60043 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60044 				HYBRID_BREAK();
60045 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
60046 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
60047 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60048 				HYBRID_BREAK();
60049 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
60050 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
60051 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60052 				HYBRID_BREAK();
60053 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
60054 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
60055 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60056 				HYBRID_BREAK();
60057 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
60058 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
60059 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60060 				HYBRID_BREAK();
60061 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
60062 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV)
60063 				ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60064 				HYBRID_BREAK();
60065 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR):
60066 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
60067 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60068 				HYBRID_BREAK();
60069 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV):
60070 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
60071 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60072 				HYBRID_BREAK();
60073 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
60074 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV)
60075 				ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60076 				HYBRID_BREAK();
60077 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
60078 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
60079 				ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60080 				HYBRID_BREAK();
60081 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
60082 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
60083 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60084 				HYBRID_BREAK();
60085 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
60086 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV)
60087 				ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60088 				HYBRID_BREAK();
60089 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
60090 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV)
60091 				ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60092 				HYBRID_BREAK();
60093 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
60094 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV)
60095 				ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60096 				HYBRID_BREAK();
60097 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
60098 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
60099 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60100 				HYBRID_BREAK();
60101 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
60102 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
60103 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60104 				HYBRID_BREAK();
60105 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV):
60106 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
60107 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60108 				HYBRID_BREAK();
60109 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
60110 				VM_TRACE(ZEND_YIELD_SPEC_CV_CV)
60111 				ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60112 				HYBRID_BREAK();
60113 			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV):
60114 				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV)
60115 				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60116 				HYBRID_BREAK();
60117 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV):
60118 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV)
60119 				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60120 				HYBRID_BREAK();
60121 			HYBRID_CASE(HYBRID_HALT):
60122 #ifdef ZEND_VM_FP_GLOBAL_REG
60123 				execute_data = vm_stack_data.orig_execute_data;
60124 #endif
60125 #ifdef ZEND_VM_IP_GLOBAL_REG
60126 				opline = vm_stack_data.orig_opline;
60127 #endif
60128 				return;
60129 			HYBRID_DEFAULT:
60130 				VM_TRACE(ZEND_NULL)
60131 				ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60132 				HYBRID_BREAK(); /* Never reached */
60133 #else
60134 #ifdef ZEND_VM_FP_GLOBAL_REG
60135 			execute_data = vm_stack_data.orig_execute_data;
60136 # ifdef ZEND_VM_IP_GLOBAL_REG
60137 			opline = vm_stack_data.orig_opline;
60138 # endif
60139 			return;
60140 #else
60141 			if (EXPECTED(ret > 0)) {
60142 				execute_data = EG(current_execute_data);
60143 				ZEND_VM_LOOP_INTERRUPT_CHECK();
60144 			} else {
60145 # ifdef ZEND_VM_IP_GLOBAL_REG
60146 				opline = vm_stack_data.orig_opline;
60147 # endif
60148 				return;
60149 			}
60150 #endif
60151 #endif
60152 		}
60153 
60154 	}
60155 	zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
60156 }
60157 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
60158 # pragma GCC pop_options
60159 #endif
60160 
60161 ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
60162 {
60163 	zend_execute_data *execute_data;
60164 	void *object_or_called_scope;
60165 	uint32_t call_info;
60166 
60167 	if (EG(exception) != NULL) {
60168 		return;
60169 	}
60170 
60171 	object_or_called_scope = zend_get_this_object(EG(current_execute_data));
60172 	if (EXPECTED(!object_or_called_scope)) {
60173 		object_or_called_scope = zend_get_called_scope(EG(current_execute_data));
60174 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE;
60175 	} else {
60176 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE | ZEND_CALL_HAS_THIS;
60177 	}
60178 	execute_data = zend_vm_stack_push_call_frame(call_info,
60179 		(zend_function*)op_array, 0, object_or_called_scope);
60180 	if (EG(current_execute_data)) {
60181 		execute_data->symbol_table = zend_rebuild_symbol_table();
60182 	} else {
60183 		execute_data->symbol_table = &EG(symbol_table);
60184 	}
60185 	EX(prev_execute_data) = EG(current_execute_data);
60186 	i_init_code_execute_data(execute_data, op_array, return_value);
60187 	ZEND_OBSERVER_FCALL_BEGIN(execute_data);
60188 	zend_execute_ex(execute_data);
60189 	/* Observer end handlers are called from ZEND_RETURN */
60190 	zend_vm_stack_free_call_frame(execute_data);
60191 }
60192 
60193 
60194 void zend_vm_init(void)
60195 {
60196 	static const void * const labels[] = {
60197 		ZEND_NOP_SPEC_HANDLER,
60198 		ZEND_ADD_SPEC_CONST_CONST_HANDLER,
60199 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
60200 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
60201 		ZEND_NULL_HANDLER,
60202 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
60203 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
60204 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60205 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60206 		ZEND_NULL_HANDLER,
60207 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60208 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
60209 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60210 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60211 		ZEND_NULL_HANDLER,
60212 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60213 		ZEND_NULL_HANDLER,
60214 		ZEND_NULL_HANDLER,
60215 		ZEND_NULL_HANDLER,
60216 		ZEND_NULL_HANDLER,
60217 		ZEND_NULL_HANDLER,
60218 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
60219 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60220 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60221 		ZEND_NULL_HANDLER,
60222 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60223 		ZEND_SUB_SPEC_CONST_CONST_HANDLER,
60224 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
60225 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
60226 		ZEND_NULL_HANDLER,
60227 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
60228 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
60229 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60230 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60231 		ZEND_NULL_HANDLER,
60232 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60233 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
60234 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60235 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60236 		ZEND_NULL_HANDLER,
60237 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60238 		ZEND_NULL_HANDLER,
60239 		ZEND_NULL_HANDLER,
60240 		ZEND_NULL_HANDLER,
60241 		ZEND_NULL_HANDLER,
60242 		ZEND_NULL_HANDLER,
60243 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
60244 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60245 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60246 		ZEND_NULL_HANDLER,
60247 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60248 		ZEND_MUL_SPEC_CONST_CONST_HANDLER,
60249 		ZEND_NULL_HANDLER,
60250 		ZEND_NULL_HANDLER,
60251 		ZEND_NULL_HANDLER,
60252 		ZEND_NULL_HANDLER,
60253 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
60254 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60255 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60256 		ZEND_NULL_HANDLER,
60257 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60258 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
60259 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60260 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60261 		ZEND_NULL_HANDLER,
60262 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60263 		ZEND_NULL_HANDLER,
60264 		ZEND_NULL_HANDLER,
60265 		ZEND_NULL_HANDLER,
60266 		ZEND_NULL_HANDLER,
60267 		ZEND_NULL_HANDLER,
60268 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
60269 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60270 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60271 		ZEND_NULL_HANDLER,
60272 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60273 		ZEND_DIV_SPEC_CONST_CONST_HANDLER,
60274 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
60275 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
60276 		ZEND_NULL_HANDLER,
60277 		ZEND_DIV_SPEC_CONST_CV_HANDLER,
60278 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
60279 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
60280 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
60281 		ZEND_NULL_HANDLER,
60282 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
60283 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
60284 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
60285 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
60286 		ZEND_NULL_HANDLER,
60287 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
60288 		ZEND_NULL_HANDLER,
60289 		ZEND_NULL_HANDLER,
60290 		ZEND_NULL_HANDLER,
60291 		ZEND_NULL_HANDLER,
60292 		ZEND_NULL_HANDLER,
60293 		ZEND_DIV_SPEC_CV_CONST_HANDLER,
60294 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
60295 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
60296 		ZEND_NULL_HANDLER,
60297 		ZEND_DIV_SPEC_CV_CV_HANDLER,
60298 		ZEND_MOD_SPEC_CONST_CONST_HANDLER,
60299 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
60300 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
60301 		ZEND_NULL_HANDLER,
60302 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
60303 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
60304 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60305 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60306 		ZEND_NULL_HANDLER,
60307 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60308 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
60309 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60310 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60311 		ZEND_NULL_HANDLER,
60312 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60313 		ZEND_NULL_HANDLER,
60314 		ZEND_NULL_HANDLER,
60315 		ZEND_NULL_HANDLER,
60316 		ZEND_NULL_HANDLER,
60317 		ZEND_NULL_HANDLER,
60318 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
60319 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60320 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60321 		ZEND_NULL_HANDLER,
60322 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60323 		ZEND_SL_SPEC_CONST_CONST_HANDLER,
60324 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
60325 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
60326 		ZEND_NULL_HANDLER,
60327 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
60328 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
60329 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60330 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60331 		ZEND_NULL_HANDLER,
60332 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60333 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
60334 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60335 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60336 		ZEND_NULL_HANDLER,
60337 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60338 		ZEND_NULL_HANDLER,
60339 		ZEND_NULL_HANDLER,
60340 		ZEND_NULL_HANDLER,
60341 		ZEND_NULL_HANDLER,
60342 		ZEND_NULL_HANDLER,
60343 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
60344 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60345 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60346 		ZEND_NULL_HANDLER,
60347 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60348 		ZEND_SR_SPEC_CONST_CONST_HANDLER,
60349 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
60350 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
60351 		ZEND_NULL_HANDLER,
60352 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
60353 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
60354 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60355 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60356 		ZEND_NULL_HANDLER,
60357 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60358 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
60359 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60360 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60361 		ZEND_NULL_HANDLER,
60362 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60363 		ZEND_NULL_HANDLER,
60364 		ZEND_NULL_HANDLER,
60365 		ZEND_NULL_HANDLER,
60366 		ZEND_NULL_HANDLER,
60367 		ZEND_NULL_HANDLER,
60368 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
60369 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60370 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60371 		ZEND_NULL_HANDLER,
60372 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60373 		ZEND_NULL_HANDLER,
60374 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
60375 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
60376 		ZEND_NULL_HANDLER,
60377 		ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
60378 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
60379 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
60380 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
60381 		ZEND_NULL_HANDLER,
60382 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
60383 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
60384 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
60385 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
60386 		ZEND_NULL_HANDLER,
60387 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
60388 		ZEND_NULL_HANDLER,
60389 		ZEND_NULL_HANDLER,
60390 		ZEND_NULL_HANDLER,
60391 		ZEND_NULL_HANDLER,
60392 		ZEND_NULL_HANDLER,
60393 		ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
60394 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
60395 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
60396 		ZEND_NULL_HANDLER,
60397 		ZEND_CONCAT_SPEC_CV_CV_HANDLER,
60398 		ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
60399 		ZEND_NULL_HANDLER,
60400 		ZEND_NULL_HANDLER,
60401 		ZEND_NULL_HANDLER,
60402 		ZEND_NULL_HANDLER,
60403 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
60404 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60405 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60406 		ZEND_NULL_HANDLER,
60407 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60408 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
60409 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60410 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60411 		ZEND_NULL_HANDLER,
60412 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60413 		ZEND_NULL_HANDLER,
60414 		ZEND_NULL_HANDLER,
60415 		ZEND_NULL_HANDLER,
60416 		ZEND_NULL_HANDLER,
60417 		ZEND_NULL_HANDLER,
60418 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
60419 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60420 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60421 		ZEND_NULL_HANDLER,
60422 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60423 		ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
60424 		ZEND_NULL_HANDLER,
60425 		ZEND_NULL_HANDLER,
60426 		ZEND_NULL_HANDLER,
60427 		ZEND_NULL_HANDLER,
60428 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
60429 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60430 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60431 		ZEND_NULL_HANDLER,
60432 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60433 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
60434 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60435 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60436 		ZEND_NULL_HANDLER,
60437 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60438 		ZEND_NULL_HANDLER,
60439 		ZEND_NULL_HANDLER,
60440 		ZEND_NULL_HANDLER,
60441 		ZEND_NULL_HANDLER,
60442 		ZEND_NULL_HANDLER,
60443 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
60444 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60445 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60446 		ZEND_NULL_HANDLER,
60447 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60448 		ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
60449 		ZEND_NULL_HANDLER,
60450 		ZEND_NULL_HANDLER,
60451 		ZEND_NULL_HANDLER,
60452 		ZEND_NULL_HANDLER,
60453 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
60454 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60455 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60456 		ZEND_NULL_HANDLER,
60457 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60458 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
60459 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60460 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60461 		ZEND_NULL_HANDLER,
60462 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60463 		ZEND_NULL_HANDLER,
60464 		ZEND_NULL_HANDLER,
60465 		ZEND_NULL_HANDLER,
60466 		ZEND_NULL_HANDLER,
60467 		ZEND_NULL_HANDLER,
60468 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
60469 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60470 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60471 		ZEND_NULL_HANDLER,
60472 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60473 		ZEND_POW_SPEC_CONST_CONST_HANDLER,
60474 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
60475 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
60476 		ZEND_NULL_HANDLER,
60477 		ZEND_POW_SPEC_CONST_CV_HANDLER,
60478 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
60479 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
60480 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
60481 		ZEND_NULL_HANDLER,
60482 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
60483 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
60484 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
60485 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
60486 		ZEND_NULL_HANDLER,
60487 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
60488 		ZEND_NULL_HANDLER,
60489 		ZEND_NULL_HANDLER,
60490 		ZEND_NULL_HANDLER,
60491 		ZEND_NULL_HANDLER,
60492 		ZEND_NULL_HANDLER,
60493 		ZEND_POW_SPEC_CV_CONST_HANDLER,
60494 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
60495 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
60496 		ZEND_NULL_HANDLER,
60497 		ZEND_POW_SPEC_CV_CV_HANDLER,
60498 		ZEND_BW_NOT_SPEC_CONST_HANDLER,
60499 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
60500 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
60501 		ZEND_NULL_HANDLER,
60502 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
60503 		ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
60504 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
60505 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
60506 		ZEND_NULL_HANDLER,
60507 		ZEND_BOOL_NOT_SPEC_CV_HANDLER,
60508 		ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
60509 		ZEND_NULL_HANDLER,
60510 		ZEND_NULL_HANDLER,
60511 		ZEND_NULL_HANDLER,
60512 		ZEND_NULL_HANDLER,
60513 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
60514 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
60515 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
60516 		ZEND_NULL_HANDLER,
60517 		ZEND_NULL_HANDLER,
60518 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
60519 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
60520 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
60521 		ZEND_NULL_HANDLER,
60522 		ZEND_NULL_HANDLER,
60523 		ZEND_NULL_HANDLER,
60524 		ZEND_NULL_HANDLER,
60525 		ZEND_NULL_HANDLER,
60526 		ZEND_NULL_HANDLER,
60527 		ZEND_NULL_HANDLER,
60528 		ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
60529 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
60530 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
60531 		ZEND_NULL_HANDLER,
60532 		ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
60533 		ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
60534 		ZEND_NULL_HANDLER,
60535 		ZEND_NULL_HANDLER,
60536 		ZEND_NULL_HANDLER,
60537 		ZEND_NULL_HANDLER,
60538 		ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
60539 		ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
60540 		ZEND_NULL_HANDLER,
60541 		ZEND_NULL_HANDLER,
60542 		ZEND_NULL_HANDLER,
60543 		ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
60544 		ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
60545 		ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
60546 		ZEND_NULL_HANDLER,
60547 		ZEND_NULL_HANDLER,
60548 		ZEND_NULL_HANDLER,
60549 		ZEND_NULL_HANDLER,
60550 		ZEND_NULL_HANDLER,
60551 		ZEND_NULL_HANDLER,
60552 		ZEND_NULL_HANDLER,
60553 		ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
60554 		ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
60555 		ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
60556 		ZEND_NULL_HANDLER,
60557 		ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
60558 		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
60559 		ZEND_NULL_HANDLER,
60560 		ZEND_NULL_HANDLER,
60561 		ZEND_NULL_HANDLER,
60562 		ZEND_NULL_HANDLER,
60563 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
60564 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
60565 		ZEND_NULL_HANDLER,
60566 		ZEND_NULL_HANDLER,
60567 		ZEND_NULL_HANDLER,
60568 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
60569 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
60570 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
60571 		ZEND_NULL_HANDLER,
60572 		ZEND_NULL_HANDLER,
60573 		ZEND_NULL_HANDLER,
60574 		ZEND_NULL_HANDLER,
60575 		ZEND_NULL_HANDLER,
60576 		ZEND_NULL_HANDLER,
60577 		ZEND_NULL_HANDLER,
60578 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
60579 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
60580 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
60581 		ZEND_NULL_HANDLER,
60582 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
60583 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
60584 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
60585 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
60586 		ZEND_NULL_HANDLER,
60587 		ZEND_NULL_HANDLER,
60588 		ZEND_NULL_HANDLER,
60589 		ZEND_NULL_HANDLER,
60590 		ZEND_NULL_HANDLER,
60591 		ZEND_NULL_HANDLER,
60592 		ZEND_NULL_HANDLER,
60593 		ZEND_NULL_HANDLER,
60594 		ZEND_NULL_HANDLER,
60595 		ZEND_NULL_HANDLER,
60596 		ZEND_NULL_HANDLER,
60597 		ZEND_NULL_HANDLER,
60598 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
60599 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
60600 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
60601 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60602 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60603 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60604 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60605 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60606 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60607 		ZEND_NULL_HANDLER,
60608 		ZEND_NULL_HANDLER,
60609 		ZEND_NULL_HANDLER,
60610 		ZEND_NULL_HANDLER,
60611 		ZEND_NULL_HANDLER,
60612 		ZEND_NULL_HANDLER,
60613 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
60614 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
60615 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
60616 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60617 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60618 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60619 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60620 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60621 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60622 		ZEND_NULL_HANDLER,
60623 		ZEND_NULL_HANDLER,
60624 		ZEND_NULL_HANDLER,
60625 		ZEND_NULL_HANDLER,
60626 		ZEND_NULL_HANDLER,
60627 		ZEND_NULL_HANDLER,
60628 		ZEND_NULL_HANDLER,
60629 		ZEND_NULL_HANDLER,
60630 		ZEND_NULL_HANDLER,
60631 		ZEND_NULL_HANDLER,
60632 		ZEND_NULL_HANDLER,
60633 		ZEND_NULL_HANDLER,
60634 		ZEND_NULL_HANDLER,
60635 		ZEND_NULL_HANDLER,
60636 		ZEND_NULL_HANDLER,
60637 		ZEND_NULL_HANDLER,
60638 		ZEND_NULL_HANDLER,
60639 		ZEND_NULL_HANDLER,
60640 		ZEND_NULL_HANDLER,
60641 		ZEND_NULL_HANDLER,
60642 		ZEND_NULL_HANDLER,
60643 		ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
60644 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
60645 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
60646 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
60647 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
60648 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
60649 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
60650 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
60651 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
60652 		ZEND_NULL_HANDLER,
60653 		ZEND_NULL_HANDLER,
60654 		ZEND_NULL_HANDLER,
60655 		ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
60656 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
60657 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
60658 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
60659 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
60660 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
60661 		ZEND_NULL_HANDLER,
60662 		ZEND_NULL_HANDLER,
60663 		ZEND_NULL_HANDLER,
60664 		ZEND_NULL_HANDLER,
60665 		ZEND_NULL_HANDLER,
60666 		ZEND_NULL_HANDLER,
60667 		ZEND_NULL_HANDLER,
60668 		ZEND_NULL_HANDLER,
60669 		ZEND_NULL_HANDLER,
60670 		ZEND_NULL_HANDLER,
60671 		ZEND_NULL_HANDLER,
60672 		ZEND_NULL_HANDLER,
60673 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
60674 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
60675 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
60676 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60677 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60678 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60679 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60680 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60681 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60682 		ZEND_NULL_HANDLER,
60683 		ZEND_NULL_HANDLER,
60684 		ZEND_NULL_HANDLER,
60685 		ZEND_NULL_HANDLER,
60686 		ZEND_NULL_HANDLER,
60687 		ZEND_NULL_HANDLER,
60688 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
60689 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
60690 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
60691 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60692 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60693 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60694 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60695 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60696 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60697 		ZEND_NULL_HANDLER,
60698 		ZEND_NULL_HANDLER,
60699 		ZEND_NULL_HANDLER,
60700 		ZEND_NULL_HANDLER,
60701 		ZEND_NULL_HANDLER,
60702 		ZEND_NULL_HANDLER,
60703 		ZEND_NULL_HANDLER,
60704 		ZEND_NULL_HANDLER,
60705 		ZEND_NULL_HANDLER,
60706 		ZEND_NULL_HANDLER,
60707 		ZEND_NULL_HANDLER,
60708 		ZEND_NULL_HANDLER,
60709 		ZEND_NULL_HANDLER,
60710 		ZEND_NULL_HANDLER,
60711 		ZEND_NULL_HANDLER,
60712 		ZEND_NULL_HANDLER,
60713 		ZEND_NULL_HANDLER,
60714 		ZEND_NULL_HANDLER,
60715 		ZEND_NULL_HANDLER,
60716 		ZEND_NULL_HANDLER,
60717 		ZEND_NULL_HANDLER,
60718 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
60719 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
60720 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
60721 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
60722 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
60723 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
60724 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
60725 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
60726 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
60727 		ZEND_NULL_HANDLER,
60728 		ZEND_NULL_HANDLER,
60729 		ZEND_NULL_HANDLER,
60730 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
60731 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
60732 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
60733 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
60734 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
60735 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
60736 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
60737 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60738 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60739 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
60740 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60741 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60742 		ZEND_NULL_HANDLER,
60743 		ZEND_NULL_HANDLER,
60744 		ZEND_NULL_HANDLER,
60745 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
60746 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60747 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60748 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
60749 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60750 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60751 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60752 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60753 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60754 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60755 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60756 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60757 		ZEND_NULL_HANDLER,
60758 		ZEND_NULL_HANDLER,
60759 		ZEND_NULL_HANDLER,
60760 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60761 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60762 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60763 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
60764 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60765 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60766 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60767 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60768 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60769 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60770 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60771 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60772 		ZEND_NULL_HANDLER,
60773 		ZEND_NULL_HANDLER,
60774 		ZEND_NULL_HANDLER,
60775 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60776 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60777 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60778 		ZEND_NULL_HANDLER,
60779 		ZEND_NULL_HANDLER,
60780 		ZEND_NULL_HANDLER,
60781 		ZEND_NULL_HANDLER,
60782 		ZEND_NULL_HANDLER,
60783 		ZEND_NULL_HANDLER,
60784 		ZEND_NULL_HANDLER,
60785 		ZEND_NULL_HANDLER,
60786 		ZEND_NULL_HANDLER,
60787 		ZEND_NULL_HANDLER,
60788 		ZEND_NULL_HANDLER,
60789 		ZEND_NULL_HANDLER,
60790 		ZEND_NULL_HANDLER,
60791 		ZEND_NULL_HANDLER,
60792 		ZEND_NULL_HANDLER,
60793 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
60794 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60795 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60796 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60797 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60798 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60799 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60800 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60801 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60802 		ZEND_NULL_HANDLER,
60803 		ZEND_NULL_HANDLER,
60804 		ZEND_NULL_HANDLER,
60805 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60806 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60807 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60808 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
60809 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
60810 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
60811 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
60812 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60813 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60814 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
60815 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60816 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60817 		ZEND_NULL_HANDLER,
60818 		ZEND_NULL_HANDLER,
60819 		ZEND_NULL_HANDLER,
60820 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
60821 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60822 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60823 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
60824 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60825 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60826 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60827 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60828 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60829 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60830 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60831 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60832 		ZEND_NULL_HANDLER,
60833 		ZEND_NULL_HANDLER,
60834 		ZEND_NULL_HANDLER,
60835 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60836 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60837 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60838 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
60839 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60840 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60841 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60842 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60843 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60844 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60845 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60846 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60847 		ZEND_NULL_HANDLER,
60848 		ZEND_NULL_HANDLER,
60849 		ZEND_NULL_HANDLER,
60850 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60851 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60852 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60853 		ZEND_NULL_HANDLER,
60854 		ZEND_NULL_HANDLER,
60855 		ZEND_NULL_HANDLER,
60856 		ZEND_NULL_HANDLER,
60857 		ZEND_NULL_HANDLER,
60858 		ZEND_NULL_HANDLER,
60859 		ZEND_NULL_HANDLER,
60860 		ZEND_NULL_HANDLER,
60861 		ZEND_NULL_HANDLER,
60862 		ZEND_NULL_HANDLER,
60863 		ZEND_NULL_HANDLER,
60864 		ZEND_NULL_HANDLER,
60865 		ZEND_NULL_HANDLER,
60866 		ZEND_NULL_HANDLER,
60867 		ZEND_NULL_HANDLER,
60868 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
60869 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60870 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60871 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60872 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60873 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60874 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60875 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60876 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60877 		ZEND_NULL_HANDLER,
60878 		ZEND_NULL_HANDLER,
60879 		ZEND_NULL_HANDLER,
60880 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60881 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60882 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60883 		ZEND_NULL_HANDLER,
60884 		ZEND_NULL_HANDLER,
60885 		ZEND_NULL_HANDLER,
60886 		ZEND_NULL_HANDLER,
60887 		ZEND_NULL_HANDLER,
60888 		ZEND_NULL_HANDLER,
60889 		ZEND_NULL_HANDLER,
60890 		ZEND_NULL_HANDLER,
60891 		ZEND_NULL_HANDLER,
60892 		ZEND_NULL_HANDLER,
60893 		ZEND_NULL_HANDLER,
60894 		ZEND_NULL_HANDLER,
60895 		ZEND_NULL_HANDLER,
60896 		ZEND_NULL_HANDLER,
60897 		ZEND_NULL_HANDLER,
60898 		ZEND_NULL_HANDLER,
60899 		ZEND_NULL_HANDLER,
60900 		ZEND_NULL_HANDLER,
60901 		ZEND_NULL_HANDLER,
60902 		ZEND_NULL_HANDLER,
60903 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
60904 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
60905 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
60906 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
60907 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
60908 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
60909 		ZEND_NULL_HANDLER,
60910 		ZEND_NULL_HANDLER,
60911 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
60912 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER,
60913 		ZEND_NULL_HANDLER,
60914 		ZEND_NULL_HANDLER,
60915 		ZEND_NULL_HANDLER,
60916 		ZEND_NULL_HANDLER,
60917 		ZEND_NULL_HANDLER,
60918 		ZEND_NULL_HANDLER,
60919 		ZEND_NULL_HANDLER,
60920 		ZEND_NULL_HANDLER,
60921 		ZEND_NULL_HANDLER,
60922 		ZEND_NULL_HANDLER,
60923 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
60924 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
60925 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
60926 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
60927 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
60928 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
60929 		ZEND_NULL_HANDLER,
60930 		ZEND_NULL_HANDLER,
60931 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
60932 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER,
60933 		ZEND_NULL_HANDLER,
60934 		ZEND_NULL_HANDLER,
60935 		ZEND_NULL_HANDLER,
60936 		ZEND_NULL_HANDLER,
60937 		ZEND_NULL_HANDLER,
60938 		ZEND_NULL_HANDLER,
60939 		ZEND_NULL_HANDLER,
60940 		ZEND_NULL_HANDLER,
60941 		ZEND_NULL_HANDLER,
60942 		ZEND_NULL_HANDLER,
60943 		ZEND_NULL_HANDLER,
60944 		ZEND_NULL_HANDLER,
60945 		ZEND_NULL_HANDLER,
60946 		ZEND_NULL_HANDLER,
60947 		ZEND_NULL_HANDLER,
60948 		ZEND_NULL_HANDLER,
60949 		ZEND_NULL_HANDLER,
60950 		ZEND_NULL_HANDLER,
60951 		ZEND_NULL_HANDLER,
60952 		ZEND_NULL_HANDLER,
60953 		ZEND_NULL_HANDLER,
60954 		ZEND_NULL_HANDLER,
60955 		ZEND_NULL_HANDLER,
60956 		ZEND_NULL_HANDLER,
60957 		ZEND_NULL_HANDLER,
60958 		ZEND_NULL_HANDLER,
60959 		ZEND_NULL_HANDLER,
60960 		ZEND_NULL_HANDLER,
60961 		ZEND_NULL_HANDLER,
60962 		ZEND_NULL_HANDLER,
60963 		ZEND_NULL_HANDLER,
60964 		ZEND_NULL_HANDLER,
60965 		ZEND_NULL_HANDLER,
60966 		ZEND_NULL_HANDLER,
60967 		ZEND_NULL_HANDLER,
60968 		ZEND_NULL_HANDLER,
60969 		ZEND_NULL_HANDLER,
60970 		ZEND_NULL_HANDLER,
60971 		ZEND_NULL_HANDLER,
60972 		ZEND_NULL_HANDLER,
60973 		ZEND_NULL_HANDLER,
60974 		ZEND_NULL_HANDLER,
60975 		ZEND_NULL_HANDLER,
60976 		ZEND_NULL_HANDLER,
60977 		ZEND_NULL_HANDLER,
60978 		ZEND_NULL_HANDLER,
60979 		ZEND_NULL_HANDLER,
60980 		ZEND_NULL_HANDLER,
60981 		ZEND_NULL_HANDLER,
60982 		ZEND_NULL_HANDLER,
60983 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
60984 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
60985 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
60986 		ZEND_NULL_HANDLER,
60987 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
60988 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60989 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60990 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60991 		ZEND_NULL_HANDLER,
60992 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60993 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60994 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60995 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60996 		ZEND_NULL_HANDLER,
60997 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60998 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
60999 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
61000 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
61001 		ZEND_NULL_HANDLER,
61002 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
61003 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
61004 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
61005 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
61006 		ZEND_NULL_HANDLER,
61007 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
61008 		ZEND_NULL_HANDLER,
61009 		ZEND_NULL_HANDLER,
61010 		ZEND_NULL_HANDLER,
61011 		ZEND_NULL_HANDLER,
61012 		ZEND_NULL_HANDLER,
61013 		ZEND_NULL_HANDLER,
61014 		ZEND_NULL_HANDLER,
61015 		ZEND_NULL_HANDLER,
61016 		ZEND_NULL_HANDLER,
61017 		ZEND_NULL_HANDLER,
61018 		ZEND_NULL_HANDLER,
61019 		ZEND_NULL_HANDLER,
61020 		ZEND_NULL_HANDLER,
61021 		ZEND_NULL_HANDLER,
61022 		ZEND_NULL_HANDLER,
61023 		ZEND_NULL_HANDLER,
61024 		ZEND_NULL_HANDLER,
61025 		ZEND_NULL_HANDLER,
61026 		ZEND_NULL_HANDLER,
61027 		ZEND_NULL_HANDLER,
61028 		ZEND_NULL_HANDLER,
61029 		ZEND_NULL_HANDLER,
61030 		ZEND_NULL_HANDLER,
61031 		ZEND_NULL_HANDLER,
61032 		ZEND_NULL_HANDLER,
61033 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
61034 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
61035 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
61036 		ZEND_NULL_HANDLER,
61037 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
61038 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
61039 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
61040 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
61041 		ZEND_NULL_HANDLER,
61042 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
61043 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
61044 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
61045 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
61046 		ZEND_NULL_HANDLER,
61047 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
61048 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
61049 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
61050 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
61051 		ZEND_NULL_HANDLER,
61052 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
61053 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
61054 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
61055 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
61056 		ZEND_NULL_HANDLER,
61057 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
61058 		ZEND_NULL_HANDLER,
61059 		ZEND_NULL_HANDLER,
61060 		ZEND_NULL_HANDLER,
61061 		ZEND_NULL_HANDLER,
61062 		ZEND_NULL_HANDLER,
61063 		ZEND_NULL_HANDLER,
61064 		ZEND_NULL_HANDLER,
61065 		ZEND_NULL_HANDLER,
61066 		ZEND_NULL_HANDLER,
61067 		ZEND_NULL_HANDLER,
61068 		ZEND_NULL_HANDLER,
61069 		ZEND_NULL_HANDLER,
61070 		ZEND_NULL_HANDLER,
61071 		ZEND_NULL_HANDLER,
61072 		ZEND_NULL_HANDLER,
61073 		ZEND_NULL_HANDLER,
61074 		ZEND_NULL_HANDLER,
61075 		ZEND_NULL_HANDLER,
61076 		ZEND_NULL_HANDLER,
61077 		ZEND_NULL_HANDLER,
61078 		ZEND_NULL_HANDLER,
61079 		ZEND_NULL_HANDLER,
61080 		ZEND_NULL_HANDLER,
61081 		ZEND_NULL_HANDLER,
61082 		ZEND_NULL_HANDLER,
61083 		ZEND_NULL_HANDLER,
61084 		ZEND_NULL_HANDLER,
61085 		ZEND_NULL_HANDLER,
61086 		ZEND_NULL_HANDLER,
61087 		ZEND_NULL_HANDLER,
61088 		ZEND_NULL_HANDLER,
61089 		ZEND_NULL_HANDLER,
61090 		ZEND_NULL_HANDLER,
61091 		ZEND_NULL_HANDLER,
61092 		ZEND_NULL_HANDLER,
61093 		ZEND_NULL_HANDLER,
61094 		ZEND_NULL_HANDLER,
61095 		ZEND_NULL_HANDLER,
61096 		ZEND_NULL_HANDLER,
61097 		ZEND_NULL_HANDLER,
61098 		ZEND_NULL_HANDLER,
61099 		ZEND_NULL_HANDLER,
61100 		ZEND_NULL_HANDLER,
61101 		ZEND_NULL_HANDLER,
61102 		ZEND_NULL_HANDLER,
61103 		ZEND_NULL_HANDLER,
61104 		ZEND_NULL_HANDLER,
61105 		ZEND_NULL_HANDLER,
61106 		ZEND_NULL_HANDLER,
61107 		ZEND_NULL_HANDLER,
61108 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
61109 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
61110 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
61111 		ZEND_NULL_HANDLER,
61112 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
61113 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
61114 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
61115 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
61116 		ZEND_NULL_HANDLER,
61117 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
61118 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
61119 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
61120 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
61121 		ZEND_NULL_HANDLER,
61122 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
61123 		ZEND_NULL_HANDLER,
61124 		ZEND_NULL_HANDLER,
61125 		ZEND_NULL_HANDLER,
61126 		ZEND_NULL_HANDLER,
61127 		ZEND_NULL_HANDLER,
61128 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
61129 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
61130 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
61131 		ZEND_NULL_HANDLER,
61132 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
61133 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
61134 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
61135 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
61136 		ZEND_NULL_HANDLER,
61137 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
61138 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
61139 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
61140 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
61141 		ZEND_NULL_HANDLER,
61142 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
61143 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
61144 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
61145 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
61146 		ZEND_NULL_HANDLER,
61147 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
61148 		ZEND_NULL_HANDLER,
61149 		ZEND_NULL_HANDLER,
61150 		ZEND_NULL_HANDLER,
61151 		ZEND_NULL_HANDLER,
61152 		ZEND_NULL_HANDLER,
61153 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
61154 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
61155 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
61156 		ZEND_NULL_HANDLER,
61157 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
61158 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
61159 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
61160 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
61161 		ZEND_NULL_HANDLER,
61162 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
61163 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
61164 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
61165 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
61166 		ZEND_NULL_HANDLER,
61167 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
61168 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
61169 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
61170 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
61171 		ZEND_NULL_HANDLER,
61172 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
61173 		ZEND_NULL_HANDLER,
61174 		ZEND_NULL_HANDLER,
61175 		ZEND_NULL_HANDLER,
61176 		ZEND_NULL_HANDLER,
61177 		ZEND_NULL_HANDLER,
61178 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
61179 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
61180 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
61181 		ZEND_NULL_HANDLER,
61182 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER,
61183 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER,
61184 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER,
61185 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER,
61186 		ZEND_NULL_HANDLER,
61187 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER,
61188 		ZEND_NULL_HANDLER,
61189 		ZEND_NULL_HANDLER,
61190 		ZEND_NULL_HANDLER,
61191 		ZEND_NULL_HANDLER,
61192 		ZEND_NULL_HANDLER,
61193 		ZEND_NULL_HANDLER,
61194 		ZEND_NULL_HANDLER,
61195 		ZEND_NULL_HANDLER,
61196 		ZEND_NULL_HANDLER,
61197 		ZEND_NULL_HANDLER,
61198 		ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER,
61199 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
61200 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
61201 		ZEND_NULL_HANDLER,
61202 		ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER,
61203 		ZEND_NULL_HANDLER,
61204 		ZEND_NULL_HANDLER,
61205 		ZEND_NULL_HANDLER,
61206 		ZEND_NULL_HANDLER,
61207 		ZEND_NULL_HANDLER,
61208 		ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER,
61209 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
61210 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
61211 		ZEND_NULL_HANDLER,
61212 		ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER,
61213 		ZEND_NULL_HANDLER,
61214 		ZEND_NULL_HANDLER,
61215 		ZEND_NULL_HANDLER,
61216 		ZEND_NULL_HANDLER,
61217 		ZEND_NULL_HANDLER,
61218 		ZEND_NULL_HANDLER,
61219 		ZEND_NULL_HANDLER,
61220 		ZEND_NULL_HANDLER,
61221 		ZEND_NULL_HANDLER,
61222 		ZEND_NULL_HANDLER,
61223 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER,
61224 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
61225 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
61226 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER,
61227 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER,
61228 		ZEND_NULL_HANDLER,
61229 		ZEND_NULL_HANDLER,
61230 		ZEND_NULL_HANDLER,
61231 		ZEND_NULL_HANDLER,
61232 		ZEND_NULL_HANDLER,
61233 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER,
61234 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
61235 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
61236 		ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER,
61237 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER,
61238 		ZEND_NULL_HANDLER,
61239 		ZEND_NULL_HANDLER,
61240 		ZEND_NULL_HANDLER,
61241 		ZEND_NULL_HANDLER,
61242 		ZEND_NULL_HANDLER,
61243 		ZEND_NULL_HANDLER,
61244 		ZEND_NULL_HANDLER,
61245 		ZEND_NULL_HANDLER,
61246 		ZEND_NULL_HANDLER,
61247 		ZEND_NULL_HANDLER,
61248 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER,
61249 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
61250 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
61251 		ZEND_NULL_HANDLER,
61252 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER,
61253 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER,
61254 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
61255 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
61256 		ZEND_NULL_HANDLER,
61257 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER,
61258 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER,
61259 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
61260 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
61261 		ZEND_NULL_HANDLER,
61262 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER,
61263 		ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER,
61264 		ZEND_NULL_HANDLER,
61265 		ZEND_NULL_HANDLER,
61266 		ZEND_NULL_HANDLER,
61267 		ZEND_NULL_HANDLER,
61268 		ZEND_NULL_HANDLER,
61269 		ZEND_NULL_HANDLER,
61270 		ZEND_NULL_HANDLER,
61271 		ZEND_NULL_HANDLER,
61272 		ZEND_NULL_HANDLER,
61273 		ZEND_NULL_HANDLER,
61274 		ZEND_NULL_HANDLER,
61275 		ZEND_NULL_HANDLER,
61276 		ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
61277 		ZEND_NULL_HANDLER,
61278 		ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
61279 		ZEND_NULL_HANDLER,
61280 		ZEND_NULL_HANDLER,
61281 		ZEND_NULL_HANDLER,
61282 		ZEND_NULL_HANDLER,
61283 		ZEND_NULL_HANDLER,
61284 		ZEND_NULL_HANDLER,
61285 		ZEND_NULL_HANDLER,
61286 		ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
61287 		ZEND_NULL_HANDLER,
61288 		ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
61289 		ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
61290 		ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
61291 		ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
61292 		ZEND_NULL_HANDLER,
61293 		ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
61294 		ZEND_NULL_HANDLER,
61295 		ZEND_NULL_HANDLER,
61296 		ZEND_NULL_HANDLER,
61297 		ZEND_NULL_HANDLER,
61298 		ZEND_NULL_HANDLER,
61299 		ZEND_NULL_HANDLER,
61300 		ZEND_NULL_HANDLER,
61301 		ZEND_NULL_HANDLER,
61302 		ZEND_NULL_HANDLER,
61303 		ZEND_NULL_HANDLER,
61304 		ZEND_NULL_HANDLER,
61305 		ZEND_NULL_HANDLER,
61306 		ZEND_NULL_HANDLER,
61307 		ZEND_NULL_HANDLER,
61308 		ZEND_NULL_HANDLER,
61309 		ZEND_NULL_HANDLER,
61310 		ZEND_NULL_HANDLER,
61311 		ZEND_NULL_HANDLER,
61312 		ZEND_NULL_HANDLER,
61313 		ZEND_NULL_HANDLER,
61314 		ZEND_NULL_HANDLER,
61315 		ZEND_NULL_HANDLER,
61316 		ZEND_NULL_HANDLER,
61317 		ZEND_NULL_HANDLER,
61318 		ZEND_NULL_HANDLER,
61319 		ZEND_NULL_HANDLER,
61320 		ZEND_NULL_HANDLER,
61321 		ZEND_NULL_HANDLER,
61322 		ZEND_NULL_HANDLER,
61323 		ZEND_NULL_HANDLER,
61324 		ZEND_NULL_HANDLER,
61325 		ZEND_NULL_HANDLER,
61326 		ZEND_NULL_HANDLER,
61327 		ZEND_NULL_HANDLER,
61328 		ZEND_NULL_HANDLER,
61329 		ZEND_NULL_HANDLER,
61330 		ZEND_NULL_HANDLER,
61331 		ZEND_NULL_HANDLER,
61332 		ZEND_NULL_HANDLER,
61333 		ZEND_NULL_HANDLER,
61334 		ZEND_NULL_HANDLER,
61335 		ZEND_NULL_HANDLER,
61336 		ZEND_NULL_HANDLER,
61337 		ZEND_NULL_HANDLER,
61338 		ZEND_NULL_HANDLER,
61339 		ZEND_NULL_HANDLER,
61340 		ZEND_NULL_HANDLER,
61341 		ZEND_NULL_HANDLER,
61342 		ZEND_NULL_HANDLER,
61343 		ZEND_NULL_HANDLER,
61344 		ZEND_NULL_HANDLER,
61345 		ZEND_NULL_HANDLER,
61346 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
61347 		ZEND_NULL_HANDLER,
61348 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
61349 		ZEND_NULL_HANDLER,
61350 		ZEND_NULL_HANDLER,
61351 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
61352 		ZEND_NULL_HANDLER,
61353 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
61354 		ZEND_NULL_HANDLER,
61355 		ZEND_NULL_HANDLER,
61356 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
61357 		ZEND_NULL_HANDLER,
61358 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
61359 		ZEND_NULL_HANDLER,
61360 		ZEND_NULL_HANDLER,
61361 		ZEND_NULL_HANDLER,
61362 		ZEND_NULL_HANDLER,
61363 		ZEND_NULL_HANDLER,
61364 		ZEND_NULL_HANDLER,
61365 		ZEND_NULL_HANDLER,
61366 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
61367 		ZEND_NULL_HANDLER,
61368 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
61369 		ZEND_NULL_HANDLER,
61370 		ZEND_NULL_HANDLER,
61371 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
61372 		ZEND_NULL_HANDLER,
61373 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
61374 		ZEND_NULL_HANDLER,
61375 		ZEND_NULL_HANDLER,
61376 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
61377 		ZEND_NULL_HANDLER,
61378 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
61379 		ZEND_NULL_HANDLER,
61380 		ZEND_NULL_HANDLER,
61381 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
61382 		ZEND_NULL_HANDLER,
61383 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
61384 		ZEND_NULL_HANDLER,
61385 		ZEND_NULL_HANDLER,
61386 		ZEND_NULL_HANDLER,
61387 		ZEND_NULL_HANDLER,
61388 		ZEND_NULL_HANDLER,
61389 		ZEND_NULL_HANDLER,
61390 		ZEND_NULL_HANDLER,
61391 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
61392 		ZEND_NULL_HANDLER,
61393 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
61394 		ZEND_NULL_HANDLER,
61395 		ZEND_NULL_HANDLER,
61396 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
61397 		ZEND_NULL_HANDLER,
61398 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
61399 		ZEND_NULL_HANDLER,
61400 		ZEND_NULL_HANDLER,
61401 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
61402 		ZEND_NULL_HANDLER,
61403 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
61404 		ZEND_NULL_HANDLER,
61405 		ZEND_NULL_HANDLER,
61406 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
61407 		ZEND_NULL_HANDLER,
61408 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
61409 		ZEND_NULL_HANDLER,
61410 		ZEND_NULL_HANDLER,
61411 		ZEND_NULL_HANDLER,
61412 		ZEND_NULL_HANDLER,
61413 		ZEND_NULL_HANDLER,
61414 		ZEND_NULL_HANDLER,
61415 		ZEND_NULL_HANDLER,
61416 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
61417 		ZEND_NULL_HANDLER,
61418 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER,
61419 		ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER,
61420 		ZEND_NULL_HANDLER,
61421 		ZEND_NULL_HANDLER,
61422 		ZEND_NULL_HANDLER,
61423 		ZEND_NULL_HANDLER,
61424 		ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
61425 		ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
61426 		ZEND_NULL_HANDLER,
61427 		ZEND_NULL_HANDLER,
61428 		ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
61429 		ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
61430 		ZEND_NULL_HANDLER,
61431 		ZEND_NULL_HANDLER,
61432 		ZEND_NULL_HANDLER,
61433 		ZEND_NULL_HANDLER,
61434 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
61435 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
61436 		ZEND_NULL_HANDLER,
61437 		ZEND_NULL_HANDLER,
61438 		ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
61439 		ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
61440 		ZEND_NULL_HANDLER,
61441 		ZEND_NULL_HANDLER,
61442 		ZEND_POST_INC_SPEC_VAR_HANDLER,
61443 		ZEND_NULL_HANDLER,
61444 		ZEND_POST_INC_SPEC_CV_HANDLER,
61445 		ZEND_NULL_HANDLER,
61446 		ZEND_NULL_HANDLER,
61447 		ZEND_POST_DEC_SPEC_VAR_HANDLER,
61448 		ZEND_NULL_HANDLER,
61449 		ZEND_POST_DEC_SPEC_CV_HANDLER,
61450 		ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER,
61451 		ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER,
61452 		ZEND_JMP_SPEC_HANDLER,
61453 		ZEND_JMPZ_SPEC_CONST_HANDLER,
61454 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
61455 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
61456 		ZEND_NULL_HANDLER,
61457 		ZEND_JMPZ_SPEC_CV_HANDLER,
61458 		ZEND_JMPNZ_SPEC_CONST_HANDLER,
61459 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
61460 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
61461 		ZEND_NULL_HANDLER,
61462 		ZEND_JMPNZ_SPEC_CV_HANDLER,
61463 		ZEND_JMPZNZ_SPEC_CONST_HANDLER,
61464 		ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
61465 		ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
61466 		ZEND_NULL_HANDLER,
61467 		ZEND_JMPZNZ_SPEC_CV_HANDLER,
61468 		ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
61469 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
61470 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
61471 		ZEND_NULL_HANDLER,
61472 		ZEND_JMPZ_EX_SPEC_CV_HANDLER,
61473 		ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
61474 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
61475 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
61476 		ZEND_NULL_HANDLER,
61477 		ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
61478 		ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
61479 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
61480 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
61481 		ZEND_NULL_HANDLER,
61482 		ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
61483 		ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
61484 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
61485 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
61486 		ZEND_NULL_HANDLER,
61487 		ZEND_NULL_HANDLER,
61488 		ZEND_NULL_HANDLER,
61489 		ZEND_NULL_HANDLER,
61490 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER,
61491 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
61492 		ZEND_NULL_HANDLER,
61493 		ZEND_NULL_HANDLER,
61494 		ZEND_CAST_SPEC_CONST_HANDLER,
61495 		ZEND_CAST_SPEC_TMP_HANDLER,
61496 		ZEND_CAST_SPEC_VAR_HANDLER,
61497 		ZEND_NULL_HANDLER,
61498 		ZEND_CAST_SPEC_CV_HANDLER,
61499 		ZEND_BOOL_SPEC_CONST_HANDLER,
61500 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
61501 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
61502 		ZEND_NULL_HANDLER,
61503 		ZEND_BOOL_SPEC_CV_HANDLER,
61504 		ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
61505 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
61506 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
61507 		ZEND_NULL_HANDLER,
61508 		ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
61509 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
61510 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
61511 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
61512 		ZEND_NULL_HANDLER,
61513 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
61514 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
61515 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
61516 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
61517 		ZEND_NULL_HANDLER,
61518 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
61519 		ZEND_NULL_HANDLER,
61520 		ZEND_NULL_HANDLER,
61521 		ZEND_NULL_HANDLER,
61522 		ZEND_NULL_HANDLER,
61523 		ZEND_NULL_HANDLER,
61524 		ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
61525 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
61526 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
61527 		ZEND_NULL_HANDLER,
61528 		ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
61529 		ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
61530 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
61531 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
61532 		ZEND_NULL_HANDLER,
61533 		ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
61534 		ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
61535 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
61536 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
61537 		ZEND_NULL_HANDLER,
61538 		ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
61539 		ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
61540 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
61541 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
61542 		ZEND_NULL_HANDLER,
61543 		ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
61544 		ZEND_BEGIN_SILENCE_SPEC_HANDLER,
61545 		ZEND_END_SILENCE_SPEC_TMP_HANDLER,
61546 		ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
61547 		ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
61548 		ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
61549 		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
61550 		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
61551 		ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
61552 		ZEND_RETURN_SPEC_CONST_HANDLER,
61553 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
61554 		ZEND_RETURN_SPEC_TMP_HANDLER,
61555 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
61556 		ZEND_RETURN_SPEC_VAR_HANDLER,
61557 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
61558 		ZEND_NULL_HANDLER,
61559 		ZEND_NULL_HANDLER,
61560 		ZEND_RETURN_SPEC_CV_HANDLER,
61561 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
61562 		ZEND_RECV_SPEC_UNUSED_HANDLER,
61563 		ZEND_RECV_INIT_SPEC_CONST_HANDLER,
61564 		ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER,
61565 		ZEND_NULL_HANDLER,
61566 		ZEND_NULL_HANDLER,
61567 		ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER,
61568 		ZEND_NULL_HANDLER,
61569 		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
61570 		ZEND_NULL_HANDLER,
61571 		ZEND_NULL_HANDLER,
61572 		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
61573 		ZEND_NULL_HANDLER,
61574 		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
61575 		ZEND_NULL_HANDLER,
61576 		ZEND_NULL_HANDLER,
61577 		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
61578 		ZEND_NULL_HANDLER,
61579 		ZEND_NULL_HANDLER,
61580 		ZEND_NULL_HANDLER,
61581 		ZEND_NULL_HANDLER,
61582 		ZEND_NULL_HANDLER,
61583 		ZEND_NULL_HANDLER,
61584 		ZEND_NULL_HANDLER,
61585 		ZEND_NULL_HANDLER,
61586 		ZEND_NULL_HANDLER,
61587 		ZEND_NULL_HANDLER,
61588 		ZEND_NULL_HANDLER,
61589 		ZEND_NULL_HANDLER,
61590 		ZEND_NULL_HANDLER,
61591 		ZEND_NULL_HANDLER,
61592 		ZEND_NULL_HANDLER,
61593 		ZEND_NULL_HANDLER,
61594 		ZEND_NULL_HANDLER,
61595 		ZEND_NULL_HANDLER,
61596 		ZEND_NULL_HANDLER,
61597 		ZEND_NULL_HANDLER,
61598 		ZEND_NULL_HANDLER,
61599 		ZEND_NULL_HANDLER,
61600 		ZEND_NULL_HANDLER,
61601 		ZEND_NULL_HANDLER,
61602 		ZEND_NULL_HANDLER,
61603 		ZEND_NULL_HANDLER,
61604 		ZEND_NULL_HANDLER,
61605 		ZEND_NULL_HANDLER,
61606 		ZEND_NULL_HANDLER,
61607 		ZEND_NULL_HANDLER,
61608 		ZEND_NULL_HANDLER,
61609 		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
61610 		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
61611 		ZEND_NULL_HANDLER,
61612 		ZEND_NULL_HANDLER,
61613 		ZEND_NULL_HANDLER,
61614 		ZEND_NULL_HANDLER,
61615 		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER,
61616 		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
61617 		ZEND_NULL_HANDLER,
61618 		ZEND_NULL_HANDLER,
61619 		ZEND_NULL_HANDLER,
61620 		ZEND_NULL_HANDLER,
61621 		ZEND_NULL_HANDLER,
61622 		ZEND_NULL_HANDLER,
61623 		ZEND_NULL_HANDLER,
61624 		ZEND_NULL_HANDLER,
61625 		ZEND_NULL_HANDLER,
61626 		ZEND_NULL_HANDLER,
61627 		ZEND_NULL_HANDLER,
61628 		ZEND_NULL_HANDLER,
61629 		ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
61630 		ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
61631 		ZEND_NULL_HANDLER,
61632 		ZEND_NULL_HANDLER,
61633 		ZEND_NULL_HANDLER,
61634 		ZEND_NULL_HANDLER,
61635 		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER,
61636 		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER,
61637 		ZEND_NULL_HANDLER,
61638 		ZEND_NULL_HANDLER,
61639 		ZEND_NULL_HANDLER,
61640 		ZEND_NULL_HANDLER,
61641 		ZEND_NULL_HANDLER,
61642 		ZEND_NULL_HANDLER,
61643 		ZEND_NULL_HANDLER,
61644 		ZEND_NULL_HANDLER,
61645 		ZEND_NULL_HANDLER,
61646 		ZEND_NULL_HANDLER,
61647 		ZEND_NULL_HANDLER,
61648 		ZEND_NULL_HANDLER,
61649 		ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER,
61650 		ZEND_NULL_HANDLER,
61651 		ZEND_NULL_HANDLER,
61652 		ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER,
61653 		ZEND_NULL_HANDLER,
61654 		ZEND_NULL_HANDLER,
61655 		ZEND_NULL_HANDLER,
61656 		ZEND_NULL_HANDLER,
61657 		ZEND_NULL_HANDLER,
61658 		ZEND_NULL_HANDLER,
61659 		ZEND_SEND_REF_SPEC_CV_CONST_HANDLER,
61660 		ZEND_NULL_HANDLER,
61661 		ZEND_NULL_HANDLER,
61662 		ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER,
61663 		ZEND_NULL_HANDLER,
61664 		ZEND_NEW_SPEC_CONST_UNUSED_HANDLER,
61665 		ZEND_NULL_HANDLER,
61666 		ZEND_NEW_SPEC_VAR_UNUSED_HANDLER,
61667 		ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER,
61668 		ZEND_NULL_HANDLER,
61669 		ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
61670 		ZEND_FREE_SPEC_TMPVAR_HANDLER,
61671 		ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
61672 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
61673 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
61674 		ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
61675 		ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
61676 		ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
61677 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
61678 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
61679 		ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
61680 		ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
61681 		ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
61682 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
61683 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
61684 		ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
61685 		ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
61686 		ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
61687 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
61688 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
61689 		ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
61690 		ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
61691 		ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
61692 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
61693 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
61694 		ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
61695 		ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
61696 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
61697 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
61698 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
61699 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
61700 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
61701 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
61702 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
61703 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
61704 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
61705 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
61706 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
61707 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
61708 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
61709 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
61710 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
61711 		ZEND_NULL_HANDLER,
61712 		ZEND_NULL_HANDLER,
61713 		ZEND_NULL_HANDLER,
61714 		ZEND_NULL_HANDLER,
61715 		ZEND_NULL_HANDLER,
61716 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
61717 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
61718 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
61719 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
61720 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
61721 		ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
61722 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
61723 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
61724 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
61725 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
61726 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
61727 		ZEND_NULL_HANDLER,
61728 		ZEND_NULL_HANDLER,
61729 		ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
61730 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
61731 		ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
61732 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
61733 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
61734 		ZEND_NULL_HANDLER,
61735 		ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
61736 		ZEND_NULL_HANDLER,
61737 		ZEND_NULL_HANDLER,
61738 		ZEND_NULL_HANDLER,
61739 		ZEND_NULL_HANDLER,
61740 		ZEND_NULL_HANDLER,
61741 		ZEND_NULL_HANDLER,
61742 		ZEND_NULL_HANDLER,
61743 		ZEND_NULL_HANDLER,
61744 		ZEND_NULL_HANDLER,
61745 		ZEND_NULL_HANDLER,
61746 		ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
61747 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
61748 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
61749 		ZEND_NULL_HANDLER,
61750 		ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
61751 		ZEND_NULL_HANDLER,
61752 		ZEND_NULL_HANDLER,
61753 		ZEND_NULL_HANDLER,
61754 		ZEND_NULL_HANDLER,
61755 		ZEND_NULL_HANDLER,
61756 		ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
61757 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
61758 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
61759 		ZEND_NULL_HANDLER,
61760 		ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
61761 		ZEND_NULL_HANDLER,
61762 		ZEND_NULL_HANDLER,
61763 		ZEND_NULL_HANDLER,
61764 		ZEND_NULL_HANDLER,
61765 		ZEND_NULL_HANDLER,
61766 		ZEND_NULL_HANDLER,
61767 		ZEND_NULL_HANDLER,
61768 		ZEND_NULL_HANDLER,
61769 		ZEND_NULL_HANDLER,
61770 		ZEND_NULL_HANDLER,
61771 		ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
61772 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
61773 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
61774 		ZEND_NULL_HANDLER,
61775 		ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
61776 		ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
61777 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61778 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61779 		ZEND_NULL_HANDLER,
61780 		ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
61781 		ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
61782 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
61783 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
61784 		ZEND_NULL_HANDLER,
61785 		ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
61786 		ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
61787 		ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
61788 		ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
61789 		ZEND_NULL_HANDLER,
61790 		ZEND_FE_RESET_R_SPEC_CV_HANDLER,
61791 		ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
61792 		ZEND_EXIT_SPEC_HANDLER,
61793 		ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
61794 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
61795 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
61796 		ZEND_NULL_HANDLER,
61797 		ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
61798 		ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
61799 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
61800 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
61801 		ZEND_NULL_HANDLER,
61802 		ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
61803 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
61804 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61805 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61806 		ZEND_NULL_HANDLER,
61807 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
61808 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
61809 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61810 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61811 		ZEND_NULL_HANDLER,
61812 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
61813 		ZEND_NULL_HANDLER,
61814 		ZEND_NULL_HANDLER,
61815 		ZEND_NULL_HANDLER,
61816 		ZEND_NULL_HANDLER,
61817 		ZEND_NULL_HANDLER,
61818 		ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
61819 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
61820 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
61821 		ZEND_NULL_HANDLER,
61822 		ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
61823 		ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
61824 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
61825 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
61826 		ZEND_NULL_HANDLER,
61827 		ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
61828 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
61829 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61830 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61831 		ZEND_NULL_HANDLER,
61832 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
61833 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
61834 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61835 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61836 		ZEND_NULL_HANDLER,
61837 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
61838 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
61839 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
61840 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
61841 		ZEND_NULL_HANDLER,
61842 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
61843 		ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
61844 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
61845 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
61846 		ZEND_NULL_HANDLER,
61847 		ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
61848 		ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
61849 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
61850 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
61851 		ZEND_NULL_HANDLER,
61852 		ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
61853 		ZEND_NULL_HANDLER,
61854 		ZEND_NULL_HANDLER,
61855 		ZEND_NULL_HANDLER,
61856 		ZEND_NULL_HANDLER,
61857 		ZEND_NULL_HANDLER,
61858 		ZEND_NULL_HANDLER,
61859 		ZEND_NULL_HANDLER,
61860 		ZEND_NULL_HANDLER,
61861 		ZEND_NULL_HANDLER,
61862 		ZEND_NULL_HANDLER,
61863 		ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
61864 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
61865 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
61866 		ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
61867 		ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
61868 		ZEND_NULL_HANDLER,
61869 		ZEND_NULL_HANDLER,
61870 		ZEND_NULL_HANDLER,
61871 		ZEND_NULL_HANDLER,
61872 		ZEND_NULL_HANDLER,
61873 		ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
61874 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
61875 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
61876 		ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
61877 		ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
61878 		ZEND_NULL_HANDLER,
61879 		ZEND_NULL_HANDLER,
61880 		ZEND_NULL_HANDLER,
61881 		ZEND_NULL_HANDLER,
61882 		ZEND_NULL_HANDLER,
61883 		ZEND_NULL_HANDLER,
61884 		ZEND_NULL_HANDLER,
61885 		ZEND_NULL_HANDLER,
61886 		ZEND_NULL_HANDLER,
61887 		ZEND_NULL_HANDLER,
61888 		ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
61889 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
61890 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
61891 		ZEND_NULL_HANDLER,
61892 		ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
61893 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
61894 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
61895 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
61896 		ZEND_NULL_HANDLER,
61897 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
61898 		ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
61899 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
61900 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
61901 		ZEND_NULL_HANDLER,
61902 		ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
61903 		ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
61904 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
61905 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
61906 		ZEND_NULL_HANDLER,
61907 		ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
61908 		ZEND_NULL_HANDLER,
61909 		ZEND_NULL_HANDLER,
61910 		ZEND_NULL_HANDLER,
61911 		ZEND_NULL_HANDLER,
61912 		ZEND_NULL_HANDLER,
61913 		ZEND_NULL_HANDLER,
61914 		ZEND_NULL_HANDLER,
61915 		ZEND_NULL_HANDLER,
61916 		ZEND_NULL_HANDLER,
61917 		ZEND_NULL_HANDLER,
61918 		ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
61919 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
61920 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
61921 		ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
61922 		ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
61923 		ZEND_NULL_HANDLER,
61924 		ZEND_NULL_HANDLER,
61925 		ZEND_NULL_HANDLER,
61926 		ZEND_NULL_HANDLER,
61927 		ZEND_NULL_HANDLER,
61928 		ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
61929 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
61930 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
61931 		ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
61932 		ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
61933 		ZEND_NULL_HANDLER,
61934 		ZEND_NULL_HANDLER,
61935 		ZEND_NULL_HANDLER,
61936 		ZEND_NULL_HANDLER,
61937 		ZEND_NULL_HANDLER,
61938 		ZEND_NULL_HANDLER,
61939 		ZEND_NULL_HANDLER,
61940 		ZEND_NULL_HANDLER,
61941 		ZEND_NULL_HANDLER,
61942 		ZEND_NULL_HANDLER,
61943 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
61944 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
61945 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
61946 		ZEND_NULL_HANDLER,
61947 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
61948 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
61949 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
61950 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
61951 		ZEND_NULL_HANDLER,
61952 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
61953 		ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
61954 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
61955 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
61956 		ZEND_NULL_HANDLER,
61957 		ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
61958 		ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
61959 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
61960 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
61961 		ZEND_NULL_HANDLER,
61962 		ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
61963 		ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
61964 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
61965 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
61966 		ZEND_NULL_HANDLER,
61967 		ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
61968 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
61969 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61970 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61971 		ZEND_NULL_HANDLER,
61972 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
61973 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
61974 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61975 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61976 		ZEND_NULL_HANDLER,
61977 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
61978 		ZEND_NULL_HANDLER,
61979 		ZEND_NULL_HANDLER,
61980 		ZEND_NULL_HANDLER,
61981 		ZEND_NULL_HANDLER,
61982 		ZEND_NULL_HANDLER,
61983 		ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
61984 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
61985 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
61986 		ZEND_NULL_HANDLER,
61987 		ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
61988 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
61989 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
61990 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
61991 		ZEND_NULL_HANDLER,
61992 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
61993 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
61994 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61995 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61996 		ZEND_NULL_HANDLER,
61997 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
61998 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
61999 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
62000 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
62001 		ZEND_NULL_HANDLER,
62002 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
62003 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
62004 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
62005 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
62006 		ZEND_NULL_HANDLER,
62007 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
62008 		ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
62009 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
62010 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
62011 		ZEND_NULL_HANDLER,
62012 		ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
62013 		ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
62014 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
62015 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
62016 		ZEND_NULL_HANDLER,
62017 		ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
62018 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
62019 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
62020 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
62021 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
62022 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
62023 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
62024 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
62025 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
62026 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
62027 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
62028 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
62029 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
62030 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
62031 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
62032 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
62033 		ZEND_NULL_HANDLER,
62034 		ZEND_NULL_HANDLER,
62035 		ZEND_NULL_HANDLER,
62036 		ZEND_NULL_HANDLER,
62037 		ZEND_NULL_HANDLER,
62038 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
62039 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
62040 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
62041 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
62042 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
62043 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
62044 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
62045 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
62046 		ZEND_NULL_HANDLER,
62047 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
62048 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
62049 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
62050 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
62051 		ZEND_NULL_HANDLER,
62052 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
62053 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
62054 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
62055 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
62056 		ZEND_NULL_HANDLER,
62057 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
62058 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
62059 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
62060 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
62061 		ZEND_NULL_HANDLER,
62062 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
62063 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
62064 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
62065 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
62066 		ZEND_NULL_HANDLER,
62067 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
62068 		ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
62069 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
62070 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
62071 		ZEND_NULL_HANDLER,
62072 		ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
62073 		ZEND_NULL_HANDLER,
62074 		ZEND_NULL_HANDLER,
62075 		ZEND_NULL_HANDLER,
62076 		ZEND_NULL_HANDLER,
62077 		ZEND_NULL_HANDLER,
62078 		ZEND_NULL_HANDLER,
62079 		ZEND_NULL_HANDLER,
62080 		ZEND_NULL_HANDLER,
62081 		ZEND_NULL_HANDLER,
62082 		ZEND_NULL_HANDLER,
62083 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
62084 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
62085 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
62086 		ZEND_NULL_HANDLER,
62087 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
62088 		ZEND_NULL_HANDLER,
62089 		ZEND_NULL_HANDLER,
62090 		ZEND_NULL_HANDLER,
62091 		ZEND_NULL_HANDLER,
62092 		ZEND_NULL_HANDLER,
62093 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
62094 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
62095 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
62096 		ZEND_NULL_HANDLER,
62097 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
62098 		ZEND_NULL_HANDLER,
62099 		ZEND_NULL_HANDLER,
62100 		ZEND_NULL_HANDLER,
62101 		ZEND_NULL_HANDLER,
62102 		ZEND_NULL_HANDLER,
62103 		ZEND_NULL_HANDLER,
62104 		ZEND_NULL_HANDLER,
62105 		ZEND_NULL_HANDLER,
62106 		ZEND_NULL_HANDLER,
62107 		ZEND_NULL_HANDLER,
62108 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
62109 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
62110 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
62111 		ZEND_NULL_HANDLER,
62112 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
62113 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
62114 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
62115 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
62116 		ZEND_NULL_HANDLER,
62117 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
62118 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
62119 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
62120 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
62121 		ZEND_NULL_HANDLER,
62122 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
62123 		ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER,
62124 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
62125 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
62126 		ZEND_NULL_HANDLER,
62127 		ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER,
62128 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
62129 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
62130 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
62131 		ZEND_NULL_HANDLER,
62132 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
62133 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
62134 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
62135 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
62136 		ZEND_NULL_HANDLER,
62137 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
62138 		ZEND_NULL_HANDLER,
62139 		ZEND_NULL_HANDLER,
62140 		ZEND_NULL_HANDLER,
62141 		ZEND_NULL_HANDLER,
62142 		ZEND_NULL_HANDLER,
62143 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
62144 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
62145 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
62146 		ZEND_NULL_HANDLER,
62147 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
62148 		ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
62149 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
62150 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
62151 		ZEND_NULL_HANDLER,
62152 		ZEND_NULL_HANDLER,
62153 		ZEND_NULL_HANDLER,
62154 		ZEND_NULL_HANDLER,
62155 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER,
62156 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER,
62157 		ZEND_NULL_HANDLER,
62158 		ZEND_NULL_HANDLER,
62159 		ZEND_EXT_STMT_SPEC_HANDLER,
62160 		ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
62161 		ZEND_EXT_FCALL_END_SPEC_HANDLER,
62162 		ZEND_EXT_NOP_SPEC_HANDLER,
62163 		ZEND_TICKS_SPEC_HANDLER,
62164 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER,
62165 		ZEND_NULL_HANDLER,
62166 		ZEND_NULL_HANDLER,
62167 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER,
62168 		ZEND_NULL_HANDLER,
62169 		ZEND_CATCH_SPEC_CONST_HANDLER,
62170 		ZEND_THROW_SPEC_CONST_HANDLER,
62171 		ZEND_THROW_SPEC_TMPVAR_HANDLER,
62172 		ZEND_THROW_SPEC_TMPVAR_HANDLER,
62173 		ZEND_NULL_HANDLER,
62174 		ZEND_THROW_SPEC_CV_HANDLER,
62175 		ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER,
62176 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
62177 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
62178 		ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
62179 		ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER,
62180 		ZEND_CLONE_SPEC_CONST_HANDLER,
62181 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
62182 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
62183 		ZEND_CLONE_SPEC_UNUSED_HANDLER,
62184 		ZEND_CLONE_SPEC_CV_HANDLER,
62185 		ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
62186 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
62187 		ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
62188 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
62189 		ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
62190 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
62191 		ZEND_NULL_HANDLER,
62192 		ZEND_NULL_HANDLER,
62193 		ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
62194 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
62195 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
62196 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
62197 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
62198 		ZEND_NULL_HANDLER,
62199 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
62200 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
62201 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
62202 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
62203 		ZEND_NULL_HANDLER,
62204 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
62205 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
62206 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
62207 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
62208 		ZEND_NULL_HANDLER,
62209 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
62210 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
62211 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
62212 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
62213 		ZEND_NULL_HANDLER,
62214 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
62215 		ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
62216 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
62217 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
62218 		ZEND_NULL_HANDLER,
62219 		ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
62220 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
62221 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
62222 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
62223 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
62224 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
62225 		ZEND_NULL_HANDLER,
62226 		ZEND_NULL_HANDLER,
62227 		ZEND_NULL_HANDLER,
62228 		ZEND_NULL_HANDLER,
62229 		ZEND_NULL_HANDLER,
62230 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
62231 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
62232 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
62233 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
62234 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
62235 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
62236 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
62237 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
62238 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
62239 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
62240 		ZEND_NULL_HANDLER,
62241 		ZEND_NULL_HANDLER,
62242 		ZEND_NULL_HANDLER,
62243 		ZEND_NULL_HANDLER,
62244 		ZEND_NULL_HANDLER,
62245 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
62246 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
62247 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
62248 		ZEND_NULL_HANDLER,
62249 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
62250 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
62251 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
62252 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
62253 		ZEND_NULL_HANDLER,
62254 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
62255 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
62256 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
62257 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
62258 		ZEND_NULL_HANDLER,
62259 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
62260 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
62261 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
62262 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
62263 		ZEND_NULL_HANDLER,
62264 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
62265 		ZEND_NULL_HANDLER,
62266 		ZEND_NULL_HANDLER,
62267 		ZEND_NULL_HANDLER,
62268 		ZEND_NULL_HANDLER,
62269 		ZEND_NULL_HANDLER,
62270 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
62271 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
62272 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
62273 		ZEND_NULL_HANDLER,
62274 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
62275 		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
62276 		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
62277 		ZEND_NULL_HANDLER,
62278 		ZEND_NULL_HANDLER,
62279 		ZEND_NULL_HANDLER,
62280 		ZEND_NULL_HANDLER,
62281 		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER,
62282 		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER,
62283 		ZEND_NULL_HANDLER,
62284 		ZEND_NULL_HANDLER,
62285 		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
62286 		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
62287 		ZEND_NULL_HANDLER,
62288 		ZEND_NULL_HANDLER,
62289 		ZEND_NULL_HANDLER,
62290 		ZEND_NULL_HANDLER,
62291 		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER,
62292 		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER,
62293 		ZEND_NULL_HANDLER,
62294 		ZEND_NULL_HANDLER,
62295 		ZEND_NULL_HANDLER,
62296 		ZEND_NULL_HANDLER,
62297 		ZEND_NULL_HANDLER,
62298 		ZEND_NULL_HANDLER,
62299 		ZEND_NULL_HANDLER,
62300 		ZEND_NULL_HANDLER,
62301 		ZEND_NULL_HANDLER,
62302 		ZEND_NULL_HANDLER,
62303 		ZEND_NULL_HANDLER,
62304 		ZEND_NULL_HANDLER,
62305 		ZEND_NULL_HANDLER,
62306 		ZEND_NULL_HANDLER,
62307 		ZEND_NULL_HANDLER,
62308 		ZEND_NULL_HANDLER,
62309 		ZEND_NULL_HANDLER,
62310 		ZEND_NULL_HANDLER,
62311 		ZEND_NULL_HANDLER,
62312 		ZEND_NULL_HANDLER,
62313 		ZEND_NULL_HANDLER,
62314 		ZEND_NULL_HANDLER,
62315 		ZEND_NULL_HANDLER,
62316 		ZEND_NULL_HANDLER,
62317 		ZEND_NULL_HANDLER,
62318 		ZEND_NULL_HANDLER,
62319 		ZEND_NULL_HANDLER,
62320 		ZEND_NULL_HANDLER,
62321 		ZEND_NULL_HANDLER,
62322 		ZEND_NULL_HANDLER,
62323 		ZEND_NULL_HANDLER,
62324 		ZEND_NULL_HANDLER,
62325 		ZEND_NULL_HANDLER,
62326 		ZEND_NULL_HANDLER,
62327 		ZEND_NULL_HANDLER,
62328 		ZEND_NULL_HANDLER,
62329 		ZEND_NULL_HANDLER,
62330 		ZEND_NULL_HANDLER,
62331 		ZEND_NULL_HANDLER,
62332 		ZEND_NULL_HANDLER,
62333 		ZEND_NULL_HANDLER,
62334 		ZEND_NULL_HANDLER,
62335 		ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER,
62336 		ZEND_NULL_HANDLER,
62337 		ZEND_NULL_HANDLER,
62338 		ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER,
62339 		ZEND_NULL_HANDLER,
62340 		ZEND_NULL_HANDLER,
62341 		ZEND_NULL_HANDLER,
62342 		ZEND_NULL_HANDLER,
62343 		ZEND_NULL_HANDLER,
62344 		ZEND_NULL_HANDLER,
62345 		ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER,
62346 		ZEND_NULL_HANDLER,
62347 		ZEND_NULL_HANDLER,
62348 		ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER,
62349 		ZEND_NULL_HANDLER,
62350 		ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
62351 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
62352 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
62353 		ZEND_NULL_HANDLER,
62354 		ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
62355 		ZEND_SEND_ARRAY_SPEC_HANDLER,
62356 		ZEND_SEND_USER_SPEC_CONST_HANDLER,
62357 		ZEND_SEND_USER_SPEC_TMP_HANDLER,
62358 		ZEND_SEND_USER_SPEC_VAR_HANDLER,
62359 		ZEND_NULL_HANDLER,
62360 		ZEND_SEND_USER_SPEC_CV_HANDLER,
62361 		ZEND_STRLEN_SPEC_CONST_HANDLER,
62362 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
62363 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
62364 		ZEND_NULL_HANDLER,
62365 		ZEND_STRLEN_SPEC_CV_HANDLER,
62366 		ZEND_DEFINED_SPEC_CONST_HANDLER,
62367 		ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
62368 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
62369 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
62370 		ZEND_NULL_HANDLER,
62371 		ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
62372 		ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
62373 		ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
62374 		ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
62375 		ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
62376 		ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
62377 		ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
62378 		ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
62379 		ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
62380 		ZEND_NULL_HANDLER,
62381 		ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
62382 		ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
62383 		ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
62384 		ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
62385 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
62386 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
62387 		ZEND_NULL_HANDLER,
62388 		ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
62389 		ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
62390 		ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
62391 		ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
62392 		ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
62393 		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
62394 		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
62395 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
62396 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
62397 		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
62398 		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
62399 		ZEND_NULL_HANDLER,
62400 		ZEND_NULL_HANDLER,
62401 		ZEND_NULL_HANDLER,
62402 		ZEND_NULL_HANDLER,
62403 		ZEND_NULL_HANDLER,
62404 		ZEND_NULL_HANDLER,
62405 		ZEND_NULL_HANDLER,
62406 		ZEND_NULL_HANDLER,
62407 		ZEND_NULL_HANDLER,
62408 		ZEND_NULL_HANDLER,
62409 		ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
62410 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
62411 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
62412 		ZEND_NULL_HANDLER,
62413 		ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
62414 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
62415 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
62416 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
62417 		ZEND_NULL_HANDLER,
62418 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
62419 		ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
62420 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
62421 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
62422 		ZEND_NULL_HANDLER,
62423 		ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
62424 		ZEND_NULL_HANDLER,
62425 		ZEND_NULL_HANDLER,
62426 		ZEND_NULL_HANDLER,
62427 		ZEND_NULL_HANDLER,
62428 		ZEND_NULL_HANDLER,
62429 		ZEND_NULL_HANDLER,
62430 		ZEND_NULL_HANDLER,
62431 		ZEND_NULL_HANDLER,
62432 		ZEND_NULL_HANDLER,
62433 		ZEND_NULL_HANDLER,
62434 		ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
62435 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
62436 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
62437 		ZEND_NULL_HANDLER,
62438 		ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
62439 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
62440 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
62441 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
62442 		ZEND_NULL_HANDLER,
62443 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
62444 		ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
62445 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
62446 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
62447 		ZEND_NULL_HANDLER,
62448 		ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
62449 		ZEND_ECHO_SPEC_CONST_HANDLER,
62450 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
62451 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
62452 		ZEND_NULL_HANDLER,
62453 		ZEND_ECHO_SPEC_CV_HANDLER,
62454 		ZEND_NULL_HANDLER,
62455 		ZEND_NULL_HANDLER,
62456 		ZEND_NULL_HANDLER,
62457 		ZEND_NULL_HANDLER,
62458 		ZEND_NULL_HANDLER,
62459 		ZEND_NULL_HANDLER,
62460 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
62461 		ZEND_NULL_HANDLER,
62462 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
62463 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
62464 		ZEND_NULL_HANDLER,
62465 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
62466 		ZEND_NULL_HANDLER,
62467 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
62468 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
62469 		ZEND_NULL_HANDLER,
62470 		ZEND_NULL_HANDLER,
62471 		ZEND_NULL_HANDLER,
62472 		ZEND_NULL_HANDLER,
62473 		ZEND_NULL_HANDLER,
62474 		ZEND_NULL_HANDLER,
62475 		ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
62476 		ZEND_NULL_HANDLER,
62477 		ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
62478 		ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
62479 		ZEND_NULL_HANDLER,
62480 		ZEND_GENERATOR_CREATE_SPEC_HANDLER,
62481 		ZEND_NULL_HANDLER,
62482 		ZEND_NULL_HANDLER,
62483 		ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
62484 		ZEND_NULL_HANDLER,
62485 		ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
62486 		ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
62487 		ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER,
62488 		ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
62489 		ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER,
62490 		ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER,
62491 		ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
62492 		ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER,
62493 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
62494 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
62495 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
62496 		ZEND_NULL_HANDLER,
62497 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
62498 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
62499 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
62500 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
62501 		ZEND_NULL_HANDLER,
62502 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
62503 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
62504 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
62505 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
62506 		ZEND_NULL_HANDLER,
62507 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
62508 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
62509 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
62510 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
62511 		ZEND_NULL_HANDLER,
62512 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
62513 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
62514 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
62515 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
62516 		ZEND_NULL_HANDLER,
62517 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
62518 		ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
62519 		ZEND_USER_OPCODE_SPEC_HANDLER,
62520 		ZEND_ASSERT_CHECK_SPEC_HANDLER,
62521 		ZEND_JMP_SET_SPEC_CONST_HANDLER,
62522 		ZEND_JMP_SET_SPEC_TMP_HANDLER,
62523 		ZEND_JMP_SET_SPEC_VAR_HANDLER,
62524 		ZEND_NULL_HANDLER,
62525 		ZEND_JMP_SET_SPEC_CV_HANDLER,
62526 		ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
62527 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER,
62528 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER,
62529 		ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER,
62530 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
62531 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
62532 		ZEND_NULL_HANDLER,
62533 		ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER,
62534 		ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
62535 		ZEND_NULL_HANDLER,
62536 		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
62537 		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
62538 		ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
62539 		ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER,
62540 		ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
62541 		ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER,
62542 		ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
62543 		ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
62544 		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
62545 		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
62546 		ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
62547 		ZEND_YIELD_SPEC_CONST_CV_HANDLER,
62548 		ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
62549 		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
62550 		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
62551 		ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
62552 		ZEND_YIELD_SPEC_TMP_CV_HANDLER,
62553 		ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
62554 		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
62555 		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
62556 		ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
62557 		ZEND_YIELD_SPEC_VAR_CV_HANDLER,
62558 		ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
62559 		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
62560 		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
62561 		ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
62562 		ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
62563 		ZEND_YIELD_SPEC_CV_CONST_HANDLER,
62564 		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
62565 		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
62566 		ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
62567 		ZEND_YIELD_SPEC_CV_CV_HANDLER,
62568 		ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
62569 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
62570 		ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
62571 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
62572 		ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
62573 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
62574 		ZEND_NULL_HANDLER,
62575 		ZEND_NULL_HANDLER,
62576 		ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
62577 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
62578 		ZEND_FAST_CALL_SPEC_HANDLER,
62579 		ZEND_FAST_RET_SPEC_HANDLER,
62580 		ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
62581 		ZEND_SEND_UNPACK_SPEC_HANDLER,
62582 		ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
62583 		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
62584 		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
62585 		ZEND_NULL_HANDLER,
62586 		ZEND_YIELD_FROM_SPEC_CV_HANDLER,
62587 		ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER,
62588 		ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
62589 		ZEND_COALESCE_SPEC_CONST_HANDLER,
62590 		ZEND_COALESCE_SPEC_TMP_HANDLER,
62591 		ZEND_COALESCE_SPEC_VAR_HANDLER,
62592 		ZEND_NULL_HANDLER,
62593 		ZEND_COALESCE_SPEC_CV_HANDLER,
62594 		ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
62595 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
62596 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
62597 		ZEND_NULL_HANDLER,
62598 		ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
62599 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
62600 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
62601 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
62602 		ZEND_NULL_HANDLER,
62603 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
62604 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
62605 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
62606 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
62607 		ZEND_NULL_HANDLER,
62608 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
62609 		ZEND_NULL_HANDLER,
62610 		ZEND_NULL_HANDLER,
62611 		ZEND_NULL_HANDLER,
62612 		ZEND_NULL_HANDLER,
62613 		ZEND_NULL_HANDLER,
62614 		ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
62615 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
62616 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
62617 		ZEND_NULL_HANDLER,
62618 		ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
62619 		ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
62620 		ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
62621 		ZEND_NULL_HANDLER,
62622 		ZEND_NULL_HANDLER,
62623 		ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
62624 		ZEND_NULL_HANDLER,
62625 		ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER,
62626 		ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER,
62627 		ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER,
62628 		ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER,
62629 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER,
62630 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER,
62631 		ZEND_UNSET_STATIC_PROP_SPEC_HANDLER,
62632 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER,
62633 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
62634 		ZEND_NULL_HANDLER,
62635 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
62636 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
62637 		ZEND_NULL_HANDLER,
62638 		ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
62639 		ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER,
62640 		ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
62641 		ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
62642 		ZEND_NULL_HANDLER,
62643 		ZEND_NULL_HANDLER,
62644 		ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
62645 		ZEND_NULL_HANDLER,
62646 		ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
62647 		ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
62648 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62649 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62650 		ZEND_NULL_HANDLER,
62651 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62652 		ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
62653 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
62654 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
62655 		ZEND_NULL_HANDLER,
62656 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
62657 		ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
62658 		ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
62659 		ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
62660 		ZEND_NULL_HANDLER,
62661 		ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
62662 		ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
62663 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
62664 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
62665 		ZEND_NULL_HANDLER,
62666 		ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
62667 		ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
62668 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
62669 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
62670 		ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
62671 		ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
62672 		ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
62673 		ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
62674 		ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
62675 		ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
62676 		ZEND_NULL_HANDLER,
62677 		ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
62678 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER,
62679 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
62680 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
62681 		ZEND_NULL_HANDLER,
62682 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER,
62683 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
62684 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
62685 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
62686 		ZEND_NULL_HANDLER,
62687 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
62688 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
62689 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
62690 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
62691 		ZEND_NULL_HANDLER,
62692 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
62693 		ZEND_NULL_HANDLER,
62694 		ZEND_NULL_HANDLER,
62695 		ZEND_NULL_HANDLER,
62696 		ZEND_NULL_HANDLER,
62697 		ZEND_NULL_HANDLER,
62698 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER,
62699 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
62700 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
62701 		ZEND_NULL_HANDLER,
62702 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER,
62703 		ZEND_MATCH_SPEC_CONST_CONST_HANDLER,
62704 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
62705 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
62706 		ZEND_NULL_HANDLER,
62707 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
62708 		ZEND_NULL_HANDLER,
62709 		ZEND_NULL_HANDLER,
62710 		ZEND_NULL_HANDLER,
62711 		ZEND_NULL_HANDLER,
62712 		ZEND_NULL_HANDLER,
62713 		ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER,
62714 		ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER,
62715 		ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER,
62716 		ZEND_NULL_HANDLER,
62717 		ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER,
62718 		ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER,
62719 		ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER,
62720 		ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER,
62721 		ZEND_NULL_HANDLER,
62722 		ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER,
62723 		ZEND_NULL_HANDLER,
62724 		ZEND_NULL_HANDLER,
62725 		ZEND_NULL_HANDLER,
62726 		ZEND_NULL_HANDLER,
62727 		ZEND_NULL_HANDLER,
62728 		ZEND_NULL_HANDLER,
62729 		ZEND_NULL_HANDLER,
62730 		ZEND_NULL_HANDLER,
62731 		ZEND_NULL_HANDLER,
62732 		ZEND_NULL_HANDLER,
62733 		ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER,
62734 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
62735 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
62736 		ZEND_NULL_HANDLER,
62737 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
62738 		ZEND_JMP_NULL_SPEC_CONST_HANDLER,
62739 		ZEND_JMP_NULL_SPEC_TMP_HANDLER,
62740 		ZEND_JMP_NULL_SPEC_VAR_HANDLER,
62741 		ZEND_NULL_HANDLER,
62742 		ZEND_JMP_NULL_SPEC_CV_HANDLER,
62743 		ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
62744 		ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER,
62745 		ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
62746 		ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER,
62747 		ZEND_RECV_NOTYPE_SPEC_HANDLER,
62748 		ZEND_JMP_FORWARD_SPEC_HANDLER,
62749 		ZEND_NULL_HANDLER,
62750 		ZEND_NULL_HANDLER,
62751 		ZEND_NULL_HANDLER,
62752 		ZEND_NULL_HANDLER,
62753 		ZEND_NULL_HANDLER,
62754 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62755 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62756 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62757 		ZEND_NULL_HANDLER,
62758 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62759 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62760 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62761 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62762 		ZEND_NULL_HANDLER,
62763 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62764 		ZEND_NULL_HANDLER,
62765 		ZEND_NULL_HANDLER,
62766 		ZEND_NULL_HANDLER,
62767 		ZEND_NULL_HANDLER,
62768 		ZEND_NULL_HANDLER,
62769 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62770 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62771 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62772 		ZEND_NULL_HANDLER,
62773 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62774 		ZEND_NULL_HANDLER,
62775 		ZEND_NULL_HANDLER,
62776 		ZEND_NULL_HANDLER,
62777 		ZEND_NULL_HANDLER,
62778 		ZEND_NULL_HANDLER,
62779 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62780 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62781 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62782 		ZEND_NULL_HANDLER,
62783 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62784 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62785 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62786 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62787 		ZEND_NULL_HANDLER,
62788 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62789 		ZEND_NULL_HANDLER,
62790 		ZEND_NULL_HANDLER,
62791 		ZEND_NULL_HANDLER,
62792 		ZEND_NULL_HANDLER,
62793 		ZEND_NULL_HANDLER,
62794 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62795 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62796 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62797 		ZEND_NULL_HANDLER,
62798 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62799 		ZEND_NULL_HANDLER,
62800 		ZEND_NULL_HANDLER,
62801 		ZEND_NULL_HANDLER,
62802 		ZEND_NULL_HANDLER,
62803 		ZEND_NULL_HANDLER,
62804 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62805 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62806 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62807 		ZEND_NULL_HANDLER,
62808 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62809 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62810 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62811 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62812 		ZEND_NULL_HANDLER,
62813 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62814 		ZEND_NULL_HANDLER,
62815 		ZEND_NULL_HANDLER,
62816 		ZEND_NULL_HANDLER,
62817 		ZEND_NULL_HANDLER,
62818 		ZEND_NULL_HANDLER,
62819 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62820 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62821 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62822 		ZEND_NULL_HANDLER,
62823 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62824 		ZEND_NULL_HANDLER,
62825 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
62826 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
62827 		ZEND_NULL_HANDLER,
62828 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
62829 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62830 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62831 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62832 		ZEND_NULL_HANDLER,
62833 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62834 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62835 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62836 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62837 		ZEND_NULL_HANDLER,
62838 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62839 		ZEND_NULL_HANDLER,
62840 		ZEND_NULL_HANDLER,
62841 		ZEND_NULL_HANDLER,
62842 		ZEND_NULL_HANDLER,
62843 		ZEND_NULL_HANDLER,
62844 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62845 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62846 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62847 		ZEND_NULL_HANDLER,
62848 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62849 		ZEND_NULL_HANDLER,
62850 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62851 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62852 		ZEND_NULL_HANDLER,
62853 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62854 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62855 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62856 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62857 		ZEND_NULL_HANDLER,
62858 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62859 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62860 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62861 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62862 		ZEND_NULL_HANDLER,
62863 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62864 		ZEND_NULL_HANDLER,
62865 		ZEND_NULL_HANDLER,
62866 		ZEND_NULL_HANDLER,
62867 		ZEND_NULL_HANDLER,
62868 		ZEND_NULL_HANDLER,
62869 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62870 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62871 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62872 		ZEND_NULL_HANDLER,
62873 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62874 		ZEND_NULL_HANDLER,
62875 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62876 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62877 		ZEND_NULL_HANDLER,
62878 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62879 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62880 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62881 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62882 		ZEND_NULL_HANDLER,
62883 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62884 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62885 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62886 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62887 		ZEND_NULL_HANDLER,
62888 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62889 		ZEND_NULL_HANDLER,
62890 		ZEND_NULL_HANDLER,
62891 		ZEND_NULL_HANDLER,
62892 		ZEND_NULL_HANDLER,
62893 		ZEND_NULL_HANDLER,
62894 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62895 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62896 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62897 		ZEND_NULL_HANDLER,
62898 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62899 		ZEND_NULL_HANDLER,
62900 		ZEND_NULL_HANDLER,
62901 		ZEND_NULL_HANDLER,
62902 		ZEND_NULL_HANDLER,
62903 		ZEND_NULL_HANDLER,
62904 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62905 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62906 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62907 		ZEND_NULL_HANDLER,
62908 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62909 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62910 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62911 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62912 		ZEND_NULL_HANDLER,
62913 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62914 		ZEND_NULL_HANDLER,
62915 		ZEND_NULL_HANDLER,
62916 		ZEND_NULL_HANDLER,
62917 		ZEND_NULL_HANDLER,
62918 		ZEND_NULL_HANDLER,
62919 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62920 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62921 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62922 		ZEND_NULL_HANDLER,
62923 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62924 		ZEND_NULL_HANDLER,
62925 		ZEND_NULL_HANDLER,
62926 		ZEND_NULL_HANDLER,
62927 		ZEND_NULL_HANDLER,
62928 		ZEND_NULL_HANDLER,
62929 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62930 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62931 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62932 		ZEND_NULL_HANDLER,
62933 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62934 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62935 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62936 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62937 		ZEND_NULL_HANDLER,
62938 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62939 		ZEND_NULL_HANDLER,
62940 		ZEND_NULL_HANDLER,
62941 		ZEND_NULL_HANDLER,
62942 		ZEND_NULL_HANDLER,
62943 		ZEND_NULL_HANDLER,
62944 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62945 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62946 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62947 		ZEND_NULL_HANDLER,
62948 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62949 		ZEND_NULL_HANDLER,
62950 		ZEND_NULL_HANDLER,
62951 		ZEND_NULL_HANDLER,
62952 		ZEND_NULL_HANDLER,
62953 		ZEND_NULL_HANDLER,
62954 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62955 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62956 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62957 		ZEND_NULL_HANDLER,
62958 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62959 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62960 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62961 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62962 		ZEND_NULL_HANDLER,
62963 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62964 		ZEND_NULL_HANDLER,
62965 		ZEND_NULL_HANDLER,
62966 		ZEND_NULL_HANDLER,
62967 		ZEND_NULL_HANDLER,
62968 		ZEND_NULL_HANDLER,
62969 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62970 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62971 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62972 		ZEND_NULL_HANDLER,
62973 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62974 		ZEND_NULL_HANDLER,
62975 		ZEND_NULL_HANDLER,
62976 		ZEND_NULL_HANDLER,
62977 		ZEND_NULL_HANDLER,
62978 		ZEND_NULL_HANDLER,
62979 		ZEND_NULL_HANDLER,
62980 		ZEND_NULL_HANDLER,
62981 		ZEND_NULL_HANDLER,
62982 		ZEND_NULL_HANDLER,
62983 		ZEND_NULL_HANDLER,
62984 		ZEND_NULL_HANDLER,
62985 		ZEND_NULL_HANDLER,
62986 		ZEND_NULL_HANDLER,
62987 		ZEND_NULL_HANDLER,
62988 		ZEND_NULL_HANDLER,
62989 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62990 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62991 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62992 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62993 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62994 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62995 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62996 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62997 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62998 		ZEND_NULL_HANDLER,
62999 		ZEND_NULL_HANDLER,
63000 		ZEND_NULL_HANDLER,
63001 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63002 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63003 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63004 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63005 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63006 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63007 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63008 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63009 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63010 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63011 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63012 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63013 		ZEND_NULL_HANDLER,
63014 		ZEND_NULL_HANDLER,
63015 		ZEND_NULL_HANDLER,
63016 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63017 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63018 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63019 		ZEND_NULL_HANDLER,
63020 		ZEND_NULL_HANDLER,
63021 		ZEND_NULL_HANDLER,
63022 		ZEND_NULL_HANDLER,
63023 		ZEND_NULL_HANDLER,
63024 		ZEND_NULL_HANDLER,
63025 		ZEND_NULL_HANDLER,
63026 		ZEND_NULL_HANDLER,
63027 		ZEND_NULL_HANDLER,
63028 		ZEND_NULL_HANDLER,
63029 		ZEND_NULL_HANDLER,
63030 		ZEND_NULL_HANDLER,
63031 		ZEND_NULL_HANDLER,
63032 		ZEND_NULL_HANDLER,
63033 		ZEND_NULL_HANDLER,
63034 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63035 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63036 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63037 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63038 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63039 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63040 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63041 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63042 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63043 		ZEND_NULL_HANDLER,
63044 		ZEND_NULL_HANDLER,
63045 		ZEND_NULL_HANDLER,
63046 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63047 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63048 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63049 		ZEND_NULL_HANDLER,
63050 		ZEND_NULL_HANDLER,
63051 		ZEND_NULL_HANDLER,
63052 		ZEND_NULL_HANDLER,
63053 		ZEND_NULL_HANDLER,
63054 		ZEND_NULL_HANDLER,
63055 		ZEND_NULL_HANDLER,
63056 		ZEND_NULL_HANDLER,
63057 		ZEND_NULL_HANDLER,
63058 		ZEND_NULL_HANDLER,
63059 		ZEND_NULL_HANDLER,
63060 		ZEND_NULL_HANDLER,
63061 		ZEND_NULL_HANDLER,
63062 		ZEND_NULL_HANDLER,
63063 		ZEND_NULL_HANDLER,
63064 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63065 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63066 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63067 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63068 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63069 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63070 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63071 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63072 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63073 		ZEND_NULL_HANDLER,
63074 		ZEND_NULL_HANDLER,
63075 		ZEND_NULL_HANDLER,
63076 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63077 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63078 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63079 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63080 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63081 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63082 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63083 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63084 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63085 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63086 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63087 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63088 		ZEND_NULL_HANDLER,
63089 		ZEND_NULL_HANDLER,
63090 		ZEND_NULL_HANDLER,
63091 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63092 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63093 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63094 		ZEND_NULL_HANDLER,
63095 		ZEND_NULL_HANDLER,
63096 		ZEND_NULL_HANDLER,
63097 		ZEND_NULL_HANDLER,
63098 		ZEND_NULL_HANDLER,
63099 		ZEND_NULL_HANDLER,
63100 		ZEND_NULL_HANDLER,
63101 		ZEND_NULL_HANDLER,
63102 		ZEND_NULL_HANDLER,
63103 		ZEND_NULL_HANDLER,
63104 		ZEND_NULL_HANDLER,
63105 		ZEND_NULL_HANDLER,
63106 		ZEND_NULL_HANDLER,
63107 		ZEND_NULL_HANDLER,
63108 		ZEND_NULL_HANDLER,
63109 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63110 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63111 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63112 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63113 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63114 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63115 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63116 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63117 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63118 		ZEND_NULL_HANDLER,
63119 		ZEND_NULL_HANDLER,
63120 		ZEND_NULL_HANDLER,
63121 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63122 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63123 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63124 		ZEND_NULL_HANDLER,
63125 		ZEND_NULL_HANDLER,
63126 		ZEND_NULL_HANDLER,
63127 		ZEND_NULL_HANDLER,
63128 		ZEND_NULL_HANDLER,
63129 		ZEND_NULL_HANDLER,
63130 		ZEND_NULL_HANDLER,
63131 		ZEND_NULL_HANDLER,
63132 		ZEND_NULL_HANDLER,
63133 		ZEND_NULL_HANDLER,
63134 		ZEND_NULL_HANDLER,
63135 		ZEND_NULL_HANDLER,
63136 		ZEND_NULL_HANDLER,
63137 		ZEND_NULL_HANDLER,
63138 		ZEND_NULL_HANDLER,
63139 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63140 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63141 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63142 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63143 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63144 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63145 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63146 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63147 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63148 		ZEND_NULL_HANDLER,
63149 		ZEND_NULL_HANDLER,
63150 		ZEND_NULL_HANDLER,
63151 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63152 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63153 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63154 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63155 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63156 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63157 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63158 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63159 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63160 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63161 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63162 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63163 		ZEND_NULL_HANDLER,
63164 		ZEND_NULL_HANDLER,
63165 		ZEND_NULL_HANDLER,
63166 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63167 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63168 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63169 		ZEND_NULL_HANDLER,
63170 		ZEND_NULL_HANDLER,
63171 		ZEND_NULL_HANDLER,
63172 		ZEND_NULL_HANDLER,
63173 		ZEND_NULL_HANDLER,
63174 		ZEND_NULL_HANDLER,
63175 		ZEND_NULL_HANDLER,
63176 		ZEND_NULL_HANDLER,
63177 		ZEND_NULL_HANDLER,
63178 		ZEND_NULL_HANDLER,
63179 		ZEND_NULL_HANDLER,
63180 		ZEND_NULL_HANDLER,
63181 		ZEND_NULL_HANDLER,
63182 		ZEND_NULL_HANDLER,
63183 		ZEND_NULL_HANDLER,
63184 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63185 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63186 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63187 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63188 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63189 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63190 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63191 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63192 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63193 		ZEND_NULL_HANDLER,
63194 		ZEND_NULL_HANDLER,
63195 		ZEND_NULL_HANDLER,
63196 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63197 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63198 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63199 		ZEND_NULL_HANDLER,
63200 		ZEND_NULL_HANDLER,
63201 		ZEND_NULL_HANDLER,
63202 		ZEND_NULL_HANDLER,
63203 		ZEND_NULL_HANDLER,
63204 		ZEND_NULL_HANDLER,
63205 		ZEND_NULL_HANDLER,
63206 		ZEND_NULL_HANDLER,
63207 		ZEND_NULL_HANDLER,
63208 		ZEND_NULL_HANDLER,
63209 		ZEND_NULL_HANDLER,
63210 		ZEND_NULL_HANDLER,
63211 		ZEND_NULL_HANDLER,
63212 		ZEND_NULL_HANDLER,
63213 		ZEND_NULL_HANDLER,
63214 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63215 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63216 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63217 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63218 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63219 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63220 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63221 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63222 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63223 		ZEND_NULL_HANDLER,
63224 		ZEND_NULL_HANDLER,
63225 		ZEND_NULL_HANDLER,
63226 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63227 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63228 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63229 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63230 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63231 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63232 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63233 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63234 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63235 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63236 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63237 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63238 		ZEND_NULL_HANDLER,
63239 		ZEND_NULL_HANDLER,
63240 		ZEND_NULL_HANDLER,
63241 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63242 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63243 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63244 		ZEND_NULL_HANDLER,
63245 		ZEND_NULL_HANDLER,
63246 		ZEND_NULL_HANDLER,
63247 		ZEND_NULL_HANDLER,
63248 		ZEND_NULL_HANDLER,
63249 		ZEND_NULL_HANDLER,
63250 		ZEND_NULL_HANDLER,
63251 		ZEND_NULL_HANDLER,
63252 		ZEND_NULL_HANDLER,
63253 		ZEND_NULL_HANDLER,
63254 		ZEND_NULL_HANDLER,
63255 		ZEND_NULL_HANDLER,
63256 		ZEND_NULL_HANDLER,
63257 		ZEND_NULL_HANDLER,
63258 		ZEND_NULL_HANDLER,
63259 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63260 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63261 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63262 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63263 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63264 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63265 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63266 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63267 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63268 		ZEND_NULL_HANDLER,
63269 		ZEND_NULL_HANDLER,
63270 		ZEND_NULL_HANDLER,
63271 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63272 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63273 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63274 		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
63275 		ZEND_NULL_HANDLER,
63276 		ZEND_NULL_HANDLER,
63277 		ZEND_NULL_HANDLER,
63278 		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
63279 		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
63280 		ZEND_NULL_HANDLER,
63281 		ZEND_NULL_HANDLER,
63282 		ZEND_NULL_HANDLER,
63283 		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
63284 		ZEND_NULL_HANDLER,
63285 		ZEND_NULL_HANDLER,
63286 		ZEND_NULL_HANDLER,
63287 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
63288 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63289 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63290 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
63291 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63292 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63293 		ZEND_NULL_HANDLER,
63294 		ZEND_NULL_HANDLER,
63295 		ZEND_NULL_HANDLER,
63296 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
63297 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63298 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63299 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63300 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63301 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63302 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63303 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63304 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63305 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63306 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63307 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63308 		ZEND_NULL_HANDLER,
63309 		ZEND_NULL_HANDLER,
63310 		ZEND_NULL_HANDLER,
63311 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63312 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63313 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63314 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63315 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63316 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63317 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63318 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63319 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63320 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63321 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63322 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63323 		ZEND_NULL_HANDLER,
63324 		ZEND_NULL_HANDLER,
63325 		ZEND_NULL_HANDLER,
63326 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63327 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63328 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63329 		ZEND_NULL_HANDLER,
63330 		ZEND_NULL_HANDLER,
63331 		ZEND_NULL_HANDLER,
63332 		ZEND_NULL_HANDLER,
63333 		ZEND_NULL_HANDLER,
63334 		ZEND_NULL_HANDLER,
63335 		ZEND_NULL_HANDLER,
63336 		ZEND_NULL_HANDLER,
63337 		ZEND_NULL_HANDLER,
63338 		ZEND_NULL_HANDLER,
63339 		ZEND_NULL_HANDLER,
63340 		ZEND_NULL_HANDLER,
63341 		ZEND_NULL_HANDLER,
63342 		ZEND_NULL_HANDLER,
63343 		ZEND_NULL_HANDLER,
63344 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63345 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63346 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63347 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63348 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63349 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63350 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63351 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63352 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63353 		ZEND_NULL_HANDLER,
63354 		ZEND_NULL_HANDLER,
63355 		ZEND_NULL_HANDLER,
63356 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63357 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63358 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63359 		ZEND_NULL_HANDLER,
63360 		ZEND_NULL_HANDLER,
63361 		ZEND_NULL_HANDLER,
63362 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
63363 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63364 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63365 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
63366 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63367 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63368 		ZEND_NULL_HANDLER,
63369 		ZEND_NULL_HANDLER,
63370 		ZEND_NULL_HANDLER,
63371 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
63372 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63373 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63374 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63375 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63376 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63377 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63378 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63379 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63380 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63381 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63382 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63383 		ZEND_NULL_HANDLER,
63384 		ZEND_NULL_HANDLER,
63385 		ZEND_NULL_HANDLER,
63386 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63387 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63388 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63389 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63390 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63391 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63392 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63393 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63394 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63395 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63396 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63397 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63398 		ZEND_NULL_HANDLER,
63399 		ZEND_NULL_HANDLER,
63400 		ZEND_NULL_HANDLER,
63401 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63402 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63403 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
63418 		ZEND_NULL_HANDLER,
63419 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63420 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63421 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63422 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63423 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63424 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63425 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63426 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63427 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63428 		ZEND_NULL_HANDLER,
63429 		ZEND_NULL_HANDLER,
63430 		ZEND_NULL_HANDLER,
63431 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63432 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63433 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63434 		ZEND_NULL_HANDLER,
63435 		ZEND_NULL_HANDLER,
63436 		ZEND_NULL_HANDLER,
63437 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
63438 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63439 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63440 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
63441 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63442 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63443 		ZEND_NULL_HANDLER,
63444 		ZEND_NULL_HANDLER,
63445 		ZEND_NULL_HANDLER,
63446 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
63447 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63448 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63449 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63450 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63451 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63452 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63453 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63454 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63455 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63456 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63457 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63458 		ZEND_NULL_HANDLER,
63459 		ZEND_NULL_HANDLER,
63460 		ZEND_NULL_HANDLER,
63461 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63462 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63463 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63464 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63465 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63466 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63467 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63468 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63469 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63470 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63471 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63472 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63473 		ZEND_NULL_HANDLER,
63474 		ZEND_NULL_HANDLER,
63475 		ZEND_NULL_HANDLER,
63476 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63477 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63478 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
63493 		ZEND_NULL_HANDLER,
63494 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
63495 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63496 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63497 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63498 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63499 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63500 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63501 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63502 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63503 		ZEND_NULL_HANDLER,
63504 		ZEND_NULL_HANDLER,
63505 		ZEND_NULL_HANDLER,
63506 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63507 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63508 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63509 		ZEND_NULL_HANDLER,
63510 		ZEND_NULL_HANDLER,
63511 		ZEND_NULL_HANDLER,
63512 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
63513 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63514 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63515 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
63516 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63517 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63518 		ZEND_NULL_HANDLER,
63519 		ZEND_NULL_HANDLER,
63520 		ZEND_NULL_HANDLER,
63521 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
63522 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
63523 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
63524 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63525 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63526 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63527 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63528 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63529 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63530 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63531 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63532 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63533 		ZEND_NULL_HANDLER,
63534 		ZEND_NULL_HANDLER,
63535 		ZEND_NULL_HANDLER,
63536 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63537 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63538 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63539 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63540 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63541 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63542 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63543 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63544 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63545 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63546 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63547 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63548 		ZEND_NULL_HANDLER,
63549 		ZEND_NULL_HANDLER,
63550 		ZEND_NULL_HANDLER,
63551 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63552 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63553 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
63568 		ZEND_NULL_HANDLER,
63569 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
63570 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
63571 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
63572 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63573 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63574 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63575 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63576 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63577 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63578 		ZEND_NULL_HANDLER,
63579 		ZEND_NULL_HANDLER,
63580 		ZEND_NULL_HANDLER,
63581 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
63582 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
63583 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
63584 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
63585 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
63586 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
63587 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
63588 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
63589 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
63590 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
63591 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
63592 		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
63593 		ZEND_POST_INC_LONG_SPEC_CV_HANDLER,
63594 		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
63595 		ZEND_POST_DEC_LONG_SPEC_CV_HANDLER,
63596 		ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER,
63597 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
63598 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
63599 		ZEND_NULL_HANDLER,
63600 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
63601 		ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
63602 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
63603 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
63604 		ZEND_NULL_HANDLER,
63605 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
63606 		ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
63607 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
63608 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
63609 		ZEND_NULL_HANDLER,
63610 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
63611 		ZEND_NULL_HANDLER,
63612 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
63613 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
63614 		ZEND_NULL_HANDLER,
63615 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
63616 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
63617 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
63618 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
63619 		ZEND_NULL_HANDLER,
63620 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
63621 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
63622 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
63623 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
63624 		ZEND_NULL_HANDLER,
63625 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
63626 		ZEND_NULL_HANDLER,
63627 		ZEND_NULL_HANDLER,
63628 		ZEND_NULL_HANDLER,
63629 		ZEND_NULL_HANDLER,
63630 		ZEND_NULL_HANDLER,
63631 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
63632 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
63633 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
63634 		ZEND_NULL_HANDLER,
63635 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
63636 		ZEND_NULL_HANDLER,
63637 		ZEND_NULL_HANDLER,
63638 		ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
63639 		ZEND_NULL_HANDLER,
63640 		ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
63641 		ZEND_NULL_HANDLER,
63642 		ZEND_NULL_HANDLER,
63643 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER,
63644 		ZEND_NULL_HANDLER,
63645 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER,
63646 		ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER,
63647 		ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER,
63648 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
63649 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
63650 		ZEND_NULL_HANDLER
63651 	};
63652 	static const uint32_t specs[] = {
63653 		0,
63654 		1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63655 		26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63656 		51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63657 		76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63658 		101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63659 		126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63660 		151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63661 		176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63662 		201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63663 		226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63664 		251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63665 		276 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63666 		301 | SPEC_RULE_OP1,
63667 		306 | SPEC_RULE_OP1,
63668 		311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63669 		336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63670 		361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63671 		386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
63672 		461 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
63673 		536 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
63674 		611 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
63675 		686 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
63676 		736 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
63677 		861 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
63678 		986 | SPEC_RULE_OP_DATA,
63679 		991 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63680 		1016 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63681 		1041 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63682 		1066,
63683 		1067 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63684 		1092 | SPEC_RULE_OP1,
63685 		1097 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
63686 		1222,
63687 		1223 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
63688 		1233 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
63689 		1243 | SPEC_RULE_OP1,
63690 		1248 | SPEC_RULE_OP1,
63691 		1253,
63692 		1253,
63693 		1254,
63694 		1254,
63695 		1255,
63696 		1256 | SPEC_RULE_OP1,
63697 		1261 | SPEC_RULE_OP1,
63698 		1266 | SPEC_RULE_OP1,
63699 		1271 | SPEC_RULE_OP1,
63700 		1276 | SPEC_RULE_OP1,
63701 		1281 | SPEC_RULE_OP2,
63702 		1286,
63703 		1287 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
63704 		1297 | SPEC_RULE_OP1,
63705 		1302 | SPEC_RULE_OP1,
63706 		1307 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63707 		1332 | SPEC_RULE_OP2,
63708 		1337 | SPEC_RULE_OP2,
63709 		1342 | SPEC_RULE_OP2,
63710 		1347,
63711 		1348,
63712 		1349,
63713 		1350 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
63714 		1354,
63715 		1355 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
63716 		1365,
63717 		1366,
63718 		1367 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63719 		1392 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
63720 		1442 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63721 		1467 | SPEC_RULE_OP1,
63722 		1472,
63723 		1473,
63724 		1474 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63725 		1499 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63726 		1524 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
63727 		1534 | SPEC_RULE_OP1,
63728 		1539 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63729 		1564 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63730 		1589 | SPEC_RULE_OP1,
63731 		1594,
63732 		1595,
63733 		1596 | SPEC_RULE_OP1,
63734 		1601 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63735 		1626 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63736 		1651 | SPEC_RULE_OP1,
63737 		1656 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63738 		1681 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63739 		1706 | SPEC_RULE_OP1,
63740 		1711 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63741 		1736 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63742 		1761 | SPEC_RULE_OP1,
63743 		1766 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63744 		1791 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63745 		1816 | SPEC_RULE_OP1,
63746 		1821 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63747 		1846 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63748 		1871 | SPEC_RULE_OP1,
63749 		1876 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63750 		1901 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63751 		1926 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63752 		1951,
63753 		1952 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
63754 		1962,
63755 		1963,
63756 		1964,
63757 		1965,
63758 		1966,
63759 		1967 | SPEC_RULE_OP2,
63760 		1972,
63761 		1973 | SPEC_RULE_OP1,
63762 		1978 | SPEC_RULE_OP2,
63763 		1983 | SPEC_RULE_OP1,
63764 		1988 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
63765 		1998 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63766 		2023 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63767 		2048 | SPEC_RULE_OP1,
63768 		2053 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63769 		2078 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
63770 		2128 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63771 		2153 | SPEC_RULE_OP2,
63772 		2158,
63773 		2159 | SPEC_RULE_OP1,
63774 		2164 | SPEC_RULE_OP1,
63775 		2169,
63776 		2170 | SPEC_RULE_OP1,
63777 		2175 | SPEC_RULE_OP1,
63778 		2180 | SPEC_RULE_OP1,
63779 		2185,
63780 		2186,
63781 		2187 | SPEC_RULE_OP2,
63782 		2192 | SPEC_RULE_RETVAL,
63783 		2194 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
63784 		2198 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
63785 		2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63786 		2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63787 		2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63788 		2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63789 		2252 | SPEC_RULE_OP1,
63790 		2257,
63791 		2258 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63792 		2283,
63793 		2284 | SPEC_RULE_OP1,
63794 		2289,
63795 		2290,
63796 		2291,
63797 		2292,
63798 		2293,
63799 		2294,
63800 		2295,
63801 		2296 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63802 		2321,
63803 		2322,
63804 		2323,
63805 		2324 | SPEC_RULE_OP1,
63806 		2329,
63807 		2330 | SPEC_RULE_ISSET,
63808 		2332 | SPEC_RULE_OP2,
63809 		2337,
63810 		2338 | SPEC_RULE_OP1,
63811 		2343 | SPEC_RULE_OBSERVER,
63812 		2345,
63813 		2346 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63814 		2371 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
63815 		2381,
63816 		2382,
63817 		2383,
63818 		2384,
63819 		2385 | SPEC_RULE_OP1,
63820 		2390,
63821 		2391,
63822 		2392 | SPEC_RULE_OP1,
63823 		2397 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63824 		2422,
63825 		2423 | SPEC_RULE_OP1,
63826 		2428,
63827 		2429,
63828 		2430,
63829 		2431,
63830 		2432,
63831 		2433,
63832 		2434,
63833 		2435,
63834 		2436 | SPEC_RULE_OP1,
63835 		2441,
63836 		2442,
63837 		2443,
63838 		2444 | SPEC_RULE_OP2,
63839 		2449,
63840 		2450 | SPEC_RULE_OP1,
63841 		2455 | SPEC_RULE_OP1,
63842 		2460 | SPEC_RULE_OP1,
63843 		2465 | SPEC_RULE_OP1,
63844 		2470 | SPEC_RULE_OP1,
63845 		2475,
63846 		2476 | SPEC_RULE_OP1,
63847 		2481 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63848 		2506 | SPEC_RULE_OP1,
63849 		2511 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63850 		2536 | SPEC_RULE_OP1,
63851 		2541 | SPEC_RULE_OP1,
63852 		2546,
63853 		2547,
63854 		2548,
63855 		2549,
63856 		3453
63857 	};
63858 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
63859 	zend_opcode_handler_funcs = labels;
63860 	zend_spec_handlers = specs;
63861 	execute_ex(NULL);
63862 #else
63863 	zend_opcode_handlers = labels;
63864 	zend_handlers_count = sizeof(labels) / sizeof(void*);
63865 	zend_spec_handlers = specs;
63866 #endif
63867 	VM_TRACE_START();
63868 }
63869 
63870 static HashTable *zend_handlers_table = NULL;
63871 
63872 void zend_vm_dtor(void)
63873 {
63874 	VM_TRACE_END();
63875 	if (zend_handlers_table) {
63876 		zend_hash_destroy(zend_handlers_table);
63877 		free(zend_handlers_table);
63878 		zend_handlers_table = NULL;
63879 	}
63880 }
63881 
63882 static void init_opcode_serialiser(void)
63883 {
63884 	int i;
63885 	zval tmp;
63886 
63887 	zend_handlers_table = malloc(sizeof(HashTable));
63888 	zend_hash_init(zend_handlers_table, zend_handlers_count, NULL, NULL, 1);
63889 	zend_hash_real_init(zend_handlers_table, 0);
63890 	Z_TYPE_INFO(tmp) = IS_LONG;
63891 	for (i = 0; i < zend_handlers_count; i++) {
63892 		Z_LVAL(tmp) = i;
63893 		zend_hash_index_add(zend_handlers_table, (zend_long)(zend_uintptr_t)zend_opcode_handlers[i], &tmp);
63894 	}
63895 }
63896 
63897 ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op)
63898 {
63899 	zval *zv;
63900 
63901 	if (!zend_handlers_table) {
63902 		init_opcode_serialiser();
63903 	}
63904 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
63905 	ZEND_ASSERT(zv != NULL);
63906 	op->handler = (const void *)(zend_uintptr_t)Z_LVAL_P(zv);
63907 }
63908 
63909 ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op)
63910 {
63911 	op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler];
63912 }
63913 
63914 ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op)
63915 {
63916 #if ZEND_VM_KIND == ZEND_VM_KIND_CALL
63917 	return op->handler;
63918 #elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
63919 	zval *zv;
63920 
63921 	if (!zend_handlers_table) {
63922 		init_opcode_serialiser();
63923 	}
63924 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
63925 	ZEND_ASSERT(zv != NULL);
63926 	return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
63927 #else
63928 	return NULL;
63929 #endif
63930 }
63931 
63932 ZEND_API const zend_op *zend_get_halt_op(void)
63933 {
63934 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
63935 	return &hybrid_halt_op;
63936 #else
63937 	return NULL;
63938 #endif
63939 }
63940 
63941 ZEND_API int zend_vm_kind(void)
63942 {
63943 	return ZEND_VM_KIND;
63944 }
63945 
63946 static uint32_t ZEND_FASTCALL zend_vm_get_opcode_handler_idx(uint32_t spec, const zend_op* op)
63947 {
63948 	static const int zend_vm_decode[] = {
63949 		_UNUSED_CODE, /* 0 = IS_UNUSED  */
63950 		_CONST_CODE,  /* 1 = IS_CONST   */
63951 		_TMP_CODE,    /* 2 = IS_TMP_VAR */
63952 		_UNUSED_CODE, /* 3              */
63953 		_VAR_CODE,    /* 4 = IS_VAR     */
63954 		_UNUSED_CODE, /* 5              */
63955 		_UNUSED_CODE, /* 6              */
63956 		_UNUSED_CODE, /* 7              */
63957 		_CV_CODE      /* 8 = IS_CV      */
63958 	};
63959 	uint32_t offset = 0;
63960 	if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
63961 	if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
63962 	if (spec & SPEC_EXTRA_MASK) {
63963 		if (spec & SPEC_RULE_RETVAL) {
63964 			offset = offset * 2 + (op->result_type != IS_UNUSED);
63965 			if ((spec & SPEC_RULE_OBSERVER) && ZEND_OBSERVER_ENABLED) {
63966 				offset += 2;
63967 			}
63968 		} else if (spec & SPEC_RULE_QUICK_ARG) {
63969 			offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
63970 		} else if (spec & SPEC_RULE_OP_DATA) {
63971 			offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
63972 		} else if (spec & SPEC_RULE_ISSET) {
63973 			offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
63974 		} else if (spec & SPEC_RULE_SMART_BRANCH) {
63975 			offset = offset * 3;
63976 			if (op->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR)) {
63977 				offset += 1;
63978 			} else if (op->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR)) {
63979 				offset += 2;
63980 			}
63981 		} else if (spec & SPEC_RULE_OBSERVER) {
63982 			offset = offset * 2;
63983 			if (ZEND_OBSERVER_ENABLED) {
63984 				offset += 1;
63985 			}
63986 		}
63987 	}
63988 	return (spec & SPEC_START_MASK) + offset;
63989 }
63990 
63991 #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
63992 static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op)
63993 {
63994 	return zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
63995 }
63996 #endif
63997 
63998 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
63999 static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op)
64000 {
64001 	uint32_t spec = zend_spec_handlers[opcode];
64002 	return zend_opcode_handler_funcs[zend_vm_get_opcode_handler_idx(spec, op)];
64003 }
64004 
64005 #endif
64006 
64007 ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
64008 {
64009 	zend_uchar opcode = zend_user_opcodes[op->opcode];
64010 
64011 	if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
64012 		if (op->op1_type < op->op2_type) {
64013 			zend_swap_operands(op);
64014 		}
64015 	}
64016 	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
64017 }
64018 
64019 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)
64020 {
64021 	zend_uchar opcode = zend_user_opcodes[op->opcode];
64022 	uint32_t spec = zend_spec_handlers[opcode];
64023 	switch (opcode) {
64024 		case ZEND_ADD:
64025 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64026 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64027 					break;
64028 				}
64029 				spec = 2552 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
64030 				if (op->op1_type < op->op2_type) {
64031 					zend_swap_operands(op);
64032 				}
64033 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64034 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64035 					break;
64036 				}
64037 				spec = 2577 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
64038 				if (op->op1_type < op->op2_type) {
64039 					zend_swap_operands(op);
64040 				}
64041 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
64042 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64043 					break;
64044 				}
64045 				spec = 2602 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
64046 				if (op->op1_type < op->op2_type) {
64047 					zend_swap_operands(op);
64048 				}
64049 			}
64050 			break;
64051 		case ZEND_SUB:
64052 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64053 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64054 					break;
64055 				}
64056 				spec = 2627 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
64057 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64058 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64059 					break;
64060 				}
64061 				spec = 2652 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
64062 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
64063 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64064 					break;
64065 				}
64066 				spec = 2677 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
64067 			}
64068 			break;
64069 		case ZEND_MUL:
64070 			if (op->op1_type < op->op2_type) {
64071 				zend_swap_operands(op);
64072 			}
64073 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64074 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64075 					break;
64076 				}
64077 				spec = 2702 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
64078 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64079 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64080 					break;
64081 				}
64082 				spec = 2727 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
64083 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
64084 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64085 					break;
64086 				}
64087 				spec = 2752 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
64088 			}
64089 			break;
64090 		case ZEND_IS_IDENTICAL:
64091 			if (op->op1_type < op->op2_type) {
64092 				zend_swap_operands(op);
64093 			}
64094 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64095 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64096 					break;
64097 				}
64098 				spec = 2777 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
64099 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
64100 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64101 					break;
64102 				}
64103 				spec = 2852 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
64104 			} 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))) {
64105 				spec = 3077 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
64106 			}
64107 			break;
64108 		case ZEND_IS_NOT_IDENTICAL:
64109 			if (op->op1_type < op->op2_type) {
64110 				zend_swap_operands(op);
64111 			}
64112 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64113 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64114 					break;
64115 				}
64116 				spec = 2927 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
64117 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
64118 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64119 					break;
64120 				}
64121 				spec = 3002 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
64122 			} 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))) {
64123 				spec = 3082 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
64124 			}
64125 			break;
64126 		case ZEND_IS_EQUAL:
64127 			if (op->op1_type < op->op2_type) {
64128 				zend_swap_operands(op);
64129 			}
64130 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64131 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64132 					break;
64133 				}
64134 				spec = 2777 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
64135 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
64136 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64137 					break;
64138 				}
64139 				spec = 2852 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
64140 			}
64141 			break;
64142 		case ZEND_IS_NOT_EQUAL:
64143 			if (op->op1_type < op->op2_type) {
64144 				zend_swap_operands(op);
64145 			}
64146 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64147 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64148 					break;
64149 				}
64150 				spec = 2927 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
64151 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
64152 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64153 					break;
64154 				}
64155 				spec = 3002 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
64156 			}
64157 			break;
64158 		case ZEND_IS_SMALLER:
64159 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64160 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64161 					break;
64162 				}
64163 				spec = 3087 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
64164 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
64165 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64166 					break;
64167 				}
64168 				spec = 3162 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
64169 			}
64170 			break;
64171 		case ZEND_IS_SMALLER_OR_EQUAL:
64172 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
64173 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64174 					break;
64175 				}
64176 				spec = 3237 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
64177 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
64178 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64179 					break;
64180 				}
64181 				spec = 3312 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
64182 			}
64183 			break;
64184 		case ZEND_QM_ASSIGN:
64185 			if (op1_info == MAY_BE_LONG) {
64186 				spec = 3399 | SPEC_RULE_OP1;
64187 			} else if (op1_info == MAY_BE_DOUBLE) {
64188 				spec = 3404 | SPEC_RULE_OP1;
64189 			} 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))))) {
64190 				spec = 3409 | SPEC_RULE_OP1;
64191 			}
64192 			break;
64193 		case ZEND_PRE_INC:
64194 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
64195 				spec = 3387 | SPEC_RULE_RETVAL;
64196 			} else if (op1_info == MAY_BE_LONG) {
64197 				spec = 3389 | SPEC_RULE_RETVAL;
64198 			}
64199 			break;
64200 		case ZEND_PRE_DEC:
64201 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
64202 				spec = 3391 | SPEC_RULE_RETVAL;
64203 			} else if (op1_info == MAY_BE_LONG) {
64204 				spec = 3393 | SPEC_RULE_RETVAL;
64205 			}
64206 			break;
64207 		case ZEND_POST_INC:
64208 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
64209 				spec = 3395;
64210 			} else if (op1_info == MAY_BE_LONG) {
64211 				spec = 3396;
64212 			}
64213 			break;
64214 		case ZEND_POST_DEC:
64215 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
64216 				spec = 3397;
64217 			} else if (op1_info == MAY_BE_LONG) {
64218 				spec = 3398;
64219 			}
64220 			break;
64221 		case ZEND_JMP:
64222 			if (OP_JMP_ADDR(op, op->op1) > op) {
64223 				spec = 2551;
64224 			}
64225 			break;
64226 		case ZEND_RECV:
64227 			if (op->op2.num == MAY_BE_ANY) {
64228 				spec = 2550;
64229 			}
64230 			break;
64231 		case ZEND_SEND_VAL:
64232 			if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
64233 				spec = 3449;
64234 			}
64235 			break;
64236 		case ZEND_SEND_VAR_EX:
64237 			if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
64238 				spec = 3444 | SPEC_RULE_OP1;
64239 			}
64240 			break;
64241 		case ZEND_FE_FETCH_R:
64242 			if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
64243 				spec = 3451 | SPEC_RULE_RETVAL;
64244 			}
64245 			break;
64246 		case ZEND_FETCH_DIM_R:
64247 			if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
64248 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
64249 					break;
64250 				}
64251 				spec = 3414 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
64252 			}
64253 			break;
64254 		case ZEND_SEND_VAL_EX:
64255 			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))) {
64256 				spec = 3450;
64257 			}
64258 			break;
64259 		case ZEND_SEND_VAR:
64260 			if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
64261 				spec = 3439 | SPEC_RULE_OP1;
64262 			}
64263 			break;
64264 		case ZEND_BW_OR:
64265 		case ZEND_BW_AND:
64266 		case ZEND_BW_XOR:
64267 		case ZEND_BOOL_XOR:
64268 			if (op->op1_type < op->op2_type) {
64269 				zend_swap_operands(op);
64270 			}
64271 			break;
64272 		case ZEND_USER_OPCODE:
64273 			if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
64274 				if (op->op1_type < op->op2_type) {
64275 					zend_swap_operands(op);
64276 				}
64277 			}
64278 			break;
64279 		default:
64280 			break;
64281 	}
64282 	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(spec, op)];
64283 }
64284 
64285 ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex)
64286 {
64287 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
64288 	opcode_handler_t handler;
64289 #endif
64290 	int ret;
64291 #ifdef ZEND_VM_IP_GLOBAL_REG
64292 	const zend_op *orig_opline = opline;
64293 #endif
64294 #ifdef ZEND_VM_FP_GLOBAL_REG
64295 	zend_execute_data *orig_execute_data = execute_data;
64296 	execute_data = ex;
64297 #else
64298 	zend_execute_data *execute_data = ex;
64299 #endif
64300 
64301 	LOAD_OPLINE();
64302 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
64303 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
64304 	handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
64305 	handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
64306 	if (EXPECTED(opline != &hybrid_halt_op)) {
64307 #else
64308 	((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
64309 	if (EXPECTED(opline)) {
64310 #endif
64311 		ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
64312 		SAVE_OPLINE();
64313 	} else {
64314 		ret = -1;
64315 	}
64316 #else
64317 	ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
64318 	SAVE_OPLINE();
64319 #endif
64320 #ifdef ZEND_VM_FP_GLOBAL_REG
64321 	execute_data = orig_execute_data;
64322 #endif
64323 #ifdef ZEND_VM_IP_GLOBAL_REG
64324 	opline = orig_opline;
64325 #endif
64326 	return ret;
64327 }
64328 
64329