xref: /PHP-8.0/Zend/zend_vm_execute.h (revision 26c7c82d)
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 		destroy_op_array(&EX(func)->op_array);
1150 		efree_size(EX(func), sizeof(zend_op_array));
1151 #ifdef ZEND_PREFER_RELOAD
1152 		call_info = EX_CALL_INFO();
1153 #endif
1154 		old_execute_data = execute_data;
1155 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
1156 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1157 
1158 		zend_attach_symbol_table(execute_data);
1159 		if (UNEXPECTED(EG(exception) != NULL)) {
1160 			zend_rethrow_exception(execute_data);
1161 			HANDLE_EXCEPTION_LEAVE();
1162 		}
1163 
1164 		LOAD_NEXT_OPLINE();
1165 		ZEND_VM_LEAVE();
1166 	} else {
1167 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
1168 			EG(current_execute_data) = EX(prev_execute_data);
1169 			i_free_compiled_variables(execute_data);
1170 #ifdef ZEND_PREFER_RELOAD
1171 			call_info = EX_CALL_INFO();
1172 #endif
1173 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
1174 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1175 					zend_clean_and_cache_symbol_table(EX(symbol_table));
1176 				}
1177 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
1178 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1179 					zend_free_extra_named_params(EX(extra_named_params));
1180 				}
1181 			}
1182 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1183 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1184 			}
1185 			ZEND_VM_RETURN();
1186 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
1187 			zend_array *symbol_table = EX(symbol_table);
1188 
1189 			zend_detach_symbol_table(execute_data);
1190 			old_execute_data = EX(prev_execute_data);
1191 			while (old_execute_data) {
1192 				if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1193 					if (old_execute_data->symbol_table == symbol_table) {
1194 						zend_attach_symbol_table(old_execute_data);
1195 					}
1196 					break;
1197 				}
1198 				old_execute_data = old_execute_data->prev_execute_data;
1199 			}
1200 			EG(current_execute_data) = EX(prev_execute_data);
1201 			ZEND_VM_RETURN();
1202 		}
1203 	}
1204 }
1205 
ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1206 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1207 {
1208 	USE_OPLINE
1209 
1210 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
1211 }
1212 
ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1213 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1214 {
1215 	USE_OPLINE
1216 	zend_execute_data *call = EX(call);
1217 	zend_function *fbc = call->func;
1218 	zval *ret;
1219 	zval retval;
1220 
1221 	SAVE_OPLINE();
1222 	EX(call) = call->prev_execute_data;
1223 
1224 	call->prev_execute_data = execute_data;
1225 	EG(current_execute_data) = call;
1226 
1227 #if ZEND_DEBUG
1228 	zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
1229 #endif
1230 
1231 	ret = 0 ? EX_VAR(opline->result.var) : &retval;
1232 	ZVAL_NULL(ret);
1233 
1234 	fbc->internal_function.handler(call, ret);
1235 
1236 #if ZEND_DEBUG
1237 	if (!EG(exception) && call->func) {
1238 		if (should_throw) {
1239 			zend_internal_call_arginfo_violation(call->func);
1240 		}
1241 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1242 			zend_verify_internal_return_type(call->func, ret));
1243 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1244 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1245 	}
1246 #endif
1247 
1248 	EG(current_execute_data) = execute_data;
1249 	zend_vm_stack_free_args(call);
1250 
1251 	uint32_t call_info = ZEND_CALL_INFO(call);
1252 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1253 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1254 			zend_free_extra_named_params(call->extra_named_params);
1255 		}
1256 		zend_vm_stack_free_call_frame_ex(call_info, call);
1257 	} else {
1258 		EG(vm_stack_top) = (zval*)call;
1259 	}
1260 
1261 	if (!0) {
1262 		i_zval_ptr_dtor(ret);
1263 	}
1264 
1265 	if (UNEXPECTED(EG(exception) != NULL)) {
1266 		zend_rethrow_exception(execute_data);
1267 		HANDLE_EXCEPTION();
1268 	}
1269 
1270 	ZEND_VM_SET_OPCODE(opline + 1);
1271 	ZEND_VM_CONTINUE();
1272 }
1273 
ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1274 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1275 {
1276 	USE_OPLINE
1277 	zend_execute_data *call = EX(call);
1278 	zend_function *fbc = call->func;
1279 	zval *ret;
1280 	zval retval;
1281 
1282 	SAVE_OPLINE();
1283 	EX(call) = call->prev_execute_data;
1284 
1285 	call->prev_execute_data = execute_data;
1286 	EG(current_execute_data) = call;
1287 
1288 #if ZEND_DEBUG
1289 	zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
1290 #endif
1291 
1292 	ret = 1 ? EX_VAR(opline->result.var) : &retval;
1293 	ZVAL_NULL(ret);
1294 
1295 	fbc->internal_function.handler(call, ret);
1296 
1297 #if ZEND_DEBUG
1298 	if (!EG(exception) && call->func) {
1299 		if (should_throw) {
1300 			zend_internal_call_arginfo_violation(call->func);
1301 		}
1302 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1303 			zend_verify_internal_return_type(call->func, ret));
1304 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1305 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1306 	}
1307 #endif
1308 
1309 	EG(current_execute_data) = execute_data;
1310 	zend_vm_stack_free_args(call);
1311 
1312 	uint32_t call_info = ZEND_CALL_INFO(call);
1313 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1314 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1315 			zend_free_extra_named_params(call->extra_named_params);
1316 		}
1317 		zend_vm_stack_free_call_frame_ex(call_info, call);
1318 	} else {
1319 		EG(vm_stack_top) = (zval*)call;
1320 	}
1321 
1322 	if (!1) {
1323 		i_zval_ptr_dtor(ret);
1324 	}
1325 
1326 	if (UNEXPECTED(EG(exception) != NULL)) {
1327 		zend_rethrow_exception(execute_data);
1328 		HANDLE_EXCEPTION();
1329 	}
1330 
1331 	ZEND_VM_SET_OPCODE(opline + 1);
1332 	ZEND_VM_CONTINUE();
1333 }
1334 
ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1335 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1336 {
1337 	USE_OPLINE
1338 	zend_execute_data *call = EX(call);
1339 	zend_function *fbc = call->func;
1340 	zval *ret;
1341 
1342 	SAVE_OPLINE();
1343 	EX(call) = call->prev_execute_data;
1344 
1345 	ret = NULL;
1346 	if (0) {
1347 		ret = EX_VAR(opline->result.var);
1348 	}
1349 
1350 	call->prev_execute_data = execute_data;
1351 	execute_data = call;
1352 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1353 	LOAD_OPLINE_EX();
1354 
1355 
1356 	ZEND_VM_ENTER_EX();
1357 }
1358 
ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1359 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1360 {
1361 	USE_OPLINE
1362 	zend_execute_data *call = EX(call);
1363 	zend_function *fbc = call->func;
1364 	zval *ret;
1365 
1366 	SAVE_OPLINE();
1367 	EX(call) = call->prev_execute_data;
1368 
1369 	ret = NULL;
1370 	if (1) {
1371 		ret = EX_VAR(opline->result.var);
1372 	}
1373 
1374 	call->prev_execute_data = execute_data;
1375 	execute_data = call;
1376 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1377 	LOAD_OPLINE_EX();
1378 
1379 
1380 	ZEND_VM_ENTER_EX();
1381 }
1382 
ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1383 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1384 {
1385 	USE_OPLINE
1386 	zend_execute_data *call = EX(call);
1387 	zend_function *fbc = call->func;
1388 	zval *ret;
1389 
1390 	SAVE_OPLINE();
1391 	EX(call) = call->prev_execute_data;
1392 
1393 	ret = NULL;
1394 	if (RETURN_VALUE_USED(opline)) {
1395 		ret = EX_VAR(opline->result.var);
1396 	}
1397 
1398 	call->prev_execute_data = execute_data;
1399 	execute_data = call;
1400 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1401 	LOAD_OPLINE_EX();
1402 	SAVE_OPLINE();
1403 	zend_observer_fcall_begin(execute_data);
1404 
1405 	ZEND_VM_ENTER_EX();
1406 }
1407 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1408 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1409 {
1410 	USE_OPLINE
1411 	zend_execute_data *call = EX(call);
1412 	zend_function *fbc = call->func;
1413 	zval *ret;
1414 
1415 	SAVE_OPLINE();
1416 	EX(call) = call->prev_execute_data;
1417 
1418 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1419 		ret = NULL;
1420 		if (0) {
1421 			ret = EX_VAR(opline->result.var);
1422 		}
1423 
1424 		call->prev_execute_data = execute_data;
1425 		execute_data = call;
1426 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1427 		LOAD_OPLINE_EX();
1428 
1429 
1430 		ZEND_VM_ENTER_EX();
1431 	} else {
1432 		zval retval;
1433 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1434 		if (0) {
1435 			ret = NULL;
1436 		}
1437 
1438 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1439 			zend_deprecated_function(fbc);
1440 			if (UNEXPECTED(EG(exception) != NULL)) {
1441 				UNDEF_RESULT();
1442 				if (!0) {
1443 					ret = &retval;
1444 					ZVAL_UNDEF(ret);
1445 				}
1446 				goto fcall_by_name_end;
1447 			}
1448 		}
1449 
1450 		call->prev_execute_data = execute_data;
1451 		EG(current_execute_data) = call;
1452 
1453 #if ZEND_DEBUG
1454 		zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
1455 #endif
1456 
1457 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1458 		ZVAL_NULL(ret);
1459 
1460 		fbc->internal_function.handler(call, ret);
1461 
1462 #if ZEND_DEBUG
1463 		if (!EG(exception) && call->func) {
1464 			if (should_throw) {
1465 				zend_internal_call_arginfo_violation(call->func);
1466 			}
1467 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1468 				zend_verify_internal_return_type(call->func, ret));
1469 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1470 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1471 		}
1472 #endif
1473 
1474 		EG(current_execute_data) = execute_data;
1475 
1476 fcall_by_name_end:
1477 		zend_vm_stack_free_args(call);
1478 
1479 		uint32_t call_info = ZEND_CALL_INFO(call);
1480 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1481 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1482 				zend_free_extra_named_params(call->extra_named_params);
1483 			}
1484 			zend_vm_stack_free_call_frame_ex(call_info, call);
1485 		} else {
1486 			EG(vm_stack_top) = (zval*)call;
1487 		}
1488 
1489 		if (!0) {
1490 			i_zval_ptr_dtor(ret);
1491 		}
1492 	}
1493 
1494 	if (UNEXPECTED(EG(exception) != NULL)) {
1495 		zend_rethrow_exception(execute_data);
1496 		HANDLE_EXCEPTION();
1497 	}
1498 	ZEND_VM_SET_OPCODE(opline + 1);
1499 	ZEND_VM_CONTINUE();
1500 }
1501 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1502 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1503 {
1504 	USE_OPLINE
1505 	zend_execute_data *call = EX(call);
1506 	zend_function *fbc = call->func;
1507 	zval *ret;
1508 
1509 	SAVE_OPLINE();
1510 	EX(call) = call->prev_execute_data;
1511 
1512 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1513 		ret = NULL;
1514 		if (1) {
1515 			ret = EX_VAR(opline->result.var);
1516 		}
1517 
1518 		call->prev_execute_data = execute_data;
1519 		execute_data = call;
1520 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1521 		LOAD_OPLINE_EX();
1522 
1523 
1524 		ZEND_VM_ENTER_EX();
1525 	} else {
1526 		zval retval;
1527 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1528 		if (0) {
1529 			ret = NULL;
1530 		}
1531 
1532 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1533 			zend_deprecated_function(fbc);
1534 			if (UNEXPECTED(EG(exception) != NULL)) {
1535 				UNDEF_RESULT();
1536 				if (!1) {
1537 					ret = &retval;
1538 					ZVAL_UNDEF(ret);
1539 				}
1540 				goto fcall_by_name_end;
1541 			}
1542 		}
1543 
1544 		call->prev_execute_data = execute_data;
1545 		EG(current_execute_data) = call;
1546 
1547 #if ZEND_DEBUG
1548 		zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
1549 #endif
1550 
1551 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1552 		ZVAL_NULL(ret);
1553 
1554 		fbc->internal_function.handler(call, ret);
1555 
1556 #if ZEND_DEBUG
1557 		if (!EG(exception) && call->func) {
1558 			if (should_throw) {
1559 				zend_internal_call_arginfo_violation(call->func);
1560 			}
1561 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1562 				zend_verify_internal_return_type(call->func, ret));
1563 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1564 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1565 		}
1566 #endif
1567 
1568 		EG(current_execute_data) = execute_data;
1569 
1570 fcall_by_name_end:
1571 		zend_vm_stack_free_args(call);
1572 
1573 		uint32_t call_info = ZEND_CALL_INFO(call);
1574 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1575 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1576 				zend_free_extra_named_params(call->extra_named_params);
1577 			}
1578 			zend_vm_stack_free_call_frame_ex(call_info, call);
1579 		} else {
1580 			EG(vm_stack_top) = (zval*)call;
1581 		}
1582 
1583 		if (!1) {
1584 			i_zval_ptr_dtor(ret);
1585 		}
1586 	}
1587 
1588 	if (UNEXPECTED(EG(exception) != NULL)) {
1589 		zend_rethrow_exception(execute_data);
1590 		HANDLE_EXCEPTION();
1591 	}
1592 	ZEND_VM_SET_OPCODE(opline + 1);
1593 	ZEND_VM_CONTINUE();
1594 }
1595 
ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1596 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1597 {
1598 	USE_OPLINE
1599 	zend_execute_data *call = EX(call);
1600 	zend_function *fbc = call->func;
1601 	zval *ret;
1602 
1603 	SAVE_OPLINE();
1604 	EX(call) = call->prev_execute_data;
1605 
1606 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1607 		ret = NULL;
1608 		if (RETURN_VALUE_USED(opline)) {
1609 			ret = EX_VAR(opline->result.var);
1610 		}
1611 
1612 		call->prev_execute_data = execute_data;
1613 		execute_data = call;
1614 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1615 		LOAD_OPLINE_EX();
1616 		SAVE_OPLINE();
1617 		zend_observer_fcall_begin(execute_data);
1618 
1619 		ZEND_VM_ENTER_EX();
1620 	} else {
1621 		zval retval;
1622 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1623 		if (1) {
1624 			ret = NULL;
1625 		}
1626 
1627 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1628 			zend_deprecated_function(fbc);
1629 			if (UNEXPECTED(EG(exception) != NULL)) {
1630 				UNDEF_RESULT();
1631 				if (!RETURN_VALUE_USED(opline)) {
1632 					ret = &retval;
1633 					ZVAL_UNDEF(ret);
1634 				}
1635 				goto fcall_by_name_end;
1636 			}
1637 		}
1638 
1639 		call->prev_execute_data = execute_data;
1640 		EG(current_execute_data) = call;
1641 
1642 #if ZEND_DEBUG
1643 		zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
1644 #endif
1645 
1646 		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
1647 		ZVAL_NULL(ret);
1648 
1649 		fbc->internal_function.handler(call, ret);
1650 
1651 #if ZEND_DEBUG
1652 		if (!EG(exception) && call->func) {
1653 			if (should_throw) {
1654 				zend_internal_call_arginfo_violation(call->func);
1655 			}
1656 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1657 				zend_verify_internal_return_type(call->func, ret));
1658 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1659 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1660 		}
1661 #endif
1662 
1663 		EG(current_execute_data) = execute_data;
1664 
1665 fcall_by_name_end:
1666 		zend_vm_stack_free_args(call);
1667 
1668 		uint32_t call_info = ZEND_CALL_INFO(call);
1669 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1670 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1671 				zend_free_extra_named_params(call->extra_named_params);
1672 			}
1673 			zend_vm_stack_free_call_frame_ex(call_info, call);
1674 		} else {
1675 			EG(vm_stack_top) = (zval*)call;
1676 		}
1677 
1678 		if (!RETURN_VALUE_USED(opline)) {
1679 			i_zval_ptr_dtor(ret);
1680 		}
1681 	}
1682 
1683 	if (UNEXPECTED(EG(exception) != NULL)) {
1684 		zend_rethrow_exception(execute_data);
1685 		HANDLE_EXCEPTION();
1686 	}
1687 	ZEND_VM_SET_OPCODE(opline + 1);
1688 	ZEND_VM_CONTINUE();
1689 }
1690 
ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1691 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1692 {
1693 	USE_OPLINE
1694 	zend_execute_data *call = EX(call);
1695 	zend_function *fbc = call->func;
1696 	zval *ret;
1697 
1698 	SAVE_OPLINE();
1699 	EX(call) = call->prev_execute_data;
1700 
1701 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1702 		ret = NULL;
1703 		if (0) {
1704 			ret = EX_VAR(opline->result.var);
1705 		}
1706 
1707 		call->prev_execute_data = execute_data;
1708 		execute_data = call;
1709 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1710 
1711 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1712 			LOAD_OPLINE_EX();
1713 
1714 
1715 			ZEND_VM_ENTER_EX();
1716 		} else {
1717 			SAVE_OPLINE_EX();
1718 
1719 			execute_data = EX(prev_execute_data);
1720 			LOAD_OPLINE();
1721 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1722 			zend_execute_ex(call);
1723 		}
1724 	} else {
1725 		zval retval;
1726 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1727 		if (0) {
1728 			ret = NULL;
1729 		}
1730 
1731 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1732 			zend_deprecated_function(fbc);
1733 			if (UNEXPECTED(EG(exception) != NULL)) {
1734 				UNDEF_RESULT();
1735 				if (!0) {
1736 					ret = &retval;
1737 					ZVAL_UNDEF(ret);
1738 				}
1739 				goto fcall_end;
1740 			}
1741 		}
1742 
1743 		call->prev_execute_data = execute_data;
1744 		EG(current_execute_data) = call;
1745 
1746 #if ZEND_DEBUG
1747 		zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
1748 #endif
1749 
1750 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1751 		ZVAL_NULL(ret);
1752 
1753 		if (!zend_execute_internal) {
1754 			/* saves one function call if zend_execute_internal is not used */
1755 			fbc->internal_function.handler(call, ret);
1756 		} else {
1757 			zend_execute_internal(call, ret);
1758 		}
1759 
1760 #if ZEND_DEBUG
1761 		if (!EG(exception) && call->func) {
1762 			if (should_throw) {
1763 				zend_internal_call_arginfo_violation(call->func);
1764 			}
1765 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1766 				zend_verify_internal_return_type(call->func, ret));
1767 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1768 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1769 		}
1770 #endif
1771 
1772 		EG(current_execute_data) = execute_data;
1773 
1774 fcall_end:
1775 		zend_vm_stack_free_args(call);
1776 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1777 			zend_free_extra_named_params(call->extra_named_params);
1778 		}
1779 
1780 		if (!0) {
1781 			i_zval_ptr_dtor(ret);
1782 		}
1783 	}
1784 
1785 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1786 		OBJ_RELEASE(Z_OBJ(call->This));
1787 	}
1788 
1789 	zend_vm_stack_free_call_frame(call);
1790 	if (UNEXPECTED(EG(exception) != NULL)) {
1791 		zend_rethrow_exception(execute_data);
1792 		HANDLE_EXCEPTION();
1793 	}
1794 
1795 	ZEND_VM_SET_OPCODE(opline + 1);
1796 	ZEND_VM_CONTINUE();
1797 }
1798 
ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1799 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1800 {
1801 	USE_OPLINE
1802 	zend_execute_data *call = EX(call);
1803 	zend_function *fbc = call->func;
1804 	zval *ret;
1805 
1806 	SAVE_OPLINE();
1807 	EX(call) = call->prev_execute_data;
1808 
1809 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1810 		ret = NULL;
1811 		if (1) {
1812 			ret = EX_VAR(opline->result.var);
1813 		}
1814 
1815 		call->prev_execute_data = execute_data;
1816 		execute_data = call;
1817 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1818 
1819 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1820 			LOAD_OPLINE_EX();
1821 
1822 
1823 			ZEND_VM_ENTER_EX();
1824 		} else {
1825 			SAVE_OPLINE_EX();
1826 
1827 			execute_data = EX(prev_execute_data);
1828 			LOAD_OPLINE();
1829 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1830 			zend_execute_ex(call);
1831 		}
1832 	} else {
1833 		zval retval;
1834 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1835 		if (0) {
1836 			ret = NULL;
1837 		}
1838 
1839 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1840 			zend_deprecated_function(fbc);
1841 			if (UNEXPECTED(EG(exception) != NULL)) {
1842 				UNDEF_RESULT();
1843 				if (!1) {
1844 					ret = &retval;
1845 					ZVAL_UNDEF(ret);
1846 				}
1847 				goto fcall_end;
1848 			}
1849 		}
1850 
1851 		call->prev_execute_data = execute_data;
1852 		EG(current_execute_data) = call;
1853 
1854 #if ZEND_DEBUG
1855 		zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
1856 #endif
1857 
1858 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1859 		ZVAL_NULL(ret);
1860 
1861 		if (!zend_execute_internal) {
1862 			/* saves one function call if zend_execute_internal is not used */
1863 			fbc->internal_function.handler(call, ret);
1864 		} else {
1865 			zend_execute_internal(call, ret);
1866 		}
1867 
1868 #if ZEND_DEBUG
1869 		if (!EG(exception) && call->func) {
1870 			if (should_throw) {
1871 				zend_internal_call_arginfo_violation(call->func);
1872 			}
1873 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1874 				zend_verify_internal_return_type(call->func, ret));
1875 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1876 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1877 		}
1878 #endif
1879 
1880 		EG(current_execute_data) = execute_data;
1881 
1882 fcall_end:
1883 		zend_vm_stack_free_args(call);
1884 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1885 			zend_free_extra_named_params(call->extra_named_params);
1886 		}
1887 
1888 		if (!1) {
1889 			i_zval_ptr_dtor(ret);
1890 		}
1891 	}
1892 
1893 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1894 		OBJ_RELEASE(Z_OBJ(call->This));
1895 	}
1896 
1897 	zend_vm_stack_free_call_frame(call);
1898 	if (UNEXPECTED(EG(exception) != NULL)) {
1899 		zend_rethrow_exception(execute_data);
1900 		HANDLE_EXCEPTION();
1901 	}
1902 
1903 	ZEND_VM_SET_OPCODE(opline + 1);
1904 	ZEND_VM_CONTINUE();
1905 }
1906 
ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1907 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1908 {
1909 	USE_OPLINE
1910 	zend_execute_data *call = EX(call);
1911 	zend_function *fbc = call->func;
1912 	zval *ret;
1913 
1914 	SAVE_OPLINE();
1915 	EX(call) = call->prev_execute_data;
1916 
1917 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1918 		ret = NULL;
1919 		if (RETURN_VALUE_USED(opline)) {
1920 			ret = EX_VAR(opline->result.var);
1921 		}
1922 
1923 		call->prev_execute_data = execute_data;
1924 		execute_data = call;
1925 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1926 
1927 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1928 			LOAD_OPLINE_EX();
1929 			SAVE_OPLINE();
1930 			zend_observer_fcall_begin(execute_data);
1931 			ZEND_VM_ENTER_EX();
1932 		} else {
1933 			SAVE_OPLINE_EX();
1934 			zend_observer_fcall_begin(execute_data);
1935 			execute_data = EX(prev_execute_data);
1936 			LOAD_OPLINE();
1937 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1938 			zend_execute_ex(call);
1939 		}
1940 	} else {
1941 		zval retval;
1942 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1943 		if (1) {
1944 			ret = NULL;
1945 		}
1946 
1947 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1948 			zend_deprecated_function(fbc);
1949 			if (UNEXPECTED(EG(exception) != NULL)) {
1950 				UNDEF_RESULT();
1951 				if (!RETURN_VALUE_USED(opline)) {
1952 					ret = &retval;
1953 					ZVAL_UNDEF(ret);
1954 				}
1955 				goto fcall_end;
1956 			}
1957 		}
1958 
1959 		call->prev_execute_data = execute_data;
1960 		EG(current_execute_data) = call;
1961 
1962 #if ZEND_DEBUG
1963 		zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
1964 #endif
1965 
1966 		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
1967 		ZVAL_NULL(ret);
1968 
1969 		if (!zend_execute_internal) {
1970 			/* saves one function call if zend_execute_internal is not used */
1971 			fbc->internal_function.handler(call, ret);
1972 		} else {
1973 			zend_execute_internal(call, ret);
1974 		}
1975 
1976 #if ZEND_DEBUG
1977 		if (!EG(exception) && call->func) {
1978 			if (should_throw) {
1979 				zend_internal_call_arginfo_violation(call->func);
1980 			}
1981 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1982 				zend_verify_internal_return_type(call->func, ret));
1983 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1984 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1985 		}
1986 #endif
1987 
1988 		EG(current_execute_data) = execute_data;
1989 
1990 fcall_end:
1991 		zend_vm_stack_free_args(call);
1992 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1993 			zend_free_extra_named_params(call->extra_named_params);
1994 		}
1995 
1996 		if (!RETURN_VALUE_USED(opline)) {
1997 			i_zval_ptr_dtor(ret);
1998 		}
1999 	}
2000 
2001 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
2002 		OBJ_RELEASE(Z_OBJ(call->This));
2003 	}
2004 
2005 	zend_vm_stack_free_call_frame(call);
2006 	if (UNEXPECTED(EG(exception) != NULL)) {
2007 		zend_rethrow_exception(execute_data);
2008 		HANDLE_EXCEPTION();
2009 	}
2010 
2011 	ZEND_VM_SET_OPCODE(opline + 1);
2012 	ZEND_VM_CONTINUE();
2013 }
2014 
ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2015 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2016 {
2017 	zval *return_value = EX(return_value);
2018 
2019 	if (EXPECTED(return_value)) {
2020 		USE_OPLINE
2021 		zend_generator *generator;
2022 		zend_execute_data *gen_execute_data;
2023 		uint32_t num_args, used_stack, call_info;
2024 
2025 		SAVE_OPLINE();
2026 		object_init_ex(return_value, zend_ce_generator);
2027 
2028 		/*
2029 		 * Normally the execute_data is allocated on the VM stack (because it does
2030 		 * not actually do any allocation and thus is faster). For generators
2031 		 * though this behavior would be suboptimal, because the (rather large)
2032 		 * structure would have to be copied back and forth every time execution is
2033 		 * suspended or resumed. That's why for generators the execution context
2034 		 * is allocated on heap.
2035 		 */
2036 		num_args = EX_NUM_ARGS();
2037 		if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
2038 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
2039 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
2040 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
2041 		} else {
2042 			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);
2043 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
2044 		}
2045 		memcpy(gen_execute_data, execute_data, used_stack);
2046 
2047 		/* Save execution context in generator object. */
2048 		generator = (zend_generator *) Z_OBJ_P(EX(return_value));
2049 		generator->execute_data = gen_execute_data;
2050 		generator->frozen_call_stack = NULL;
2051 		generator->execute_fake.opline = NULL;
2052 		generator->execute_fake.func = NULL;
2053 		generator->execute_fake.prev_execute_data = NULL;
2054 		ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);
2055 
2056 		gen_execute_data->opline = opline + 1;
2057 		/* EX(return_value) keeps pointer to zend_object (not a real zval) */
2058 		gen_execute_data->return_value = (zval*)generator;
2059 		call_info = Z_TYPE_INFO(EX(This));
2060 		if ((call_info & Z_TYPE_MASK) == IS_OBJECT
2061 		 && (!(call_info & (ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS))
2062 			 /* Bug #72523 */
2063 			|| UNEXPECTED(zend_execute_ex != execute_ex))) {
2064 			ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
2065 			Z_ADDREF(gen_execute_data->This);
2066 		}
2067 		ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
2068 		Z_TYPE_INFO(gen_execute_data->This) = call_info;
2069 		gen_execute_data->prev_execute_data = NULL;
2070 
2071 		call_info = EX_CALL_INFO();
2072 		EG(current_execute_data) = EX(prev_execute_data);
2073 		if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
2074 			EG(vm_stack_top) = (zval*)execute_data;
2075 			execute_data = EX(prev_execute_data);
2076 			LOAD_NEXT_OPLINE();
2077 			ZEND_VM_LEAVE();
2078 		} else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
2079 			zend_execute_data *old_execute_data = execute_data;
2080 			execute_data = EX(prev_execute_data);
2081 			zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
2082 			LOAD_NEXT_OPLINE();
2083 			ZEND_VM_LEAVE();
2084 		} else {
2085 			ZEND_VM_RETURN();
2086 		}
2087 	} else {
2088 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2089 	}
2090 }
2091 
zend_cannot_pass_by_ref_helper_SPEC(uint32_t _arg_num,zval * _arg ZEND_OPCODE_HANDLER_ARGS_DC)2092 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)
2093 {
2094 	USE_OPLINE
2095 
2096 	SAVE_OPLINE();
2097 
2098 	zend_cannot_pass_by_reference(_arg_num);
2099 	FREE_OP(opline->op1_type, opline->op1.var);
2100 	ZVAL_UNDEF(_arg);
2101 	HANDLE_EXCEPTION();
2102 }
2103 
ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2104 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2105 {
2106 	USE_OPLINE
2107 	zval *args;
2108 	uint32_t arg_num;
2109 
2110 	SAVE_OPLINE();
2111 	args = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
2112 	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
2113 
2114 send_again:
2115 	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
2116 		HashTable *ht = Z_ARRVAL_P(args);
2117 		zval *arg, *top;
2118 		zend_string *name;
2119 		zend_bool have_named_params = 0;
2120 
2121 		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));
2122 
2123 		// TODO: Speed this up using a flag that specifies whether there are any ref parameters.
2124 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
2125 			uint32_t tmp_arg_num = arg_num;
2126 			bool separate = 0;
2127 
2128 			/* check if any of arguments are going to be passed by reference */
2129 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2130 				if (UNEXPECTED(name)) {
2131 					void *cache_slot[2] = {NULL, NULL};
2132 					tmp_arg_num = zend_get_arg_offset_by_name(
2133 						EX(call)->func, name, cache_slot) + 1;
2134 				}
2135 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, tmp_arg_num)) {
2136 					separate = 1;
2137 					break;
2138 				}
2139 				tmp_arg_num++;
2140 			} ZEND_HASH_FOREACH_END();
2141 			if (separate) {
2142 				SEPARATE_ARRAY(args);
2143 				ht = Z_ARRVAL_P(args);
2144 			}
2145 		}
2146 
2147 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2148 			if (UNEXPECTED(name)) {
2149 				void *cache_slot[2] = {NULL, NULL};
2150 				have_named_params = 1;
2151 				top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2152 				if (UNEXPECTED(!top)) {
2153 					FREE_OP(opline->op1_type, opline->op1.var);
2154 					HANDLE_EXCEPTION();
2155 				}
2156 			} else {
2157 				if (have_named_params) {
2158 					zend_throw_error(NULL,
2159 						"Cannot use positional argument after named argument during unpacking");
2160 					FREE_OP(opline->op1_type, opline->op1.var);
2161 					HANDLE_EXCEPTION();
2162 				}
2163 
2164 				top = ZEND_CALL_ARG(EX(call), arg_num);
2165 				ZEND_CALL_NUM_ARGS(EX(call))++;
2166 			}
2167 
2168 			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2169 				if (Z_ISREF_P(arg)) {
2170 					Z_ADDREF_P(arg);
2171 					ZVAL_REF(top, Z_REF_P(arg));
2172 				} else if (opline->op1_type & (IS_VAR|IS_CV)) {
2173 					/* array is already separated above */
2174 					ZVAL_MAKE_REF_EX(arg, 2);
2175 					ZVAL_REF(top, Z_REF_P(arg));
2176 				} else {
2177 					Z_TRY_ADDREF_P(arg);
2178 					ZVAL_NEW_REF(top, arg);
2179 				}
2180 			} else {
2181 				ZVAL_COPY_DEREF(top, arg);
2182 			}
2183 
2184 			arg_num++;
2185 		} ZEND_HASH_FOREACH_END();
2186 
2187 	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
2188 		zend_class_entry *ce = Z_OBJCE_P(args);
2189 		zend_object_iterator *iter;
2190 		zend_bool have_named_params = 0;
2191 
2192 		if (!ce || !ce->get_iterator) {
2193 			zend_type_error("Only arrays and Traversables can be unpacked");
2194 		} else {
2195 
2196 			iter = ce->get_iterator(ce, args, 0);
2197 			if (UNEXPECTED(!iter)) {
2198 				FREE_OP(opline->op1_type, opline->op1.var);
2199 				if (!EG(exception)) {
2200 					zend_throw_exception_ex(
2201 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
2202 					);
2203 				}
2204 				HANDLE_EXCEPTION();
2205 			}
2206 
2207 			if (iter->funcs->rewind) {
2208 				iter->funcs->rewind(iter);
2209 			}
2210 
2211 			for (; iter->funcs->valid(iter) == SUCCESS; ++arg_num) {
2212 				zval *arg, *top;
2213 
2214 				if (UNEXPECTED(EG(exception) != NULL)) {
2215 					break;
2216 				}
2217 
2218 				arg = iter->funcs->get_current_data(iter);
2219 				if (UNEXPECTED(EG(exception) != NULL)) {
2220 					break;
2221 				}
2222 
2223 				zend_string *name = NULL;
2224 				if (iter->funcs->get_current_key) {
2225 					zval key;
2226 					iter->funcs->get_current_key(iter, &key);
2227 					if (UNEXPECTED(EG(exception) != NULL)) {
2228 						break;
2229 					}
2230 
2231 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
2232 						if (UNEXPECTED(Z_TYPE(key) != IS_STRING)) {
2233 							zend_throw_error(NULL,
2234 								"Keys must be of type int|string during argument unpacking");
2235 							zval_ptr_dtor(&key);
2236 							break;
2237 						}
2238 
2239 						name = Z_STR_P(&key);
2240 					}
2241 				}
2242 
2243 				if (UNEXPECTED(name)) {
2244 					void *cache_slot[2] = {NULL, NULL};
2245 					have_named_params = 1;
2246 					top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2247 					if (UNEXPECTED(!top)) {
2248 						zend_string_release(name);
2249 						break;
2250 					}
2251 
2252 					ZVAL_DEREF(arg);
2253 					Z_TRY_ADDREF_P(arg);
2254 
2255 					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2256 						zend_error(
2257 							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
2258 							" by unpacking a Traversable, passing by-value instead", arg_num,
2259 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
2260 							EX(call)->func->common.scope ? "::" : "",
2261 							ZSTR_VAL(EX(call)->func->common.function_name)
2262 						);
2263 						ZVAL_NEW_REF(top, arg);
2264 					} else {
2265 						ZVAL_COPY_VALUE(top, arg);
2266 					}
2267 
2268 					zend_string_release(name);
2269 				} else {
2270 					if (have_named_params) {
2271 						zend_throw_error(NULL,
2272 							"Cannot use positional argument after named argument during unpacking");
2273 						break;
2274 					}
2275 
2276 					zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
2277 					top = ZEND_CALL_ARG(EX(call), arg_num);
2278 					ZVAL_DEREF(arg);
2279 					Z_TRY_ADDREF_P(arg);
2280 
2281 					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2282 						zend_error(
2283 							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
2284 							" by unpacking a Traversable, passing by-value instead", arg_num,
2285 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
2286 							EX(call)->func->common.scope ? "::" : "",
2287 							ZSTR_VAL(EX(call)->func->common.function_name)
2288 						);
2289 						ZVAL_NEW_REF(top, arg);
2290 					} else {
2291 						ZVAL_COPY_VALUE(top, arg);
2292 					}
2293 
2294 					ZEND_CALL_NUM_ARGS(EX(call))++;
2295 				}
2296 
2297 				iter->funcs->move_forward(iter);
2298 			}
2299 
2300 			zend_iterator_dtor(iter);
2301 		}
2302 	} else if (EXPECTED(Z_ISREF_P(args))) {
2303 		args = Z_REFVAL_P(args);
2304 		goto send_again;
2305 	} else {
2306 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
2307 			ZVAL_UNDEFINED_OP1();
2308 		}
2309 		zend_type_error("Only arrays and Traversables can be unpacked");
2310 	}
2311 
2312 	FREE_OP(opline->op1_type, opline->op1.var);
2313 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2314 }
2315 
ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2316 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2317 {
2318 	USE_OPLINE
2319 	zval *args;
2320 
2321 	SAVE_OPLINE();
2322 	args = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2323 
2324 	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
2325 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
2326 			args = Z_REFVAL_P(args);
2327 			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
2328 				goto send_array;
2329 			}
2330 		}
2331 		zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_type_name(args));
2332 		FREE_OP(opline->op2_type, opline->op2.var);
2333 		FREE_OP(opline->op1_type, opline->op1.var);
2334 		HANDLE_EXCEPTION();
2335 	} else {
2336 		uint32_t arg_num;
2337 		HashTable *ht;
2338 		zval *arg, *param;
2339 
2340 send_array:
2341 		ht = Z_ARRVAL_P(args);
2342 		if (opline->op2_type != IS_UNUSED) {
2343 			/* We don't need to handle named params in this case,
2344 			 * because array_slice() is called with $preserve_keys == false. */
2345 			zval *op2 = get_zval_ptr(opline->op2_type, opline->op2, BP_VAR_R);
2346 			uint32_t skip = opline->extended_value;
2347 			uint32_t count = zend_hash_num_elements(ht);
2348 			zend_long len = zval_get_long(op2);
2349 
2350 			if (len < 0) {
2351 				len += (zend_long)(count - skip);
2352 			}
2353 			if (skip < count && len > 0) {
2354 				if (len > (zend_long)(count - skip)) {
2355 					len = (zend_long)(count - skip);
2356 				}
2357 				zend_vm_stack_extend_call_frame(&EX(call), 0, len);
2358 				arg_num = 1;
2359 				param = ZEND_CALL_ARG(EX(call), 1);
2360 				ZEND_HASH_FOREACH_VAL(ht, arg) {
2361 					zend_bool must_wrap = 0;
2362 					if (skip > 0) {
2363 						skip--;
2364 						continue;
2365 					} else if ((zend_long)(arg_num - 1) >= len) {
2366 						break;
2367 					} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2368 						if (UNEXPECTED(!Z_ISREF_P(arg))) {
2369 							if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2370 								/* By-value send is not allowed -- emit a warning,
2371 								 * but still perform the call. */
2372 								zend_param_must_be_ref(EX(call)->func, arg_num);
2373 								must_wrap = 1;
2374 							}
2375 						}
2376 					} else {
2377 						if (Z_ISREF_P(arg) &&
2378 						    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2379 							/* don't separate references for __call */
2380 							arg = Z_REFVAL_P(arg);
2381 						}
2382 					}
2383 					if (EXPECTED(!must_wrap)) {
2384 						ZVAL_COPY(param, arg);
2385 					} else {
2386 						Z_TRY_ADDREF_P(arg);
2387 						ZVAL_NEW_REF(param, arg);
2388 					}
2389 					ZEND_CALL_NUM_ARGS(EX(call))++;
2390 					arg_num++;
2391 					param++;
2392 				} ZEND_HASH_FOREACH_END();
2393 			}
2394 			FREE_OP(opline->op2_type, opline->op2.var);
2395 		} else {
2396 			zend_string *name;
2397 			zend_bool have_named_params;
2398 			zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
2399 			arg_num = 1;
2400 			param = ZEND_CALL_ARG(EX(call), 1);
2401 			have_named_params = 0;
2402 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2403 				if (name) {
2404 					void *cache_slot[2] = {NULL, NULL};
2405 					have_named_params = 1;
2406 					param = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2407 					if (!param) {
2408 						FREE_OP(opline->op1_type, opline->op1.var);
2409 						HANDLE_EXCEPTION();
2410 					}
2411 				} else if (have_named_params) {
2412 					zend_throw_error(NULL,
2413 						"Cannot use positional argument after named argument");
2414 					FREE_OP(opline->op1_type, opline->op1.var);
2415 					HANDLE_EXCEPTION();
2416 				}
2417 
2418 				zend_bool must_wrap = 0;
2419 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2420 					if (UNEXPECTED(!Z_ISREF_P(arg))) {
2421 						if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2422 							/* By-value send is not allowed -- emit a warning,
2423 							 * but still perform the call. */
2424 							zend_param_must_be_ref(EX(call)->func, arg_num);
2425 							must_wrap = 1;
2426 						}
2427 					}
2428 				} else {
2429 					if (Z_ISREF_P(arg) &&
2430 					    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2431 						/* don't separate references for __call */
2432 						arg = Z_REFVAL_P(arg);
2433 					}
2434 				}
2435 
2436 				if (EXPECTED(!must_wrap)) {
2437 					ZVAL_COPY(param, arg);
2438 				} else {
2439 					Z_TRY_ADDREF_P(arg);
2440 					ZVAL_NEW_REF(param, arg);
2441 				}
2442 				if (!name) {
2443 					ZEND_CALL_NUM_ARGS(EX(call))++;
2444 					arg_num++;
2445 					param++;
2446 				}
2447 			} ZEND_HASH_FOREACH_END();
2448 		}
2449 	}
2450 	FREE_OP(opline->op1_type, opline->op1.var);
2451 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2452 }
2453 
zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)2454 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2455 {
2456 #ifdef ZEND_VM_IP_GLOBAL_REG
2457 	USE_OPLINE
2458 
2459 	SAVE_OPLINE();
2460 #endif
2461 	zend_missing_arg_error(execute_data);
2462 	HANDLE_EXCEPTION();
2463 }
2464 
zend_verify_recv_arg_type_helper_SPEC(zval * op_1 ZEND_OPCODE_HANDLER_ARGS_DC)2465 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_verify_recv_arg_type_helper_SPEC(zval *op_1 ZEND_OPCODE_HANDLER_ARGS_DC)
2466 {
2467 	USE_OPLINE
2468 
2469 	SAVE_OPLINE();
2470 	if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), opline->op1.num, op_1, CACHE_ADDR(opline->extended_value)))) {
2471 		HANDLE_EXCEPTION();
2472 	}
2473 
2474 	ZEND_VM_NEXT_OPCODE();
2475 }
2476 
ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2477 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2478 {
2479 	USE_OPLINE
2480 	uint32_t arg_num = opline->op1.num;
2481 
2482 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
2483 		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2484 	}
2485 
2486 	ZEND_VM_NEXT_OPCODE();
2487 }
2488 
zend_case_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)2489 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)
2490 {
2491 	int ret;
2492 	USE_OPLINE
2493 
2494 	SAVE_OPLINE();
2495 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
2496 		op_1 = ZVAL_UNDEFINED_OP1();
2497 	}
2498 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
2499 		op_2 = ZVAL_UNDEFINED_OP2();
2500 	}
2501 	ret = zend_compare(op_1, op_2);
2502 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
2503 		zval_ptr_dtor_nogc(op_2);
2504 	}
2505 	ZEND_VM_SMART_BRANCH(ret == 0, 1);
2506 }
2507 
ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2508 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2509 {
2510 	USE_OPLINE
2511 	zval *op1;
2512 
2513 	SAVE_OPLINE();
2514 	op1 = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2515 
2516 add_unpack_again:
2517 	if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
2518 		HashTable *ht = Z_ARRVAL_P(op1);
2519 		zval *val;
2520 		zend_string *key;
2521 
2522 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
2523 			if (key) {
2524 				zend_throw_error(NULL, "Cannot unpack array with string keys");
2525 				FREE_OP(opline->op1_type, opline->op1.var);
2526 				HANDLE_EXCEPTION();
2527 			} else {
2528 				if (Z_ISREF_P(val) && Z_REFCOUNT_P(val) == 1) {
2529 					val = Z_REFVAL_P(val);
2530 				}
2531 				Z_TRY_ADDREF_P(val);
2532 				if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), val)) {
2533 					zend_cannot_add_element();
2534 					zval_ptr_dtor_nogc(val);
2535 					break;
2536 				}
2537 			}
2538 		} ZEND_HASH_FOREACH_END();
2539 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
2540 		zend_class_entry *ce = Z_OBJCE_P(op1);
2541 		zend_object_iterator *iter;
2542 
2543 		if (!ce || !ce->get_iterator) {
2544 			zend_type_error("Only arrays and Traversables can be unpacked");
2545 		} else {
2546 			iter = ce->get_iterator(ce, op1, 0);
2547 			if (UNEXPECTED(!iter)) {
2548 				FREE_OP(opline->op1_type, opline->op1.var);
2549 				if (!EG(exception)) {
2550 					zend_throw_exception_ex(
2551 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
2552 					);
2553 				}
2554 				HANDLE_EXCEPTION();
2555 			}
2556 
2557 			if (iter->funcs->rewind) {
2558 				iter->funcs->rewind(iter);
2559 			}
2560 
2561 			for (; iter->funcs->valid(iter) == SUCCESS; ) {
2562 				zval *val;
2563 
2564 				if (UNEXPECTED(EG(exception) != NULL)) {
2565 					break;
2566 				}
2567 
2568 				val = iter->funcs->get_current_data(iter);
2569 				if (UNEXPECTED(EG(exception) != NULL)) {
2570 					break;
2571 				}
2572 
2573 				if (iter->funcs->get_current_key) {
2574 					zval key;
2575 					iter->funcs->get_current_key(iter, &key);
2576 					if (UNEXPECTED(EG(exception) != NULL)) {
2577 						break;
2578 					}
2579 
2580 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
2581 						zend_throw_error(NULL,
2582 							(Z_TYPE(key) == IS_STRING) ?
2583 								"Cannot unpack Traversable with string keys" :
2584 								"Cannot unpack Traversable with non-integer keys");
2585 						zval_ptr_dtor(&key);
2586 						break;
2587 					}
2588 				}
2589 
2590 				ZVAL_DEREF(val);
2591 				Z_TRY_ADDREF_P(val);
2592 
2593 				if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), val)) {
2594 					zend_cannot_add_element();
2595 					zval_ptr_dtor_nogc(val);
2596 				}
2597 
2598 				iter->funcs->move_forward(iter);
2599 			}
2600 
2601 			zend_iterator_dtor(iter);
2602 		}
2603 	} else if (EXPECTED(Z_ISREF_P(op1))) {
2604 		op1 = Z_REFVAL_P(op1);
2605 		goto add_unpack_again;
2606 	} else {
2607 		zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
2608 	}
2609 
2610 	FREE_OP(opline->op1_type, opline->op1.var);
2611 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2612 }
2613 
ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2614 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2615 {
2616 	USE_OPLINE
2617 	zval *varname;
2618 	zend_string *name, *tmp_name = NULL;
2619 	zend_class_entry *ce;
2620 
2621 	SAVE_OPLINE();
2622 
2623 	if (opline->op2_type == IS_CONST) {
2624 		ce = CACHED_PTR(opline->extended_value);
2625 		if (UNEXPECTED(ce == NULL)) {
2626 			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);
2627 			if (UNEXPECTED(ce == NULL)) {
2628 				FREE_OP(opline->op1_type, opline->op1.var);
2629 				HANDLE_EXCEPTION();
2630 			}
2631 			/*CACHE_PTR(opline->extended_value, ce);*/
2632 		}
2633 	} else if (opline->op2_type == IS_UNUSED) {
2634 		ce = zend_fetch_class(NULL, opline->op2.num);
2635 		if (UNEXPECTED(ce == NULL)) {
2636 			FREE_OP(opline->op1_type, opline->op1.var);
2637 			HANDLE_EXCEPTION();
2638 		}
2639 	} else {
2640 		ce = Z_CE_P(EX_VAR(opline->op2.var));
2641 	}
2642 
2643 	varname = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
2644 	if (opline->op1_type == IS_CONST) {
2645 		name = Z_STR_P(varname);
2646 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
2647 		name = Z_STR_P(varname);
2648 	} else {
2649 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
2650 			varname = ZVAL_UNDEFINED_OP1();
2651 		}
2652 		name = zval_try_get_tmp_string(varname, &tmp_name);
2653 		if (UNEXPECTED(!name)) {
2654 			FREE_OP(opline->op1_type, opline->op1.var);
2655 			HANDLE_EXCEPTION();
2656 		}
2657 	}
2658 
2659 	zend_std_unset_static_property(ce, name);
2660 
2661 	zend_tmp_string_release(tmp_name);
2662 	FREE_OP(opline->op1_type, opline->op1.var);
2663 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2664 }
2665 
ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2666 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2667 {
2668 	USE_OPLINE
2669 	zval *value;
2670 	zend_result fetch_result;
2671 	bool result;
2672 
2673 	SAVE_OPLINE();
2674 
2675 	fetch_result = zend_fetch_static_property_address(&value, NULL, opline->extended_value & ~ZEND_ISEMPTY, BP_VAR_IS, 0 OPLINE_CC EXECUTE_DATA_CC);
2676 
2677 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
2678 		result = fetch_result == SUCCESS && Z_TYPE_P(value) > IS_NULL &&
2679 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2680 	} else {
2681 		result = fetch_result != SUCCESS || !i_zend_is_true(value);
2682 	}
2683 
2684 	ZEND_VM_SMART_BRANCH(result, 1);
2685 }
2686 
ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2687 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2688 {
2689 	USE_OPLINE
2690 
2691 	SAVE_OPLINE();
2692 	if (opline->op1_type != IS_UNUSED) {
2693 		zval *ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2694 
2695 		do {
2696 			if (Z_TYPE_P(ptr) == IS_LONG) {
2697 				EG(exit_status) = Z_LVAL_P(ptr);
2698 			} else {
2699 				if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
2700 					ptr = Z_REFVAL_P(ptr);
2701 					if (Z_TYPE_P(ptr) == IS_LONG) {
2702 						EG(exit_status) = Z_LVAL_P(ptr);
2703 						break;
2704 					}
2705 				}
2706 				zend_print_zval(ptr, 0);
2707 			}
2708 		} while (0);
2709 		FREE_OP(opline->op1_type, opline->op1.var);
2710 	}
2711 
2712 	if (!EG(exception)) {
2713 		zend_throw_unwind_exit();
2714 	}
2715 	HANDLE_EXCEPTION();
2716 }
2717 
ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2718 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2719 {
2720 	USE_OPLINE
2721 
2722 	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));
2723 
2724 	if (!E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))) {
2725 		do {
2726 			/* Do not silence fatal errors */
2727 			EG(error_reporting) &= E_FATAL_ERRORS;
2728 			if (!EG(error_reporting_ini_entry)) {
2729 				zval *zv = zend_hash_find_ex(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), 1);
2730 				if (zv) {
2731 					EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
2732 				} else {
2733 					break;
2734 				}
2735 			}
2736 			if (!EG(error_reporting_ini_entry)->modified) {
2737 				if (!EG(modified_ini_directives)) {
2738 					ALLOC_HASHTABLE(EG(modified_ini_directives));
2739 					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
2740 				}
2741 				if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
2742 					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
2743 					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
2744 					EG(error_reporting_ini_entry)->modified = 1;
2745 				}
2746 			}
2747 		} while (0);
2748 	}
2749 	ZEND_VM_NEXT_OPCODE();
2750 }
2751 
ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2752 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2753 {
2754 	USE_OPLINE
2755 
2756 	if (!EG(no_extensions)) {
2757 		SAVE_OPLINE();
2758 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
2759 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2760 	}
2761 	ZEND_VM_NEXT_OPCODE();
2762 }
2763 
ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2764 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2765 {
2766 	USE_OPLINE
2767 
2768 	if (!EG(no_extensions)) {
2769 		SAVE_OPLINE();
2770 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
2771 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2772 	}
2773 	ZEND_VM_NEXT_OPCODE();
2774 }
2775 
ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2776 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2777 {
2778 	USE_OPLINE
2779 
2780 	if (!EG(no_extensions)) {
2781 		SAVE_OPLINE();
2782 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
2783 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2784 	}
2785 	ZEND_VM_NEXT_OPCODE();
2786 }
2787 
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2788 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2789 {
2790 	zval *zv;
2791 	zend_class_entry *ce;
2792 	USE_OPLINE
2793 
2794 	ce = CACHED_PTR(opline->extended_value);
2795 	if (UNEXPECTED(ce == NULL)) {
2796 		zend_string *rtd_key = Z_STR_P(RT_CONSTANT(opline, opline->op1));
2797 		zv = zend_hash_find_ex(EG(class_table), rtd_key, 1);
2798 		if (UNEXPECTED(zv == NULL)) {
2799 			SAVE_OPLINE();
2800 			do {
2801 				ZEND_ASSERT(EX(func)->op_array.fn_flags & ZEND_ACC_PRELOADED);
2802 				if (zend_preload_autoload
2803 				  && zend_preload_autoload(EX(func)->op_array.filename) == SUCCESS) {
2804 					zv = zend_hash_find_ex(EG(class_table), rtd_key, 1);
2805 					if (EXPECTED(zv != NULL)) {
2806 						break;
2807 					}
2808 				}
2809 				zend_error_noreturn(E_ERROR, "Anonymous class wasn't preloaded");
2810 			} while (0);
2811 		}
2812 		ZEND_ASSERT(zv != NULL);
2813 		ce = Z_CE_P(zv);
2814 		if (!(ce->ce_flags & ZEND_ACC_LINKED)) {
2815 			SAVE_OPLINE();
2816 			if (zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL) == FAILURE) {
2817 				HANDLE_EXCEPTION();
2818 			}
2819 		}
2820 		CACHE_PTR(opline->extended_value, ce);
2821 	}
2822 	Z_CE_P(EX_VAR(opline->result.var)) = ce;
2823 	ZEND_VM_NEXT_OPCODE();
2824 }
2825 
ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2826 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2827 {
2828 	USE_OPLINE
2829 
2830 	SAVE_OPLINE();
2831 	do_bind_function(RT_CONSTANT(opline, opline->op1));
2832 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2833 }
2834 
ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2835 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2836 {
2837 	USE_OPLINE
2838 
2839 	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
2840 		EG(ticks_count) = 0;
2841 		if (zend_ticks_function) {
2842 			SAVE_OPLINE();
2843 			zend_ticks_function(opline->extended_value);
2844 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2845 		}
2846 	}
2847 	ZEND_VM_NEXT_OPCODE();
2848 }
2849 
ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2850 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2851 {
2852 	USE_OPLINE
2853 
2854 	ZEND_VM_NEXT_OPCODE();
2855 }
2856 
ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2857 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2858 {
2859 	USE_OPLINE
2860 
2861 	ZEND_VM_NEXT_OPCODE();
2862 }
2863 
zend_dispatch_try_catch_finally_helper_SPEC(uint32_t try_catch_offset,uint32_t op_num ZEND_OPCODE_HANDLER_ARGS_DC)2864 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)
2865 {
2866 	/* May be NULL during generator closing (only finally blocks are executed) */
2867 	zend_object *ex = EG(exception);
2868 
2869 	/* Walk try/catch/finally structures upwards, performing the necessary actions */
2870 	for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
2871 		zend_try_catch_element *try_catch =
2872 			&EX(func)->op_array.try_catch_array[try_catch_offset];
2873 
2874 		if (op_num < try_catch->catch_op && ex) {
2875 			/* Go to catch block */
2876 			cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
2877 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);
2878 
2879 		} else if (op_num < try_catch->finally_op) {
2880 			if (ex && zend_is_unwind_exit(ex)) {
2881 				/* Don't execute finally blocks on exit (for now) */
2882 				continue;
2883 			}
2884 
2885 			/* Go to finally block */
2886 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
2887 			cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
2888 			Z_OBJ_P(fast_call) = EG(exception);
2889 			EG(exception) = NULL;
2890 			Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
2891 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);
2892 
2893 		} else if (op_num < try_catch->finally_end) {
2894 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
2895 
2896 			/* cleanup incomplete RETURN statement */
2897 			if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
2898 			 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
2899 				zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
2900 
2901 				zval_ptr_dtor(return_value);
2902 			}
2903 
2904 			/* Chain potential exception from wrapping finally block */
2905 			if (Z_OBJ_P(fast_call)) {
2906 				if (ex) {
2907 					zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
2908 				} else {
2909 					ex = EG(exception) = Z_OBJ_P(fast_call);
2910 				}
2911 			}
2912 		}
2913 	}
2914 
2915 	/* Uncaught exception */
2916 	if (zend_observer_fcall_op_array_extension != -1) {
2917 		zend_observer_fcall_end(execute_data, NULL);
2918 	}
2919 	cleanup_live_vars(execute_data, op_num, 0);
2920 	if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
2921 		zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
2922 		zend_generator_close(generator, 1);
2923 		ZEND_VM_RETURN();
2924 	} else {
2925 		/* We didn't execute RETURN, and have to initialize return_value */
2926 		if (EX(return_value)) {
2927 			ZVAL_UNDEF(EX(return_value));
2928 		}
2929 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2930 	}
2931 }
2932 
ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2933 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2934 {
2935 	const zend_op *throw_op = EG(opline_before_exception);
2936 	uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
2937 	int i, current_try_catch_offset = -1;
2938 
2939 	if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
2940 		&& throw_op->extended_value & ZEND_FREE_ON_RETURN) {
2941 		/* exceptions thrown because of loop var destruction on return/break/...
2942 		 * are logically thrown at the end of the foreach loop, so adjust the
2943 		 * throw_op_num.
2944 		 */
2945 		const zend_live_range *range = find_live_range(
2946 			&EX(func)->op_array, throw_op_num, throw_op->op1.var);
2947 		/* free op1 of the corresponding RETURN */
2948 		for (i = throw_op_num; i < range->end; i++) {
2949 			if (EX(func)->op_array.opcodes[i].opcode == ZEND_FREE
2950 			 || EX(func)->op_array.opcodes[i].opcode == ZEND_FE_FREE) {
2951 				/* pass */
2952 			} else {
2953 				if (EX(func)->op_array.opcodes[i].opcode == ZEND_RETURN
2954 				 && (EX(func)->op_array.opcodes[i].op1_type & (IS_VAR|IS_TMP_VAR))) {
2955 					zval_ptr_dtor(EX_VAR(EX(func)->op_array.opcodes[i].op1.var));
2956 				}
2957 				break;
2958 			}
2959 		}
2960 		throw_op_num = range->end;
2961 	}
2962 
2963 	/* Find the innermost try/catch/finally the exception was thrown in */
2964 	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
2965 		zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
2966 		if (try_catch->try_op > throw_op_num) {
2967 			/* further blocks will not be relevant... */
2968 			break;
2969 		}
2970 		if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
2971 			current_try_catch_offset = i;
2972 		}
2973 	}
2974 
2975 	cleanup_unfinished_calls(execute_data, throw_op_num);
2976 
2977 	if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
2978 		switch (throw_op->opcode) {
2979 			case ZEND_ADD_ARRAY_ELEMENT:
2980 			case ZEND_ADD_ARRAY_UNPACK:
2981 			case ZEND_ROPE_INIT:
2982 			case ZEND_ROPE_ADD:
2983 				break; /* exception while building structures, live range handling will free those */
2984 
2985 			case ZEND_FETCH_CLASS:
2986 			case ZEND_DECLARE_ANON_CLASS:
2987 				break; /* return value is zend_class_entry pointer */
2988 
2989 			default:
2990 				/* smart branch opcodes may not initialize result */
2991 				if (!zend_is_smart_branch(throw_op)) {
2992 					zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
2993 				}
2994 		}
2995 	}
2996 
2997 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
2998 }
2999 
ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3000 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3001 {
3002 	USE_OPLINE
3003 	int ret;
3004 
3005 	SAVE_OPLINE();
3006 	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
3007 	opline = EX(opline);
3008 
3009 	switch (ret) {
3010 		case ZEND_USER_OPCODE_CONTINUE:
3011 			ZEND_VM_CONTINUE();
3012 		case ZEND_USER_OPCODE_RETURN:
3013 			if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
3014 				zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3015 				zend_generator_close(generator, 1);
3016 				ZEND_VM_RETURN();
3017 			} else {
3018 				ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3019 			}
3020 		case ZEND_USER_OPCODE_ENTER:
3021 			ZEND_VM_ENTER();
3022 		case ZEND_USER_OPCODE_LEAVE:
3023 			ZEND_VM_LEAVE();
3024 		case ZEND_USER_OPCODE_DISPATCH:
3025 			ZEND_VM_DISPATCH(opline->opcode, opline);
3026 		default:
3027 			ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
3028 	}
3029 }
3030 
zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)3031 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
3032 {
3033 	USE_OPLINE
3034 
3035 	SAVE_OPLINE();
3036 	zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
3037 	FREE_OP(opline->op2_type, opline->op2.var);
3038 	FREE_OP(opline->op1_type, opline->op1.var);
3039 	UNDEF_RESULT();
3040 	HANDLE_EXCEPTION();
3041 }
3042 
ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3043 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3044 {
3045 	USE_OPLINE
3046 	zval *fast_call = EX_VAR(opline->op1.var);
3047 	SAVE_OPLINE();
3048 
3049 	/* cleanup incomplete RETURN statement */
3050 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
3051 	 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
3052 		zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
3053 
3054 		zval_ptr_dtor(return_value);
3055 	}
3056 
3057 	/* cleanup delayed exception */
3058 	if (Z_OBJ_P(fast_call) != NULL) {
3059 		/* discard the previously thrown exception */
3060 		OBJ_RELEASE(Z_OBJ_P(fast_call));
3061 		Z_OBJ_P(fast_call) = NULL;
3062 	}
3063 
3064 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3065 }
3066 
ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3067 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3068 {
3069 	USE_OPLINE
3070 	zval *fast_call = EX_VAR(opline->result.var);
3071 
3072 	Z_OBJ_P(fast_call) = NULL;
3073 	/* set return address */
3074 	Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
3075 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
3076 }
3077 
ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3078 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3079 {
3080 	USE_OPLINE
3081 	zval *fast_call = EX_VAR(opline->op1.var);
3082 	uint32_t current_try_catch_offset, current_op_num;
3083 
3084 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
3085 		const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);
3086 
3087 		ZEND_VM_JMP_EX(fast_ret + 1, 0);
3088 	}
3089 
3090 	/* special case for unhandled exceptions */
3091 	EG(exception) = Z_OBJ_P(fast_call);
3092 	Z_OBJ_P(fast_call) = NULL;
3093 	current_try_catch_offset = opline->op2.num;
3094 	current_op_num = opline - EX(func)->op_array.opcodes;
3095 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3096 }
3097 
ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3098 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3099 {
3100 	USE_OPLINE
3101 
3102 	if (EG(assertions) <= 0) {
3103 		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
3104 		if (RETURN_VALUE_USED(opline)) {
3105 			ZVAL_TRUE(EX_VAR(opline->result.var));
3106 		}
3107 		ZEND_VM_JMP_EX(target, 0);
3108 	} else {
3109 		ZEND_VM_NEXT_OPCODE();
3110 	}
3111 }
3112 
ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3114 {
3115 	zend_array *args = NULL;
3116 	zend_function *fbc = EX(func);
3117 	zval *ret = EX(return_value);
3118 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
3119 	uint32_t num_args = EX_NUM_ARGS();
3120 	zend_execute_data *call;
3121 
3122 	SAVE_OPLINE();
3123 
3124 	if (num_args) {
3125 		zval *p = ZEND_CALL_ARG(execute_data, 1);
3126 		zval *end = p + num_args;
3127 
3128 		args = zend_new_array(num_args);
3129 		zend_hash_real_init_packed(args);
3130 		ZEND_HASH_FILL_PACKED(args) {
3131 			do {
3132 				ZEND_HASH_FILL_ADD(p);
3133 				p++;
3134 			} while (p != end);
3135 		} ZEND_HASH_FILL_END();
3136 	}
3137 
3138 	call = execute_data;
3139 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
3140 
3141 	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
3142 	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
3143 	ZEND_CALL_NUM_ARGS(call) = 2;
3144 
3145 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
3146 
3147 	zval *call_args = ZEND_CALL_ARG(call, 2);
3148 	if (args) {
3149 		ZVAL_ARR(call_args, args);
3150 	} else {
3151 		ZVAL_EMPTY_ARRAY(call_args);
3152 	}
3153 	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3154 		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
3155 			GC_ADDREF(call->extra_named_params);
3156 			ZVAL_ARR(call_args, call->extra_named_params);
3157 		} else {
3158 			SEPARATE_ARRAY(call_args);
3159 			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
3160 		}
3161 	}
3162 	zend_free_trampoline(fbc);
3163 	fbc = call->func;
3164 
3165 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
3166 		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3167 			init_func_run_time_cache(&fbc->op_array);
3168 		}
3169 		execute_data = call;
3170 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3171 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3172 			LOAD_OPLINE_EX();
3173 
3174 
3175 			ZEND_VM_ENTER_EX();
3176 		} else {
3177 			SAVE_OPLINE_EX();
3178 
3179 			execute_data = EX(prev_execute_data);
3180 			LOAD_OPLINE();
3181 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3182 			zend_execute_ex(call);
3183 		}
3184 	} else {
3185 		zval retval;
3186 
3187 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
3188 
3189 		EG(current_execute_data) = call;
3190 
3191 #if ZEND_DEBUG
3192 		zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
3193 #endif
3194 
3195 		if (ret == NULL) {
3196 			ret = &retval;
3197 		}
3198 
3199 		ZVAL_NULL(ret);
3200 		if (!zend_execute_internal) {
3201 			/* saves one function call if zend_execute_internal is not used */
3202 			fbc->internal_function.handler(call, ret);
3203 		} else {
3204 			zend_execute_internal(call, ret);
3205 		}
3206 
3207 #if ZEND_DEBUG
3208 		if (!EG(exception) && call->func) {
3209 			if (should_throw) {
3210 				zend_internal_call_arginfo_violation(call->func);
3211 			}
3212 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
3213 				zend_verify_internal_return_type(call->func, ret));
3214 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
3215 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
3216 		}
3217 #endif
3218 
3219 		EG(current_execute_data) = call->prev_execute_data;
3220 
3221 		zend_vm_stack_free_args(call);
3222 		if (ret == &retval) {
3223 			zval_ptr_dtor(ret);
3224 		}
3225 	}
3226 
3227 	execute_data = EG(current_execute_data);
3228 
3229 	if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
3230 		ZEND_VM_RETURN();
3231 	}
3232 
3233 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
3234 		zend_object *object = Z_OBJ(call->This);
3235 		OBJ_RELEASE(object);
3236 	}
3237 	zend_vm_stack_free_call_frame(call);
3238 
3239 	if (UNEXPECTED(EG(exception) != NULL)) {
3240 		zend_rethrow_exception(execute_data);
3241 		HANDLE_EXCEPTION_LEAVE();
3242 	}
3243 
3244 	LOAD_OPLINE();
3245 	ZEND_VM_INC_OPCODE();
3246 	ZEND_VM_LEAVE();
3247 }
3248 
ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3249 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3250 {
3251 	zend_array *args = NULL;
3252 	zend_function *fbc = EX(func);
3253 	zval *ret = EX(return_value);
3254 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
3255 	uint32_t num_args = EX_NUM_ARGS();
3256 	zend_execute_data *call;
3257 
3258 	SAVE_OPLINE();
3259 
3260 	if (num_args) {
3261 		zval *p = ZEND_CALL_ARG(execute_data, 1);
3262 		zval *end = p + num_args;
3263 
3264 		args = zend_new_array(num_args);
3265 		zend_hash_real_init_packed(args);
3266 		ZEND_HASH_FILL_PACKED(args) {
3267 			do {
3268 				ZEND_HASH_FILL_ADD(p);
3269 				p++;
3270 			} while (p != end);
3271 		} ZEND_HASH_FILL_END();
3272 	}
3273 
3274 	call = execute_data;
3275 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
3276 
3277 	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
3278 	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
3279 	ZEND_CALL_NUM_ARGS(call) = 2;
3280 
3281 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
3282 
3283 	zval *call_args = ZEND_CALL_ARG(call, 2);
3284 	if (args) {
3285 		ZVAL_ARR(call_args, args);
3286 	} else {
3287 		ZVAL_EMPTY_ARRAY(call_args);
3288 	}
3289 	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3290 		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
3291 			GC_ADDREF(call->extra_named_params);
3292 			ZVAL_ARR(call_args, call->extra_named_params);
3293 		} else {
3294 			SEPARATE_ARRAY(call_args);
3295 			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
3296 		}
3297 	}
3298 	zend_free_trampoline(fbc);
3299 	fbc = call->func;
3300 
3301 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
3302 		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3303 			init_func_run_time_cache(&fbc->op_array);
3304 		}
3305 		execute_data = call;
3306 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3307 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3308 			LOAD_OPLINE_EX();
3309 			SAVE_OPLINE();
3310 			zend_observer_fcall_begin(execute_data);
3311 			ZEND_VM_ENTER_EX();
3312 		} else {
3313 			SAVE_OPLINE_EX();
3314 			zend_observer_fcall_begin(execute_data);
3315 			execute_data = EX(prev_execute_data);
3316 			LOAD_OPLINE();
3317 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3318 			zend_execute_ex(call);
3319 		}
3320 	} else {
3321 		zval retval;
3322 
3323 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
3324 
3325 		EG(current_execute_data) = call;
3326 
3327 #if ZEND_DEBUG
3328 		zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
3329 #endif
3330 
3331 		if (ret == NULL) {
3332 			ret = &retval;
3333 		}
3334 
3335 		ZVAL_NULL(ret);
3336 		if (!zend_execute_internal) {
3337 			/* saves one function call if zend_execute_internal is not used */
3338 			fbc->internal_function.handler(call, ret);
3339 		} else {
3340 			zend_execute_internal(call, ret);
3341 		}
3342 
3343 #if ZEND_DEBUG
3344 		if (!EG(exception) && call->func) {
3345 			if (should_throw) {
3346 				zend_internal_call_arginfo_violation(call->func);
3347 			}
3348 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
3349 				zend_verify_internal_return_type(call->func, ret));
3350 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
3351 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
3352 		}
3353 #endif
3354 
3355 		EG(current_execute_data) = call->prev_execute_data;
3356 
3357 		zend_vm_stack_free_args(call);
3358 		if (ret == &retval) {
3359 			zval_ptr_dtor(ret);
3360 		}
3361 	}
3362 
3363 	execute_data = EG(current_execute_data);
3364 
3365 	if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
3366 		ZEND_VM_RETURN();
3367 	}
3368 
3369 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
3370 		zend_object *object = Z_OBJ(call->This);
3371 		OBJ_RELEASE(object);
3372 	}
3373 	zend_vm_stack_free_call_frame(call);
3374 
3375 	if (UNEXPECTED(EG(exception) != NULL)) {
3376 		zend_rethrow_exception(execute_data);
3377 		HANDLE_EXCEPTION_LEAVE();
3378 	}
3379 
3380 	LOAD_OPLINE();
3381 	ZEND_VM_INC_OPCODE();
3382 	ZEND_VM_LEAVE();
3383 }
3384 
ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3385 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3386 {
3387 	USE_OPLINE
3388 
3389 	OPLINE = OP_JMP_ADDR(opline, opline->op1);
3390 	ZEND_VM_CONTINUE();
3391 }
3392 
zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)3393 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
3394 {
3395 	EG(vm_interrupt) = 0;
3396 	SAVE_OPLINE();
3397 	if (EG(timed_out)) {
3398 		zend_timeout();
3399 	} else if (zend_interrupt_function) {
3400 		zend_interrupt_function(execute_data);
3401 		if (EG(exception)) {
3402 			/* We have to UNDEF result, because ZEND_HANDLE_EXCEPTION is going to free it */
3403 			const zend_op *throw_op = EG(opline_before_exception);
3404 
3405 			if (throw_op
3406 			 && throw_op->result_type & (IS_TMP_VAR|IS_VAR)
3407 			 && throw_op->opcode != ZEND_ADD_ARRAY_ELEMENT
3408 			 && throw_op->opcode != ZEND_ADD_ARRAY_UNPACK
3409 			 && throw_op->opcode != ZEND_ROPE_INIT
3410 			 && throw_op->opcode != ZEND_ROPE_ADD) {
3411 				ZVAL_UNDEF(ZEND_CALL_VAR(EG(current_execute_data), throw_op->result.var));
3412 
3413 			}
3414 		}
3415 		ZEND_VM_ENTER();
3416 	}
3417 	ZEND_VM_CONTINUE();
3418 }
ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3419 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3420 {
3421 	USE_OPLINE
3422 	zend_function *fbc;
3423 	zval *function_name, *func;
3424 	zend_execute_data *call;
3425 
3426 	fbc = CACHED_PTR(opline->result.num);
3427 	if (UNEXPECTED(fbc == NULL)) {
3428 		function_name = (zval*)RT_CONSTANT(opline, opline->op2);
3429 		func = zend_hash_find_ex(EG(function_table), Z_STR_P(function_name+1), 1);
3430 		if (UNEXPECTED(func == NULL)) {
3431 			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3432 		}
3433 		fbc = Z_FUNC_P(func);
3434 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3435 			init_func_run_time_cache(&fbc->op_array);
3436 		}
3437 		CACHE_PTR(opline->result.num, fbc);
3438 	}
3439 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
3440 		fbc, opline->extended_value, NULL);
3441 	call->prev_execute_data = EX(call);
3442 	EX(call) = call;
3443 
3444 	ZEND_VM_NEXT_OPCODE();
3445 }
3446 
ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3447 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3448 {
3449 	USE_OPLINE
3450 	zval *function_name;
3451 	zend_execute_data *call;
3452 
3453 	SAVE_OPLINE();
3454 	function_name = RT_CONSTANT(opline, opline->op2);
3455 
3456 try_function_name:
3457 	if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3458 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3459 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3460 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
3461 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3462 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3463 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3464 		function_name = Z_REFVAL_P(function_name);
3465 		goto try_function_name;
3466 	} else {
3467 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3468 			function_name = ZVAL_UNDEFINED_OP2();
3469 			if (UNEXPECTED(EG(exception) != NULL)) {
3470 				HANDLE_EXCEPTION();
3471 			}
3472 		}
3473 		zend_throw_error(NULL, "Value of type %s is not callable",
3474 			zend_zval_type_name(function_name));
3475 		call = NULL;
3476 	}
3477 
3478 	if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
3479 
3480 		if (UNEXPECTED(EG(exception))) {
3481 			if (call) {
3482 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3483 					zend_string_release_ex(call->func->common.function_name, 0);
3484 					zend_free_trampoline(call->func);
3485 				}
3486 				zend_vm_stack_free_call_frame(call);
3487 			}
3488 			HANDLE_EXCEPTION();
3489 		}
3490 	} else if (!call) {
3491 		HANDLE_EXCEPTION();
3492 	}
3493 
3494 	call->prev_execute_data = EX(call);
3495 	EX(call) = call;
3496 
3497 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3498 }
3499 
ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3500 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3501 {
3502 	USE_OPLINE
3503 	zval *func_name;
3504 	zval *func;
3505 	zend_function *fbc;
3506 	zend_execute_data *call;
3507 
3508 	fbc = CACHED_PTR(opline->result.num);
3509 	if (UNEXPECTED(fbc == NULL)) {
3510 		func_name = (zval *)RT_CONSTANT(opline, opline->op2);
3511 		func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 1), 1);
3512 		if (func == NULL) {
3513 			func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 2), 1);
3514 			if (UNEXPECTED(func == NULL)) {
3515 				ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3516 			}
3517 		}
3518 		fbc = Z_FUNC_P(func);
3519 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3520 			init_func_run_time_cache(&fbc->op_array);
3521 		}
3522 		CACHE_PTR(opline->result.num, fbc);
3523 	}
3524 
3525 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
3526 		fbc, opline->extended_value, NULL);
3527 	call->prev_execute_data = EX(call);
3528 	EX(call) = call;
3529 
3530 	ZEND_VM_NEXT_OPCODE();
3531 }
3532 
ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3533 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3534 {
3535 	USE_OPLINE
3536 	zval *fname;
3537 	zval *func;
3538 	zend_function *fbc;
3539 	zend_execute_data *call;
3540 
3541 	fbc = CACHED_PTR(opline->result.num);
3542 	if (UNEXPECTED(fbc == NULL)) {
3543 		fname = (zval*)RT_CONSTANT(opline, opline->op2);
3544 		func = zend_hash_find_ex(EG(function_table), Z_STR_P(fname), 1);
3545 		if (UNEXPECTED(func == NULL)) {
3546 			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3547 		}
3548 		fbc = Z_FUNC_P(func);
3549 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3550 			init_func_run_time_cache(&fbc->op_array);
3551 		}
3552 		CACHE_PTR(opline->result.num, fbc);
3553 	}
3554 
3555 	call = _zend_vm_stack_push_call_frame_ex(
3556 		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
3557 		fbc, opline->extended_value, NULL);
3558 	call->prev_execute_data = EX(call);
3559 	EX(call) = call;
3560 
3561 	ZEND_VM_NEXT_OPCODE();
3562 }
3563 
ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3564 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3565 {
3566 	USE_OPLINE
3567 	uint32_t arg_num;
3568 	zval *param;
3569 
3570 	ZEND_VM_REPEATABLE_OPCODE
3571 
3572 	arg_num = opline->op1.num;
3573 	param = EX_VAR(opline->result.var);
3574 	if (arg_num > EX_NUM_ARGS()) {
3575 		zval *default_value = RT_CONSTANT(opline, opline->op2);
3576 
3577 		if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
3578 			zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));
3579 
3580 			/* we keep in cache only not refcounted values */
3581 			if (Z_TYPE_P(cache_val) != IS_UNDEF) {
3582 				ZVAL_COPY_VALUE(param, cache_val);
3583 			} else {
3584 				SAVE_OPLINE();
3585 				ZVAL_COPY(param, default_value);
3586 				if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) {
3587 					zval_ptr_dtor_nogc(param);
3588 					ZVAL_UNDEF(param);
3589 					HANDLE_EXCEPTION();
3590 				}
3591 				if (!Z_REFCOUNTED_P(param)) {
3592 					ZVAL_COPY_VALUE(cache_val, param);
3593 				}
3594 			}
3595 			goto recv_init_check_type;
3596 		} else {
3597 			ZVAL_COPY(param, default_value);
3598 		}
3599 	} else {
3600 recv_init_check_type:
3601 		if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
3602 			SAVE_OPLINE();
3603 			if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
3604 				HANDLE_EXCEPTION();
3605 			}
3606 		}
3607 	}
3608 
3609 	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
3610 	ZEND_VM_NEXT_OPCODE();
3611 }
3612 
ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3613 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3614 {
3615 	USE_OPLINE
3616 	zval *function_name;
3617 	zend_execute_data *call;
3618 
3619 	SAVE_OPLINE();
3620 	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
3621 
3622 try_function_name:
3623 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3624 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3625 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3626 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
3627 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3628 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3629 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3630 		function_name = Z_REFVAL_P(function_name);
3631 		goto try_function_name;
3632 	} else {
3633 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3634 			function_name = ZVAL_UNDEFINED_OP2();
3635 			if (UNEXPECTED(EG(exception) != NULL)) {
3636 				HANDLE_EXCEPTION();
3637 			}
3638 		}
3639 		zend_throw_error(NULL, "Value of type %s is not callable",
3640 			zend_zval_type_name(function_name));
3641 		call = NULL;
3642 	}
3643 
3644 	if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
3645 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
3646 		if (UNEXPECTED(EG(exception))) {
3647 			if (call) {
3648 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3649 					zend_string_release_ex(call->func->common.function_name, 0);
3650 					zend_free_trampoline(call->func);
3651 				}
3652 				zend_vm_stack_free_call_frame(call);
3653 			}
3654 			HANDLE_EXCEPTION();
3655 		}
3656 	} else if (!call) {
3657 		HANDLE_EXCEPTION();
3658 	}
3659 
3660 	call->prev_execute_data = EX(call);
3661 	EX(call) = call;
3662 
3663 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3664 }
3665 
ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3666 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3667 {
3668 	USE_OPLINE
3669 	uint32_t arg_num = opline->op1.num;
3670 	zval *param;
3671 
3672 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
3673 		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3674 	}
3675 
3676 	param = EX_VAR(opline->result.var);
3677 
3678 	if (UNEXPECTED(!(opline->op2.num & (1u << Z_TYPE_P(param))))) {
3679 		ZEND_VM_TAIL_CALL(zend_verify_recv_arg_type_helper_SPEC(param ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3680 	}
3681 
3682 	ZEND_VM_NEXT_OPCODE();
3683 }
3684 
ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3685 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3686 {
3687 	USE_OPLINE
3688 	uint32_t arg_num = opline->op1.num;
3689 	uint32_t arg_count = EX_NUM_ARGS();
3690 	zval *params;
3691 
3692 	SAVE_OPLINE();
3693 
3694 	params = EX_VAR(opline->result.var);
3695 
3696 	if (arg_num <= arg_count) {
3697 		ZEND_ASSERT(EX(func)->common.fn_flags & ZEND_ACC_VARIADIC);
3698 		ZEND_ASSERT(EX(func)->common.num_args == arg_num - 1);
3699 		zend_arg_info *arg_info = &EX(func)->common.arg_info[arg_num - 1];
3700 
3701 		array_init_size(params, arg_count - arg_num + 1);
3702 		zend_hash_real_init_packed(Z_ARRVAL_P(params));
3703 		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
3704 			zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
3705 			if (UNEXPECTED(ZEND_TYPE_IS_SET(arg_info->type))) {
3706 				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
3707 				do {
3708 					if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
3709 						ZEND_HASH_FILL_FINISH();
3710 						HANDLE_EXCEPTION();
3711 					}
3712 
3713 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
3714 					ZEND_HASH_FILL_ADD(param);
3715 					param++;
3716 				} while (++arg_num <= arg_count);
3717 			} else {
3718 				do {
3719 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
3720 					ZEND_HASH_FILL_ADD(param);
3721 					param++;
3722 				} while (++arg_num <= arg_count);
3723 			}
3724 		} ZEND_HASH_FILL_END();
3725 	} else {
3726 		ZVAL_EMPTY_ARRAY(params);
3727 	}
3728 
3729 	if (EX_CALL_INFO() & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
3730 		zend_string *name;
3731 		zval *param;
3732 		zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
3733 		if (ZEND_TYPE_IS_SET(arg_info->type)) {
3734 			SEPARATE_ARRAY(params);
3735 			ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
3736 				if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
3737 					HANDLE_EXCEPTION();
3738 				}
3739 				Z_TRY_ADDREF_P(param);
3740 				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
3741 			} ZEND_HASH_FOREACH_END();
3742 		} else if (zend_hash_num_elements(Z_ARRVAL_P(params)) == 0) {
3743 			GC_ADDREF(EX(extra_named_params));
3744 			ZVAL_ARR(params, EX(extra_named_params));
3745 		} else {
3746 			SEPARATE_ARRAY(params);
3747 			ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
3748 				Z_TRY_ADDREF_P(param);
3749 				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
3750 			} ZEND_HASH_FOREACH_END();
3751 		}
3752 	}
3753 
3754 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3755 }
3756 
ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3757 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3758 {
3759 	USE_OPLINE
3760 	zval *function_name;
3761 	zend_execute_data *call;
3762 
3763 	SAVE_OPLINE();
3764 	function_name = EX_VAR(opline->op2.var);
3765 
3766 try_function_name:
3767 	if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3768 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3769 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3770 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
3771 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3772 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3773 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3774 		function_name = Z_REFVAL_P(function_name);
3775 		goto try_function_name;
3776 	} else {
3777 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3778 			function_name = ZVAL_UNDEFINED_OP2();
3779 			if (UNEXPECTED(EG(exception) != NULL)) {
3780 				HANDLE_EXCEPTION();
3781 			}
3782 		}
3783 		zend_throw_error(NULL, "Value of type %s is not callable",
3784 			zend_zval_type_name(function_name));
3785 		call = NULL;
3786 	}
3787 
3788 	if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
3789 
3790 		if (UNEXPECTED(EG(exception))) {
3791 			if (call) {
3792 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3793 					zend_string_release_ex(call->func->common.function_name, 0);
3794 					zend_free_trampoline(call->func);
3795 				}
3796 				zend_vm_stack_free_call_frame(call);
3797 			}
3798 			HANDLE_EXCEPTION();
3799 		}
3800 	} else if (!call) {
3801 		HANDLE_EXCEPTION();
3802 	}
3803 
3804 	call->prev_execute_data = EX(call);
3805 	EX(call) = call;
3806 
3807 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3808 }
3809 
ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3810 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3811 {
3812 	USE_OPLINE
3813 	zval *op1;
3814 
3815 	op1 = RT_CONSTANT(opline, opline->op1);
3816 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
3817 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
3818 		ZEND_VM_NEXT_OPCODE();
3819 	}
3820 
3821 	ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3822 }
3823 
ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3824 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3825 {
3826 	USE_OPLINE
3827 	zval *val;
3828 
3829 	val = RT_CONSTANT(opline, opline->op1);
3830 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3831 		ZVAL_FALSE(EX_VAR(opline->result.var));
3832 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3833 		/* The result and op1 can be the same cv zval */
3834 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
3835 		ZVAL_TRUE(EX_VAR(opline->result.var));
3836 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
3837 			SAVE_OPLINE();
3838 			ZVAL_UNDEFINED_OP1();
3839 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3840 		}
3841 	} else {
3842 		SAVE_OPLINE();
3843 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
3844 
3845 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3846 	}
3847 	ZEND_VM_NEXT_OPCODE();
3848 }
3849 
ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3851 {
3852 	USE_OPLINE
3853 	zval *z;
3854 
3855 	SAVE_OPLINE();
3856 	z = RT_CONSTANT(opline, opline->op1);
3857 
3858 	if (Z_TYPE_P(z) == IS_STRING) {
3859 		zend_string *str = Z_STR_P(z);
3860 
3861 		if (ZSTR_LEN(str) != 0) {
3862 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
3863 		}
3864 	} else {
3865 		zend_string *str = zval_get_string_func(z);
3866 
3867 		if (ZSTR_LEN(str) != 0) {
3868 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
3869 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
3870 			ZVAL_UNDEFINED_OP1();
3871 		}
3872 		zend_string_release_ex(str, 0);
3873 	}
3874 
3875 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3876 }
3877 
ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3878 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3879 {
3880 	USE_OPLINE
3881 	zval *val;
3882 	zend_uchar op1_type;
3883 
3884 	val = RT_CONSTANT(opline, opline->op1);
3885 
3886 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3887 		ZEND_VM_NEXT_OPCODE();
3888 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3889 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3890 			SAVE_OPLINE();
3891 			ZVAL_UNDEFINED_OP1();
3892 			if (UNEXPECTED(EG(exception))) {
3893 				HANDLE_EXCEPTION();
3894 			}
3895 		}
3896 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3897 	}
3898 
3899 	SAVE_OPLINE();
3900 	op1_type = IS_CONST;
3901 	if (i_zend_is_true(val)) {
3902 		opline++;
3903 	} else {
3904 		opline = OP_JMP_ADDR(opline, opline->op2);
3905 	}
3906 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
3907 		zval_ptr_dtor_nogc(val);
3908 	}
3909 	ZEND_VM_JMP(opline);
3910 }
3911 
ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3912 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3913 {
3914 	USE_OPLINE
3915 	zval *val;
3916 	zend_uchar op1_type;
3917 
3918 	val = RT_CONSTANT(opline, opline->op1);
3919 
3920 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3921 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3922 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3923 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3924 			SAVE_OPLINE();
3925 			ZVAL_UNDEFINED_OP1();
3926 			if (UNEXPECTED(EG(exception))) {
3927 				HANDLE_EXCEPTION();
3928 			}
3929 		}
3930 		ZEND_VM_NEXT_OPCODE();
3931 	}
3932 
3933 	SAVE_OPLINE();
3934 	op1_type = IS_CONST;
3935 	if (i_zend_is_true(val)) {
3936 		opline = OP_JMP_ADDR(opline, opline->op2);
3937 	} else {
3938 		opline++;
3939 	}
3940 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
3941 		zval_ptr_dtor_nogc(val);
3942 	}
3943 	ZEND_VM_JMP(opline);
3944 }
3945 
ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3946 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3947 {
3948 	USE_OPLINE
3949 	zval *val;
3950 	zend_uchar op1_type;
3951 
3952 	val = RT_CONSTANT(opline, opline->op1);
3953 
3954 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
3955 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
3956 		ZEND_VM_CONTINUE();
3957 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3958 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3959 			SAVE_OPLINE();
3960 			ZVAL_UNDEFINED_OP1();
3961 			if (UNEXPECTED(EG(exception))) {
3962 				HANDLE_EXCEPTION();
3963 			}
3964 		}
3965 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3966 	}
3967 
3968 	SAVE_OPLINE();
3969 	op1_type = IS_CONST;
3970 	if (i_zend_is_true(val)) {
3971 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
3972 	} else {
3973 		opline = OP_JMP_ADDR(opline, opline->op2);
3974 	}
3975 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
3976 		zval_ptr_dtor_nogc(val);
3977 	}
3978 	ZEND_VM_JMP(opline);
3979 }
3980 
ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3981 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3982 {
3983 	USE_OPLINE
3984 	zval *val;
3985 	bool ret;
3986 
3987 	val = RT_CONSTANT(opline, opline->op1);
3988 
3989 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3990 		ZVAL_TRUE(EX_VAR(opline->result.var));
3991 		ZEND_VM_NEXT_OPCODE();
3992 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3993 		ZVAL_FALSE(EX_VAR(opline->result.var));
3994 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3995 			SAVE_OPLINE();
3996 			ZVAL_UNDEFINED_OP1();
3997 			if (UNEXPECTED(EG(exception))) {
3998 				HANDLE_EXCEPTION();
3999 			}
4000 		}
4001 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4002 	}
4003 
4004 	SAVE_OPLINE();
4005 	ret = i_zend_is_true(val);
4006 
4007 	if (ret) {
4008 		ZVAL_TRUE(EX_VAR(opline->result.var));
4009 		opline++;
4010 	} else {
4011 		ZVAL_FALSE(EX_VAR(opline->result.var));
4012 		opline = OP_JMP_ADDR(opline, opline->op2);
4013 	}
4014 	ZEND_VM_JMP(opline);
4015 }
4016 
ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4017 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4018 {
4019 	USE_OPLINE
4020 	zval *val;
4021 	bool ret;
4022 
4023 	val = RT_CONSTANT(opline, opline->op1);
4024 
4025 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4026 		ZVAL_TRUE(EX_VAR(opline->result.var));
4027 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4028 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4029 		ZVAL_FALSE(EX_VAR(opline->result.var));
4030 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4031 			SAVE_OPLINE();
4032 			ZVAL_UNDEFINED_OP1();
4033 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4034 		} else {
4035 			ZEND_VM_NEXT_OPCODE();
4036 		}
4037 	}
4038 
4039 	SAVE_OPLINE();
4040 	ret = i_zend_is_true(val);
4041 
4042 	if (ret) {
4043 		ZVAL_TRUE(EX_VAR(opline->result.var));
4044 		opline = OP_JMP_ADDR(opline, opline->op2);
4045 	} else {
4046 		ZVAL_FALSE(EX_VAR(opline->result.var));
4047 		opline++;
4048 	}
4049 	ZEND_VM_JMP(opline);
4050 }
4051 
ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4052 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4053 {
4054 	USE_OPLINE
4055 	zval *retval_ptr;
4056 	zval *return_value;
4057 
4058 	retval_ptr = RT_CONSTANT(opline, opline->op1);
4059 	return_value = EX(return_value);
4060 
4061 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
4062 		SAVE_OPLINE();
4063 		retval_ptr = ZVAL_UNDEFINED_OP1();
4064 		if (return_value) {
4065 			ZVAL_NULL(return_value);
4066 		}
4067 	} else if (!return_value) {
4068 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
4069 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
4070 				SAVE_OPLINE();
4071 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
4072 			}
4073 		}
4074 	} else {
4075 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
4076 			ZVAL_COPY_VALUE(return_value, retval_ptr);
4077 			if (IS_CONST == IS_CONST) {
4078 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
4079 					Z_ADDREF_P(return_value);
4080 				}
4081 			}
4082 		} else if (IS_CONST == IS_CV) {
4083 			do {
4084 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4085 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
4086 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
4087 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4088 							ZVAL_COPY_VALUE(return_value, retval_ptr);
4089 							if (GC_MAY_LEAK(ref)) {
4090 								SAVE_OPLINE();
4091 								gc_possible_root(ref);
4092 							}
4093 							ZVAL_NULL(retval_ptr);
4094 							break;
4095 						} else {
4096 							Z_ADDREF_P(retval_ptr);
4097 						}
4098 					} else {
4099 						retval_ptr = Z_REFVAL_P(retval_ptr);
4100 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4101 							Z_ADDREF_P(retval_ptr);
4102 						}
4103 					}
4104 				}
4105 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4106 			} while (0);
4107 		} else /* if (IS_CONST == IS_VAR) */ {
4108 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4109 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4110 
4111 				retval_ptr = Z_REFVAL_P(retval_ptr);
4112 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4113 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4114 					efree_size(ref, sizeof(zend_reference));
4115 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4116 					Z_ADDREF_P(retval_ptr);
4117 				}
4118 			} else {
4119 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4120 			}
4121 		}
4122 	}
4123 
4124 
4125 
4126 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4127 }
4128 
ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4129 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4130 {
4131 	USE_OPLINE
4132 	zval *retval_ptr;
4133 	zval *return_value;
4134 	zval observer_retval;
4135 
4136 	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
4137 	return_value = EX(return_value);
4138 	if (!return_value) { return_value = &observer_retval; };
4139 	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
4140 		SAVE_OPLINE();
4141 		retval_ptr = ZVAL_UNDEFINED_OP1();
4142 		if (return_value) {
4143 			ZVAL_NULL(return_value);
4144 		}
4145 	} else if (!return_value) {
4146 		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
4147 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
4148 				SAVE_OPLINE();
4149 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
4150 			}
4151 		}
4152 	} else {
4153 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
4154 			ZVAL_COPY_VALUE(return_value, retval_ptr);
4155 			if (opline->op1_type == IS_CONST) {
4156 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
4157 					Z_ADDREF_P(return_value);
4158 				}
4159 			}
4160 		} else if (opline->op1_type == IS_CV) {
4161 			do {
4162 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4163 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
4164 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
4165 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4166 							ZVAL_COPY_VALUE(return_value, retval_ptr);
4167 							if (GC_MAY_LEAK(ref)) {
4168 								SAVE_OPLINE();
4169 								gc_possible_root(ref);
4170 							}
4171 							ZVAL_NULL(retval_ptr);
4172 							break;
4173 						} else {
4174 							Z_ADDREF_P(retval_ptr);
4175 						}
4176 					} else {
4177 						retval_ptr = Z_REFVAL_P(retval_ptr);
4178 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4179 							Z_ADDREF_P(retval_ptr);
4180 						}
4181 					}
4182 				}
4183 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4184 			} while (0);
4185 		} else /* if (opline->op1_type == IS_VAR) */ {
4186 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4187 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4188 
4189 				retval_ptr = Z_REFVAL_P(retval_ptr);
4190 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4191 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4192 					efree_size(ref, sizeof(zend_reference));
4193 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4194 					Z_ADDREF_P(retval_ptr);
4195 				}
4196 			} else {
4197 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4198 			}
4199 		}
4200 	}
4201 	SAVE_OPLINE();
4202 	zend_observer_fcall_end(execute_data, return_value);
4203 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
4204 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4205 }
4206 
ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4207 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4208 {
4209 	USE_OPLINE
4210 	zval *retval_ptr;
4211 	zval *return_value;
4212 
4213 	SAVE_OPLINE();
4214 
4215 	return_value = EX(return_value);
4216 
4217 	do {
4218 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
4219 		    (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
4220 			/* Not supposed to happen, but we'll allow it */
4221 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
4222 
4223 			retval_ptr = RT_CONSTANT(opline, opline->op1);
4224 			if (!return_value) {
4225 
4226 			} else {
4227 				if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4228 					ZVAL_COPY_VALUE(return_value, retval_ptr);
4229 					break;
4230 				}
4231 
4232 				ZVAL_NEW_REF(return_value, retval_ptr);
4233 				if (IS_CONST == IS_CONST) {
4234 					Z_TRY_ADDREF_P(retval_ptr);
4235 				}
4236 			}
4237 			break;
4238 		}
4239 
4240 		retval_ptr = NULL;
4241 
4242 		if (IS_CONST == IS_VAR) {
4243 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
4244 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
4245 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
4246 				if (return_value) {
4247 					ZVAL_NEW_REF(return_value, retval_ptr);
4248 				} else {
4249 
4250 				}
4251 				break;
4252 			}
4253 		}
4254 
4255 		if (return_value) {
4256 			if (Z_ISREF_P(retval_ptr)) {
4257 				Z_ADDREF_P(retval_ptr);
4258 			} else {
4259 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
4260 			}
4261 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
4262 		}
4263 
4264 	} while (0);
4265 
4266 
4267 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4268 }
4269 
ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4270 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4271 {
4272 	USE_OPLINE
4273 	zval *retval_ptr;
4274 	zval *return_value;
4275 	zval observer_retval;
4276 
4277 	SAVE_OPLINE();
4278 
4279 	return_value = EX(return_value);
4280 	if (!return_value) { return_value = &observer_retval; };
4281 	do {
4282 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR)) ||
4283 		    (opline->op1_type == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
4284 			/* Not supposed to happen, but we'll allow it */
4285 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
4286 
4287 			retval_ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4288 			if (!return_value) {
4289 				FREE_OP(opline->op1_type, opline->op1.var);
4290 			} else {
4291 				if (opline->op1_type == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4292 					ZVAL_COPY_VALUE(return_value, retval_ptr);
4293 					break;
4294 				}
4295 
4296 				ZVAL_NEW_REF(return_value, retval_ptr);
4297 				if (opline->op1_type == IS_CONST) {
4298 					Z_TRY_ADDREF_P(retval_ptr);
4299 				}
4300 			}
4301 			break;
4302 		}
4303 
4304 		retval_ptr = get_zval_ptr_ptr(opline->op1_type, opline->op1, BP_VAR_W);
4305 
4306 		if (opline->op1_type == IS_VAR) {
4307 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
4308 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
4309 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
4310 				if (return_value) {
4311 					ZVAL_NEW_REF(return_value, retval_ptr);
4312 				} else {
4313 					if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
4314 				}
4315 				break;
4316 			}
4317 		}
4318 
4319 		if (return_value) {
4320 			if (Z_ISREF_P(retval_ptr)) {
4321 				Z_ADDREF_P(retval_ptr);
4322 			} else {
4323 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
4324 			}
4325 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
4326 		}
4327 
4328 		if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
4329 	} while (0);
4330 
4331 	zend_observer_fcall_end(execute_data, return_value);
4332 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
4333 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4334 }
4335 
ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4336 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4337 {
4338 	USE_OPLINE
4339 	zval *retval;
4340 
4341 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
4342 
4343 	SAVE_OPLINE();
4344 	retval = RT_CONSTANT(opline, opline->op1);
4345 
4346 	/* Copy return value into generator->retval */
4347 	if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
4348 		ZVAL_COPY_VALUE(&generator->retval, retval);
4349 		if (IS_CONST == IS_CONST) {
4350 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
4351 				Z_ADDREF(generator->retval);
4352 			}
4353 		}
4354 	} else if (IS_CONST == IS_CV) {
4355 		ZVAL_COPY_DEREF(&generator->retval, retval);
4356 	} else /* if (IS_CONST == IS_VAR) */ {
4357 		if (UNEXPECTED(Z_ISREF_P(retval))) {
4358 			zend_refcounted *ref = Z_COUNTED_P(retval);
4359 
4360 			retval = Z_REFVAL_P(retval);
4361 			ZVAL_COPY_VALUE(&generator->retval, retval);
4362 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4363 				efree_size(ref, sizeof(zend_reference));
4364 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
4365 				Z_ADDREF_P(retval);
4366 			}
4367 		} else {
4368 			ZVAL_COPY_VALUE(&generator->retval, retval);
4369 		}
4370 	}
4371 
4372 	/* Close the generator to free up resources */
4373 	zend_generator_close(generator, 1);
4374 
4375 	/* Pass execution back to handling code */
4376 	ZEND_VM_RETURN();
4377 }
4378 
ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4379 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4380 {
4381 	USE_OPLINE
4382 	zval *retval;
4383 
4384 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
4385 
4386 	SAVE_OPLINE();
4387 	retval = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4388 
4389 	/* Copy return value into generator->retval */
4390 	if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
4391 		ZVAL_COPY_VALUE(&generator->retval, retval);
4392 		if (opline->op1_type == IS_CONST) {
4393 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
4394 				Z_ADDREF(generator->retval);
4395 			}
4396 		}
4397 	} else if (opline->op1_type == IS_CV) {
4398 		ZVAL_COPY_DEREF(&generator->retval, retval);
4399 	} else /* if (opline->op1_type == IS_VAR) */ {
4400 		if (UNEXPECTED(Z_ISREF_P(retval))) {
4401 			zend_refcounted *ref = Z_COUNTED_P(retval);
4402 
4403 			retval = Z_REFVAL_P(retval);
4404 			ZVAL_COPY_VALUE(&generator->retval, retval);
4405 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4406 				efree_size(ref, sizeof(zend_reference));
4407 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
4408 				Z_ADDREF_P(retval);
4409 			}
4410 		} else {
4411 			ZVAL_COPY_VALUE(&generator->retval, retval);
4412 		}
4413 	}
4414 
4415 	zend_observer_fcall_end(generator->execute_data, &generator->retval);
4416 
4417 	/* Close the generator to free up resources */
4418 	zend_generator_close(generator, 1);
4419 
4420 	/* Pass execution back to handling code */
4421 	ZEND_VM_RETURN();
4422 }
4423 
ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4424 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4425 {
4426 	USE_OPLINE
4427 	zval *value;
4428 
4429 	SAVE_OPLINE();
4430 	value = RT_CONSTANT(opline, opline->op1);
4431 
4432 	do {
4433 		if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
4434 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
4435 				value = Z_REFVAL_P(value);
4436 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
4437 					break;
4438 				}
4439 			}
4440 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4441 				ZVAL_UNDEFINED_OP1();
4442 				if (UNEXPECTED(EG(exception) != NULL)) {
4443 					HANDLE_EXCEPTION();
4444 				}
4445 			}
4446 			zend_throw_error(NULL, "Can only throw objects");
4447 
4448 			HANDLE_EXCEPTION();
4449 		}
4450 	} while (0);
4451 
4452 	zend_exception_save();
4453 	Z_TRY_ADDREF_P(value);
4454 	zend_throw_exception_object(value);
4455 	zend_exception_restore();
4456 
4457 	HANDLE_EXCEPTION();
4458 }
4459 
ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4460 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4461 {
4462 	USE_OPLINE
4463 	zend_class_entry *ce, *catch_ce;
4464 	zend_object *exception;
4465 
4466 	SAVE_OPLINE();
4467 	/* Check whether an exception has been thrown, if not, jump over code */
4468 	zend_exception_restore();
4469 	if (EG(exception) == NULL) {
4470 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4471 	}
4472 	catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
4473 	if (UNEXPECTED(catch_ce == NULL)) {
4474 		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);
4475 
4476 		CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
4477 	}
4478 	ce = EG(exception)->ce;
4479 
4480 #ifdef HAVE_DTRACE
4481 	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
4482 		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
4483 	}
4484 #endif /* HAVE_DTRACE */
4485 
4486 	if (ce != catch_ce) {
4487 		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
4488 			if (opline->extended_value & ZEND_LAST_CATCH) {
4489 				zend_rethrow_exception(execute_data);
4490 				HANDLE_EXCEPTION();
4491 			}
4492 			ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4493 		}
4494 	}
4495 
4496 	exception = EG(exception);
4497 	EG(exception) = NULL;
4498 	if (RETURN_VALUE_USED(opline)) {
4499 		/* Always perform a strict assignment. There is a reasonable expectation that if you
4500 		 * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
4501 		 * we should not permit coercion to string here. */
4502 		zval tmp;
4503 		ZVAL_OBJ(&tmp, exception);
4504 		zend_assign_to_variable(EX_VAR(opline->result.var), &tmp, IS_TMP_VAR, /* strict */ 1);
4505 	} else {
4506 		OBJ_RELEASE(exception);
4507 	}
4508 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4509 }
4510 
ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4511 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4512 {
4513 	USE_OPLINE
4514 	zval *arg, *param;
4515 
4516 	SAVE_OPLINE();
4517 
4518 	arg = RT_CONSTANT(opline, opline->op1);
4519 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
4520 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
4521 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
4522 		Z_TRY_ADDREF_P(arg);
4523 		ZVAL_NEW_REF(param, arg);
4524 	} else {
4525 		ZVAL_COPY(param, arg);
4526 	}
4527 
4528 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4529 }
4530 
ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4531 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4532 {
4533 	USE_OPLINE
4534 	zval *val;
4535 
4536 	val = RT_CONSTANT(opline, opline->op1);
4537 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4538 		ZVAL_TRUE(EX_VAR(opline->result.var));
4539 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4540 		/* The result and op1 can be the same cv zval */
4541 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
4542 		ZVAL_FALSE(EX_VAR(opline->result.var));
4543 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
4544 			SAVE_OPLINE();
4545 			ZVAL_UNDEFINED_OP1();
4546 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4547 		}
4548 	} else {
4549 		SAVE_OPLINE();
4550 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
4551 
4552 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4553 	}
4554 	ZEND_VM_NEXT_OPCODE();
4555 }
4556 
ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4557 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4558 {
4559 	USE_OPLINE
4560 	zval *obj;
4561 	zend_object *zobj;
4562 	zend_class_entry *ce, *scope;
4563 	zend_function *clone;
4564 	zend_object_clone_obj_t clone_call;
4565 
4566 	SAVE_OPLINE();
4567 	obj = RT_CONSTANT(opline, opline->op1);
4568 
4569 	do {
4570 		if (IS_CONST == IS_CONST ||
4571 		    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
4572 		    if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
4573 				obj = Z_REFVAL_P(obj);
4574 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
4575 					break;
4576 				}
4577 			}
4578 			ZVAL_UNDEF(EX_VAR(opline->result.var));
4579 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
4580 				ZVAL_UNDEFINED_OP1();
4581 				if (UNEXPECTED(EG(exception) != NULL)) {
4582 					HANDLE_EXCEPTION();
4583 				}
4584 			}
4585 			zend_throw_error(NULL, "__clone method called on non-object");
4586 
4587 			HANDLE_EXCEPTION();
4588 		}
4589 	} while (0);
4590 
4591 	zobj = Z_OBJ_P(obj);
4592 	ce = zobj->ce;
4593 	clone = ce->clone;
4594 	clone_call = zobj->handlers->clone_obj;
4595 	if (UNEXPECTED(clone_call == NULL)) {
4596 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
4597 
4598 		ZVAL_UNDEF(EX_VAR(opline->result.var));
4599 		HANDLE_EXCEPTION();
4600 	}
4601 
4602 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
4603 		scope = EX(func)->op_array.scope;
4604 		if (clone->common.scope != scope) {
4605 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
4606 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
4607 				zend_wrong_clone_call(clone, scope);
4608 
4609 				ZVAL_UNDEF(EX_VAR(opline->result.var));
4610 				HANDLE_EXCEPTION();
4611 			}
4612 		}
4613 	}
4614 
4615 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
4616 
4617 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4618 }
4619 
ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4620 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4621 {
4622 	USE_OPLINE
4623 	zval *expr;
4624 	zval *result = EX_VAR(opline->result.var);
4625 	HashTable *ht;
4626 
4627 	SAVE_OPLINE();
4628 	expr = RT_CONSTANT(opline, opline->op1);
4629 
4630 	switch (opline->extended_value) {
4631 		case IS_LONG:
4632 			ZVAL_LONG(result, zval_get_long(expr));
4633 			break;
4634 		case IS_DOUBLE:
4635 			ZVAL_DOUBLE(result, zval_get_double(expr));
4636 			break;
4637 		case IS_STRING:
4638 			ZVAL_STR(result, zval_get_string(expr));
4639 			break;
4640 		default:
4641 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
4642 			if (IS_CONST & (IS_VAR|IS_CV)) {
4643 				ZVAL_DEREF(expr);
4644 			}
4645 			/* If value is already of correct type, return it directly */
4646 			if (Z_TYPE_P(expr) == opline->extended_value) {
4647 				ZVAL_COPY_VALUE(result, expr);
4648 				if (IS_CONST == IS_CONST) {
4649 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
4650 				} else if (IS_CONST != IS_TMP_VAR) {
4651 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
4652 				}
4653 
4654 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4655 			}
4656 
4657 			if (opline->extended_value == IS_ARRAY) {
4658 				if (IS_CONST == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
4659 					if (Z_TYPE_P(expr) != IS_NULL) {
4660 						ZVAL_ARR(result, zend_new_array(1));
4661 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
4662 						if (IS_CONST == IS_CONST) {
4663 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
4664 						} else {
4665 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
4666 						}
4667 					} else {
4668 						ZVAL_EMPTY_ARRAY(result);
4669 					}
4670 				} else {
4671 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
4672 					if (obj_ht) {
4673 						/* fast copy */
4674 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
4675 							(Z_OBJCE_P(expr)->default_properties_count ||
4676 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
4677 							 GC_IS_RECURSIVE(obj_ht))));
4678 						zend_release_properties(obj_ht);
4679 					} else {
4680 						ZVAL_EMPTY_ARRAY(result);
4681 					}
4682 				}
4683 			} else {
4684 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
4685 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
4686 				if (Z_TYPE_P(expr) == IS_ARRAY) {
4687 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
4688 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
4689 						/* TODO: try not to duplicate immutable arrays as well ??? */
4690 						ht = zend_array_dup(ht);
4691 					}
4692 					Z_OBJ_P(result)->properties = ht;
4693 				} else if (Z_TYPE_P(expr) != IS_NULL) {
4694 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
4695 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
4696 					if (IS_CONST == IS_CONST) {
4697 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
4698 					} else {
4699 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
4700 					}
4701 				}
4702 			}
4703 	}
4704 
4705 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4706 }
4707 
ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4708 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4709 {
4710 	USE_OPLINE
4711 	zend_op_array *new_op_array;
4712 	zval *inc_filename;
4713 
4714 	SAVE_OPLINE();
4715 	inc_filename = RT_CONSTANT(opline, opline->op1);
4716 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
4717 	if (UNEXPECTED(EG(exception) != NULL)) {
4718 
4719 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
4720 			destroy_op_array(new_op_array);
4721 			efree_size(new_op_array, sizeof(zend_op_array));
4722 		}
4723 		UNDEF_RESULT();
4724 		HANDLE_EXCEPTION();
4725 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
4726 		if (RETURN_VALUE_USED(opline)) {
4727 			ZVAL_TRUE(EX_VAR(opline->result.var));
4728 		}
4729 	} else if (EXPECTED(new_op_array != NULL)) {
4730 		zval *return_value = NULL;
4731 		zend_execute_data *call;
4732 
4733 		if (RETURN_VALUE_USED(opline)) {
4734 			return_value = EX_VAR(opline->result.var);
4735 		}
4736 
4737 		new_op_array->scope = EX(func)->op_array.scope;
4738 
4739 		call = zend_vm_stack_push_call_frame(
4740 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
4741 			(zend_function*)new_op_array, 0,
4742 			Z_PTR(EX(This)));
4743 
4744 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
4745 			call->symbol_table = EX(symbol_table);
4746 		} else {
4747 			call->symbol_table = zend_rebuild_symbol_table();
4748 		}
4749 
4750 		call->prev_execute_data = execute_data;
4751 		i_init_code_execute_data(call, new_op_array, return_value);
4752 
4753 		if (EXPECTED(zend_execute_ex == execute_ex)) {
4754 
4755 			ZEND_VM_ENTER();
4756 		} else {
4757 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
4758 			zend_execute_ex(call);
4759 			zend_vm_stack_free_call_frame(call);
4760 		}
4761 
4762 		destroy_op_array(new_op_array);
4763 		efree_size(new_op_array, sizeof(zend_op_array));
4764 		if (UNEXPECTED(EG(exception) != NULL)) {
4765 			zend_rethrow_exception(execute_data);
4766 
4767 			UNDEF_RESULT();
4768 			HANDLE_EXCEPTION();
4769 		}
4770 	} else if (RETURN_VALUE_USED(opline)) {
4771 		ZVAL_FALSE(EX_VAR(opline->result.var));
4772 	}
4773 
4774 	ZEND_VM_NEXT_OPCODE();
4775 }
4776 
ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4777 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4778 {
4779 	USE_OPLINE
4780 	zend_op_array *new_op_array;
4781 	zval *inc_filename;
4782 
4783 	SAVE_OPLINE();
4784 	inc_filename = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4785 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
4786 	if (UNEXPECTED(EG(exception) != NULL)) {
4787 		FREE_OP(opline->op1_type, opline->op1.var);
4788 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
4789 			destroy_op_array(new_op_array);
4790 			efree_size(new_op_array, sizeof(zend_op_array));
4791 		}
4792 		UNDEF_RESULT();
4793 		HANDLE_EXCEPTION();
4794 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
4795 		if (RETURN_VALUE_USED(opline)) {
4796 			ZVAL_TRUE(EX_VAR(opline->result.var));
4797 		}
4798 	} else if (EXPECTED(new_op_array != NULL)) {
4799 		zval *return_value = NULL;
4800 		zend_execute_data *call;
4801 
4802 		if (RETURN_VALUE_USED(opline)) {
4803 			return_value = EX_VAR(opline->result.var);
4804 		}
4805 
4806 		new_op_array->scope = EX(func)->op_array.scope;
4807 
4808 		call = zend_vm_stack_push_call_frame(
4809 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
4810 			(zend_function*)new_op_array, 0,
4811 			Z_PTR(EX(This)));
4812 
4813 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
4814 			call->symbol_table = EX(symbol_table);
4815 		} else {
4816 			call->symbol_table = zend_rebuild_symbol_table();
4817 		}
4818 
4819 		call->prev_execute_data = execute_data;
4820 		i_init_code_execute_data(call, new_op_array, return_value);
4821 		zend_observer_fcall_begin(call);
4822 		if (EXPECTED(zend_execute_ex == execute_ex)) {
4823 			FREE_OP(opline->op1_type, opline->op1.var);
4824 			ZEND_VM_ENTER();
4825 		} else {
4826 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
4827 			zend_execute_ex(call);
4828 			zend_vm_stack_free_call_frame(call);
4829 		}
4830 
4831 		destroy_op_array(new_op_array);
4832 		efree_size(new_op_array, sizeof(zend_op_array));
4833 		if (UNEXPECTED(EG(exception) != NULL)) {
4834 			zend_rethrow_exception(execute_data);
4835 			FREE_OP(opline->op1_type, opline->op1.var);
4836 			UNDEF_RESULT();
4837 			HANDLE_EXCEPTION();
4838 		}
4839 	} else if (RETURN_VALUE_USED(opline)) {
4840 		ZVAL_FALSE(EX_VAR(opline->result.var));
4841 	}
4842 	FREE_OP(opline->op1_type, opline->op1.var);
4843 	ZEND_VM_NEXT_OPCODE();
4844 }
4845 
ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4847 {
4848 	USE_OPLINE
4849 	zval *array_ptr, *result;
4850 
4851 	SAVE_OPLINE();
4852 
4853 	array_ptr = RT_CONSTANT(opline, opline->op1);
4854 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
4855 		result = EX_VAR(opline->result.var);
4856 		ZVAL_COPY_VALUE(result, array_ptr);
4857 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
4858 			Z_ADDREF_P(array_ptr);
4859 		}
4860 		Z_FE_POS_P(result) = 0;
4861 
4862 		ZEND_VM_NEXT_OPCODE();
4863 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
4864 		zend_object *zobj = Z_OBJ_P(array_ptr);
4865 		if (!zobj->ce->get_iterator) {
4866 			HashTable *properties = zobj->properties;
4867 			if (properties) {
4868 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
4869 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
4870 						GC_DELREF(properties);
4871 					}
4872 					properties = zobj->properties = zend_array_dup(properties);
4873 				}
4874 			} else {
4875 				properties = zobj->handlers->get_properties(zobj);
4876 			}
4877 
4878 			result = EX_VAR(opline->result.var);
4879 			ZVAL_COPY_VALUE(result, array_ptr);
4880 			if (IS_CONST != IS_TMP_VAR) {
4881 				Z_ADDREF_P(array_ptr);
4882 			}
4883 
4884 			if (zend_hash_num_elements(properties) == 0) {
4885 				Z_FE_ITER_P(result) = (uint32_t) -1;
4886 
4887 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4888 			}
4889 
4890 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
4891 
4892 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4893 		} else {
4894 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
4895 
4896 			if (UNEXPECTED(EG(exception))) {
4897 				HANDLE_EXCEPTION();
4898 			} else if (is_empty) {
4899 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4900 			} else {
4901 				ZEND_VM_NEXT_OPCODE();
4902 			}
4903 		}
4904 	} else {
4905 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
4906 		ZVAL_UNDEF(EX_VAR(opline->result.var));
4907 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
4908 
4909 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4910 	}
4911 }
4912 
ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4913 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4914 {
4915 	USE_OPLINE
4916 	zval *array_ptr, *array_ref;
4917 
4918 	SAVE_OPLINE();
4919 
4920 	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
4921 		array_ref = array_ptr = NULL;
4922 		if (Z_ISREF_P(array_ref)) {
4923 			array_ptr = Z_REFVAL_P(array_ref);
4924 		}
4925 	} else {
4926 		array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
4927 	}
4928 
4929 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
4930 		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
4931 			if (array_ptr == array_ref) {
4932 				ZVAL_NEW_REF(array_ref, array_ref);
4933 				array_ptr = Z_REFVAL_P(array_ref);
4934 			}
4935 			Z_ADDREF_P(array_ref);
4936 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
4937 		} else {
4938 			array_ref = EX_VAR(opline->result.var);
4939 			ZVAL_NEW_REF(array_ref, array_ptr);
4940 			array_ptr = Z_REFVAL_P(array_ref);
4941 		}
4942 		if (IS_CONST == IS_CONST) {
4943 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
4944 		} else {
4945 			SEPARATE_ARRAY(array_ptr);
4946 		}
4947 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
4948 
4949 		if (IS_CONST == IS_VAR) {
4950 
4951 		}
4952 		ZEND_VM_NEXT_OPCODE();
4953 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
4954 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
4955 			HashTable *properties;
4956 			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
4957 				if (array_ptr == array_ref) {
4958 					ZVAL_NEW_REF(array_ref, array_ref);
4959 					array_ptr = Z_REFVAL_P(array_ref);
4960 				}
4961 				Z_ADDREF_P(array_ref);
4962 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
4963 			} else {
4964 				array_ptr = EX_VAR(opline->result.var);
4965 				ZVAL_COPY_VALUE(array_ptr, array_ref);
4966 			}
4967 			if (Z_OBJ_P(array_ptr)->properties
4968 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
4969 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
4970 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
4971 				}
4972 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
4973 			}
4974 
4975 			properties = Z_OBJPROP_P(array_ptr);
4976 			if (zend_hash_num_elements(properties) == 0) {
4977 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
4978 
4979 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4980 			}
4981 
4982 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
4983 
4984 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4985 		} else {
4986 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
4987 
4988 			if (IS_CONST == IS_VAR) {
4989 
4990 			} else {
4991 
4992 			}
4993 			if (UNEXPECTED(EG(exception))) {
4994 				HANDLE_EXCEPTION();
4995 			} else if (is_empty) {
4996 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4997 			} else {
4998 				ZEND_VM_NEXT_OPCODE();
4999 			}
5000 		}
5001 	} else {
5002 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
5003 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5004 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
5005 		if (IS_CONST == IS_VAR) {
5006 
5007 		} else {
5008 
5009 		}
5010 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5011 	}
5012 }
5013 
ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5014 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5015 {
5016 	USE_OPLINE
5017 	zval *value;
5018 	zval *ref = NULL;
5019 	bool ret;
5020 
5021 	SAVE_OPLINE();
5022 	value = RT_CONSTANT(opline, opline->op1);
5023 
5024 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
5025 		if (IS_CONST == IS_VAR) {
5026 			ref = value;
5027 		}
5028 		value = Z_REFVAL_P(value);
5029 	}
5030 
5031 	ret = i_zend_is_true(value);
5032 
5033 	if (UNEXPECTED(EG(exception))) {
5034 
5035 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5036 		HANDLE_EXCEPTION();
5037 	}
5038 
5039 	if (ret) {
5040 		zval *result = EX_VAR(opline->result.var);
5041 
5042 		ZVAL_COPY_VALUE(result, value);
5043 		if (IS_CONST == IS_CONST) {
5044 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
5045 		} else if (IS_CONST == IS_CV) {
5046 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
5047 		} else if (IS_CONST == IS_VAR && ref) {
5048 			zend_reference *r = Z_REF_P(ref);
5049 
5050 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
5051 				efree_size(r, sizeof(zend_reference));
5052 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5053 				Z_ADDREF_P(result);
5054 			}
5055 		}
5056 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5057 	}
5058 
5059 	ZEND_VM_NEXT_OPCODE();
5060 }
5061 
ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5062 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5063 {
5064 	USE_OPLINE
5065 	zval *value;
5066 	zval *ref = NULL;
5067 
5068 	SAVE_OPLINE();
5069 	value = RT_CONSTANT(opline, opline->op1);
5070 
5071 	if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
5072 		if (IS_CONST & IS_VAR) {
5073 			ref = value;
5074 		}
5075 		value = Z_REFVAL_P(value);
5076 	}
5077 
5078 	if (Z_TYPE_P(value) > IS_NULL) {
5079 		zval *result = EX_VAR(opline->result.var);
5080 		ZVAL_COPY_VALUE(result, value);
5081 		if (IS_CONST == IS_CONST) {
5082 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
5083 		} else if (IS_CONST == IS_CV) {
5084 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
5085 		} else if ((IS_CONST & IS_VAR) && ref) {
5086 			zend_reference *r = Z_REF_P(ref);
5087 
5088 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
5089 				efree_size(r, sizeof(zend_reference));
5090 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5091 				Z_ADDREF_P(result);
5092 			}
5093 		}
5094 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5095 	}
5096 
5097 	ZEND_VM_NEXT_OPCODE();
5098 }
5099 
ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5100 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5101 {
5102 	USE_OPLINE
5103 	zval *val, *result;
5104 
5105 	val = RT_CONSTANT(opline, opline->op1);
5106 
5107 	if (Z_TYPE_P(val) > IS_NULL) {
5108 		do {
5109 			if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
5110 				val = Z_REFVAL_P(val);
5111 				if (Z_TYPE_P(val) <= IS_NULL) {
5112 
5113 					break;
5114 				}
5115 			}
5116 			ZEND_VM_NEXT_OPCODE();
5117 		} while (0);
5118 	}
5119 
5120 	result = EX_VAR(opline->result.var);
5121 	if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
5122 		ZVAL_NULL(result);
5123 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
5124 			SAVE_OPLINE();
5125 			ZVAL_UNDEFINED_OP1();
5126 			if (UNEXPECTED(EG(exception) != NULL)) {
5127 				HANDLE_EXCEPTION();
5128 			}
5129 		}
5130 	} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
5131 		ZVAL_FALSE(result);
5132 	} else {
5133 		ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
5134 		ZVAL_TRUE(result);
5135 	}
5136 
5137 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5138 }
5139 
ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5140 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5141 {
5142 	USE_OPLINE
5143 	zval *value;
5144 	zval *result = EX_VAR(opline->result.var);
5145 
5146 	value = RT_CONSTANT(opline, opline->op1);
5147 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5148 		SAVE_OPLINE();
5149 		ZVAL_UNDEFINED_OP1();
5150 		ZVAL_NULL(result);
5151 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5152 	}
5153 
5154 	if (IS_CONST == IS_CV) {
5155 		ZVAL_COPY_DEREF(result, value);
5156 	} else if (IS_CONST == IS_VAR) {
5157 		if (UNEXPECTED(Z_ISREF_P(value))) {
5158 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
5159 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
5160 				efree_size(Z_REF_P(value), sizeof(zend_reference));
5161 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5162 				Z_ADDREF_P(result);
5163 			}
5164 		} else {
5165 			ZVAL_COPY_VALUE(result, value);
5166 		}
5167 	} else {
5168 		ZVAL_COPY_VALUE(result, value);
5169 		if (IS_CONST == IS_CONST) {
5170 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
5171 				Z_ADDREF_P(result);
5172 			}
5173 		}
5174 	}
5175 	ZEND_VM_NEXT_OPCODE();
5176 }
5177 
ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5178 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5179 {
5180 	USE_OPLINE
5181 
5182 	SAVE_OPLINE();
5183 	do_bind_class(RT_CONSTANT(opline, opline->op1), (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
5184 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5185 }
5186 
ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5187 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5188 {
5189 	USE_OPLINE
5190 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
5191 	zval *val;
5192 
5193 	SAVE_OPLINE();
5194 	val = RT_CONSTANT(opline, opline->op1);
5195 
5196 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
5197 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
5198 
5199 		UNDEF_RESULT();
5200 		HANDLE_EXCEPTION();
5201 	}
5202 
5203 yield_from_try_again:
5204 	if (Z_TYPE_P(val) == IS_ARRAY) {
5205 		ZVAL_COPY_VALUE(&generator->values, val);
5206 		if (Z_OPT_REFCOUNTED_P(val)) {
5207 			Z_ADDREF_P(val);
5208 		}
5209 		Z_FE_POS(generator->values) = 0;
5210 
5211 	} else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
5212 		zend_class_entry *ce = Z_OBJCE_P(val);
5213 		if (ce == zend_ce_generator) {
5214 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
5215 
5216 			Z_ADDREF_P(val);
5217 
5218 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
5219 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
5220 				zval_ptr_dtor(val);
5221 				UNDEF_RESULT();
5222 				HANDLE_EXCEPTION();
5223 			} else if (Z_ISUNDEF(new_gen->retval)) {
5224 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
5225 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
5226 					zval_ptr_dtor(val);
5227 					UNDEF_RESULT();
5228 					HANDLE_EXCEPTION();
5229 				} else {
5230 					zend_generator_yield_from(generator, new_gen);
5231 				}
5232 			} else {
5233 				if (RETURN_VALUE_USED(opline)) {
5234 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
5235 				}
5236 				ZEND_VM_NEXT_OPCODE();
5237 			}
5238 		} else {
5239 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
5240 
5241 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
5242 				if (!EG(exception)) {
5243 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
5244 				}
5245 				UNDEF_RESULT();
5246 				HANDLE_EXCEPTION();
5247 			}
5248 
5249 			iter->index = 0;
5250 			if (iter->funcs->rewind) {
5251 				iter->funcs->rewind(iter);
5252 				if (UNEXPECTED(EG(exception) != NULL)) {
5253 					OBJ_RELEASE(&iter->std);
5254 					UNDEF_RESULT();
5255 					HANDLE_EXCEPTION();
5256 				}
5257 			}
5258 
5259 			ZVAL_OBJ(&generator->values, &iter->std);
5260 		}
5261 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
5262 		val = Z_REFVAL_P(val);
5263 		goto yield_from_try_again;
5264 	} else {
5265 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
5266 
5267 		UNDEF_RESULT();
5268 		HANDLE_EXCEPTION();
5269 	}
5270 
5271 	/* This is the default return value
5272 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
5273 	if (RETURN_VALUE_USED(opline)) {
5274 		ZVAL_NULL(EX_VAR(opline->result.var));
5275 	}
5276 
5277 	/* This generator has no send target (though the generator we delegate to might have one) */
5278 	generator->send_target = NULL;
5279 
5280 	/* We increment to the next op, so we are at the correct position when the
5281 	 * generator is resumed. */
5282 	ZEND_VM_INC_OPCODE();
5283 
5284 	/* The GOTO VM uses a local opline variable. We need to set the opline
5285 	 * variable in execute_data so we don't resume at an old position. */
5286 	SAVE_OPLINE();
5287 
5288 	ZEND_VM_RETURN();
5289 }
5290 
ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5291 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5292 {
5293 	USE_OPLINE
5294 	zval *value;
5295 
5296 	value = RT_CONSTANT(opline, opline->op1);
5297 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
5298 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
5299 
5300 		ZEND_VM_NEXT_OPCODE();
5301 	} else {
5302 		zend_bool strict;
5303 
5304 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
5305 			value = Z_REFVAL_P(value);
5306 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
5307 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
5308 
5309 				ZEND_VM_NEXT_OPCODE();
5310 			}
5311 		}
5312 
5313 		SAVE_OPLINE();
5314 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5315 			value = ZVAL_UNDEFINED_OP1();
5316 		}
5317 		strict = EX_USES_STRICT_TYPES();
5318 		do {
5319 			if (EXPECTED(!strict)) {
5320 				zend_string *str;
5321 				zval tmp;
5322 
5323 				ZVAL_COPY(&tmp, value);
5324 				if (zend_parse_arg_str_weak(&tmp, &str)) {
5325 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
5326 					zval_ptr_dtor(&tmp);
5327 					break;
5328 				}
5329 				zval_ptr_dtor(&tmp);
5330 			}
5331 			if (!EG(exception)) {
5332 				zend_type_error("strlen(): Argument #1 ($str) must be of type string, %s given", zend_zval_type_name(value));
5333 			}
5334 			ZVAL_UNDEF(EX_VAR(opline->result.var));
5335 		} while (0);
5336 	}
5337 
5338 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5339 }
5340 
ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5341 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5342 {
5343 	USE_OPLINE
5344 	zval *value;
5345 	int result = 0;
5346 
5347 	value = RT_CONSTANT(opline, opline->op1);
5348 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
5349 type_check_resource:
5350 		if (opline->extended_value != MAY_BE_RESOURCE
5351 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
5352 			result = 1;
5353 		}
5354 	} else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
5355 		value = Z_REFVAL_P(value);
5356 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
5357 			goto type_check_resource;
5358 		}
5359 	} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5360 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
5361 		SAVE_OPLINE();
5362 		ZVAL_UNDEFINED_OP1();
5363 		if (UNEXPECTED(EG(exception))) {
5364 			ZVAL_UNDEF(EX_VAR(opline->result.var));
5365 			HANDLE_EXCEPTION();
5366 		}
5367 	}
5368 	if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5369 		SAVE_OPLINE();
5370 
5371 		ZEND_VM_SMART_BRANCH(result, 1);
5372 	} else {
5373 		ZEND_VM_SMART_BRANCH(result, 0);
5374 	}
5375 }
5376 
ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5377 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5378 {
5379 	USE_OPLINE
5380 	zend_constant *c;
5381 
5382 	c = CACHED_PTR(opline->extended_value);
5383 	if (EXPECTED(c != NULL)) {
5384 		if (!IS_SPECIAL_CACHE_VAL(c)) {
5385 defined_true:
5386 			ZEND_VM_SMART_BRANCH_TRUE();
5387 		} else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
5388 defined_false:
5389 			ZEND_VM_SMART_BRANCH_FALSE();
5390 		}
5391 	}
5392 	if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
5393 		CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
5394 		goto defined_false;
5395 	} else {
5396 		goto defined_true;
5397 	}
5398 }
5399 
ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5400 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5401 {
5402 	USE_OPLINE
5403 	zval *value;
5404 
5405 	value = RT_CONSTANT(opline, opline->op1);
5406 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
5407 	ZEND_VM_NEXT_OPCODE();
5408 }
5409 
ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5410 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5411 {
5412 	USE_OPLINE
5413 	zval *value;
5414 
5415 	value = RT_CONSTANT(opline, opline->op1);
5416 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
5417 	ZEND_VM_NEXT_OPCODE();
5418 }
5419 
ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5420 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5421 {
5422 	USE_OPLINE
5423 	zval *value;
5424 
5425 	value = RT_CONSTANT(opline, opline->op1);
5426 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
5427 	ZEND_VM_NEXT_OPCODE();
5428 }
5429 
ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5430 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5431 {
5432 	USE_OPLINE
5433 	zval *value, *arg;
5434 
5435 	value = RT_CONSTANT(opline, opline->op1);
5436 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
5437 	ZVAL_COPY_VALUE(arg, value);
5438 	ZEND_VM_NEXT_OPCODE();
5439 }
5440 
ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5441 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5442 {
5443 	USE_OPLINE
5444 	zval *value, *arg;
5445 	uint32_t arg_num = opline->op2.num;
5446 
5447 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
5448 	if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
5449 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5450 	}
5451 	value = RT_CONSTANT(opline, opline->op1);
5452 	ZVAL_COPY_VALUE(arg, value);
5453 	ZEND_VM_NEXT_OPCODE();
5454 }
5455 
ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5456 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5457 {
5458 	USE_OPLINE
5459 	zval *op1, *op2, *result;
5460 	double d1, d2;
5461 
5462 	op1 = RT_CONSTANT(opline, opline->op1);
5463 	op2 = RT_CONSTANT(opline, opline->op2);
5464 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5465 		/* pass */
5466 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5467 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5468 			result = EX_VAR(opline->result.var);
5469 			fast_long_add_function(result, op1, op2);
5470 			ZEND_VM_NEXT_OPCODE();
5471 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5472 			d1 = (double)Z_LVAL_P(op1);
5473 			d2 = Z_DVAL_P(op2);
5474 			goto add_double;
5475 		}
5476 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5477 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5478 			d1 = Z_DVAL_P(op1);
5479 			d2 = Z_DVAL_P(op2);
5480 add_double:
5481 			result = EX_VAR(opline->result.var);
5482 			ZVAL_DOUBLE(result, d1 + d2);
5483 			ZEND_VM_NEXT_OPCODE();
5484 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5485 			d1 = Z_DVAL_P(op1);
5486 			d2 = (double)Z_LVAL_P(op2);
5487 			goto add_double;
5488 		}
5489 	}
5490 
5491 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5492 }
5493 
ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5494 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5495 {
5496 	USE_OPLINE
5497 	zval *op1, *op2, *result;
5498 	double d1, d2;
5499 
5500 	op1 = RT_CONSTANT(opline, opline->op1);
5501 	op2 = RT_CONSTANT(opline, opline->op2);
5502 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5503 		/* pass */
5504 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5505 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5506 			result = EX_VAR(opline->result.var);
5507 			fast_long_sub_function(result, op1, op2);
5508 			ZEND_VM_NEXT_OPCODE();
5509 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5510 			d1 = (double)Z_LVAL_P(op1);
5511 			d2 = Z_DVAL_P(op2);
5512 			goto sub_double;
5513 		}
5514 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5515 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5516 			d1 = Z_DVAL_P(op1);
5517 			d2 = Z_DVAL_P(op2);
5518 sub_double:
5519 			result = EX_VAR(opline->result.var);
5520 			ZVAL_DOUBLE(result, d1 - d2);
5521 			ZEND_VM_NEXT_OPCODE();
5522 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5523 			d1 = Z_DVAL_P(op1);
5524 			d2 = (double)Z_LVAL_P(op2);
5525 			goto sub_double;
5526 		}
5527 	}
5528 
5529 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5530 }
5531 
ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5532 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5533 {
5534 	USE_OPLINE
5535 	zval *op1, *op2, *result;
5536 	double d1, d2;
5537 
5538 	op1 = RT_CONSTANT(opline, opline->op1);
5539 	op2 = RT_CONSTANT(opline, opline->op2);
5540 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5541 		/* pass */
5542 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5543 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5544 			zend_long overflow;
5545 
5546 			result = EX_VAR(opline->result.var);
5547 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
5548 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
5549 			ZEND_VM_NEXT_OPCODE();
5550 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5551 			d1 = (double)Z_LVAL_P(op1);
5552 			d2 = Z_DVAL_P(op2);
5553 			goto mul_double;
5554 		}
5555 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5556 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5557 			d1 = Z_DVAL_P(op1);
5558 			d2 = Z_DVAL_P(op2);
5559 mul_double:
5560 			result = EX_VAR(opline->result.var);
5561 			ZVAL_DOUBLE(result, d1 * d2);
5562 			ZEND_VM_NEXT_OPCODE();
5563 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5564 			d1 = Z_DVAL_P(op1);
5565 			d2 = (double)Z_LVAL_P(op2);
5566 			goto mul_double;
5567 		}
5568 	}
5569 
5570 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5571 }
5572 
ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5573 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5574 {
5575 	USE_OPLINE
5576 	zval *op1, *op2;
5577 
5578 	SAVE_OPLINE();
5579 	op1 = RT_CONSTANT(opline, opline->op1);
5580 	op2 = RT_CONSTANT(opline, opline->op2);
5581 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
5582 
5583 
5584 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5585 }
5586 
ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5587 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5588 {
5589 	USE_OPLINE
5590 	zval *op1, *op2, *result;
5591 
5592 	op1 = RT_CONSTANT(opline, opline->op1);
5593 	op2 = RT_CONSTANT(opline, opline->op2);
5594 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5595 		/* pass */
5596 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5597 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5598 			result = EX_VAR(opline->result.var);
5599 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
5600 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5601 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
5602 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
5603 				ZVAL_LONG(result, 0);
5604 			} else {
5605 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
5606 			}
5607 			ZEND_VM_NEXT_OPCODE();
5608 		}
5609 	}
5610 
5611 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5612 }
5613 
ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5614 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5615 {
5616 	USE_OPLINE
5617 	zval *op1, *op2;
5618 
5619 	op1 = RT_CONSTANT(opline, opline->op1);
5620 	op2 = RT_CONSTANT(opline, opline->op2);
5621 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5622 		/* pass */
5623 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5624 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
5625 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
5626 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
5627 		ZVAL_LONG(EX_VAR(opline->result.var),
5628 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
5629 		ZEND_VM_NEXT_OPCODE();
5630 	}
5631 
5632 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5633 }
5634 
ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5635 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5636 {
5637 	USE_OPLINE
5638 	zval *op1, *op2;
5639 
5640 	op1 = RT_CONSTANT(opline, opline->op1);
5641 	op2 = RT_CONSTANT(opline, opline->op2);
5642 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5643 		/* pass */
5644 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5645 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
5646 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
5647 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
5648 		ZEND_VM_NEXT_OPCODE();
5649 	}
5650 
5651 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5652 }
5653 
ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5654 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5655 {
5656 	USE_OPLINE
5657 	zval *op1, *op2;
5658 
5659 	SAVE_OPLINE();
5660 	op1 = RT_CONSTANT(opline, opline->op1);
5661 	op2 = RT_CONSTANT(opline, opline->op2);
5662 	pow_function(EX_VAR(opline->result.var), op1, op2);
5663 
5664 
5665 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5666 }
5667 
ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5668 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5669 {
5670 	USE_OPLINE
5671 	zval *op1, *op2;
5672 	zend_bool result;
5673 
5674 	SAVE_OPLINE();
5675 	op1 = RT_CONSTANT(opline, opline->op1);
5676 	op2 = RT_CONSTANT(opline, opline->op2);
5677 	result = fast_is_identical_function(op1, op2);
5678 
5679 
5680 	ZEND_VM_SMART_BRANCH(result, 1);
5681 }
5682 
ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5683 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5684 {
5685 	USE_OPLINE
5686 	zval *op1, *op2;
5687 	zend_bool result;
5688 
5689 	SAVE_OPLINE();
5690 	op1 = RT_CONSTANT(opline, opline->op1);
5691 	op2 = RT_CONSTANT(opline, opline->op2);
5692 	result = fast_is_not_identical_function(op1, op2);
5693 
5694 
5695 	ZEND_VM_SMART_BRANCH(result, 1);
5696 }
5697 
ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5698 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5699 {
5700 	USE_OPLINE
5701 	zval *op1, *op2;
5702 	double d1, d2;
5703 
5704 	op1 = RT_CONSTANT(opline, opline->op1);
5705 	op2 = RT_CONSTANT(opline, opline->op2);
5706 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5707 		/* pass */
5708 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
5709 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5710 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
5711 is_equal_true:
5712 				ZEND_VM_SMART_BRANCH_TRUE();
5713 			} else {
5714 is_equal_false:
5715 				ZEND_VM_SMART_BRANCH_FALSE();
5716 			}
5717 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5718 			d1 = (double)Z_LVAL_P(op1);
5719 			d2 = Z_DVAL_P(op2);
5720 			goto is_equal_double;
5721 		}
5722 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
5723 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5724 			d1 = Z_DVAL_P(op1);
5725 			d2 = Z_DVAL_P(op2);
5726 is_equal_double:
5727 			if (d1 == d2) {
5728 				goto is_equal_true;
5729 			} else {
5730 				goto is_equal_false;
5731 			}
5732 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5733 			d1 = Z_DVAL_P(op1);
5734 			d2 = (double)Z_LVAL_P(op2);
5735 			goto is_equal_double;
5736 		}
5737 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5738 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5739 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
5740 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5741 				zval_ptr_dtor_str(op1);
5742 			}
5743 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5744 				zval_ptr_dtor_str(op2);
5745 			}
5746 			if (result) {
5747 				goto is_equal_true;
5748 			} else {
5749 				goto is_equal_false;
5750 			}
5751 		}
5752 	}
5753 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5754 }
5755 
ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5756 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5757 {
5758 	USE_OPLINE
5759 	zval *op1, *op2;
5760 	double d1, d2;
5761 
5762 	op1 = RT_CONSTANT(opline, opline->op1);
5763 	op2 = RT_CONSTANT(opline, opline->op2);
5764 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5765 		/* pass */
5766 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
5767 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5768 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
5769 is_not_equal_true:
5770 				ZEND_VM_SMART_BRANCH_TRUE();
5771 			} else {
5772 is_not_equal_false:
5773 				ZEND_VM_SMART_BRANCH_FALSE();
5774 			}
5775 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5776 			d1 = (double)Z_LVAL_P(op1);
5777 			d2 = Z_DVAL_P(op2);
5778 			goto is_not_equal_double;
5779 		}
5780 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
5781 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5782 			d1 = Z_DVAL_P(op1);
5783 			d2 = Z_DVAL_P(op2);
5784 is_not_equal_double:
5785 			if (d1 != d2) {
5786 				goto is_not_equal_true;
5787 			} else {
5788 				goto is_not_equal_false;
5789 			}
5790 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5791 			d1 = Z_DVAL_P(op1);
5792 			d2 = (double)Z_LVAL_P(op2);
5793 			goto is_not_equal_double;
5794 		}
5795 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5796 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5797 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
5798 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5799 				zval_ptr_dtor_str(op1);
5800 			}
5801 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5802 				zval_ptr_dtor_str(op2);
5803 			}
5804 			if (!result) {
5805 				goto is_not_equal_true;
5806 			} else {
5807 				goto is_not_equal_false;
5808 			}
5809 		}
5810 	}
5811 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5812 }
5813 
ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5814 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5815 {
5816 	USE_OPLINE
5817 	zval *op1, *op2;
5818 	double d1, d2;
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 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5826 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
5827 is_smaller_true:
5828 				ZEND_VM_SMART_BRANCH_TRUE();
5829 			} else {
5830 is_smaller_false:
5831 				ZEND_VM_SMART_BRANCH_FALSE();
5832 			}
5833 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5834 			d1 = (double)Z_LVAL_P(op1);
5835 			d2 = Z_DVAL_P(op2);
5836 			goto is_smaller_double;
5837 		}
5838 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5839 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5840 			d1 = Z_DVAL_P(op1);
5841 			d2 = Z_DVAL_P(op2);
5842 is_smaller_double:
5843 			if (d1 < d2) {
5844 				goto is_smaller_true;
5845 			} else {
5846 				goto is_smaller_false;
5847 			}
5848 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5849 			d1 = Z_DVAL_P(op1);
5850 			d2 = (double)Z_LVAL_P(op2);
5851 			goto is_smaller_double;
5852 		}
5853 	}
5854 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5855 }
5856 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5857 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5858 {
5859 	USE_OPLINE
5860 	zval *op1, *op2;
5861 	double d1, d2;
5862 
5863 	op1 = RT_CONSTANT(opline, opline->op1);
5864 	op2 = RT_CONSTANT(opline, opline->op2);
5865 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5866 		/* pass */
5867 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5868 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5869 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
5870 is_smaller_or_equal_true:
5871 				ZEND_VM_SMART_BRANCH_TRUE();
5872 				ZVAL_TRUE(EX_VAR(opline->result.var));
5873 				ZEND_VM_NEXT_OPCODE();
5874 			} else {
5875 is_smaller_or_equal_false:
5876 				ZEND_VM_SMART_BRANCH_FALSE();
5877 				ZVAL_FALSE(EX_VAR(opline->result.var));
5878 				ZEND_VM_NEXT_OPCODE();
5879 			}
5880 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5881 			d1 = (double)Z_LVAL_P(op1);
5882 			d2 = Z_DVAL_P(op2);
5883 			goto is_smaller_or_equal_double;
5884 		}
5885 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5886 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5887 			d1 = Z_DVAL_P(op1);
5888 			d2 = Z_DVAL_P(op2);
5889 is_smaller_or_equal_double:
5890 			if (d1 <= d2) {
5891 				goto is_smaller_or_equal_true;
5892 			} else {
5893 				goto is_smaller_or_equal_false;
5894 			}
5895 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5896 			d1 = Z_DVAL_P(op1);
5897 			d2 = (double)Z_LVAL_P(op2);
5898 			goto is_smaller_or_equal_double;
5899 		}
5900 	}
5901 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5902 }
5903 
ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5904 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5905 {
5906 	USE_OPLINE
5907 	zval *op1, *op2;
5908 
5909 	SAVE_OPLINE();
5910 	op1 = RT_CONSTANT(opline, opline->op1);
5911 	op2 = RT_CONSTANT(opline, opline->op2);
5912 	compare_function(EX_VAR(opline->result.var), op1, op2);
5913 
5914 
5915 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5916 }
5917 
ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5918 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5919 {
5920 	USE_OPLINE
5921 	zval *op1, *op2;
5922 
5923 	op1 = RT_CONSTANT(opline, opline->op1);
5924 	op2 = RT_CONSTANT(opline, opline->op2);
5925 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5926 		/* pass */
5927 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5928 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5929 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
5930 		ZEND_VM_NEXT_OPCODE();
5931 	}
5932 
5933 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5934 }
5935 
ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5936 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5937 {
5938 	USE_OPLINE
5939 	zval *op1, *op2;
5940 
5941 	op1 = RT_CONSTANT(opline, opline->op1);
5942 	op2 = RT_CONSTANT(opline, opline->op2);
5943 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5944 		/* pass */
5945 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5946 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5947 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
5948 		ZEND_VM_NEXT_OPCODE();
5949 	}
5950 
5951 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5952 }
5953 
ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5954 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5955 {
5956 	USE_OPLINE
5957 	zval *op1, *op2;
5958 
5959 	op1 = RT_CONSTANT(opline, opline->op1);
5960 	op2 = RT_CONSTANT(opline, opline->op2);
5961 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5962 		/* pass */
5963 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5964 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5965 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
5966 		ZEND_VM_NEXT_OPCODE();
5967 	}
5968 
5969 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5970 }
5971 
ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5972 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5973 {
5974 	USE_OPLINE
5975 	zval *op1, *op2;
5976 
5977 	SAVE_OPLINE();
5978 	op1 = RT_CONSTANT(opline, opline->op1);
5979 	op2 = RT_CONSTANT(opline, opline->op2);
5980 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
5981 
5982 
5983 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5984 }
5985 
ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5986 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5987 {
5988 	USE_OPLINE
5989 	zval *container, *dim, *value;
5990 
5991 	SAVE_OPLINE();
5992 	container = RT_CONSTANT(opline, opline->op1);
5993 	dim = RT_CONSTANT(opline, opline->op2);
5994 	if (IS_CONST != IS_CONST) {
5995 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
5996 fetch_dim_r_array:
5997 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
5998 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
5999 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
6000 			container = Z_REFVAL_P(container);
6001 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6002 				goto fetch_dim_r_array;
6003 			} else {
6004 				goto fetch_dim_r_slow;
6005 			}
6006 		} else {
6007 fetch_dim_r_slow:
6008 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
6009 				dim++;
6010 			}
6011 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
6012 		}
6013 	} else {
6014 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6015 	}
6016 
6017 
6018 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6019 }
6020 
ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6021 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6022 {
6023 	USE_OPLINE
6024 	zval *container;
6025 
6026 	SAVE_OPLINE();
6027 	container = RT_CONSTANT(opline, opline->op1);
6028 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6029 
6030 
6031 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6032 }
6033 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6034 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6035 {
6036 #if 0
6037 	USE_OPLINE
6038 #endif
6039 
6040 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
6041         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
6042 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6043         }
6044 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6045 	} else {
6046 		if (IS_CONST == IS_UNUSED) {
6047 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6048 		}
6049 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6050 	}
6051 }
6052 
ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6053 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6054 {
6055 	USE_OPLINE
6056 	zval *container;
6057 	zval *offset;
6058 	void **cache_slot = NULL;
6059 
6060 	SAVE_OPLINE();
6061 	container = RT_CONSTANT(opline, opline->op1);
6062 	offset = RT_CONSTANT(opline, opline->op2);
6063 
6064 	if (IS_CONST == IS_CONST ||
6065 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6066 	    do {
6067 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6068 				container = Z_REFVAL_P(container);
6069 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
6070 					break;
6071 				}
6072 			}
6073 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
6074 				ZVAL_UNDEFINED_OP1();
6075 			}
6076 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
6077 				ZVAL_UNDEFINED_OP2();
6078 			}
6079 			zend_wrong_property_read(container, offset);
6080 			ZVAL_NULL(EX_VAR(opline->result.var));
6081 			goto fetch_obj_r_finish;
6082 		} while (0);
6083 	}
6084 
6085 	/* here we are sure we are dealing with an object */
6086 	do {
6087 		zend_object *zobj = Z_OBJ_P(container);
6088 		zend_string *name, *tmp_name;
6089 		zval *retval;
6090 
6091 		if (IS_CONST == IS_CONST) {
6092 			name = Z_STR_P(offset);
6093 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
6094 
6095 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
6096 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
6097 
6098 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
6099 					retval = OBJ_PROP(zobj, prop_offset);
6100 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
6101 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6102 							goto fetch_obj_r_copy;
6103 						} else {
6104 fetch_obj_r_fast_copy:
6105 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6106 							ZEND_VM_NEXT_OPCODE();
6107 						}
6108 					}
6109 				} else if (EXPECTED(zobj->properties != NULL)) {
6110 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
6111 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
6112 
6113 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
6114 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
6115 
6116 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
6117 						        (EXPECTED(p->key == name) ||
6118 						         (EXPECTED(p->h == ZSTR_H(name)) &&
6119 						          EXPECTED(p->key != NULL) &&
6120 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
6121 								retval = &p->val;
6122 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6123 									goto fetch_obj_r_copy;
6124 								} else {
6125 									goto fetch_obj_r_fast_copy;
6126 								}
6127 							}
6128 						}
6129 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
6130 					}
6131 					retval = zend_hash_find_ex(zobj->properties, name, 1);
6132 					if (EXPECTED(retval)) {
6133 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
6134 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
6135 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6136 							goto fetch_obj_r_copy;
6137 						} else {
6138 							goto fetch_obj_r_fast_copy;
6139 						}
6140 					}
6141 				}
6142 			}
6143 		} else {
6144 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
6145 				ZVAL_UNDEFINED_OP2();
6146 			}
6147 			name = zval_try_get_tmp_string(offset, &tmp_name);
6148 			if (UNEXPECTED(!name)) {
6149 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6150 				break;
6151 			}
6152 		}
6153 
6154 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
6155 
6156 		if (IS_CONST != IS_CONST) {
6157 			zend_tmp_string_release(tmp_name);
6158 		}
6159 
6160 		if (retval != EX_VAR(opline->result.var)) {
6161 fetch_obj_r_copy:
6162 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6163 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
6164 			zend_unwrap_reference(retval);
6165 		}
6166 	} while (0);
6167 
6168 fetch_obj_r_finish:
6169 
6170 
6171 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6172 }
6173 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6174 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6175 {
6176 	USE_OPLINE
6177 	zval *container;
6178 	zval *offset;
6179 	void **cache_slot = NULL;
6180 
6181 	SAVE_OPLINE();
6182 	container = RT_CONSTANT(opline, opline->op1);
6183 	offset = RT_CONSTANT(opline, opline->op2);
6184 
6185 	if (IS_CONST == IS_CONST ||
6186 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6187 		do {
6188 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6189 				container = Z_REFVAL_P(container);
6190 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
6191 					break;
6192 				}
6193 			}
6194 			ZVAL_NULL(EX_VAR(opline->result.var));
6195 			goto fetch_obj_is_finish;
6196 		} while (0);
6197 	}
6198 
6199 	/* here we are sure we are dealing with an object */
6200 	do {
6201 		zend_object *zobj = Z_OBJ_P(container);
6202 		zend_string *name, *tmp_name;
6203 		zval *retval;
6204 
6205 		if (IS_CONST == IS_CONST) {
6206 			name = Z_STR_P(offset);
6207 			cache_slot = CACHE_ADDR(opline->extended_value);
6208 
6209 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
6210 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
6211 
6212 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
6213 					retval = OBJ_PROP(zobj, prop_offset);
6214 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
6215 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6216 							goto fetch_obj_is_copy;
6217 						} else {
6218 fetch_obj_is_fast_copy:
6219 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6220 							ZEND_VM_NEXT_OPCODE();
6221 						}
6222 					}
6223 				} else if (EXPECTED(zobj->properties != NULL)) {
6224 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
6225 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
6226 
6227 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
6228 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
6229 
6230 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
6231 						        (EXPECTED(p->key == name) ||
6232 						         (EXPECTED(p->h == ZSTR_H(name)) &&
6233 						          EXPECTED(p->key != NULL) &&
6234 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
6235 								retval = &p->val;
6236 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6237 									goto fetch_obj_is_copy;
6238 								} else {
6239 									goto fetch_obj_is_fast_copy;
6240 								}
6241 							}
6242 						}
6243 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
6244 					}
6245 					retval = zend_hash_find_ex(zobj->properties, name, 1);
6246 					if (EXPECTED(retval)) {
6247 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
6248 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
6249 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6250 							goto fetch_obj_is_copy;
6251 						} else {
6252 							goto fetch_obj_is_fast_copy;
6253 						}
6254 					}
6255 				}
6256 			}
6257 		} else {
6258 			name = zval_try_get_tmp_string(offset, &tmp_name);
6259 			if (UNEXPECTED(!name)) {
6260 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6261 				break;
6262 			}
6263 		}
6264 
6265 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
6266 
6267 		if (IS_CONST != IS_CONST) {
6268 			zend_tmp_string_release(tmp_name);
6269 		}
6270 
6271 		if (retval != EX_VAR(opline->result.var)) {
6272 fetch_obj_is_copy:
6273 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6274 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
6275 			zend_unwrap_reference(retval);
6276 		}
6277 	} while (0);
6278 
6279 fetch_obj_is_finish:
6280 
6281 
6282 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6283 }
6284 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6285 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6286 {
6287 #if 0
6288 	USE_OPLINE
6289 #endif
6290 
6291 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
6292 		/* Behave like FETCH_OBJ_W */
6293 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
6294 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6295 		}
6296 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6297 	} else {
6298 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6299 	}
6300 }
6301 
ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6302 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6303 {
6304 	USE_OPLINE
6305 	zval *container;
6306 
6307 	SAVE_OPLINE();
6308 	container = RT_CONSTANT(opline, opline->op1);
6309 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6310 
6311 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6312 }
6313 
ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6314 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6315 {
6316 	USE_OPLINE
6317 	zval *op1, *op2;
6318 	zend_string *op1_str, *op2_str, *str;
6319 
6320 
6321 	op1 = RT_CONSTANT(opline, opline->op1);
6322 	op2 = RT_CONSTANT(opline, opline->op2);
6323 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
6324 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
6325 		zend_string *op1_str = Z_STR_P(op1);
6326 		zend_string *op2_str = Z_STR_P(op2);
6327 		zend_string *str;
6328 
6329 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
6330 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
6331 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
6332 			} else {
6333 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
6334 			}
6335 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6336 				zend_string_release_ex(op1_str, 0);
6337 			}
6338 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
6339 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
6340 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
6341 			} else {
6342 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
6343 			}
6344 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6345 				zend_string_release_ex(op2_str, 0);
6346 			}
6347 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
6348 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
6349 		    size_t len = ZSTR_LEN(op1_str);
6350 
6351 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
6352 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6353 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6354 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6355 				zend_string_release_ex(op2_str, 0);
6356 			}
6357 		} else {
6358 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
6359 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
6360 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6361 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6362 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6363 				zend_string_release_ex(op1_str, 0);
6364 			}
6365 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6366 				zend_string_release_ex(op2_str, 0);
6367 			}
6368 		}
6369 		ZEND_VM_NEXT_OPCODE();
6370 	}
6371 
6372 	SAVE_OPLINE();
6373 	if (IS_CONST == IS_CONST) {
6374 		op1_str = Z_STR_P(op1);
6375 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
6376 		op1_str = zend_string_copy(Z_STR_P(op1));
6377 	} else {
6378 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
6379 			ZVAL_UNDEFINED_OP1();
6380 		}
6381 		op1_str = zval_get_string_func(op1);
6382 	}
6383 	if (IS_CONST == IS_CONST) {
6384 		op2_str = Z_STR_P(op2);
6385 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
6386 		op2_str = zend_string_copy(Z_STR_P(op2));
6387 	} else {
6388 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
6389 			ZVAL_UNDEFINED_OP2();
6390 		}
6391 		op2_str = zval_get_string_func(op2);
6392 	}
6393 	do {
6394 		if (IS_CONST != IS_CONST) {
6395 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
6396 				if (IS_CONST == IS_CONST) {
6397 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
6398 						GC_ADDREF(op2_str);
6399 					}
6400 				}
6401 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
6402 				zend_string_release_ex(op1_str, 0);
6403 				break;
6404 			}
6405 		}
6406 		if (IS_CONST != IS_CONST) {
6407 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
6408 				if (IS_CONST == IS_CONST) {
6409 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
6410 						GC_ADDREF(op1_str);
6411 					}
6412 				}
6413 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
6414 				zend_string_release_ex(op2_str, 0);
6415 				break;
6416 			}
6417 		}
6418 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
6419 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
6420 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6421 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6422 		if (IS_CONST != IS_CONST) {
6423 			zend_string_release_ex(op1_str, 0);
6424 		}
6425 		if (IS_CONST != IS_CONST) {
6426 			zend_string_release_ex(op2_str, 0);
6427 		}
6428 	} while (0);
6429 
6430 
6431 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6432 }
6433 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6434 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6435 {
6436 	USE_OPLINE
6437 	zval *function_name;
6438 	zval *object;
6439 	zend_function *fbc;
6440 	zend_class_entry *called_scope;
6441 	zend_object *obj;
6442 	zend_execute_data *call;
6443 	uint32_t call_info;
6444 
6445 	SAVE_OPLINE();
6446 
6447 	object = RT_CONSTANT(opline, opline->op1);
6448 
6449 	if (IS_CONST != IS_CONST) {
6450 		function_name = RT_CONSTANT(opline, opline->op2);
6451 	}
6452 
6453 	if (IS_CONST != IS_CONST &&
6454 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
6455 		do {
6456 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
6457 				function_name = Z_REFVAL_P(function_name);
6458 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
6459 					break;
6460 				}
6461 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
6462 				ZVAL_UNDEFINED_OP2();
6463 				if (UNEXPECTED(EG(exception) != NULL)) {
6464 
6465 					HANDLE_EXCEPTION();
6466 				}
6467 			}
6468 			zend_throw_error(NULL, "Method name must be a string");
6469 
6470 
6471 			HANDLE_EXCEPTION();
6472 		} while (0);
6473 	}
6474 
6475 	if (IS_CONST == IS_UNUSED) {
6476 		obj = Z_OBJ_P(object);
6477 	} else {
6478 		do {
6479 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
6480 				obj = Z_OBJ_P(object);
6481 			} else {
6482 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
6483 					zend_reference *ref = Z_REF_P(object);
6484 
6485 					object = &ref->val;
6486 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
6487 						obj = Z_OBJ_P(object);
6488 						if (IS_CONST & IS_VAR) {
6489 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
6490 								efree_size(ref, sizeof(zend_reference));
6491 							} else {
6492 								Z_ADDREF_P(object);
6493 							}
6494 						}
6495 						break;
6496 					}
6497 				}
6498 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
6499 					object = ZVAL_UNDEFINED_OP1();
6500 					if (UNEXPECTED(EG(exception) != NULL)) {
6501 						if (IS_CONST != IS_CONST) {
6502 
6503 						}
6504 						HANDLE_EXCEPTION();
6505 					}
6506 				}
6507 				if (IS_CONST == IS_CONST) {
6508 					function_name = RT_CONSTANT(opline, opline->op2);
6509 				}
6510 				zend_invalid_method_call(object, function_name);
6511 
6512 
6513 				HANDLE_EXCEPTION();
6514 			}
6515 		} while (0);
6516 	}
6517 
6518 	called_scope = obj->ce;
6519 
6520 	if (IS_CONST == IS_CONST &&
6521 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
6522 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
6523 	} else {
6524 	    zend_object *orig_obj = obj;
6525 
6526 		if (IS_CONST == IS_CONST) {
6527 			function_name = RT_CONSTANT(opline, opline->op2);
6528 		}
6529 
6530 		/* First, locate the function. */
6531 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
6532 		if (UNEXPECTED(fbc == NULL)) {
6533 			if (EXPECTED(!EG(exception))) {
6534 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
6535 			}
6536 
6537 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
6538 				zend_objects_store_del(orig_obj);
6539 			}
6540 			HANDLE_EXCEPTION();
6541 		}
6542 		if (IS_CONST == IS_CONST &&
6543 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
6544 		    EXPECTED(obj == orig_obj)) {
6545 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
6546 		}
6547 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
6548 			GC_ADDREF(obj); /* For $this pointer */
6549 			if (GC_DELREF(orig_obj) == 0) {
6550 				zend_objects_store_del(orig_obj);
6551 			}
6552 		}
6553 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
6554 			init_func_run_time_cache(&fbc->op_array);
6555 		}
6556 	}
6557 
6558 	if (IS_CONST != IS_CONST) {
6559 
6560 	}
6561 
6562 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
6563 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
6564 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
6565 			zend_objects_store_del(obj);
6566 			if (UNEXPECTED(EG(exception))) {
6567 				HANDLE_EXCEPTION();
6568 			}
6569 		}
6570 		/* call static method */
6571 		obj = (zend_object*)called_scope;
6572 		call_info = ZEND_CALL_NESTED_FUNCTION;
6573 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
6574 		if (IS_CONST == IS_CV) {
6575 			GC_ADDREF(obj); /* For $this pointer */
6576 		}
6577 		/* CV may be changed indirectly (e.g. when it's a reference) */
6578 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
6579 	}
6580 
6581 	call = zend_vm_stack_push_call_frame(call_info,
6582 		fbc, opline->extended_value, obj);
6583 	call->prev_execute_data = EX(call);
6584 	EX(call) = call;
6585 
6586 	ZEND_VM_NEXT_OPCODE();
6587 }
6588 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6589 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6590 {
6591 	USE_OPLINE
6592 	zval *function_name;
6593 	zend_class_entry *ce;
6594 	uint32_t call_info;
6595 	zend_function *fbc;
6596 	zend_execute_data *call;
6597 
6598 	SAVE_OPLINE();
6599 
6600 	if (IS_CONST == IS_CONST) {
6601 		/* no function found. try a static method in class */
6602 		ce = CACHED_PTR(opline->result.num);
6603 		if (UNEXPECTED(ce == NULL)) {
6604 			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);
6605 			if (UNEXPECTED(ce == NULL)) {
6606 
6607 				HANDLE_EXCEPTION();
6608 			}
6609 			if (IS_CONST != IS_CONST) {
6610 				CACHE_PTR(opline->result.num, ce);
6611 			}
6612 		}
6613 	} else if (IS_CONST == IS_UNUSED) {
6614 		ce = zend_fetch_class(NULL, opline->op1.num);
6615 		if (UNEXPECTED(ce == NULL)) {
6616 
6617 			HANDLE_EXCEPTION();
6618 		}
6619 	} else {
6620 		ce = Z_CE_P(EX_VAR(opline->op1.var));
6621 	}
6622 
6623 	if (IS_CONST == IS_CONST &&
6624 	    IS_CONST == IS_CONST &&
6625 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
6626 		/* nothing to do */
6627 	} else if (IS_CONST != IS_CONST &&
6628 	           IS_CONST == IS_CONST &&
6629 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
6630 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
6631 	} else if (IS_CONST != IS_UNUSED) {
6632 		function_name = RT_CONSTANT(opline, opline->op2);
6633 		if (IS_CONST != IS_CONST) {
6634 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
6635 				do {
6636 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
6637 						function_name = Z_REFVAL_P(function_name);
6638 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
6639 							break;
6640 						}
6641 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
6642 						ZVAL_UNDEFINED_OP2();
6643 						if (UNEXPECTED(EG(exception) != NULL)) {
6644 							HANDLE_EXCEPTION();
6645 						}
6646 					}
6647 					zend_throw_error(NULL, "Method name must be a string");
6648 
6649 					HANDLE_EXCEPTION();
6650 				} while (0);
6651 			}
6652 		}
6653 
6654 		if (ce->get_static_method) {
6655 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
6656 		} else {
6657 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
6658 		}
6659 		if (UNEXPECTED(fbc == NULL)) {
6660 			if (EXPECTED(!EG(exception))) {
6661 				zend_undefined_method(ce, Z_STR_P(function_name));
6662 			}
6663 
6664 			HANDLE_EXCEPTION();
6665 		}
6666 		if (IS_CONST == IS_CONST &&
6667 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
6668 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
6669 		}
6670 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
6671 			init_func_run_time_cache(&fbc->op_array);
6672 		}
6673 		if (IS_CONST != IS_CONST) {
6674 
6675 		}
6676 	} else {
6677 		if (UNEXPECTED(ce->constructor == NULL)) {
6678 			zend_throw_error(NULL, "Cannot call constructor");
6679 			HANDLE_EXCEPTION();
6680 		}
6681 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
6682 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
6683 			HANDLE_EXCEPTION();
6684 		}
6685 		fbc = ce->constructor;
6686 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
6687 			init_func_run_time_cache(&fbc->op_array);
6688 		}
6689 	}
6690 
6691 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
6692 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
6693 			ce = (zend_class_entry*)Z_OBJ(EX(This));
6694 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
6695 		} else {
6696 			zend_non_static_method_call(fbc);
6697 			HANDLE_EXCEPTION();
6698 		}
6699 	} else {
6700 		/* previous opcode is ZEND_FETCH_CLASS */
6701 		if (IS_CONST == IS_UNUSED
6702 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
6703 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
6704 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
6705 				ce = Z_OBJCE(EX(This));
6706 			} else {
6707 				ce = Z_CE(EX(This));
6708 			}
6709 		}
6710 		call_info = ZEND_CALL_NESTED_FUNCTION;
6711 	}
6712 
6713 	call = zend_vm_stack_push_call_frame(call_info,
6714 		fbc, opline->extended_value, ce);
6715 	call->prev_execute_data = EX(call);
6716 	EX(call) = call;
6717 
6718 	ZEND_VM_NEXT_OPCODE();
6719 }
6720 
ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6721 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6722 {
6723 	USE_OPLINE
6724 	zval *function_name;
6725 	zend_fcall_info_cache fcc;
6726 	char *error = NULL;
6727 	zend_function *func;
6728 	void *object_or_called_scope;
6729 	zend_execute_data *call;
6730 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
6731 
6732 	SAVE_OPLINE();
6733 	function_name = RT_CONSTANT(opline, opline->op2);
6734 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
6735 		ZEND_ASSERT(!error);
6736 		func = fcc.function_handler;
6737 		object_or_called_scope = fcc.called_scope;
6738 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
6739 			/* Delay closure destruction until its invocation */
6740 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
6741 			call_info |= ZEND_CALL_CLOSURE;
6742 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
6743 				call_info |= ZEND_CALL_FAKE_CLOSURE;
6744 			}
6745 			if (fcc.object) {
6746 				object_or_called_scope = fcc.object;
6747 				call_info |= ZEND_CALL_HAS_THIS;
6748 			}
6749 		} else if (fcc.object) {
6750 			GC_ADDREF(fcc.object); /* For $this pointer */
6751 			object_or_called_scope = fcc.object;
6752 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
6753 		}
6754 
6755 		if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
6756 			if (call_info & ZEND_CALL_CLOSURE) {
6757 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
6758 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
6759 				zend_object_release(fcc.object);
6760 			}
6761 			HANDLE_EXCEPTION();
6762 		}
6763 
6764 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
6765 			init_func_run_time_cache(&func->op_array);
6766 		}
6767 	} else {
6768 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
6769 		efree(error);
6770 
6771 		HANDLE_EXCEPTION();
6772 	}
6773 
6774 	call = zend_vm_stack_push_call_frame(call_info,
6775 		func, opline->extended_value, object_or_called_scope);
6776 	call->prev_execute_data = EX(call);
6777 	EX(call) = call;
6778 
6779 	ZEND_VM_NEXT_OPCODE();
6780 }
6781 
ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6782 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6783 {
6784 	USE_OPLINE
6785 	zval *value, *arg;
6786 
6787 	if (IS_CONST == IS_CONST) {
6788 		SAVE_OPLINE();
6789 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6790 		uint32_t arg_num;
6791 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
6792 		if (UNEXPECTED(!arg)) {
6793 
6794 			HANDLE_EXCEPTION();
6795 		}
6796 	} else {
6797 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
6798 	}
6799 
6800 	value = RT_CONSTANT(opline, opline->op1);
6801 	ZVAL_COPY_VALUE(arg, value);
6802 	if (IS_CONST == IS_CONST) {
6803 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
6804 			Z_ADDREF_P(arg);
6805 		}
6806 	}
6807 	ZEND_VM_NEXT_OPCODE();
6808 }
6809 
ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6810 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6811 {
6812 	USE_OPLINE
6813 	zval *value, *arg;
6814 	uint32_t arg_num;
6815 
6816 	if (IS_CONST == IS_CONST) {
6817 		SAVE_OPLINE();
6818 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6819 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
6820 		if (UNEXPECTED(!arg)) {
6821 
6822 			HANDLE_EXCEPTION();
6823 		}
6824 	} else {
6825 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
6826 		arg_num = opline->op2.num;
6827 	}
6828 
6829 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
6830 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
6831 			goto send_val_by_ref;
6832 		}
6833 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
6834 send_val_by_ref:
6835 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6836 	}
6837 	value = RT_CONSTANT(opline, opline->op1);
6838 	ZVAL_COPY_VALUE(arg, value);
6839 	if (IS_CONST == IS_CONST) {
6840 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
6841 			Z_ADDREF_P(arg);
6842 		}
6843 	}
6844 	ZEND_VM_NEXT_OPCODE();
6845 }
6846 
ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6847 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6848 {
6849 	zend_class_entry *ce, *scope;
6850 	zend_class_constant *c;
6851 	zval *value, *zv;
6852 	USE_OPLINE
6853 
6854 	SAVE_OPLINE();
6855 
6856 	do {
6857 		if (IS_CONST == IS_CONST) {
6858 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
6859 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
6860 				break;
6861 			} else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
6862 				ce = CACHED_PTR(opline->extended_value);
6863 			} else {
6864 				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);
6865 				if (UNEXPECTED(ce == NULL)) {
6866 					ZVAL_UNDEF(EX_VAR(opline->result.var));
6867 					HANDLE_EXCEPTION();
6868 				}
6869 			}
6870 		} else {
6871 			if (IS_CONST == IS_UNUSED) {
6872 				ce = zend_fetch_class(NULL, opline->op1.num);
6873 				if (UNEXPECTED(ce == NULL)) {
6874 					ZVAL_UNDEF(EX_VAR(opline->result.var));
6875 					HANDLE_EXCEPTION();
6876 				}
6877 			} else {
6878 				ce = Z_CE_P(EX_VAR(opline->op1.var));
6879 			}
6880 			if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
6881 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
6882 				break;
6883 			}
6884 		}
6885 
6886 		zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1);
6887 		if (EXPECTED(zv != NULL)) {
6888 			c = Z_PTR_P(zv);
6889 			scope = EX(func)->op_array.scope;
6890 			if (!zend_verify_const_access(c, scope)) {
6891 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
6892 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6893 				HANDLE_EXCEPTION();
6894 			}
6895 			value = &c->value;
6896 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
6897 				zval_update_constant_ex(value, c->ce);
6898 				if (UNEXPECTED(EG(exception) != NULL)) {
6899 					ZVAL_UNDEF(EX_VAR(opline->result.var));
6900 					HANDLE_EXCEPTION();
6901 				}
6902 			}
6903 			CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
6904 		} else {
6905 			zend_throw_error(NULL, "Undefined constant %s::%s",
6906 				ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
6907 			ZVAL_UNDEF(EX_VAR(opline->result.var));
6908 			HANDLE_EXCEPTION();
6909 		}
6910 	} while (0);
6911 
6912 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
6913 
6914 	ZEND_VM_NEXT_OPCODE();
6915 }
6916 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6917 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6918 {
6919 	USE_OPLINE
6920 	zval *expr_ptr, new_expr;
6921 
6922 	SAVE_OPLINE();
6923 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
6924 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
6925 		expr_ptr = NULL;
6926 		if (Z_ISREF_P(expr_ptr)) {
6927 			Z_ADDREF_P(expr_ptr);
6928 		} else {
6929 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
6930 		}
6931 
6932 	} else {
6933 		expr_ptr = RT_CONSTANT(opline, opline->op1);
6934 		if (IS_CONST == IS_TMP_VAR) {
6935 			/* pass */
6936 		} else if (IS_CONST == IS_CONST) {
6937 			Z_TRY_ADDREF_P(expr_ptr);
6938 		} else if (IS_CONST == IS_CV) {
6939 			ZVAL_DEREF(expr_ptr);
6940 			Z_TRY_ADDREF_P(expr_ptr);
6941 		} else /* if (IS_CONST == IS_VAR) */ {
6942 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
6943 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
6944 
6945 				expr_ptr = Z_REFVAL_P(expr_ptr);
6946 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
6947 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
6948 					expr_ptr = &new_expr;
6949 					efree_size(ref, sizeof(zend_reference));
6950 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
6951 					Z_ADDREF_P(expr_ptr);
6952 				}
6953 			}
6954 		}
6955 	}
6956 
6957 	if (IS_CONST != IS_UNUSED) {
6958 		zval *offset = RT_CONSTANT(opline, opline->op2);
6959 		zend_string *str;
6960 		zend_ulong hval;
6961 
6962 add_again:
6963 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
6964 			str = Z_STR_P(offset);
6965 			if (IS_CONST != IS_CONST) {
6966 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
6967 					goto num_index;
6968 				}
6969 			}
6970 str_index:
6971 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
6972 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
6973 			hval = Z_LVAL_P(offset);
6974 num_index:
6975 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
6976 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
6977 			offset = Z_REFVAL_P(offset);
6978 			goto add_again;
6979 		} else if (Z_TYPE_P(offset) == IS_NULL) {
6980 			str = ZSTR_EMPTY_ALLOC();
6981 			goto str_index;
6982 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
6983 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
6984 			goto num_index;
6985 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
6986 			hval = 0;
6987 			goto num_index;
6988 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
6989 			hval = 1;
6990 			goto num_index;
6991 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
6992 			zend_use_resource_as_offset(offset);
6993 			hval = Z_RES_HANDLE_P(offset);
6994 			goto num_index;
6995 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
6996 			ZVAL_UNDEFINED_OP2();
6997 			str = ZSTR_EMPTY_ALLOC();
6998 			goto str_index;
6999 		} else {
7000 			zend_illegal_offset();
7001 			zval_ptr_dtor_nogc(expr_ptr);
7002 		}
7003 
7004 	} else {
7005 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
7006 			zend_cannot_add_element();
7007 			zval_ptr_dtor_nogc(expr_ptr);
7008 		}
7009 	}
7010 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7011 }
7012 
ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7013 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7014 {
7015 	zval *array;
7016 	uint32_t size;
7017 	USE_OPLINE
7018 
7019 	array = EX_VAR(opline->result.var);
7020 	if (IS_CONST != IS_UNUSED) {
7021 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
7022 		ZVAL_ARR(array, zend_new_array(size));
7023 		/* Explicitly initialize array as not-packed if flag is set */
7024 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
7025 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
7026 		}
7027 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7028 	} else {
7029 		ZVAL_ARR(array, zend_new_array(0));
7030 		ZEND_VM_NEXT_OPCODE();
7031 	}
7032 }
7033 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7034 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7035 {
7036 	USE_OPLINE
7037 	zval *container;
7038 	bool result;
7039 	zend_ulong hval;
7040 	zval *offset;
7041 
7042 	SAVE_OPLINE();
7043 	container = RT_CONSTANT(opline, opline->op1);
7044 	offset = RT_CONSTANT(opline, opline->op2);
7045 
7046 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7047 		HashTable *ht;
7048 		zval *value;
7049 		zend_string *str;
7050 
7051 isset_dim_obj_array:
7052 		ht = Z_ARRVAL_P(container);
7053 isset_again:
7054 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
7055 			str = Z_STR_P(offset);
7056 			if (IS_CONST != IS_CONST) {
7057 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
7058 					goto num_index_prop;
7059 				}
7060 			}
7061 			value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST);
7062 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
7063 			hval = Z_LVAL_P(offset);
7064 num_index_prop:
7065 			value = zend_hash_index_find(ht, hval);
7066 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
7067 			offset = Z_REFVAL_P(offset);
7068 			goto isset_again;
7069 		} else {
7070 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
7071 			if (UNEXPECTED(EG(exception))) {
7072 				result = 0;
7073 				goto isset_dim_obj_exit;
7074 			}
7075 		}
7076 
7077 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
7078 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
7079 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
7080 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
7081 
7082 			if (IS_CONST & (IS_CONST|IS_CV)) {
7083 				/* avoid exception check */
7084 
7085 				ZEND_VM_SMART_BRANCH(result, 0);
7086 			}
7087 		} else {
7088 			result = (value == NULL || !i_zend_is_true(value));
7089 		}
7090 		goto isset_dim_obj_exit;
7091 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
7092 		container = Z_REFVAL_P(container);
7093 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7094 			goto isset_dim_obj_array;
7095 		}
7096 	}
7097 
7098 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
7099 		offset++;
7100 	}
7101 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
7102 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
7103 	} else {
7104 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
7105 	}
7106 
7107 isset_dim_obj_exit:
7108 
7109 
7110 	ZEND_VM_SMART_BRANCH(result, 1);
7111 }
7112 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7113 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7114 {
7115 	USE_OPLINE
7116 	zval *container;
7117 	int result;
7118 	zval *offset;
7119 	zend_string *name, *tmp_name;
7120 
7121 	SAVE_OPLINE();
7122 	container = RT_CONSTANT(opline, opline->op1);
7123 	offset = RT_CONSTANT(opline, opline->op2);
7124 
7125 	if (IS_CONST == IS_CONST ||
7126 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
7127 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
7128 			container = Z_REFVAL_P(container);
7129 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
7130 				result = (opline->extended_value & ZEND_ISEMPTY);
7131 				goto isset_object_finish;
7132 			}
7133 		} else {
7134 			result = (opline->extended_value & ZEND_ISEMPTY);
7135 			goto isset_object_finish;
7136 		}
7137 	}
7138 
7139 	if (IS_CONST == IS_CONST) {
7140 		name = Z_STR_P(offset);
7141 	} else {
7142 		name = zval_try_get_tmp_string(offset, &tmp_name);
7143 		if (UNEXPECTED(!name)) {
7144 			result = 0;
7145 			goto isset_object_finish;
7146 		}
7147 	}
7148 
7149 	result =
7150 		(opline->extended_value & ZEND_ISEMPTY) ^
7151 		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));
7152 
7153 	if (IS_CONST != IS_CONST) {
7154 		zend_tmp_string_release(tmp_name);
7155 	}
7156 
7157 isset_object_finish:
7158 
7159 
7160 	ZEND_VM_SMART_BRANCH(result, 1);
7161 }
7162 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7163 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7164 {
7165 	USE_OPLINE
7166 
7167 	zval *key, *subject;
7168 	HashTable *ht;
7169 	zend_bool result;
7170 
7171 	SAVE_OPLINE();
7172 
7173 	key = RT_CONSTANT(opline, opline->op1);
7174 	subject = RT_CONSTANT(opline, opline->op2);
7175 
7176 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
7177 array_key_exists_array:
7178 		ht = Z_ARRVAL_P(subject);
7179 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
7180 	} else {
7181 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
7182 			subject = Z_REFVAL_P(subject);
7183 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
7184 				goto array_key_exists_array;
7185 			}
7186 		}
7187 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
7188 		result = 0;
7189 	}
7190 
7191 
7192 	ZEND_VM_SMART_BRANCH(result, 1);
7193 }
7194 
7195 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7196 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7197 {
7198 	USE_OPLINE
7199 	zval *lcname, *zv;
7200 	zend_class_entry *ce;
7201 
7202 	ce = CACHED_PTR(opline->extended_value);
7203 	if (ce == NULL) {
7204 		lcname = RT_CONSTANT(opline, opline->op1);
7205 		zv = zend_hash_find_ex(EG(class_table), Z_STR_P(lcname + 1), 1);
7206 		if (zv) {
7207 			SAVE_OPLINE();
7208 			ce = Z_CE_P(zv);
7209 			zv = zend_hash_set_bucket_key(EG(class_table), (Bucket*)zv, Z_STR_P(lcname));
7210 			if (UNEXPECTED(!zv)) {
7211 				zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ZSTR_VAL(ce->name));
7212 			} else {
7213 				if (zend_do_link_class(ce, Z_STR_P(RT_CONSTANT(opline, opline->op2))) == FAILURE) {
7214 					/* Reload bucket pointer, the hash table may have been reallocated */
7215 					zv = zend_hash_find(EG(class_table), Z_STR_P(lcname));
7216 					zend_hash_set_bucket_key(EG(class_table), (Bucket *) zv, Z_STR_P(lcname + 1));
7217 					HANDLE_EXCEPTION();
7218 				}
7219 			}
7220 		}
7221 		CACHE_PTR(opline->extended_value, ce);
7222 	}
7223 	ZEND_VM_NEXT_OPCODE();
7224 }
7225 
ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7227 {
7228 	USE_OPLINE
7229 	zval *name;
7230 	zval *val;
7231 	zend_constant c;
7232 
7233 	SAVE_OPLINE();
7234 	name  = RT_CONSTANT(opline, opline->op1);
7235 	val   = RT_CONSTANT(opline, opline->op2);
7236 
7237 	ZVAL_COPY(&c.value, val);
7238 	if (Z_OPT_CONSTANT(c.value)) {
7239 		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
7240 			zval_ptr_dtor_nogc(&c.value);
7241 
7242 
7243 			HANDLE_EXCEPTION();
7244 		}
7245 	}
7246 	/* non persistent, case sensitive */
7247 	ZEND_CONSTANT_SET_FLAGS(&c, CONST_CS, PHP_USER_CONSTANT);
7248 	c.name = zend_string_copy(Z_STR_P(name));
7249 
7250 	if (zend_register_constant(&c) == FAILURE) {
7251 	}
7252 
7253 
7254 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7255 }
7256 
ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7257 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7258 {
7259 	USE_OPLINE
7260 
7261 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
7262 
7263 	SAVE_OPLINE();
7264 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
7265 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7266 	}
7267 
7268 	/* Destroy the previously yielded value */
7269 	zval_ptr_dtor(&generator->value);
7270 
7271 	/* Destroy the previously yielded key */
7272 	zval_ptr_dtor(&generator->key);
7273 
7274 	/* Set the new yielded value */
7275 	if (IS_CONST != IS_UNUSED) {
7276 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
7277 			/* Constants and temporary variables aren't yieldable by reference,
7278 			 * but we still allow them with a notice. */
7279 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
7280 				zval *value;
7281 
7282 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7283 
7284 				value = RT_CONSTANT(opline, opline->op1);
7285 				ZVAL_COPY_VALUE(&generator->value, value);
7286 				if (IS_CONST == IS_CONST) {
7287 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7288 						Z_ADDREF(generator->value);
7289 					}
7290 				}
7291 			} else {
7292 				zval *value_ptr = NULL;
7293 
7294 				/* If a function call result is yielded and the function did
7295 				 * not return by reference we throw a notice. */
7296 				do {
7297 					if (IS_CONST == IS_VAR) {
7298 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
7299 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
7300 						 && !Z_ISREF_P(value_ptr)) {
7301 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7302 							ZVAL_COPY(&generator->value, value_ptr);
7303 							break;
7304 						}
7305 					}
7306 					if (Z_ISREF_P(value_ptr)) {
7307 						Z_ADDREF_P(value_ptr);
7308 					} else {
7309 						ZVAL_MAKE_REF_EX(value_ptr, 2);
7310 					}
7311 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
7312 				} while (0);
7313 
7314 			}
7315 		} else {
7316 			zval *value = RT_CONSTANT(opline, opline->op1);
7317 
7318 			/* Consts, temporary variables and references need copying */
7319 			if (IS_CONST == IS_CONST) {
7320 				ZVAL_COPY_VALUE(&generator->value, value);
7321 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7322 					Z_ADDREF(generator->value);
7323 				}
7324 			} else if (IS_CONST == IS_TMP_VAR) {
7325 				ZVAL_COPY_VALUE(&generator->value, value);
7326             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
7327 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
7328 
7329 			} else {
7330 				ZVAL_COPY_VALUE(&generator->value, value);
7331 				if (IS_CONST == IS_CV) {
7332 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
7333 				}
7334 			}
7335 		}
7336 	} else {
7337 		/* If no value was specified yield null */
7338 		ZVAL_NULL(&generator->value);
7339 	}
7340 
7341 	/* Set the new yielded key */
7342 	if (IS_CONST != IS_UNUSED) {
7343 		zval *key = RT_CONSTANT(opline, opline->op2);
7344 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
7345 			key = Z_REFVAL_P(key);
7346 		}
7347 		ZVAL_COPY(&generator->key, key);
7348 
7349 		if (Z_TYPE(generator->key) == IS_LONG
7350 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
7351 		) {
7352 			generator->largest_used_integer_key = Z_LVAL(generator->key);
7353 		}
7354 	} else {
7355 		/* If no key was specified we use auto-increment keys */
7356 		generator->largest_used_integer_key++;
7357 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
7358 	}
7359 
7360 	if (RETURN_VALUE_USED(opline)) {
7361 		/* If the return value of yield is used set the send
7362 		 * target and initialize it to NULL */
7363 		generator->send_target = EX_VAR(opline->result.var);
7364 		ZVAL_NULL(generator->send_target);
7365 	} else {
7366 		generator->send_target = NULL;
7367 	}
7368 
7369 	/* We increment to the next op, so we are at the correct position when the
7370 	 * generator is resumed. */
7371 	ZEND_VM_INC_OPCODE();
7372 
7373 	/* The GOTO VM uses a local opline variable. We need to set the opline
7374 	 * variable in execute_data so we don't resume at an old position. */
7375 	SAVE_OPLINE();
7376 
7377 	ZEND_VM_RETURN();
7378 }
7379 
ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7380 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7381 {
7382 	USE_OPLINE
7383 	zval *op, *jump_zv;
7384 	HashTable *jumptable;
7385 
7386 	op = RT_CONSTANT(opline, opline->op1);
7387 
7388 	if (Z_TYPE_P(op) != IS_LONG) {
7389 		ZVAL_DEREF(op);
7390 		if (Z_TYPE_P(op) != IS_LONG) {
7391 			/* Wrong type, fall back to ZEND_CASE chain */
7392 			ZEND_VM_NEXT_OPCODE();
7393 		}
7394 	}
7395 
7396 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7397 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
7398 	if (jump_zv != NULL) {
7399 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
7400 		ZEND_VM_CONTINUE();
7401 	} else {
7402 		/* default */
7403 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7404 		ZEND_VM_CONTINUE();
7405 	}
7406 }
7407 
ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7408 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7409 {
7410 	USE_OPLINE
7411 	zval *op, *jump_zv;
7412 	HashTable *jumptable;
7413 
7414 	op = RT_CONSTANT(opline, opline->op1);
7415 
7416 	if (Z_TYPE_P(op) != IS_STRING) {
7417 		if (IS_CONST == IS_CONST) {
7418 			/* Wrong type, fall back to ZEND_CASE chain */
7419 			ZEND_VM_NEXT_OPCODE();
7420 		} else {
7421 			ZVAL_DEREF(op);
7422 			if (Z_TYPE_P(op) != IS_STRING) {
7423 				/* Wrong type, fall back to ZEND_CASE chain */
7424 				ZEND_VM_NEXT_OPCODE();
7425 			}
7426 		}
7427 	}
7428 
7429 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7430 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
7431 	if (jump_zv != NULL) {
7432 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
7433 		ZEND_VM_CONTINUE();
7434 	} else {
7435 		/* default */
7436 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7437 		ZEND_VM_CONTINUE();
7438 	}
7439 }
7440 
ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7441 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7442 {
7443 	USE_OPLINE
7444 	zval *op, *jump_zv;
7445 	HashTable *jumptable;
7446 
7447 	op = RT_CONSTANT(opline, opline->op1);
7448 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7449 
7450 match_try_again:
7451 	if (Z_TYPE_P(op) == IS_LONG) {
7452 		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
7453 	} else if (Z_TYPE_P(op) == IS_STRING) {
7454 		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
7455 	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
7456 		op = Z_REFVAL_P(op);
7457 		goto match_try_again;
7458 	} else {
7459 		if (UNEXPECTED((IS_CONST & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
7460 			SAVE_OPLINE();
7461 			op = ZVAL_UNDEFINED_OP1();
7462 			if (UNEXPECTED(EG(exception))) {
7463 				HANDLE_EXCEPTION();
7464 			}
7465 			goto match_try_again;
7466 		}
7467 
7468 		goto default_branch;
7469 	}
7470 
7471 	if (jump_zv != NULL) {
7472 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
7473 		ZEND_VM_CONTINUE();
7474 	} else {
7475 default_branch:
7476 		/* default */
7477 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7478 		ZEND_VM_CONTINUE();
7479 	}
7480 }
7481 
ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7482 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7483 {
7484 	USE_OPLINE
7485 	zval *op1;
7486 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7487 	zval *result;
7488 
7489 	SAVE_OPLINE();
7490 	op1 = RT_CONSTANT(opline, opline->op1);
7491 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
7492 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CONST == IS_CONST);
7493 	} else if (opline->extended_value) {
7494 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
7495 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
7496 		} else {
7497 			result = NULL;
7498 		}
7499 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
7500 		result = zend_hash_find_ex(ht, ZSTR_EMPTY_ALLOC(), 1);
7501 	} else {
7502 		zend_string *key;
7503 		zval key_tmp, *val;
7504 
7505 		result = NULL;
7506 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
7507 			ZVAL_STR(&key_tmp, key);
7508 			if (zend_compare(op1, &key_tmp) == 0) {
7509 				result = val;
7510 				break;
7511 			}
7512 		} ZEND_HASH_FOREACH_END();
7513 	}
7514 
7515 	ZEND_VM_SMART_BRANCH(result, 1);
7516 }
7517 
ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7518 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7519 {
7520 	USE_OPLINE
7521 	zval *op1, *op2, *result;
7522 	double d1, d2;
7523 
7524 	op1 = RT_CONSTANT(opline, opline->op1);
7525 	op2 = EX_VAR(opline->op2.var);
7526 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7527 		/* pass */
7528 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7529 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7530 			result = EX_VAR(opline->result.var);
7531 			fast_long_add_function(result, op1, op2);
7532 			ZEND_VM_NEXT_OPCODE();
7533 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7534 			d1 = (double)Z_LVAL_P(op1);
7535 			d2 = Z_DVAL_P(op2);
7536 			goto add_double;
7537 		}
7538 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7539 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7540 			d1 = Z_DVAL_P(op1);
7541 			d2 = Z_DVAL_P(op2);
7542 add_double:
7543 			result = EX_VAR(opline->result.var);
7544 			ZVAL_DOUBLE(result, d1 + d2);
7545 			ZEND_VM_NEXT_OPCODE();
7546 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7547 			d1 = Z_DVAL_P(op1);
7548 			d2 = (double)Z_LVAL_P(op2);
7549 			goto add_double;
7550 		}
7551 	}
7552 
7553 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7554 }
7555 
ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7556 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7557 {
7558 	USE_OPLINE
7559 	zval *op1, *op2, *result;
7560 	double d1, d2;
7561 
7562 	op1 = RT_CONSTANT(opline, opline->op1);
7563 	op2 = EX_VAR(opline->op2.var);
7564 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7565 		/* pass */
7566 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7567 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7568 			result = EX_VAR(opline->result.var);
7569 			fast_long_sub_function(result, op1, op2);
7570 			ZEND_VM_NEXT_OPCODE();
7571 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7572 			d1 = (double)Z_LVAL_P(op1);
7573 			d2 = Z_DVAL_P(op2);
7574 			goto sub_double;
7575 		}
7576 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7577 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7578 			d1 = Z_DVAL_P(op1);
7579 			d2 = Z_DVAL_P(op2);
7580 sub_double:
7581 			result = EX_VAR(opline->result.var);
7582 			ZVAL_DOUBLE(result, d1 - d2);
7583 			ZEND_VM_NEXT_OPCODE();
7584 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7585 			d1 = Z_DVAL_P(op1);
7586 			d2 = (double)Z_LVAL_P(op2);
7587 			goto sub_double;
7588 		}
7589 	}
7590 
7591 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7592 }
7593 
ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7594 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7595 {
7596 	USE_OPLINE
7597 	zval *op1, *op2, *result;
7598 
7599 	op1 = RT_CONSTANT(opline, opline->op1);
7600 	op2 = EX_VAR(opline->op2.var);
7601 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7602 		/* pass */
7603 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7604 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7605 			result = EX_VAR(opline->result.var);
7606 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
7607 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7608 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
7609 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
7610 				ZVAL_LONG(result, 0);
7611 			} else {
7612 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
7613 			}
7614 			ZEND_VM_NEXT_OPCODE();
7615 		}
7616 	}
7617 
7618 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7619 }
7620 
ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7621 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7622 {
7623 	USE_OPLINE
7624 	zval *op1, *op2;
7625 
7626 	op1 = RT_CONSTANT(opline, opline->op1);
7627 	op2 = EX_VAR(opline->op2.var);
7628 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7629 		/* pass */
7630 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
7631 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
7632 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
7633 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
7634 		ZVAL_LONG(EX_VAR(opline->result.var),
7635 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
7636 		ZEND_VM_NEXT_OPCODE();
7637 	}
7638 
7639 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7640 }
7641 
ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7642 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7643 {
7644 	USE_OPLINE
7645 	zval *op1, *op2;
7646 
7647 	op1 = RT_CONSTANT(opline, opline->op1);
7648 	op2 = EX_VAR(opline->op2.var);
7649 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7650 		/* pass */
7651 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
7652 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
7653 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
7654 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
7655 		ZEND_VM_NEXT_OPCODE();
7656 	}
7657 
7658 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7659 }
7660 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7661 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7662 {
7663 	USE_OPLINE
7664 	zval *op1, *op2;
7665 	double d1, d2;
7666 
7667 	op1 = RT_CONSTANT(opline, opline->op1);
7668 	op2 = EX_VAR(opline->op2.var);
7669 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7670 		/* pass */
7671 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7672 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7673 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
7674 is_smaller_true:
7675 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
7676 			} else {
7677 is_smaller_false:
7678 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
7679 			}
7680 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7681 			d1 = (double)Z_LVAL_P(op1);
7682 			d2 = Z_DVAL_P(op2);
7683 			goto is_smaller_double;
7684 		}
7685 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7686 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7687 			d1 = Z_DVAL_P(op1);
7688 			d2 = Z_DVAL_P(op2);
7689 is_smaller_double:
7690 			if (d1 < d2) {
7691 				goto is_smaller_true;
7692 			} else {
7693 				goto is_smaller_false;
7694 			}
7695 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7696 			d1 = Z_DVAL_P(op1);
7697 			d2 = (double)Z_LVAL_P(op2);
7698 			goto is_smaller_double;
7699 		}
7700 	}
7701 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7702 }
7703 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7704 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7705 {
7706 	USE_OPLINE
7707 	zval *op1, *op2;
7708 	double d1, d2;
7709 
7710 	op1 = RT_CONSTANT(opline, opline->op1);
7711 	op2 = EX_VAR(opline->op2.var);
7712 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7713 		/* pass */
7714 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7715 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7716 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
7717 is_smaller_true:
7718 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
7719 			} else {
7720 is_smaller_false:
7721 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
7722 			}
7723 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7724 			d1 = (double)Z_LVAL_P(op1);
7725 			d2 = Z_DVAL_P(op2);
7726 			goto is_smaller_double;
7727 		}
7728 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7729 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7730 			d1 = Z_DVAL_P(op1);
7731 			d2 = Z_DVAL_P(op2);
7732 is_smaller_double:
7733 			if (d1 < d2) {
7734 				goto is_smaller_true;
7735 			} else {
7736 				goto is_smaller_false;
7737 			}
7738 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7739 			d1 = Z_DVAL_P(op1);
7740 			d2 = (double)Z_LVAL_P(op2);
7741 			goto is_smaller_double;
7742 		}
7743 	}
7744 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7745 }
7746 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7747 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7748 {
7749 	USE_OPLINE
7750 	zval *op1, *op2;
7751 	double d1, d2;
7752 
7753 	op1 = RT_CONSTANT(opline, opline->op1);
7754 	op2 = EX_VAR(opline->op2.var);
7755 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7756 		/* pass */
7757 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7758 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7759 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
7760 is_smaller_true:
7761 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
7762 			} else {
7763 is_smaller_false:
7764 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
7765 			}
7766 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7767 			d1 = (double)Z_LVAL_P(op1);
7768 			d2 = Z_DVAL_P(op2);
7769 			goto is_smaller_double;
7770 		}
7771 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7772 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7773 			d1 = Z_DVAL_P(op1);
7774 			d2 = Z_DVAL_P(op2);
7775 is_smaller_double:
7776 			if (d1 < d2) {
7777 				goto is_smaller_true;
7778 			} else {
7779 				goto is_smaller_false;
7780 			}
7781 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7782 			d1 = Z_DVAL_P(op1);
7783 			d2 = (double)Z_LVAL_P(op2);
7784 			goto is_smaller_double;
7785 		}
7786 	}
7787 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7788 }
7789 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7790 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7791 {
7792 	USE_OPLINE
7793 	zval *op1, *op2;
7794 	double d1, d2;
7795 
7796 	op1 = RT_CONSTANT(opline, opline->op1);
7797 	op2 = EX_VAR(opline->op2.var);
7798 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7799 		/* pass */
7800 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7801 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7802 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
7803 is_smaller_or_equal_true:
7804 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
7805 				ZVAL_TRUE(EX_VAR(opline->result.var));
7806 				ZEND_VM_NEXT_OPCODE();
7807 			} else {
7808 is_smaller_or_equal_false:
7809 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
7810 				ZVAL_FALSE(EX_VAR(opline->result.var));
7811 				ZEND_VM_NEXT_OPCODE();
7812 			}
7813 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7814 			d1 = (double)Z_LVAL_P(op1);
7815 			d2 = Z_DVAL_P(op2);
7816 			goto is_smaller_or_equal_double;
7817 		}
7818 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7819 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7820 			d1 = Z_DVAL_P(op1);
7821 			d2 = Z_DVAL_P(op2);
7822 is_smaller_or_equal_double:
7823 			if (d1 <= d2) {
7824 				goto is_smaller_or_equal_true;
7825 			} else {
7826 				goto is_smaller_or_equal_false;
7827 			}
7828 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7829 			d1 = Z_DVAL_P(op1);
7830 			d2 = (double)Z_LVAL_P(op2);
7831 			goto is_smaller_or_equal_double;
7832 		}
7833 	}
7834 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7835 }
7836 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7837 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7838 {
7839 	USE_OPLINE
7840 	zval *op1, *op2;
7841 	double d1, d2;
7842 
7843 	op1 = RT_CONSTANT(opline, opline->op1);
7844 	op2 = EX_VAR(opline->op2.var);
7845 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7846 		/* pass */
7847 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7848 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7849 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
7850 is_smaller_or_equal_true:
7851 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
7852 				ZVAL_TRUE(EX_VAR(opline->result.var));
7853 				ZEND_VM_NEXT_OPCODE();
7854 			} else {
7855 is_smaller_or_equal_false:
7856 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
7857 				ZVAL_FALSE(EX_VAR(opline->result.var));
7858 				ZEND_VM_NEXT_OPCODE();
7859 			}
7860 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7861 			d1 = (double)Z_LVAL_P(op1);
7862 			d2 = Z_DVAL_P(op2);
7863 			goto is_smaller_or_equal_double;
7864 		}
7865 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7866 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7867 			d1 = Z_DVAL_P(op1);
7868 			d2 = Z_DVAL_P(op2);
7869 is_smaller_or_equal_double:
7870 			if (d1 <= d2) {
7871 				goto is_smaller_or_equal_true;
7872 			} else {
7873 				goto is_smaller_or_equal_false;
7874 			}
7875 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7876 			d1 = Z_DVAL_P(op1);
7877 			d2 = (double)Z_LVAL_P(op2);
7878 			goto is_smaller_or_equal_double;
7879 		}
7880 	}
7881 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7882 }
7883 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7884 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7885 {
7886 	USE_OPLINE
7887 	zval *op1, *op2;
7888 	double d1, d2;
7889 
7890 	op1 = RT_CONSTANT(opline, opline->op1);
7891 	op2 = EX_VAR(opline->op2.var);
7892 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7893 		/* pass */
7894 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7895 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7896 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
7897 is_smaller_or_equal_true:
7898 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
7899 				ZVAL_TRUE(EX_VAR(opline->result.var));
7900 				ZEND_VM_NEXT_OPCODE();
7901 			} else {
7902 is_smaller_or_equal_false:
7903 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
7904 				ZVAL_FALSE(EX_VAR(opline->result.var));
7905 				ZEND_VM_NEXT_OPCODE();
7906 			}
7907 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7908 			d1 = (double)Z_LVAL_P(op1);
7909 			d2 = Z_DVAL_P(op2);
7910 			goto is_smaller_or_equal_double;
7911 		}
7912 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7913 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7914 			d1 = Z_DVAL_P(op1);
7915 			d2 = Z_DVAL_P(op2);
7916 is_smaller_or_equal_double:
7917 			if (d1 <= d2) {
7918 				goto is_smaller_or_equal_true;
7919 			} else {
7920 				goto is_smaller_or_equal_false;
7921 			}
7922 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7923 			d1 = Z_DVAL_P(op1);
7924 			d2 = (double)Z_LVAL_P(op2);
7925 			goto is_smaller_or_equal_double;
7926 		}
7927 	}
7928 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7929 }
7930 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7931 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7932 {
7933 	USE_OPLINE
7934 	zval *op1, *op2, *result;
7935 
7936 	op1 = RT_CONSTANT(opline, opline->op1);
7937 	op2 = EX_VAR(opline->op2.var);
7938 	result = EX_VAR(opline->result.var);
7939 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
7940 	ZEND_VM_NEXT_OPCODE();
7941 }
7942 
ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7943 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7944 {
7945 	USE_OPLINE
7946 	zval *op1, *op2, *result;
7947 
7948 	op1 = RT_CONSTANT(opline, opline->op1);
7949 	op2 = EX_VAR(opline->op2.var);
7950 	result = EX_VAR(opline->result.var);
7951 	fast_long_sub_function(result, op1, op2);
7952 	ZEND_VM_NEXT_OPCODE();
7953 }
7954 
ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7955 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7956 {
7957 	USE_OPLINE
7958 	zval *op1, *op2, *result;
7959 
7960 	op1 = RT_CONSTANT(opline, opline->op1);
7961 	op2 = EX_VAR(opline->op2.var);
7962 	result = EX_VAR(opline->result.var);
7963 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
7964 	ZEND_VM_NEXT_OPCODE();
7965 }
7966 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7967 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7968 {
7969 	USE_OPLINE
7970 	zval *op1, *op2;
7971 	bool result;
7972 
7973 	op1 = RT_CONSTANT(opline, opline->op1);
7974 	op2 = EX_VAR(opline->op2.var);
7975 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
7976 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
7977 }
7978 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7979 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7980 {
7981 	USE_OPLINE
7982 	zval *op1, *op2;
7983 	bool result;
7984 
7985 	op1 = RT_CONSTANT(opline, opline->op1);
7986 	op2 = EX_VAR(opline->op2.var);
7987 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
7988 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
7989 }
7990 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7991 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7992 {
7993 	USE_OPLINE
7994 	zval *op1, *op2;
7995 	bool result;
7996 
7997 	op1 = RT_CONSTANT(opline, opline->op1);
7998 	op2 = EX_VAR(opline->op2.var);
7999 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8000 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8001 }
8002 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8003 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8004 {
8005 	USE_OPLINE
8006 	zval *op1, *op2;
8007 	bool result;
8008 
8009 	op1 = RT_CONSTANT(opline, opline->op1);
8010 	op2 = EX_VAR(opline->op2.var);
8011 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8012 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8013 }
8014 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8015 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8016 {
8017 	USE_OPLINE
8018 	zval *op1, *op2;
8019 	bool result;
8020 
8021 	op1 = RT_CONSTANT(opline, opline->op1);
8022 	op2 = EX_VAR(opline->op2.var);
8023 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8024 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8025 }
8026 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8027 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8028 {
8029 	USE_OPLINE
8030 	zval *op1, *op2;
8031 	bool result;
8032 
8033 	op1 = RT_CONSTANT(opline, opline->op1);
8034 	op2 = EX_VAR(opline->op2.var);
8035 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8036 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8037 }
8038 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8039 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8040 {
8041 	USE_OPLINE
8042 	zval *op1, *op2;
8043 	bool result;
8044 
8045 	op1 = RT_CONSTANT(opline, opline->op1);
8046 	op2 = EX_VAR(opline->op2.var);
8047 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8048 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8049 }
8050 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8051 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)
8052 {
8053 	USE_OPLINE
8054 	zval *op1, *op2;
8055 	bool result;
8056 
8057 	op1 = RT_CONSTANT(opline, opline->op1);
8058 	op2 = EX_VAR(opline->op2.var);
8059 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8060 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8061 }
8062 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8063 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)
8064 {
8065 	USE_OPLINE
8066 	zval *op1, *op2;
8067 	bool result;
8068 
8069 	op1 = RT_CONSTANT(opline, opline->op1);
8070 	op2 = EX_VAR(opline->op2.var);
8071 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8072 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8073 }
8074 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8075 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8076 {
8077 	USE_OPLINE
8078 	zval *op1, *op2;
8079 	bool result;
8080 
8081 	op1 = RT_CONSTANT(opline, opline->op1);
8082 	op2 = EX_VAR(opline->op2.var);
8083 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8084 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8085 }
8086 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8087 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)
8088 {
8089 	USE_OPLINE
8090 	zval *op1, *op2;
8091 	bool result;
8092 
8093 	op1 = RT_CONSTANT(opline, opline->op1);
8094 	op2 = EX_VAR(opline->op2.var);
8095 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8096 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8097 }
8098 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8099 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)
8100 {
8101 	USE_OPLINE
8102 	zval *op1, *op2;
8103 	bool result;
8104 
8105 	op1 = RT_CONSTANT(opline, opline->op1);
8106 	op2 = EX_VAR(opline->op2.var);
8107 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8108 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8109 }
8110 
ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8111 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8112 {
8113 	USE_OPLINE
8114 	zval *container, *dim, *value;
8115 	zend_long offset;
8116 	HashTable *ht;
8117 
8118 	container = RT_CONSTANT(opline, opline->op1);
8119 	dim = EX_VAR(opline->op2.var);
8120 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8121 fetch_dim_r_index_array:
8122 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
8123 			offset = Z_LVAL_P(dim);
8124 		} else {
8125 			offset = zval_get_long(dim);
8126 		}
8127 		ht = Z_ARRVAL_P(container);
8128 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
8129 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
8130 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8131 			SAVE_OPLINE();
8132 
8133 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8134 		} else {
8135 			ZEND_VM_NEXT_OPCODE();
8136 		}
8137 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
8138 		container = Z_REFVAL_P(container);
8139 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8140 			goto fetch_dim_r_index_array;
8141 		} else {
8142 			goto fetch_dim_r_index_slow;
8143 		}
8144 	} else {
8145 fetch_dim_r_index_slow:
8146 		SAVE_OPLINE();
8147 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
8148 			dim++;
8149 		}
8150 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
8151 
8152 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8153 	}
8154 
8155 fetch_dim_r_index_undef:
8156 	ZVAL_NULL(EX_VAR(opline->result.var));
8157 	SAVE_OPLINE();
8158 	zend_undefined_offset(offset);
8159 
8160 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8161 }
8162 
ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8163 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8164 {
8165 	USE_OPLINE
8166 	zval *op1, *op2;
8167 
8168 	SAVE_OPLINE();
8169 	op1 = RT_CONSTANT(opline, opline->op1);
8170 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8171 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
8172 
8173 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8174 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8175 }
8176 
ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8177 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8178 {
8179 	USE_OPLINE
8180 	zval *op1, *op2;
8181 
8182 	SAVE_OPLINE();
8183 	op1 = RT_CONSTANT(opline, opline->op1);
8184 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8185 	pow_function(EX_VAR(opline->result.var), op1, op2);
8186 
8187 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8188 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8189 }
8190 
ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8191 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8192 {
8193 	USE_OPLINE
8194 	zval *op1, *op2;
8195 
8196 	op1 = RT_CONSTANT(opline, opline->op1);
8197 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8198 
8199 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
8200 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
8201 		zend_string *op1_str = Z_STR_P(op1);
8202 		zend_string *op2_str = Z_STR_P(op2);
8203 		zend_string *str;
8204 
8205 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
8206 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
8207 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
8208 			} else {
8209 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
8210 			}
8211 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8212 				zend_string_release_ex(op1_str, 0);
8213 			}
8214 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
8215 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
8216 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
8217 			} else {
8218 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
8219 			}
8220 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8221 				zend_string_release_ex(op2_str, 0);
8222 			}
8223 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
8224 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
8225 		    size_t len = ZSTR_LEN(op1_str);
8226 
8227 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
8228 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
8229 			}
8230 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
8231 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8232 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8233 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8234 				zend_string_release_ex(op2_str, 0);
8235 			}
8236 		} else {
8237 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
8238 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
8239 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8240 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8241 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8242 				zend_string_release_ex(op1_str, 0);
8243 			}
8244 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8245 				zend_string_release_ex(op2_str, 0);
8246 			}
8247 		}
8248 		ZEND_VM_NEXT_OPCODE();
8249 	} else {
8250 		SAVE_OPLINE();
8251 
8252 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8253 			op1 = ZVAL_UNDEFINED_OP1();
8254 		}
8255 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8256 			op2 = ZVAL_UNDEFINED_OP2();
8257 		}
8258 		concat_function(EX_VAR(opline->result.var), op1, op2);
8259 
8260 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8261 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8262 	}
8263 }
8264 
ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8265 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8266 {
8267 	USE_OPLINE
8268 	zval *op1, *op2;
8269 
8270 	SAVE_OPLINE();
8271 	op1 = RT_CONSTANT(opline, opline->op1);
8272 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8273 	compare_function(EX_VAR(opline->result.var), op1, op2);
8274 
8275 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8276 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8277 }
8278 
ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8279 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8280 {
8281 	USE_OPLINE
8282 	zval *container, *dim, *value;
8283 
8284 	SAVE_OPLINE();
8285 	container = RT_CONSTANT(opline, opline->op1);
8286 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8287 	if (IS_CONST != IS_CONST) {
8288 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8289 fetch_dim_r_array:
8290 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
8291 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
8292 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
8293 			container = Z_REFVAL_P(container);
8294 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8295 				goto fetch_dim_r_array;
8296 			} else {
8297 				goto fetch_dim_r_slow;
8298 			}
8299 		} else {
8300 fetch_dim_r_slow:
8301 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
8302 				dim++;
8303 			}
8304 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
8305 		}
8306 	} else {
8307 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
8308 	}
8309 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8310 
8311 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8312 }
8313 
ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8314 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8315 {
8316 	USE_OPLINE
8317 	zval *container;
8318 
8319 	SAVE_OPLINE();
8320 	container = RT_CONSTANT(opline, opline->op1);
8321 	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);
8322 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8323 
8324 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8325 }
8326 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8327 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8328 {
8329 #if 0
8330 	USE_OPLINE
8331 #endif
8332 
8333 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
8334         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
8335 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8336         }
8337 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8338 	} else {
8339 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
8340 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8341 		}
8342 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8343 	}
8344 }
8345 
ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8346 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8347 {
8348 	USE_OPLINE
8349 	zval *container;
8350 	zval *offset;
8351 	void **cache_slot = NULL;
8352 
8353 	SAVE_OPLINE();
8354 	container = RT_CONSTANT(opline, opline->op1);
8355 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8356 
8357 	if (IS_CONST == IS_CONST ||
8358 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
8359 	    do {
8360 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
8361 				container = Z_REFVAL_P(container);
8362 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
8363 					break;
8364 				}
8365 			}
8366 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
8367 				ZVAL_UNDEFINED_OP1();
8368 			}
8369 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
8370 				ZVAL_UNDEFINED_OP2();
8371 			}
8372 			zend_wrong_property_read(container, offset);
8373 			ZVAL_NULL(EX_VAR(opline->result.var));
8374 			goto fetch_obj_r_finish;
8375 		} while (0);
8376 	}
8377 
8378 	/* here we are sure we are dealing with an object */
8379 	do {
8380 		zend_object *zobj = Z_OBJ_P(container);
8381 		zend_string *name, *tmp_name;
8382 		zval *retval;
8383 
8384 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8385 			name = Z_STR_P(offset);
8386 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
8387 
8388 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
8389 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
8390 
8391 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
8392 					retval = OBJ_PROP(zobj, prop_offset);
8393 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
8394 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8395 							goto fetch_obj_r_copy;
8396 						} else {
8397 fetch_obj_r_fast_copy:
8398 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8399 							ZEND_VM_NEXT_OPCODE();
8400 						}
8401 					}
8402 				} else if (EXPECTED(zobj->properties != NULL)) {
8403 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
8404 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
8405 
8406 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
8407 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
8408 
8409 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
8410 						        (EXPECTED(p->key == name) ||
8411 						         (EXPECTED(p->h == ZSTR_H(name)) &&
8412 						          EXPECTED(p->key != NULL) &&
8413 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
8414 								retval = &p->val;
8415 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8416 									goto fetch_obj_r_copy;
8417 								} else {
8418 									goto fetch_obj_r_fast_copy;
8419 								}
8420 							}
8421 						}
8422 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
8423 					}
8424 					retval = zend_hash_find_ex(zobj->properties, name, 1);
8425 					if (EXPECTED(retval)) {
8426 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
8427 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
8428 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8429 							goto fetch_obj_r_copy;
8430 						} else {
8431 							goto fetch_obj_r_fast_copy;
8432 						}
8433 					}
8434 				}
8435 			}
8436 		} else {
8437 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
8438 				ZVAL_UNDEFINED_OP2();
8439 			}
8440 			name = zval_try_get_tmp_string(offset, &tmp_name);
8441 			if (UNEXPECTED(!name)) {
8442 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8443 				break;
8444 			}
8445 		}
8446 
8447 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
8448 
8449 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8450 			zend_tmp_string_release(tmp_name);
8451 		}
8452 
8453 		if (retval != EX_VAR(opline->result.var)) {
8454 fetch_obj_r_copy:
8455 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8456 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
8457 			zend_unwrap_reference(retval);
8458 		}
8459 	} while (0);
8460 
8461 fetch_obj_r_finish:
8462 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8463 
8464 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8465 }
8466 
ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8467 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8468 {
8469 	USE_OPLINE
8470 	zval *container;
8471 	zval *offset;
8472 	void **cache_slot = NULL;
8473 
8474 	SAVE_OPLINE();
8475 	container = RT_CONSTANT(opline, opline->op1);
8476 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8477 
8478 	if (IS_CONST == IS_CONST ||
8479 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
8480 		do {
8481 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
8482 				container = Z_REFVAL_P(container);
8483 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
8484 					break;
8485 				}
8486 			}
8487 			ZVAL_NULL(EX_VAR(opline->result.var));
8488 			goto fetch_obj_is_finish;
8489 		} while (0);
8490 	}
8491 
8492 	/* here we are sure we are dealing with an object */
8493 	do {
8494 		zend_object *zobj = Z_OBJ_P(container);
8495 		zend_string *name, *tmp_name;
8496 		zval *retval;
8497 
8498 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8499 			name = Z_STR_P(offset);
8500 			cache_slot = CACHE_ADDR(opline->extended_value);
8501 
8502 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
8503 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
8504 
8505 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
8506 					retval = OBJ_PROP(zobj, prop_offset);
8507 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
8508 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8509 							goto fetch_obj_is_copy;
8510 						} else {
8511 fetch_obj_is_fast_copy:
8512 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8513 							ZEND_VM_NEXT_OPCODE();
8514 						}
8515 					}
8516 				} else if (EXPECTED(zobj->properties != NULL)) {
8517 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
8518 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
8519 
8520 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
8521 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
8522 
8523 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
8524 						        (EXPECTED(p->key == name) ||
8525 						         (EXPECTED(p->h == ZSTR_H(name)) &&
8526 						          EXPECTED(p->key != NULL) &&
8527 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
8528 								retval = &p->val;
8529 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8530 									goto fetch_obj_is_copy;
8531 								} else {
8532 									goto fetch_obj_is_fast_copy;
8533 								}
8534 							}
8535 						}
8536 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
8537 					}
8538 					retval = zend_hash_find_ex(zobj->properties, name, 1);
8539 					if (EXPECTED(retval)) {
8540 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
8541 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
8542 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8543 							goto fetch_obj_is_copy;
8544 						} else {
8545 							goto fetch_obj_is_fast_copy;
8546 						}
8547 					}
8548 				}
8549 			}
8550 		} else {
8551 			name = zval_try_get_tmp_string(offset, &tmp_name);
8552 			if (UNEXPECTED(!name)) {
8553 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8554 				break;
8555 			}
8556 		}
8557 
8558 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
8559 
8560 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8561 			zend_tmp_string_release(tmp_name);
8562 		}
8563 
8564 		if (retval != EX_VAR(opline->result.var)) {
8565 fetch_obj_is_copy:
8566 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8567 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
8568 			zend_unwrap_reference(retval);
8569 		}
8570 	} while (0);
8571 
8572 fetch_obj_is_finish:
8573 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8574 
8575 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8576 }
8577 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8578 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8579 {
8580 #if 0
8581 	USE_OPLINE
8582 #endif
8583 
8584 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
8585 		/* Behave like FETCH_OBJ_W */
8586 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
8587 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8588 		}
8589 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8590 	} else {
8591 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8592 	}
8593 }
8594 
ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8596 {
8597 	USE_OPLINE
8598 	zval *container;
8599 
8600 	SAVE_OPLINE();
8601 	container = RT_CONSTANT(opline, opline->op1);
8602 	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);
8603 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8604 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8605 }
8606 
ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8607 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8608 {
8609 	USE_OPLINE
8610 	zval *op1, *op2;
8611 	zend_string *op1_str, *op2_str, *str;
8612 
8613 
8614 	op1 = RT_CONSTANT(opline, opline->op1);
8615 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8616 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
8617 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
8618 		zend_string *op1_str = Z_STR_P(op1);
8619 		zend_string *op2_str = Z_STR_P(op2);
8620 		zend_string *str;
8621 
8622 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
8623 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
8624 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
8625 			} else {
8626 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
8627 			}
8628 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8629 				zend_string_release_ex(op1_str, 0);
8630 			}
8631 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
8632 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
8633 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
8634 			} else {
8635 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
8636 			}
8637 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8638 				zend_string_release_ex(op2_str, 0);
8639 			}
8640 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
8641 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
8642 		    size_t len = ZSTR_LEN(op1_str);
8643 
8644 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
8645 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8646 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8647 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8648 				zend_string_release_ex(op2_str, 0);
8649 			}
8650 		} else {
8651 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
8652 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
8653 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8654 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8655 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8656 				zend_string_release_ex(op1_str, 0);
8657 			}
8658 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8659 				zend_string_release_ex(op2_str, 0);
8660 			}
8661 		}
8662 		ZEND_VM_NEXT_OPCODE();
8663 	}
8664 
8665 	SAVE_OPLINE();
8666 	if (IS_CONST == IS_CONST) {
8667 		op1_str = Z_STR_P(op1);
8668 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
8669 		op1_str = zend_string_copy(Z_STR_P(op1));
8670 	} else {
8671 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8672 			ZVAL_UNDEFINED_OP1();
8673 		}
8674 		op1_str = zval_get_string_func(op1);
8675 	}
8676 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8677 		op2_str = Z_STR_P(op2);
8678 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
8679 		op2_str = zend_string_copy(Z_STR_P(op2));
8680 	} else {
8681 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8682 			ZVAL_UNDEFINED_OP2();
8683 		}
8684 		op2_str = zval_get_string_func(op2);
8685 	}
8686 	do {
8687 		if (IS_CONST != IS_CONST) {
8688 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
8689 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8690 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
8691 						GC_ADDREF(op2_str);
8692 					}
8693 				}
8694 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
8695 				zend_string_release_ex(op1_str, 0);
8696 				break;
8697 			}
8698 		}
8699 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8700 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
8701 				if (IS_CONST == IS_CONST) {
8702 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
8703 						GC_ADDREF(op1_str);
8704 					}
8705 				}
8706 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
8707 				zend_string_release_ex(op2_str, 0);
8708 				break;
8709 			}
8710 		}
8711 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
8712 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
8713 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8714 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8715 		if (IS_CONST != IS_CONST) {
8716 			zend_string_release_ex(op1_str, 0);
8717 		}
8718 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8719 			zend_string_release_ex(op2_str, 0);
8720 		}
8721 	} while (0);
8722 
8723 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8724 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8725 }
8726 
ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8727 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8728 {
8729 	USE_OPLINE
8730 	zval *function_name;
8731 	zval *object;
8732 	zend_function *fbc;
8733 	zend_class_entry *called_scope;
8734 	zend_object *obj;
8735 	zend_execute_data *call;
8736 	uint32_t call_info;
8737 
8738 	SAVE_OPLINE();
8739 
8740 	object = RT_CONSTANT(opline, opline->op1);
8741 
8742 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8743 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8744 	}
8745 
8746 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
8747 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
8748 		do {
8749 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
8750 				function_name = Z_REFVAL_P(function_name);
8751 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
8752 					break;
8753 				}
8754 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
8755 				ZVAL_UNDEFINED_OP2();
8756 				if (UNEXPECTED(EG(exception) != NULL)) {
8757 
8758 					HANDLE_EXCEPTION();
8759 				}
8760 			}
8761 			zend_throw_error(NULL, "Method name must be a string");
8762 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8763 
8764 			HANDLE_EXCEPTION();
8765 		} while (0);
8766 	}
8767 
8768 	if (IS_CONST == IS_UNUSED) {
8769 		obj = Z_OBJ_P(object);
8770 	} else {
8771 		do {
8772 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
8773 				obj = Z_OBJ_P(object);
8774 			} else {
8775 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
8776 					zend_reference *ref = Z_REF_P(object);
8777 
8778 					object = &ref->val;
8779 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
8780 						obj = Z_OBJ_P(object);
8781 						if (IS_CONST & IS_VAR) {
8782 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
8783 								efree_size(ref, sizeof(zend_reference));
8784 							} else {
8785 								Z_ADDREF_P(object);
8786 							}
8787 						}
8788 						break;
8789 					}
8790 				}
8791 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
8792 					object = ZVAL_UNDEFINED_OP1();
8793 					if (UNEXPECTED(EG(exception) != NULL)) {
8794 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8795 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8796 						}
8797 						HANDLE_EXCEPTION();
8798 					}
8799 				}
8800 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8801 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8802 				}
8803 				zend_invalid_method_call(object, function_name);
8804 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8805 
8806 				HANDLE_EXCEPTION();
8807 			}
8808 		} while (0);
8809 	}
8810 
8811 	called_scope = obj->ce;
8812 
8813 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
8814 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
8815 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
8816 	} else {
8817 	    zend_object *orig_obj = obj;
8818 
8819 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8820 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8821 		}
8822 
8823 		/* First, locate the function. */
8824 		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));
8825 		if (UNEXPECTED(fbc == NULL)) {
8826 			if (EXPECTED(!EG(exception))) {
8827 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
8828 			}
8829 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8830 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
8831 				zend_objects_store_del(orig_obj);
8832 			}
8833 			HANDLE_EXCEPTION();
8834 		}
8835 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
8836 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
8837 		    EXPECTED(obj == orig_obj)) {
8838 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
8839 		}
8840 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
8841 			GC_ADDREF(obj); /* For $this pointer */
8842 			if (GC_DELREF(orig_obj) == 0) {
8843 				zend_objects_store_del(orig_obj);
8844 			}
8845 		}
8846 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
8847 			init_func_run_time_cache(&fbc->op_array);
8848 		}
8849 	}
8850 
8851 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8852 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8853 	}
8854 
8855 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
8856 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
8857 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
8858 			zend_objects_store_del(obj);
8859 			if (UNEXPECTED(EG(exception))) {
8860 				HANDLE_EXCEPTION();
8861 			}
8862 		}
8863 		/* call static method */
8864 		obj = (zend_object*)called_scope;
8865 		call_info = ZEND_CALL_NESTED_FUNCTION;
8866 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
8867 		if (IS_CONST == IS_CV) {
8868 			GC_ADDREF(obj); /* For $this pointer */
8869 		}
8870 		/* CV may be changed indirectly (e.g. when it's a reference) */
8871 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
8872 	}
8873 
8874 	call = zend_vm_stack_push_call_frame(call_info,
8875 		fbc, opline->extended_value, obj);
8876 	call->prev_execute_data = EX(call);
8877 	EX(call) = call;
8878 
8879 	ZEND_VM_NEXT_OPCODE();
8880 }
8881 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8883 {
8884 	USE_OPLINE
8885 	zval *function_name;
8886 	zend_class_entry *ce;
8887 	uint32_t call_info;
8888 	zend_function *fbc;
8889 	zend_execute_data *call;
8890 
8891 	SAVE_OPLINE();
8892 
8893 	if (IS_CONST == IS_CONST) {
8894 		/* no function found. try a static method in class */
8895 		ce = CACHED_PTR(opline->result.num);
8896 		if (UNEXPECTED(ce == NULL)) {
8897 			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);
8898 			if (UNEXPECTED(ce == NULL)) {
8899 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8900 				HANDLE_EXCEPTION();
8901 			}
8902 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8903 				CACHE_PTR(opline->result.num, ce);
8904 			}
8905 		}
8906 	} else if (IS_CONST == IS_UNUSED) {
8907 		ce = zend_fetch_class(NULL, opline->op1.num);
8908 		if (UNEXPECTED(ce == NULL)) {
8909 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8910 			HANDLE_EXCEPTION();
8911 		}
8912 	} else {
8913 		ce = Z_CE_P(EX_VAR(opline->op1.var));
8914 	}
8915 
8916 	if (IS_CONST == IS_CONST &&
8917 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
8918 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
8919 		/* nothing to do */
8920 	} else if (IS_CONST != IS_CONST &&
8921 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
8922 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
8923 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
8924 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
8925 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8926 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8927 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
8928 				do {
8929 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
8930 						function_name = Z_REFVAL_P(function_name);
8931 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
8932 							break;
8933 						}
8934 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
8935 						ZVAL_UNDEFINED_OP2();
8936 						if (UNEXPECTED(EG(exception) != NULL)) {
8937 							HANDLE_EXCEPTION();
8938 						}
8939 					}
8940 					zend_throw_error(NULL, "Method name must be a string");
8941 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8942 					HANDLE_EXCEPTION();
8943 				} while (0);
8944 			}
8945 		}
8946 
8947 		if (ce->get_static_method) {
8948 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
8949 		} else {
8950 			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));
8951 		}
8952 		if (UNEXPECTED(fbc == NULL)) {
8953 			if (EXPECTED(!EG(exception))) {
8954 				zend_undefined_method(ce, Z_STR_P(function_name));
8955 			}
8956 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8957 			HANDLE_EXCEPTION();
8958 		}
8959 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
8960 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
8961 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
8962 		}
8963 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
8964 			init_func_run_time_cache(&fbc->op_array);
8965 		}
8966 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8967 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8968 		}
8969 	} else {
8970 		if (UNEXPECTED(ce->constructor == NULL)) {
8971 			zend_throw_error(NULL, "Cannot call constructor");
8972 			HANDLE_EXCEPTION();
8973 		}
8974 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
8975 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
8976 			HANDLE_EXCEPTION();
8977 		}
8978 		fbc = ce->constructor;
8979 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
8980 			init_func_run_time_cache(&fbc->op_array);
8981 		}
8982 	}
8983 
8984 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
8985 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
8986 			ce = (zend_class_entry*)Z_OBJ(EX(This));
8987 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
8988 		} else {
8989 			zend_non_static_method_call(fbc);
8990 			HANDLE_EXCEPTION();
8991 		}
8992 	} else {
8993 		/* previous opcode is ZEND_FETCH_CLASS */
8994 		if (IS_CONST == IS_UNUSED
8995 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
8996 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
8997 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
8998 				ce = Z_OBJCE(EX(This));
8999 			} else {
9000 				ce = Z_CE(EX(This));
9001 			}
9002 		}
9003 		call_info = ZEND_CALL_NESTED_FUNCTION;
9004 	}
9005 
9006 	call = zend_vm_stack_push_call_frame(call_info,
9007 		fbc, opline->extended_value, ce);
9008 	call->prev_execute_data = EX(call);
9009 	EX(call) = call;
9010 
9011 	ZEND_VM_NEXT_OPCODE();
9012 }
9013 
ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9014 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9015 {
9016 	USE_OPLINE
9017 	zval *function_name;
9018 	zend_fcall_info_cache fcc;
9019 	char *error = NULL;
9020 	zend_function *func;
9021 	void *object_or_called_scope;
9022 	zend_execute_data *call;
9023 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
9024 
9025 	SAVE_OPLINE();
9026 	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9027 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
9028 		ZEND_ASSERT(!error);
9029 		func = fcc.function_handler;
9030 		object_or_called_scope = fcc.called_scope;
9031 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
9032 			/* Delay closure destruction until its invocation */
9033 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
9034 			call_info |= ZEND_CALL_CLOSURE;
9035 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
9036 				call_info |= ZEND_CALL_FAKE_CLOSURE;
9037 			}
9038 			if (fcc.object) {
9039 				object_or_called_scope = fcc.object;
9040 				call_info |= ZEND_CALL_HAS_THIS;
9041 			}
9042 		} else if (fcc.object) {
9043 			GC_ADDREF(fcc.object); /* For $this pointer */
9044 			object_or_called_scope = fcc.object;
9045 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
9046 		}
9047 
9048 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9049 		if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
9050 			if (call_info & ZEND_CALL_CLOSURE) {
9051 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
9052 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
9053 				zend_object_release(fcc.object);
9054 			}
9055 			HANDLE_EXCEPTION();
9056 		}
9057 
9058 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
9059 			init_func_run_time_cache(&func->op_array);
9060 		}
9061 	} else {
9062 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
9063 		efree(error);
9064 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9065 		HANDLE_EXCEPTION();
9066 	}
9067 
9068 	call = zend_vm_stack_push_call_frame(call_info,
9069 		func, opline->extended_value, object_or_called_scope);
9070 	call->prev_execute_data = EX(call);
9071 	EX(call) = call;
9072 
9073 	ZEND_VM_NEXT_OPCODE();
9074 }
9075 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9077 {
9078 	USE_OPLINE
9079 	zval *expr_ptr, new_expr;
9080 
9081 	SAVE_OPLINE();
9082 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
9083 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
9084 		expr_ptr = NULL;
9085 		if (Z_ISREF_P(expr_ptr)) {
9086 			Z_ADDREF_P(expr_ptr);
9087 		} else {
9088 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
9089 		}
9090 
9091 	} else {
9092 		expr_ptr = RT_CONSTANT(opline, opline->op1);
9093 		if (IS_CONST == IS_TMP_VAR) {
9094 			/* pass */
9095 		} else if (IS_CONST == IS_CONST) {
9096 			Z_TRY_ADDREF_P(expr_ptr);
9097 		} else if (IS_CONST == IS_CV) {
9098 			ZVAL_DEREF(expr_ptr);
9099 			Z_TRY_ADDREF_P(expr_ptr);
9100 		} else /* if (IS_CONST == IS_VAR) */ {
9101 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
9102 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
9103 
9104 				expr_ptr = Z_REFVAL_P(expr_ptr);
9105 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
9106 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
9107 					expr_ptr = &new_expr;
9108 					efree_size(ref, sizeof(zend_reference));
9109 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
9110 					Z_ADDREF_P(expr_ptr);
9111 				}
9112 			}
9113 		}
9114 	}
9115 
9116 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
9117 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9118 		zend_string *str;
9119 		zend_ulong hval;
9120 
9121 add_again:
9122 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9123 			str = Z_STR_P(offset);
9124 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9125 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9126 					goto num_index;
9127 				}
9128 			}
9129 str_index:
9130 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
9131 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9132 			hval = Z_LVAL_P(offset);
9133 num_index:
9134 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
9135 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
9136 			offset = Z_REFVAL_P(offset);
9137 			goto add_again;
9138 		} else if (Z_TYPE_P(offset) == IS_NULL) {
9139 			str = ZSTR_EMPTY_ALLOC();
9140 			goto str_index;
9141 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
9142 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
9143 			goto num_index;
9144 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
9145 			hval = 0;
9146 			goto num_index;
9147 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
9148 			hval = 1;
9149 			goto num_index;
9150 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
9151 			zend_use_resource_as_offset(offset);
9152 			hval = Z_RES_HANDLE_P(offset);
9153 			goto num_index;
9154 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
9155 			ZVAL_UNDEFINED_OP2();
9156 			str = ZSTR_EMPTY_ALLOC();
9157 			goto str_index;
9158 		} else {
9159 			zend_illegal_offset();
9160 			zval_ptr_dtor_nogc(expr_ptr);
9161 		}
9162 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9163 	} else {
9164 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
9165 			zend_cannot_add_element();
9166 			zval_ptr_dtor_nogc(expr_ptr);
9167 		}
9168 	}
9169 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9170 }
9171 
ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9172 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9173 {
9174 	zval *array;
9175 	uint32_t size;
9176 	USE_OPLINE
9177 
9178 	array = EX_VAR(opline->result.var);
9179 	if (IS_CONST != IS_UNUSED) {
9180 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
9181 		ZVAL_ARR(array, zend_new_array(size));
9182 		/* Explicitly initialize array as not-packed if flag is set */
9183 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
9184 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
9185 		}
9186 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9187 	} else {
9188 		ZVAL_ARR(array, zend_new_array(0));
9189 		ZEND_VM_NEXT_OPCODE();
9190 	}
9191 }
9192 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9193 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9194 {
9195 	USE_OPLINE
9196 	zval *container;
9197 	bool result;
9198 	zend_ulong hval;
9199 	zval *offset;
9200 
9201 	SAVE_OPLINE();
9202 	container = RT_CONSTANT(opline, opline->op1);
9203 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9204 
9205 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9206 		HashTable *ht;
9207 		zval *value;
9208 		zend_string *str;
9209 
9210 isset_dim_obj_array:
9211 		ht = Z_ARRVAL_P(container);
9212 isset_again:
9213 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9214 			str = Z_STR_P(offset);
9215 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9216 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9217 					goto num_index_prop;
9218 				}
9219 			}
9220 			value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
9221 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9222 			hval = Z_LVAL_P(offset);
9223 num_index_prop:
9224 			value = zend_hash_index_find(ht, hval);
9225 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
9226 			offset = Z_REFVAL_P(offset);
9227 			goto isset_again;
9228 		} else {
9229 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
9230 			if (UNEXPECTED(EG(exception))) {
9231 				result = 0;
9232 				goto isset_dim_obj_exit;
9233 			}
9234 		}
9235 
9236 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
9237 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
9238 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
9239 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
9240 
9241 			if (IS_CONST & (IS_CONST|IS_CV)) {
9242 				/* avoid exception check */
9243 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9244 				ZEND_VM_SMART_BRANCH(result, 0);
9245 			}
9246 		} else {
9247 			result = (value == NULL || !i_zend_is_true(value));
9248 		}
9249 		goto isset_dim_obj_exit;
9250 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
9251 		container = Z_REFVAL_P(container);
9252 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9253 			goto isset_dim_obj_array;
9254 		}
9255 	}
9256 
9257 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
9258 		offset++;
9259 	}
9260 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
9261 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
9262 	} else {
9263 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
9264 	}
9265 
9266 isset_dim_obj_exit:
9267 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9268 
9269 	ZEND_VM_SMART_BRANCH(result, 1);
9270 }
9271 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9272 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9273 {
9274 	USE_OPLINE
9275 	zval *container;
9276 	int result;
9277 	zval *offset;
9278 	zend_string *name, *tmp_name;
9279 
9280 	SAVE_OPLINE();
9281 	container = RT_CONSTANT(opline, opline->op1);
9282 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9283 
9284 	if (IS_CONST == IS_CONST ||
9285 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
9286 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9287 			container = Z_REFVAL_P(container);
9288 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
9289 				result = (opline->extended_value & ZEND_ISEMPTY);
9290 				goto isset_object_finish;
9291 			}
9292 		} else {
9293 			result = (opline->extended_value & ZEND_ISEMPTY);
9294 			goto isset_object_finish;
9295 		}
9296 	}
9297 
9298 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9299 		name = Z_STR_P(offset);
9300 	} else {
9301 		name = zval_try_get_tmp_string(offset, &tmp_name);
9302 		if (UNEXPECTED(!name)) {
9303 			result = 0;
9304 			goto isset_object_finish;
9305 		}
9306 	}
9307 
9308 	result =
9309 		(opline->extended_value & ZEND_ISEMPTY) ^
9310 		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));
9311 
9312 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9313 		zend_tmp_string_release(tmp_name);
9314 	}
9315 
9316 isset_object_finish:
9317 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9318 
9319 	ZEND_VM_SMART_BRANCH(result, 1);
9320 }
9321 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9322 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9323 {
9324 	USE_OPLINE
9325 
9326 	zval *key, *subject;
9327 	HashTable *ht;
9328 	zend_bool result;
9329 
9330 	SAVE_OPLINE();
9331 
9332 	key = RT_CONSTANT(opline, opline->op1);
9333 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9334 
9335 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
9336 array_key_exists_array:
9337 		ht = Z_ARRVAL_P(subject);
9338 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
9339 	} else {
9340 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
9341 			subject = Z_REFVAL_P(subject);
9342 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
9343 				goto array_key_exists_array;
9344 			}
9345 		}
9346 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
9347 		result = 0;
9348 	}
9349 
9350 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9351 
9352 	ZEND_VM_SMART_BRANCH(result, 1);
9353 }
9354 
9355 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9356 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9357 {
9358 	USE_OPLINE
9359 
9360 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
9361 
9362 	SAVE_OPLINE();
9363 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
9364 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9365 	}
9366 
9367 	/* Destroy the previously yielded value */
9368 	zval_ptr_dtor(&generator->value);
9369 
9370 	/* Destroy the previously yielded key */
9371 	zval_ptr_dtor(&generator->key);
9372 
9373 	/* Set the new yielded value */
9374 	if (IS_CONST != IS_UNUSED) {
9375 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
9376 			/* Constants and temporary variables aren't yieldable by reference,
9377 			 * but we still allow them with a notice. */
9378 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
9379 				zval *value;
9380 
9381 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
9382 
9383 				value = RT_CONSTANT(opline, opline->op1);
9384 				ZVAL_COPY_VALUE(&generator->value, value);
9385 				if (IS_CONST == IS_CONST) {
9386 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
9387 						Z_ADDREF(generator->value);
9388 					}
9389 				}
9390 			} else {
9391 				zval *value_ptr = NULL;
9392 
9393 				/* If a function call result is yielded and the function did
9394 				 * not return by reference we throw a notice. */
9395 				do {
9396 					if (IS_CONST == IS_VAR) {
9397 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
9398 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
9399 						 && !Z_ISREF_P(value_ptr)) {
9400 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
9401 							ZVAL_COPY(&generator->value, value_ptr);
9402 							break;
9403 						}
9404 					}
9405 					if (Z_ISREF_P(value_ptr)) {
9406 						Z_ADDREF_P(value_ptr);
9407 					} else {
9408 						ZVAL_MAKE_REF_EX(value_ptr, 2);
9409 					}
9410 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
9411 				} while (0);
9412 
9413 			}
9414 		} else {
9415 			zval *value = RT_CONSTANT(opline, opline->op1);
9416 
9417 			/* Consts, temporary variables and references need copying */
9418 			if (IS_CONST == IS_CONST) {
9419 				ZVAL_COPY_VALUE(&generator->value, value);
9420 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
9421 					Z_ADDREF(generator->value);
9422 				}
9423 			} else if (IS_CONST == IS_TMP_VAR) {
9424 				ZVAL_COPY_VALUE(&generator->value, value);
9425             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
9426 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
9427 
9428 			} else {
9429 				ZVAL_COPY_VALUE(&generator->value, value);
9430 				if (IS_CONST == IS_CV) {
9431 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
9432 				}
9433 			}
9434 		}
9435 	} else {
9436 		/* If no value was specified yield null */
9437 		ZVAL_NULL(&generator->value);
9438 	}
9439 
9440 	/* Set the new yielded key */
9441 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
9442 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9443 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
9444 			key = Z_REFVAL_P(key);
9445 		}
9446 		ZVAL_COPY(&generator->key, key);
9447 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9448 
9449 		if (Z_TYPE(generator->key) == IS_LONG
9450 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
9451 		) {
9452 			generator->largest_used_integer_key = Z_LVAL(generator->key);
9453 		}
9454 	} else {
9455 		/* If no key was specified we use auto-increment keys */
9456 		generator->largest_used_integer_key++;
9457 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
9458 	}
9459 
9460 	if (RETURN_VALUE_USED(opline)) {
9461 		/* If the return value of yield is used set the send
9462 		 * target and initialize it to NULL */
9463 		generator->send_target = EX_VAR(opline->result.var);
9464 		ZVAL_NULL(generator->send_target);
9465 	} else {
9466 		generator->send_target = NULL;
9467 	}
9468 
9469 	/* We increment to the next op, so we are at the correct position when the
9470 	 * generator is resumed. */
9471 	ZEND_VM_INC_OPCODE();
9472 
9473 	/* The GOTO VM uses a local opline variable. We need to set the opline
9474 	 * variable in execute_data so we don't resume at an old position. */
9475 	SAVE_OPLINE();
9476 
9477 	ZEND_VM_RETURN();
9478 }
9479 
zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)9480 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)
9481 {
9482 	USE_OPLINE
9483 	zval *varname;
9484 	zval *retval;
9485 	zend_string *name, *tmp_name;
9486 	HashTable *target_symbol_table;
9487 
9488 	SAVE_OPLINE();
9489 	varname = RT_CONSTANT(opline, opline->op1);
9490 
9491 	if (IS_CONST == IS_CONST) {
9492 		name = Z_STR_P(varname);
9493 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
9494 		name = Z_STR_P(varname);
9495 		tmp_name = NULL;
9496 	} else {
9497 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
9498 			ZVAL_UNDEFINED_OP1();
9499 		}
9500 		name = zval_try_get_tmp_string(varname, &tmp_name);
9501 		if (UNEXPECTED(!name)) {
9502 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
9503 
9504 			}
9505 			ZVAL_UNDEF(EX_VAR(opline->result.var));
9506 			HANDLE_EXCEPTION();
9507 		}
9508 	}
9509 
9510 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
9511 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
9512 	if (retval == NULL) {
9513 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
9514 fetch_this:
9515 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
9516 			if (IS_CONST != IS_CONST) {
9517 				zend_tmp_string_release(tmp_name);
9518 			}
9519 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9520 		}
9521 		if (type == BP_VAR_W) {
9522 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
9523 		} else if (type == BP_VAR_IS) {
9524 			retval = &EG(uninitialized_zval);
9525 		} else {
9526 			zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(name));
9527 			if (type == BP_VAR_RW) {
9528 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
9529 			} else {
9530 				retval = &EG(uninitialized_zval);
9531 			}
9532 		}
9533 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
9534 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
9535 		retval = Z_INDIRECT_P(retval);
9536 		if (Z_TYPE_P(retval) == IS_UNDEF) {
9537 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
9538 				goto fetch_this;
9539 			}
9540 			if (type == BP_VAR_W) {
9541 				ZVAL_NULL(retval);
9542 			} else if (type == BP_VAR_IS) {
9543 				retval = &EG(uninitialized_zval);
9544 			} else {
9545 				zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(name));
9546 				if (type == BP_VAR_RW) {
9547 					ZVAL_NULL(retval);
9548 				} else {
9549 					retval = &EG(uninitialized_zval);
9550 				}
9551 			}
9552 		}
9553 	}
9554 
9555 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
9556 
9557 	}
9558 
9559 	if (IS_CONST != IS_CONST) {
9560 		zend_tmp_string_release(tmp_name);
9561 	}
9562 
9563 	ZEND_ASSERT(retval != NULL);
9564 	if (type == BP_VAR_R || type == BP_VAR_IS) {
9565 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
9566 	} else {
9567 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
9568 	}
9569 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9570 }
9571 
ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9572 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9573 {
9574 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9575 }
9576 
ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9577 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9578 {
9579 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9580 }
9581 
ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9582 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9583 {
9584 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9585 }
9586 
ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9587 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9588 {
9589 	int fetch_type =
9590 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
9591 			BP_VAR_W : BP_VAR_R;
9592 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9593 }
9594 
ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9596 {
9597 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9598 }
9599 
ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9600 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9601 {
9602 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9603 }
9604 
9605 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9606 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9607 {
9608 #if 0
9609 	USE_OPLINE
9610 #endif
9611 
9612 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
9613         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
9614 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9615         }
9616 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9617 	} else {
9618 		if (IS_UNUSED == IS_UNUSED) {
9619 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9620 		}
9621 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9622 	}
9623 }
9624 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9625 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9626 {
9627 	USE_OPLINE
9628 	zval *function_name;
9629 	zend_class_entry *ce;
9630 	uint32_t call_info;
9631 	zend_function *fbc;
9632 	zend_execute_data *call;
9633 
9634 	SAVE_OPLINE();
9635 
9636 	if (IS_CONST == IS_CONST) {
9637 		/* no function found. try a static method in class */
9638 		ce = CACHED_PTR(opline->result.num);
9639 		if (UNEXPECTED(ce == NULL)) {
9640 			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);
9641 			if (UNEXPECTED(ce == NULL)) {
9642 
9643 				HANDLE_EXCEPTION();
9644 			}
9645 			if (IS_UNUSED != IS_CONST) {
9646 				CACHE_PTR(opline->result.num, ce);
9647 			}
9648 		}
9649 	} else if (IS_CONST == IS_UNUSED) {
9650 		ce = zend_fetch_class(NULL, opline->op1.num);
9651 		if (UNEXPECTED(ce == NULL)) {
9652 
9653 			HANDLE_EXCEPTION();
9654 		}
9655 	} else {
9656 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9657 	}
9658 
9659 	if (IS_CONST == IS_CONST &&
9660 	    IS_UNUSED == IS_CONST &&
9661 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
9662 		/* nothing to do */
9663 	} else if (IS_CONST != IS_CONST &&
9664 	           IS_UNUSED == IS_CONST &&
9665 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
9666 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
9667 	} else if (IS_UNUSED != IS_UNUSED) {
9668 		function_name = NULL;
9669 		if (IS_UNUSED != IS_CONST) {
9670 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9671 				do {
9672 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
9673 						function_name = Z_REFVAL_P(function_name);
9674 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9675 							break;
9676 						}
9677 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9678 						ZVAL_UNDEFINED_OP2();
9679 						if (UNEXPECTED(EG(exception) != NULL)) {
9680 							HANDLE_EXCEPTION();
9681 						}
9682 					}
9683 					zend_throw_error(NULL, "Method name must be a string");
9684 
9685 					HANDLE_EXCEPTION();
9686 				} while (0);
9687 			}
9688 		}
9689 
9690 		if (ce->get_static_method) {
9691 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
9692 		} else {
9693 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
9694 		}
9695 		if (UNEXPECTED(fbc == NULL)) {
9696 			if (EXPECTED(!EG(exception))) {
9697 				zend_undefined_method(ce, Z_STR_P(function_name));
9698 			}
9699 
9700 			HANDLE_EXCEPTION();
9701 		}
9702 		if (IS_UNUSED == IS_CONST &&
9703 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
9704 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
9705 		}
9706 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9707 			init_func_run_time_cache(&fbc->op_array);
9708 		}
9709 		if (IS_UNUSED != IS_CONST) {
9710 
9711 		}
9712 	} else {
9713 		if (UNEXPECTED(ce->constructor == NULL)) {
9714 			zend_throw_error(NULL, "Cannot call constructor");
9715 			HANDLE_EXCEPTION();
9716 		}
9717 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
9718 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
9719 			HANDLE_EXCEPTION();
9720 		}
9721 		fbc = ce->constructor;
9722 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9723 			init_func_run_time_cache(&fbc->op_array);
9724 		}
9725 	}
9726 
9727 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
9728 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
9729 			ce = (zend_class_entry*)Z_OBJ(EX(This));
9730 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
9731 		} else {
9732 			zend_non_static_method_call(fbc);
9733 			HANDLE_EXCEPTION();
9734 		}
9735 	} else {
9736 		/* previous opcode is ZEND_FETCH_CLASS */
9737 		if (IS_CONST == IS_UNUSED
9738 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
9739 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
9740 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
9741 				ce = Z_OBJCE(EX(This));
9742 			} else {
9743 				ce = Z_CE(EX(This));
9744 			}
9745 		}
9746 		call_info = ZEND_CALL_NESTED_FUNCTION;
9747 	}
9748 
9749 	call = zend_vm_stack_push_call_frame(call_info,
9750 		fbc, opline->extended_value, ce);
9751 	call->prev_execute_data = EX(call);
9752 	EX(call) = call;
9753 
9754 	ZEND_VM_NEXT_OPCODE();
9755 }
9756 
ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9757 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9758 {
9759 	if (IS_CONST == IS_UNUSED) {
9760 		SAVE_OPLINE();
9761 		zend_verify_missing_return_type(EX(func));
9762 		HANDLE_EXCEPTION();
9763 	} else {
9764 /* prevents "undefined variable opline" errors */
9765 #if 0 || (IS_CONST != IS_UNUSED)
9766 		USE_OPLINE
9767 		zval *retval_ref, *retval_ptr;
9768 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
9769 		retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);
9770 
9771 		if (IS_CONST == IS_CONST) {
9772 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
9773 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
9774 		} else if (IS_CONST == IS_VAR) {
9775 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
9776 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
9777 			}
9778 			ZVAL_DEREF(retval_ptr);
9779 		} else if (IS_CONST == IS_CV) {
9780 			ZVAL_DEREF(retval_ptr);
9781 		}
9782 
9783 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
9784 			ZEND_VM_NEXT_OPCODE();
9785 		}
9786 
9787 		if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
9788 			SAVE_OPLINE();
9789 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
9790 			if (UNEXPECTED(EG(exception))) {
9791 				HANDLE_EXCEPTION();
9792 			}
9793 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
9794 				ZEND_VM_NEXT_OPCODE();
9795 			}
9796 		}
9797 
9798 		zend_reference *ref = NULL;
9799 		void *cache_slot = CACHE_ADDR(opline->op2.num);
9800 		if (UNEXPECTED(retval_ref != retval_ptr)) {
9801 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
9802 				ref = Z_REF_P(retval_ref);
9803 			} else {
9804 				/* A cast might happen - unwrap the reference if this is a by-value return */
9805 				if (Z_REFCOUNT_P(retval_ref) == 1) {
9806 					ZVAL_UNREF(retval_ref);
9807 				} else {
9808 					Z_DELREF_P(retval_ref);
9809 					ZVAL_COPY(retval_ref, retval_ptr);
9810 				}
9811 				retval_ptr = retval_ref;
9812 			}
9813 		}
9814 
9815 		SAVE_OPLINE();
9816 		if (UNEXPECTED(!zend_check_type_slow(ret_info->type, retval_ptr, ref, cache_slot, NULL, 1, 0))) {
9817 			zend_verify_return_error(EX(func), retval_ptr);
9818 			HANDLE_EXCEPTION();
9819 		}
9820 		ZEND_VM_NEXT_OPCODE();
9821 #endif
9822 	}
9823 }
9824 
ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9825 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9826 {
9827 	USE_OPLINE
9828 	zval *value, *arg;
9829 
9830 	if (IS_UNUSED == IS_CONST) {
9831 		SAVE_OPLINE();
9832 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
9833 		uint32_t arg_num;
9834 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
9835 		if (UNEXPECTED(!arg)) {
9836 
9837 			HANDLE_EXCEPTION();
9838 		}
9839 	} else {
9840 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
9841 	}
9842 
9843 	value = RT_CONSTANT(opline, opline->op1);
9844 	ZVAL_COPY_VALUE(arg, value);
9845 	if (IS_CONST == IS_CONST) {
9846 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
9847 			Z_ADDREF_P(arg);
9848 		}
9849 	}
9850 	ZEND_VM_NEXT_OPCODE();
9851 }
9852 
ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9853 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9854 {
9855 	USE_OPLINE
9856 	zval *value, *arg;
9857 	uint32_t arg_num;
9858 
9859 	if (IS_UNUSED == IS_CONST) {
9860 		SAVE_OPLINE();
9861 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
9862 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
9863 		if (UNEXPECTED(!arg)) {
9864 
9865 			HANDLE_EXCEPTION();
9866 		}
9867 	} else {
9868 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
9869 		arg_num = opline->op2.num;
9870 	}
9871 
9872 	if (EXPECTED(0)) {
9873 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
9874 			goto send_val_by_ref;
9875 		}
9876 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
9877 send_val_by_ref:
9878 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9879 	}
9880 	value = RT_CONSTANT(opline, opline->op1);
9881 	ZVAL_COPY_VALUE(arg, value);
9882 	if (IS_CONST == IS_CONST) {
9883 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
9884 			Z_ADDREF_P(arg);
9885 		}
9886 	}
9887 	ZEND_VM_NEXT_OPCODE();
9888 }
9889 
ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9890 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9891 {
9892 	USE_OPLINE
9893 	zval *value, *arg;
9894 	uint32_t arg_num;
9895 
9896 	if (IS_UNUSED == IS_CONST) {
9897 		SAVE_OPLINE();
9898 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
9899 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
9900 		if (UNEXPECTED(!arg)) {
9901 
9902 			HANDLE_EXCEPTION();
9903 		}
9904 	} else {
9905 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
9906 		arg_num = opline->op2.num;
9907 	}
9908 
9909 	if (EXPECTED(1)) {
9910 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
9911 			goto send_val_by_ref;
9912 		}
9913 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
9914 send_val_by_ref:
9915 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9916 	}
9917 	value = RT_CONSTANT(opline, opline->op1);
9918 	ZVAL_COPY_VALUE(arg, value);
9919 	if (IS_CONST == IS_CONST) {
9920 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
9921 			Z_ADDREF_P(arg);
9922 		}
9923 	}
9924 	ZEND_VM_NEXT_OPCODE();
9925 }
9926 
ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9927 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9928 {
9929 	USE_OPLINE
9930 	zval *result;
9931 	zend_function *constructor;
9932 	zend_class_entry *ce;
9933 	zend_execute_data *call;
9934 
9935 	SAVE_OPLINE();
9936 	if (IS_CONST == IS_CONST) {
9937 		ce = CACHED_PTR(opline->op2.num);
9938 		if (UNEXPECTED(ce == NULL)) {
9939 			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);
9940 			if (UNEXPECTED(ce == NULL)) {
9941 				ZVAL_UNDEF(EX_VAR(opline->result.var));
9942 				HANDLE_EXCEPTION();
9943 			}
9944 			CACHE_PTR(opline->op2.num, ce);
9945 		}
9946 	} else if (IS_CONST == IS_UNUSED) {
9947 		ce = zend_fetch_class(NULL, opline->op1.num);
9948 		if (UNEXPECTED(ce == NULL)) {
9949 			ZVAL_UNDEF(EX_VAR(opline->result.var));
9950 			HANDLE_EXCEPTION();
9951 		}
9952 	} else {
9953 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9954 	}
9955 
9956 	result = EX_VAR(opline->result.var);
9957 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
9958 		ZVAL_UNDEF(result);
9959 		HANDLE_EXCEPTION();
9960 	}
9961 
9962 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
9963 	if (constructor == NULL) {
9964 		if (UNEXPECTED(EG(exception))) {
9965 			HANDLE_EXCEPTION();
9966 		}
9967 
9968 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
9969 		 * opcode is DO_FCALL in case EXT instructions are used. */
9970 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
9971 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
9972 		}
9973 
9974 		/* Perform a dummy function call */
9975 		call = zend_vm_stack_push_call_frame(
9976 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
9977 			opline->extended_value, NULL);
9978 	} else {
9979 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
9980 			init_func_run_time_cache(&constructor->op_array);
9981 		}
9982 		/* We are not handling overloaded classes right now */
9983 		call = zend_vm_stack_push_call_frame(
9984 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
9985 			constructor,
9986 			opline->extended_value,
9987 			Z_OBJ_P(result));
9988 		Z_ADDREF_P(result);
9989 	}
9990 
9991 	call->prev_execute_data = EX(call);
9992 	EX(call) = call;
9993 	ZEND_VM_NEXT_OPCODE();
9994 }
9995 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9997 {
9998 	USE_OPLINE
9999 	zval *expr_ptr, new_expr;
10000 
10001 	SAVE_OPLINE();
10002 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
10003 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
10004 		expr_ptr = NULL;
10005 		if (Z_ISREF_P(expr_ptr)) {
10006 			Z_ADDREF_P(expr_ptr);
10007 		} else {
10008 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
10009 		}
10010 
10011 	} else {
10012 		expr_ptr = RT_CONSTANT(opline, opline->op1);
10013 		if (IS_CONST == IS_TMP_VAR) {
10014 			/* pass */
10015 		} else if (IS_CONST == IS_CONST) {
10016 			Z_TRY_ADDREF_P(expr_ptr);
10017 		} else if (IS_CONST == IS_CV) {
10018 			ZVAL_DEREF(expr_ptr);
10019 			Z_TRY_ADDREF_P(expr_ptr);
10020 		} else /* if (IS_CONST == IS_VAR) */ {
10021 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
10022 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
10023 
10024 				expr_ptr = Z_REFVAL_P(expr_ptr);
10025 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
10026 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
10027 					expr_ptr = &new_expr;
10028 					efree_size(ref, sizeof(zend_reference));
10029 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
10030 					Z_ADDREF_P(expr_ptr);
10031 				}
10032 			}
10033 		}
10034 	}
10035 
10036 	if (IS_UNUSED != IS_UNUSED) {
10037 		zval *offset = NULL;
10038 		zend_string *str;
10039 		zend_ulong hval;
10040 
10041 add_again:
10042 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
10043 			str = Z_STR_P(offset);
10044 			if (IS_UNUSED != IS_CONST) {
10045 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
10046 					goto num_index;
10047 				}
10048 			}
10049 str_index:
10050 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
10051 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
10052 			hval = Z_LVAL_P(offset);
10053 num_index:
10054 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
10055 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
10056 			offset = Z_REFVAL_P(offset);
10057 			goto add_again;
10058 		} else if (Z_TYPE_P(offset) == IS_NULL) {
10059 			str = ZSTR_EMPTY_ALLOC();
10060 			goto str_index;
10061 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
10062 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
10063 			goto num_index;
10064 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
10065 			hval = 0;
10066 			goto num_index;
10067 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
10068 			hval = 1;
10069 			goto num_index;
10070 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
10071 			zend_use_resource_as_offset(offset);
10072 			hval = Z_RES_HANDLE_P(offset);
10073 			goto num_index;
10074 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
10075 			ZVAL_UNDEFINED_OP2();
10076 			str = ZSTR_EMPTY_ALLOC();
10077 			goto str_index;
10078 		} else {
10079 			zend_illegal_offset();
10080 			zval_ptr_dtor_nogc(expr_ptr);
10081 		}
10082 
10083 	} else {
10084 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
10085 			zend_cannot_add_element();
10086 			zval_ptr_dtor_nogc(expr_ptr);
10087 		}
10088 	}
10089 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10090 }
10091 
ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10092 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10093 {
10094 	zval *array;
10095 	uint32_t size;
10096 	USE_OPLINE
10097 
10098 	array = EX_VAR(opline->result.var);
10099 	if (IS_CONST != IS_UNUSED) {
10100 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
10101 		ZVAL_ARR(array, zend_new_array(size));
10102 		/* Explicitly initialize array as not-packed if flag is set */
10103 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
10104 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
10105 		}
10106 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10107 	} else {
10108 		ZVAL_ARR(array, zend_new_array(0));
10109 		ZEND_VM_NEXT_OPCODE();
10110 	}
10111 }
10112 
ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10114 {
10115 	USE_OPLINE
10116 	zval *varname;
10117 	zend_string *name, *tmp_name;
10118 	HashTable *target_symbol_table;
10119 
10120 	SAVE_OPLINE();
10121 
10122 	varname = RT_CONSTANT(opline, opline->op1);
10123 
10124 	if (IS_CONST == IS_CONST) {
10125 		name = Z_STR_P(varname);
10126 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
10127 		name = Z_STR_P(varname);
10128 		tmp_name = NULL;
10129 	} else {
10130 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
10131 			varname = ZVAL_UNDEFINED_OP1();
10132 		}
10133 		name = zval_try_get_tmp_string(varname, &tmp_name);
10134 		if (UNEXPECTED(!name)) {
10135 
10136 			HANDLE_EXCEPTION();
10137 		}
10138 	}
10139 
10140 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
10141 	zend_hash_del_ind(target_symbol_table, name);
10142 
10143 	if (IS_CONST != IS_CONST) {
10144 		zend_tmp_string_release(tmp_name);
10145 	}
10146 
10147 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10148 }
10149 
10150 /* 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)10151 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10152 {
10153 	USE_OPLINE
10154 	zval *value;
10155 	/* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
10156 	int result;
10157 	zval *varname;
10158 	zend_string *name, *tmp_name;
10159 	HashTable *target_symbol_table;
10160 
10161 	SAVE_OPLINE();
10162 	varname = RT_CONSTANT(opline, opline->op1);
10163 	if (IS_CONST == IS_CONST) {
10164 		name = Z_STR_P(varname);
10165 	} else {
10166 		name = zval_get_tmp_string(varname, &tmp_name);
10167 	}
10168 
10169 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
10170 	value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
10171 
10172 	if (IS_CONST != IS_CONST) {
10173 		zend_tmp_string_release(tmp_name);
10174 	}
10175 
10176 	if (!value) {
10177 		result = (opline->extended_value & ZEND_ISEMPTY);
10178 	} else {
10179 		if (Z_TYPE_P(value) == IS_INDIRECT) {
10180 			value = Z_INDIRECT_P(value);
10181 		}
10182 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
10183 			if (Z_ISREF_P(value)) {
10184 				value = Z_REFVAL_P(value);
10185 			}
10186 			result = Z_TYPE_P(value) > IS_NULL;
10187 		} else {
10188 			result = !i_zend_is_true(value);
10189 		}
10190 	}
10191 
10192 	ZEND_VM_SMART_BRANCH(result, 1);
10193 }
10194 
10195 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10196 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10197 {
10198 	USE_OPLINE
10199 	zend_function *func;
10200 	zval *zfunc;
10201 	zval *object;
10202 	zend_class_entry *called_scope;
10203 
10204 	func = CACHED_PTR(opline->extended_value);
10205 	if (UNEXPECTED(func == NULL)) {
10206 		zfunc = zend_hash_find_ex(EG(function_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1);
10207 		ZEND_ASSERT(zfunc != NULL);
10208 		func = Z_FUNC_P(zfunc);
10209 		ZEND_ASSERT(func->type == ZEND_USER_FUNCTION);
10210 		CACHE_PTR(opline->extended_value, func);
10211 	}
10212 
10213 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
10214 		called_scope = Z_OBJCE(EX(This));
10215 		if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
10216 				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
10217 			object = NULL;
10218 		} else {
10219 			object = &EX(This);
10220 		}
10221 	} else {
10222 		called_scope = Z_CE(EX(This));
10223 		object = NULL;
10224 	}
10225 	zend_create_closure(EX_VAR(opline->result.var), func,
10226 		EX(func)->op_array.scope, called_scope, object);
10227 
10228 	ZEND_VM_NEXT_OPCODE();
10229 }
10230 
ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10231 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10232 {
10233 	USE_OPLINE
10234 
10235 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
10236 
10237 	SAVE_OPLINE();
10238 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
10239 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10240 	}
10241 
10242 	/* Destroy the previously yielded value */
10243 	zval_ptr_dtor(&generator->value);
10244 
10245 	/* Destroy the previously yielded key */
10246 	zval_ptr_dtor(&generator->key);
10247 
10248 	/* Set the new yielded value */
10249 	if (IS_CONST != IS_UNUSED) {
10250 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
10251 			/* Constants and temporary variables aren't yieldable by reference,
10252 			 * but we still allow them with a notice. */
10253 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
10254 				zval *value;
10255 
10256 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10257 
10258 				value = RT_CONSTANT(opline, opline->op1);
10259 				ZVAL_COPY_VALUE(&generator->value, value);
10260 				if (IS_CONST == IS_CONST) {
10261 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10262 						Z_ADDREF(generator->value);
10263 					}
10264 				}
10265 			} else {
10266 				zval *value_ptr = NULL;
10267 
10268 				/* If a function call result is yielded and the function did
10269 				 * not return by reference we throw a notice. */
10270 				do {
10271 					if (IS_CONST == IS_VAR) {
10272 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
10273 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
10274 						 && !Z_ISREF_P(value_ptr)) {
10275 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10276 							ZVAL_COPY(&generator->value, value_ptr);
10277 							break;
10278 						}
10279 					}
10280 					if (Z_ISREF_P(value_ptr)) {
10281 						Z_ADDREF_P(value_ptr);
10282 					} else {
10283 						ZVAL_MAKE_REF_EX(value_ptr, 2);
10284 					}
10285 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
10286 				} while (0);
10287 
10288 			}
10289 		} else {
10290 			zval *value = RT_CONSTANT(opline, opline->op1);
10291 
10292 			/* Consts, temporary variables and references need copying */
10293 			if (IS_CONST == IS_CONST) {
10294 				ZVAL_COPY_VALUE(&generator->value, value);
10295 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10296 					Z_ADDREF(generator->value);
10297 				}
10298 			} else if (IS_CONST == IS_TMP_VAR) {
10299 				ZVAL_COPY_VALUE(&generator->value, value);
10300             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
10301 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
10302 
10303 			} else {
10304 				ZVAL_COPY_VALUE(&generator->value, value);
10305 				if (IS_CONST == IS_CV) {
10306 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
10307 				}
10308 			}
10309 		}
10310 	} else {
10311 		/* If no value was specified yield null */
10312 		ZVAL_NULL(&generator->value);
10313 	}
10314 
10315 	/* Set the new yielded key */
10316 	if (IS_UNUSED != IS_UNUSED) {
10317 		zval *key = NULL;
10318 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
10319 			key = Z_REFVAL_P(key);
10320 		}
10321 		ZVAL_COPY(&generator->key, key);
10322 
10323 		if (Z_TYPE(generator->key) == IS_LONG
10324 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
10325 		) {
10326 			generator->largest_used_integer_key = Z_LVAL(generator->key);
10327 		}
10328 	} else {
10329 		/* If no key was specified we use auto-increment keys */
10330 		generator->largest_used_integer_key++;
10331 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
10332 	}
10333 
10334 	if (RETURN_VALUE_USED(opline)) {
10335 		/* If the return value of yield is used set the send
10336 		 * target and initialize it to NULL */
10337 		generator->send_target = EX_VAR(opline->result.var);
10338 		ZVAL_NULL(generator->send_target);
10339 	} else {
10340 		generator->send_target = NULL;
10341 	}
10342 
10343 	/* We increment to the next op, so we are at the correct position when the
10344 	 * generator is resumed. */
10345 	ZEND_VM_INC_OPCODE();
10346 
10347 	/* The GOTO VM uses a local opline variable. We need to set the opline
10348 	 * variable in execute_data so we don't resume at an old position. */
10349 	SAVE_OPLINE();
10350 
10351 	ZEND_VM_RETURN();
10352 }
10353 
ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10354 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10355 {
10356 	USE_OPLINE
10357 	zval *op;
10358 
10359 	SAVE_OPLINE();
10360 	op = RT_CONSTANT(opline, opline->op1);
10361 	zend_throw_exception_ex(zend_ce_unhandled_match_error, 0, "Unhandled match value of type %s", zend_zval_type_name(op));
10362 	HANDLE_EXCEPTION();
10363 }
10364 
ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10365 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10366 {
10367 	USE_OPLINE
10368 	zval *op1;
10369 	zend_long count;
10370 
10371 	SAVE_OPLINE();
10372 	op1 = RT_CONSTANT(opline, opline->op1);
10373 
10374 	while (1) {
10375 		if (Z_TYPE_P(op1) == IS_ARRAY) {
10376 			count = zend_array_count(Z_ARRVAL_P(op1));
10377 			break;
10378 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
10379 			zend_object *zobj = Z_OBJ_P(op1);
10380 
10381 			/* first, we check if the handler is defined */
10382 			if (zobj->handlers->count_elements) {
10383 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
10384 					break;
10385 				}
10386 				if (UNEXPECTED(EG(exception))) {
10387 					count = 0;
10388 					break;
10389 				}
10390 			}
10391 
10392 			/* if not and the object implements Countable we call its count() method */
10393 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
10394 				zval retval;
10395 
10396 				zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
10397 				count = zval_get_long(&retval);
10398 				zval_ptr_dtor(&retval);
10399 				break;
10400 			}
10401 
10402 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
10403 		} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
10404 			op1 = Z_REFVAL_P(op1);
10405 			continue;
10406 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10407 			ZVAL_UNDEFINED_OP1();
10408 		}
10409 		count = 0;
10410 		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));
10411 		break;
10412 	}
10413 
10414 	ZVAL_LONG(EX_VAR(opline->result.var), count);
10415 
10416 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10417 }
10418 
ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10419 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10420 {
10421 	USE_OPLINE
10422 
10423 	if (IS_CONST == IS_UNUSED) {
10424 		if (UNEXPECTED(!EX(func)->common.scope)) {
10425 			SAVE_OPLINE();
10426 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
10427 			ZVAL_UNDEF(EX_VAR(opline->result.var));
10428 			HANDLE_EXCEPTION();
10429 		} else {
10430 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
10431 			ZEND_VM_NEXT_OPCODE();
10432 		}
10433 	} else {
10434 		zval *op1;
10435 
10436 		SAVE_OPLINE();
10437 		op1 = RT_CONSTANT(opline, opline->op1);
10438 		while (1) {
10439 			if (Z_TYPE_P(op1) == IS_OBJECT) {
10440 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
10441 			} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
10442 				op1 = Z_REFVAL_P(op1);
10443 				continue;
10444 			} else {
10445 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10446 					ZVAL_UNDEFINED_OP1();
10447 				}
10448 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
10449 				ZVAL_UNDEF(EX_VAR(opline->result.var));
10450 			}
10451 			break;
10452 		}
10453 
10454 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10455 	}
10456 }
10457 
ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10458 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10459 {
10460 	USE_OPLINE
10461 	zval *op1;
10462 	zend_string *type;
10463 
10464 	SAVE_OPLINE();
10465 	op1 = RT_CONSTANT(opline, opline->op1);
10466 	type = zend_zval_get_legacy_type(op1);
10467 	if (EXPECTED(type)) {
10468 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
10469 	} else {
10470 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
10471 	}
10472 
10473 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10474 }
10475 
ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10476 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10477 {
10478 	USE_OPLINE
10479 	zend_array *ht;
10480 	uint32_t arg_count, result_size, skip;
10481 
10482 	arg_count = EX_NUM_ARGS();
10483 	if (IS_CONST == IS_CONST) {
10484 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
10485 		if (arg_count < skip) {
10486 			result_size = 0;
10487 		} else {
10488 			result_size = arg_count - skip;
10489 		}
10490 	} else {
10491 		skip = 0;
10492 		result_size = arg_count;
10493 	}
10494 
10495 	if (result_size) {
10496 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
10497 
10498 		ht = zend_new_array(result_size);
10499 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
10500 		zend_hash_real_init_packed(ht);
10501 		ZEND_HASH_FILL_PACKED(ht) {
10502 			zval *p, *q;
10503 			uint32_t i = skip;
10504 			p = EX_VAR_NUM(i);
10505 			if (arg_count > first_extra_arg) {
10506 				while (i < first_extra_arg) {
10507 					q = p;
10508 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
10509 						ZVAL_DEREF(q);
10510 						if (Z_OPT_REFCOUNTED_P(q)) {
10511 							Z_ADDREF_P(q);
10512 						}
10513 						ZEND_HASH_FILL_SET(q);
10514 					} else {
10515 						ZEND_HASH_FILL_SET_NULL();
10516 					}
10517 					ZEND_HASH_FILL_NEXT();
10518 					p++;
10519 					i++;
10520 				}
10521 				if (skip < first_extra_arg) {
10522 					skip = 0;
10523 				} else {
10524 					skip -= first_extra_arg;
10525 				}
10526 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
10527 			}
10528 			while (i < arg_count) {
10529 				q = p;
10530 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
10531 					ZVAL_DEREF(q);
10532 					if (Z_OPT_REFCOUNTED_P(q)) {
10533 						Z_ADDREF_P(q);
10534 					}
10535 					ZEND_HASH_FILL_SET(q);
10536 				} else {
10537 					ZEND_HASH_FILL_SET_NULL();
10538 				}
10539 				ZEND_HASH_FILL_NEXT();
10540 				p++;
10541 				i++;
10542 			}
10543 		} ZEND_HASH_FILL_END();
10544 		ht->nNumOfElements = result_size;
10545 	} else {
10546 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
10547 	}
10548 	ZEND_VM_NEXT_OPCODE();
10549 }
10550 
ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10551 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10552 {
10553 	USE_OPLINE
10554 	zval *op1, *op2;
10555 
10556 	SAVE_OPLINE();
10557 	op1 = RT_CONSTANT(opline, opline->op1);
10558 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
10559 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
10560 
10561 
10562 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10563 }
10564 
ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10565 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10566 {
10567 	USE_OPLINE
10568 	zval *op1, *op2;
10569 
10570 	SAVE_OPLINE();
10571 	op1 = RT_CONSTANT(opline, opline->op1);
10572 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
10573 	pow_function(EX_VAR(opline->result.var), op1, op2);
10574 
10575 
10576 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10577 }
10578 
ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10579 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10580 {
10581 	USE_OPLINE
10582 	zval *op1, *op2;
10583 
10584 	op1 = RT_CONSTANT(opline, opline->op1);
10585 	op2 = EX_VAR(opline->op2.var);
10586 
10587 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
10588 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
10589 		zend_string *op1_str = Z_STR_P(op1);
10590 		zend_string *op2_str = Z_STR_P(op2);
10591 		zend_string *str;
10592 
10593 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
10594 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
10595 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
10596 			} else {
10597 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
10598 			}
10599 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
10600 				zend_string_release_ex(op1_str, 0);
10601 			}
10602 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
10603 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
10604 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
10605 			} else {
10606 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
10607 			}
10608 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
10609 				zend_string_release_ex(op2_str, 0);
10610 			}
10611 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
10612 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
10613 		    size_t len = ZSTR_LEN(op1_str);
10614 
10615 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
10616 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
10617 			}
10618 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
10619 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10620 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10621 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
10622 				zend_string_release_ex(op2_str, 0);
10623 			}
10624 		} else {
10625 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
10626 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
10627 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10628 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10629 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
10630 				zend_string_release_ex(op1_str, 0);
10631 			}
10632 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
10633 				zend_string_release_ex(op2_str, 0);
10634 			}
10635 		}
10636 		ZEND_VM_NEXT_OPCODE();
10637 	} else {
10638 		SAVE_OPLINE();
10639 
10640 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10641 			op1 = ZVAL_UNDEFINED_OP1();
10642 		}
10643 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
10644 			op2 = ZVAL_UNDEFINED_OP2();
10645 		}
10646 		concat_function(EX_VAR(opline->result.var), op1, op2);
10647 
10648 
10649 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10650 	}
10651 }
10652 
ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10653 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10654 {
10655 	USE_OPLINE
10656 	zval *op1, *op2;
10657 
10658 	SAVE_OPLINE();
10659 	op1 = RT_CONSTANT(opline, opline->op1);
10660 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
10661 	compare_function(EX_VAR(opline->result.var), op1, op2);
10662 
10663 
10664 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10665 }
10666 
ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10667 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10668 {
10669 	USE_OPLINE
10670 	zval *container, *dim, *value;
10671 
10672 	SAVE_OPLINE();
10673 	container = RT_CONSTANT(opline, opline->op1);
10674 	dim = EX_VAR(opline->op2.var);
10675 	if (IS_CONST != IS_CONST) {
10676 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10677 fetch_dim_r_array:
10678 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
10679 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
10680 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
10681 			container = Z_REFVAL_P(container);
10682 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10683 				goto fetch_dim_r_array;
10684 			} else {
10685 				goto fetch_dim_r_slow;
10686 			}
10687 		} else {
10688 fetch_dim_r_slow:
10689 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
10690 				dim++;
10691 			}
10692 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
10693 		}
10694 	} else {
10695 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
10696 	}
10697 
10698 
10699 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10700 }
10701 
ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10702 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10703 {
10704 	USE_OPLINE
10705 	zval *container;
10706 
10707 	SAVE_OPLINE();
10708 	container = RT_CONSTANT(opline, opline->op1);
10709 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
10710 
10711 
10712 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10713 }
10714 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10715 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10716 {
10717 #if 0
10718 	USE_OPLINE
10719 #endif
10720 
10721 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
10722         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
10723 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10724         }
10725 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10726 	} else {
10727 		if (IS_CV == IS_UNUSED) {
10728 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10729 		}
10730 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10731 	}
10732 }
10733 
ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10734 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10735 {
10736 	USE_OPLINE
10737 	zval *container;
10738 	zval *offset;
10739 	void **cache_slot = NULL;
10740 
10741 	SAVE_OPLINE();
10742 	container = RT_CONSTANT(opline, opline->op1);
10743 	offset = EX_VAR(opline->op2.var);
10744 
10745 	if (IS_CONST == IS_CONST ||
10746 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
10747 	    do {
10748 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10749 				container = Z_REFVAL_P(container);
10750 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
10751 					break;
10752 				}
10753 			}
10754 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
10755 				ZVAL_UNDEFINED_OP1();
10756 			}
10757 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
10758 				ZVAL_UNDEFINED_OP2();
10759 			}
10760 			zend_wrong_property_read(container, offset);
10761 			ZVAL_NULL(EX_VAR(opline->result.var));
10762 			goto fetch_obj_r_finish;
10763 		} while (0);
10764 	}
10765 
10766 	/* here we are sure we are dealing with an object */
10767 	do {
10768 		zend_object *zobj = Z_OBJ_P(container);
10769 		zend_string *name, *tmp_name;
10770 		zval *retval;
10771 
10772 		if (IS_CV == IS_CONST) {
10773 			name = Z_STR_P(offset);
10774 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
10775 
10776 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
10777 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
10778 
10779 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
10780 					retval = OBJ_PROP(zobj, prop_offset);
10781 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
10782 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10783 							goto fetch_obj_r_copy;
10784 						} else {
10785 fetch_obj_r_fast_copy:
10786 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10787 							ZEND_VM_NEXT_OPCODE();
10788 						}
10789 					}
10790 				} else if (EXPECTED(zobj->properties != NULL)) {
10791 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
10792 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
10793 
10794 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
10795 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
10796 
10797 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
10798 						        (EXPECTED(p->key == name) ||
10799 						         (EXPECTED(p->h == ZSTR_H(name)) &&
10800 						          EXPECTED(p->key != NULL) &&
10801 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
10802 								retval = &p->val;
10803 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10804 									goto fetch_obj_r_copy;
10805 								} else {
10806 									goto fetch_obj_r_fast_copy;
10807 								}
10808 							}
10809 						}
10810 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
10811 					}
10812 					retval = zend_hash_find_ex(zobj->properties, name, 1);
10813 					if (EXPECTED(retval)) {
10814 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
10815 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
10816 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10817 							goto fetch_obj_r_copy;
10818 						} else {
10819 							goto fetch_obj_r_fast_copy;
10820 						}
10821 					}
10822 				}
10823 			}
10824 		} else {
10825 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
10826 				ZVAL_UNDEFINED_OP2();
10827 			}
10828 			name = zval_try_get_tmp_string(offset, &tmp_name);
10829 			if (UNEXPECTED(!name)) {
10830 				ZVAL_UNDEF(EX_VAR(opline->result.var));
10831 				break;
10832 			}
10833 		}
10834 
10835 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
10836 
10837 		if (IS_CV != IS_CONST) {
10838 			zend_tmp_string_release(tmp_name);
10839 		}
10840 
10841 		if (retval != EX_VAR(opline->result.var)) {
10842 fetch_obj_r_copy:
10843 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10844 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
10845 			zend_unwrap_reference(retval);
10846 		}
10847 	} while (0);
10848 
10849 fetch_obj_r_finish:
10850 
10851 
10852 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10853 }
10854 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10855 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10856 {
10857 	USE_OPLINE
10858 	zval *container;
10859 	zval *offset;
10860 	void **cache_slot = NULL;
10861 
10862 	SAVE_OPLINE();
10863 	container = RT_CONSTANT(opline, opline->op1);
10864 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
10865 
10866 	if (IS_CONST == IS_CONST ||
10867 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
10868 		do {
10869 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10870 				container = Z_REFVAL_P(container);
10871 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
10872 					break;
10873 				}
10874 			}
10875 			ZVAL_NULL(EX_VAR(opline->result.var));
10876 			goto fetch_obj_is_finish;
10877 		} while (0);
10878 	}
10879 
10880 	/* here we are sure we are dealing with an object */
10881 	do {
10882 		zend_object *zobj = Z_OBJ_P(container);
10883 		zend_string *name, *tmp_name;
10884 		zval *retval;
10885 
10886 		if (IS_CV == IS_CONST) {
10887 			name = Z_STR_P(offset);
10888 			cache_slot = CACHE_ADDR(opline->extended_value);
10889 
10890 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
10891 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
10892 
10893 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
10894 					retval = OBJ_PROP(zobj, prop_offset);
10895 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
10896 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10897 							goto fetch_obj_is_copy;
10898 						} else {
10899 fetch_obj_is_fast_copy:
10900 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10901 							ZEND_VM_NEXT_OPCODE();
10902 						}
10903 					}
10904 				} else if (EXPECTED(zobj->properties != NULL)) {
10905 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
10906 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
10907 
10908 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
10909 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
10910 
10911 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
10912 						        (EXPECTED(p->key == name) ||
10913 						         (EXPECTED(p->h == ZSTR_H(name)) &&
10914 						          EXPECTED(p->key != NULL) &&
10915 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
10916 								retval = &p->val;
10917 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10918 									goto fetch_obj_is_copy;
10919 								} else {
10920 									goto fetch_obj_is_fast_copy;
10921 								}
10922 							}
10923 						}
10924 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
10925 					}
10926 					retval = zend_hash_find_ex(zobj->properties, name, 1);
10927 					if (EXPECTED(retval)) {
10928 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
10929 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
10930 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10931 							goto fetch_obj_is_copy;
10932 						} else {
10933 							goto fetch_obj_is_fast_copy;
10934 						}
10935 					}
10936 				}
10937 			}
10938 		} else {
10939 			name = zval_try_get_tmp_string(offset, &tmp_name);
10940 			if (UNEXPECTED(!name)) {
10941 				ZVAL_UNDEF(EX_VAR(opline->result.var));
10942 				break;
10943 			}
10944 		}
10945 
10946 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
10947 
10948 		if (IS_CV != IS_CONST) {
10949 			zend_tmp_string_release(tmp_name);
10950 		}
10951 
10952 		if (retval != EX_VAR(opline->result.var)) {
10953 fetch_obj_is_copy:
10954 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10955 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
10956 			zend_unwrap_reference(retval);
10957 		}
10958 	} while (0);
10959 
10960 fetch_obj_is_finish:
10961 
10962 
10963 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10964 }
10965 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10966 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10967 {
10968 #if 0
10969 	USE_OPLINE
10970 #endif
10971 
10972 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
10973 		/* Behave like FETCH_OBJ_W */
10974 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
10975 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10976 		}
10977 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10978 	} else {
10979 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10980 	}
10981 }
10982 
ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10983 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10984 {
10985 	USE_OPLINE
10986 	zval *container;
10987 
10988 	SAVE_OPLINE();
10989 	container = RT_CONSTANT(opline, opline->op1);
10990 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
10991 
10992 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10993 }
10994 
ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10995 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10996 {
10997 	USE_OPLINE
10998 	zval *op1, *op2;
10999 	zend_string *op1_str, *op2_str, *str;
11000 
11001 
11002 	op1 = RT_CONSTANT(opline, opline->op1);
11003 	op2 = EX_VAR(opline->op2.var);
11004 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
11005 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
11006 		zend_string *op1_str = Z_STR_P(op1);
11007 		zend_string *op2_str = Z_STR_P(op2);
11008 		zend_string *str;
11009 
11010 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11011 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
11012 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
11013 			} else {
11014 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11015 			}
11016 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11017 				zend_string_release_ex(op1_str, 0);
11018 			}
11019 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11020 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
11021 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
11022 			} else {
11023 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11024 			}
11025 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11026 				zend_string_release_ex(op2_str, 0);
11027 			}
11028 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
11029 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
11030 		    size_t len = ZSTR_LEN(op1_str);
11031 
11032 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
11033 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11034 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11035 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11036 				zend_string_release_ex(op2_str, 0);
11037 			}
11038 		} else {
11039 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11040 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11041 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11042 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11043 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11044 				zend_string_release_ex(op1_str, 0);
11045 			}
11046 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11047 				zend_string_release_ex(op2_str, 0);
11048 			}
11049 		}
11050 		ZEND_VM_NEXT_OPCODE();
11051 	}
11052 
11053 	SAVE_OPLINE();
11054 	if (IS_CONST == IS_CONST) {
11055 		op1_str = Z_STR_P(op1);
11056 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
11057 		op1_str = zend_string_copy(Z_STR_P(op1));
11058 	} else {
11059 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11060 			ZVAL_UNDEFINED_OP1();
11061 		}
11062 		op1_str = zval_get_string_func(op1);
11063 	}
11064 	if (IS_CV == IS_CONST) {
11065 		op2_str = Z_STR_P(op2);
11066 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
11067 		op2_str = zend_string_copy(Z_STR_P(op2));
11068 	} else {
11069 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11070 			ZVAL_UNDEFINED_OP2();
11071 		}
11072 		op2_str = zval_get_string_func(op2);
11073 	}
11074 	do {
11075 		if (IS_CONST != IS_CONST) {
11076 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11077 				if (IS_CV == IS_CONST) {
11078 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
11079 						GC_ADDREF(op2_str);
11080 					}
11081 				}
11082 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11083 				zend_string_release_ex(op1_str, 0);
11084 				break;
11085 			}
11086 		}
11087 		if (IS_CV != IS_CONST) {
11088 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11089 				if (IS_CONST == IS_CONST) {
11090 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
11091 						GC_ADDREF(op1_str);
11092 					}
11093 				}
11094 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11095 				zend_string_release_ex(op2_str, 0);
11096 				break;
11097 			}
11098 		}
11099 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11100 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11101 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11102 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11103 		if (IS_CONST != IS_CONST) {
11104 			zend_string_release_ex(op1_str, 0);
11105 		}
11106 		if (IS_CV != IS_CONST) {
11107 			zend_string_release_ex(op2_str, 0);
11108 		}
11109 	} while (0);
11110 
11111 
11112 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11113 }
11114 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11115 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11116 {
11117 	USE_OPLINE
11118 	zval *function_name;
11119 	zval *object;
11120 	zend_function *fbc;
11121 	zend_class_entry *called_scope;
11122 	zend_object *obj;
11123 	zend_execute_data *call;
11124 	uint32_t call_info;
11125 
11126 	SAVE_OPLINE();
11127 
11128 	object = RT_CONSTANT(opline, opline->op1);
11129 
11130 	if (IS_CV != IS_CONST) {
11131 		function_name = EX_VAR(opline->op2.var);
11132 	}
11133 
11134 	if (IS_CV != IS_CONST &&
11135 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11136 		do {
11137 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
11138 				function_name = Z_REFVAL_P(function_name);
11139 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11140 					break;
11141 				}
11142 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11143 				ZVAL_UNDEFINED_OP2();
11144 				if (UNEXPECTED(EG(exception) != NULL)) {
11145 
11146 					HANDLE_EXCEPTION();
11147 				}
11148 			}
11149 			zend_throw_error(NULL, "Method name must be a string");
11150 
11151 
11152 			HANDLE_EXCEPTION();
11153 		} while (0);
11154 	}
11155 
11156 	if (IS_CONST == IS_UNUSED) {
11157 		obj = Z_OBJ_P(object);
11158 	} else {
11159 		do {
11160 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11161 				obj = Z_OBJ_P(object);
11162 			} else {
11163 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
11164 					zend_reference *ref = Z_REF_P(object);
11165 
11166 					object = &ref->val;
11167 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11168 						obj = Z_OBJ_P(object);
11169 						if (IS_CONST & IS_VAR) {
11170 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
11171 								efree_size(ref, sizeof(zend_reference));
11172 							} else {
11173 								Z_ADDREF_P(object);
11174 							}
11175 						}
11176 						break;
11177 					}
11178 				}
11179 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
11180 					object = ZVAL_UNDEFINED_OP1();
11181 					if (UNEXPECTED(EG(exception) != NULL)) {
11182 						if (IS_CV != IS_CONST) {
11183 
11184 						}
11185 						HANDLE_EXCEPTION();
11186 					}
11187 				}
11188 				if (IS_CV == IS_CONST) {
11189 					function_name = EX_VAR(opline->op2.var);
11190 				}
11191 				zend_invalid_method_call(object, function_name);
11192 
11193 
11194 				HANDLE_EXCEPTION();
11195 			}
11196 		} while (0);
11197 	}
11198 
11199 	called_scope = obj->ce;
11200 
11201 	if (IS_CV == IS_CONST &&
11202 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
11203 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
11204 	} else {
11205 	    zend_object *orig_obj = obj;
11206 
11207 		if (IS_CV == IS_CONST) {
11208 			function_name = EX_VAR(opline->op2.var);
11209 		}
11210 
11211 		/* First, locate the function. */
11212 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
11213 		if (UNEXPECTED(fbc == NULL)) {
11214 			if (EXPECTED(!EG(exception))) {
11215 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
11216 			}
11217 
11218 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
11219 				zend_objects_store_del(orig_obj);
11220 			}
11221 			HANDLE_EXCEPTION();
11222 		}
11223 		if (IS_CV == IS_CONST &&
11224 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
11225 		    EXPECTED(obj == orig_obj)) {
11226 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
11227 		}
11228 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
11229 			GC_ADDREF(obj); /* For $this pointer */
11230 			if (GC_DELREF(orig_obj) == 0) {
11231 				zend_objects_store_del(orig_obj);
11232 			}
11233 		}
11234 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
11235 			init_func_run_time_cache(&fbc->op_array);
11236 		}
11237 	}
11238 
11239 	if (IS_CV != IS_CONST) {
11240 
11241 	}
11242 
11243 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
11244 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
11245 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
11246 			zend_objects_store_del(obj);
11247 			if (UNEXPECTED(EG(exception))) {
11248 				HANDLE_EXCEPTION();
11249 			}
11250 		}
11251 		/* call static method */
11252 		obj = (zend_object*)called_scope;
11253 		call_info = ZEND_CALL_NESTED_FUNCTION;
11254 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
11255 		if (IS_CONST == IS_CV) {
11256 			GC_ADDREF(obj); /* For $this pointer */
11257 		}
11258 		/* CV may be changed indirectly (e.g. when it's a reference) */
11259 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
11260 	}
11261 
11262 	call = zend_vm_stack_push_call_frame(call_info,
11263 		fbc, opline->extended_value, obj);
11264 	call->prev_execute_data = EX(call);
11265 	EX(call) = call;
11266 
11267 	ZEND_VM_NEXT_OPCODE();
11268 }
11269 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11270 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11271 {
11272 	USE_OPLINE
11273 	zval *function_name;
11274 	zend_class_entry *ce;
11275 	uint32_t call_info;
11276 	zend_function *fbc;
11277 	zend_execute_data *call;
11278 
11279 	SAVE_OPLINE();
11280 
11281 	if (IS_CONST == IS_CONST) {
11282 		/* no function found. try a static method in class */
11283 		ce = CACHED_PTR(opline->result.num);
11284 		if (UNEXPECTED(ce == NULL)) {
11285 			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);
11286 			if (UNEXPECTED(ce == NULL)) {
11287 
11288 				HANDLE_EXCEPTION();
11289 			}
11290 			if (IS_CV != IS_CONST) {
11291 				CACHE_PTR(opline->result.num, ce);
11292 			}
11293 		}
11294 	} else if (IS_CONST == IS_UNUSED) {
11295 		ce = zend_fetch_class(NULL, opline->op1.num);
11296 		if (UNEXPECTED(ce == NULL)) {
11297 
11298 			HANDLE_EXCEPTION();
11299 		}
11300 	} else {
11301 		ce = Z_CE_P(EX_VAR(opline->op1.var));
11302 	}
11303 
11304 	if (IS_CONST == IS_CONST &&
11305 	    IS_CV == IS_CONST &&
11306 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
11307 		/* nothing to do */
11308 	} else if (IS_CONST != IS_CONST &&
11309 	           IS_CV == IS_CONST &&
11310 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
11311 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
11312 	} else if (IS_CV != IS_UNUSED) {
11313 		function_name = EX_VAR(opline->op2.var);
11314 		if (IS_CV != IS_CONST) {
11315 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11316 				do {
11317 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
11318 						function_name = Z_REFVAL_P(function_name);
11319 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11320 							break;
11321 						}
11322 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11323 						ZVAL_UNDEFINED_OP2();
11324 						if (UNEXPECTED(EG(exception) != NULL)) {
11325 							HANDLE_EXCEPTION();
11326 						}
11327 					}
11328 					zend_throw_error(NULL, "Method name must be a string");
11329 
11330 					HANDLE_EXCEPTION();
11331 				} while (0);
11332 			}
11333 		}
11334 
11335 		if (ce->get_static_method) {
11336 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
11337 		} else {
11338 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
11339 		}
11340 		if (UNEXPECTED(fbc == NULL)) {
11341 			if (EXPECTED(!EG(exception))) {
11342 				zend_undefined_method(ce, Z_STR_P(function_name));
11343 			}
11344 
11345 			HANDLE_EXCEPTION();
11346 		}
11347 		if (IS_CV == IS_CONST &&
11348 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
11349 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
11350 		}
11351 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
11352 			init_func_run_time_cache(&fbc->op_array);
11353 		}
11354 		if (IS_CV != IS_CONST) {
11355 
11356 		}
11357 	} else {
11358 		if (UNEXPECTED(ce->constructor == NULL)) {
11359 			zend_throw_error(NULL, "Cannot call constructor");
11360 			HANDLE_EXCEPTION();
11361 		}
11362 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
11363 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
11364 			HANDLE_EXCEPTION();
11365 		}
11366 		fbc = ce->constructor;
11367 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
11368 			init_func_run_time_cache(&fbc->op_array);
11369 		}
11370 	}
11371 
11372 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
11373 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
11374 			ce = (zend_class_entry*)Z_OBJ(EX(This));
11375 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
11376 		} else {
11377 			zend_non_static_method_call(fbc);
11378 			HANDLE_EXCEPTION();
11379 		}
11380 	} else {
11381 		/* previous opcode is ZEND_FETCH_CLASS */
11382 		if (IS_CONST == IS_UNUSED
11383 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
11384 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
11385 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
11386 				ce = Z_OBJCE(EX(This));
11387 			} else {
11388 				ce = Z_CE(EX(This));
11389 			}
11390 		}
11391 		call_info = ZEND_CALL_NESTED_FUNCTION;
11392 	}
11393 
11394 	call = zend_vm_stack_push_call_frame(call_info,
11395 		fbc, opline->extended_value, ce);
11396 	call->prev_execute_data = EX(call);
11397 	EX(call) = call;
11398 
11399 	ZEND_VM_NEXT_OPCODE();
11400 }
11401 
ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11402 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11403 {
11404 	USE_OPLINE
11405 	zval *function_name;
11406 	zend_fcall_info_cache fcc;
11407 	char *error = NULL;
11408 	zend_function *func;
11409 	void *object_or_called_scope;
11410 	zend_execute_data *call;
11411 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
11412 
11413 	SAVE_OPLINE();
11414 	function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11415 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
11416 		ZEND_ASSERT(!error);
11417 		func = fcc.function_handler;
11418 		object_or_called_scope = fcc.called_scope;
11419 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
11420 			/* Delay closure destruction until its invocation */
11421 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
11422 			call_info |= ZEND_CALL_CLOSURE;
11423 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
11424 				call_info |= ZEND_CALL_FAKE_CLOSURE;
11425 			}
11426 			if (fcc.object) {
11427 				object_or_called_scope = fcc.object;
11428 				call_info |= ZEND_CALL_HAS_THIS;
11429 			}
11430 		} else if (fcc.object) {
11431 			GC_ADDREF(fcc.object); /* For $this pointer */
11432 			object_or_called_scope = fcc.object;
11433 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
11434 		}
11435 
11436 		if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
11437 			if (call_info & ZEND_CALL_CLOSURE) {
11438 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
11439 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
11440 				zend_object_release(fcc.object);
11441 			}
11442 			HANDLE_EXCEPTION();
11443 		}
11444 
11445 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
11446 			init_func_run_time_cache(&func->op_array);
11447 		}
11448 	} else {
11449 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
11450 		efree(error);
11451 
11452 		HANDLE_EXCEPTION();
11453 	}
11454 
11455 	call = zend_vm_stack_push_call_frame(call_info,
11456 		func, opline->extended_value, object_or_called_scope);
11457 	call->prev_execute_data = EX(call);
11458 	EX(call) = call;
11459 
11460 	ZEND_VM_NEXT_OPCODE();
11461 }
11462 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11463 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11464 {
11465 	USE_OPLINE
11466 	zval *expr_ptr, new_expr;
11467 
11468 	SAVE_OPLINE();
11469 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
11470 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
11471 		expr_ptr = NULL;
11472 		if (Z_ISREF_P(expr_ptr)) {
11473 			Z_ADDREF_P(expr_ptr);
11474 		} else {
11475 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
11476 		}
11477 
11478 	} else {
11479 		expr_ptr = RT_CONSTANT(opline, opline->op1);
11480 		if (IS_CONST == IS_TMP_VAR) {
11481 			/* pass */
11482 		} else if (IS_CONST == IS_CONST) {
11483 			Z_TRY_ADDREF_P(expr_ptr);
11484 		} else if (IS_CONST == IS_CV) {
11485 			ZVAL_DEREF(expr_ptr);
11486 			Z_TRY_ADDREF_P(expr_ptr);
11487 		} else /* if (IS_CONST == IS_VAR) */ {
11488 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
11489 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
11490 
11491 				expr_ptr = Z_REFVAL_P(expr_ptr);
11492 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
11493 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
11494 					expr_ptr = &new_expr;
11495 					efree_size(ref, sizeof(zend_reference));
11496 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
11497 					Z_ADDREF_P(expr_ptr);
11498 				}
11499 			}
11500 		}
11501 	}
11502 
11503 	if (IS_CV != IS_UNUSED) {
11504 		zval *offset = EX_VAR(opline->op2.var);
11505 		zend_string *str;
11506 		zend_ulong hval;
11507 
11508 add_again:
11509 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
11510 			str = Z_STR_P(offset);
11511 			if (IS_CV != IS_CONST) {
11512 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
11513 					goto num_index;
11514 				}
11515 			}
11516 str_index:
11517 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
11518 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11519 			hval = Z_LVAL_P(offset);
11520 num_index:
11521 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
11522 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
11523 			offset = Z_REFVAL_P(offset);
11524 			goto add_again;
11525 		} else if (Z_TYPE_P(offset) == IS_NULL) {
11526 			str = ZSTR_EMPTY_ALLOC();
11527 			goto str_index;
11528 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
11529 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
11530 			goto num_index;
11531 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
11532 			hval = 0;
11533 			goto num_index;
11534 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
11535 			hval = 1;
11536 			goto num_index;
11537 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
11538 			zend_use_resource_as_offset(offset);
11539 			hval = Z_RES_HANDLE_P(offset);
11540 			goto num_index;
11541 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
11542 			ZVAL_UNDEFINED_OP2();
11543 			str = ZSTR_EMPTY_ALLOC();
11544 			goto str_index;
11545 		} else {
11546 			zend_illegal_offset();
11547 			zval_ptr_dtor_nogc(expr_ptr);
11548 		}
11549 
11550 	} else {
11551 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
11552 			zend_cannot_add_element();
11553 			zval_ptr_dtor_nogc(expr_ptr);
11554 		}
11555 	}
11556 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11557 }
11558 
ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11559 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11560 {
11561 	zval *array;
11562 	uint32_t size;
11563 	USE_OPLINE
11564 
11565 	array = EX_VAR(opline->result.var);
11566 	if (IS_CONST != IS_UNUSED) {
11567 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
11568 		ZVAL_ARR(array, zend_new_array(size));
11569 		/* Explicitly initialize array as not-packed if flag is set */
11570 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
11571 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
11572 		}
11573 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11574 	} else {
11575 		ZVAL_ARR(array, zend_new_array(0));
11576 		ZEND_VM_NEXT_OPCODE();
11577 	}
11578 }
11579 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11580 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11581 {
11582 	USE_OPLINE
11583 	zval *container;
11584 	bool result;
11585 	zend_ulong hval;
11586 	zval *offset;
11587 
11588 	SAVE_OPLINE();
11589 	container = RT_CONSTANT(opline, opline->op1);
11590 	offset = EX_VAR(opline->op2.var);
11591 
11592 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11593 		HashTable *ht;
11594 		zval *value;
11595 		zend_string *str;
11596 
11597 isset_dim_obj_array:
11598 		ht = Z_ARRVAL_P(container);
11599 isset_again:
11600 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
11601 			str = Z_STR_P(offset);
11602 			if (IS_CV != IS_CONST) {
11603 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
11604 					goto num_index_prop;
11605 				}
11606 			}
11607 			value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST);
11608 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11609 			hval = Z_LVAL_P(offset);
11610 num_index_prop:
11611 			value = zend_hash_index_find(ht, hval);
11612 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
11613 			offset = Z_REFVAL_P(offset);
11614 			goto isset_again;
11615 		} else {
11616 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
11617 			if (UNEXPECTED(EG(exception))) {
11618 				result = 0;
11619 				goto isset_dim_obj_exit;
11620 			}
11621 		}
11622 
11623 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
11624 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
11625 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
11626 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
11627 
11628 			if (IS_CONST & (IS_CONST|IS_CV)) {
11629 				/* avoid exception check */
11630 
11631 				ZEND_VM_SMART_BRANCH(result, 0);
11632 			}
11633 		} else {
11634 			result = (value == NULL || !i_zend_is_true(value));
11635 		}
11636 		goto isset_dim_obj_exit;
11637 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
11638 		container = Z_REFVAL_P(container);
11639 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11640 			goto isset_dim_obj_array;
11641 		}
11642 	}
11643 
11644 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
11645 		offset++;
11646 	}
11647 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
11648 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
11649 	} else {
11650 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
11651 	}
11652 
11653 isset_dim_obj_exit:
11654 
11655 
11656 	ZEND_VM_SMART_BRANCH(result, 1);
11657 }
11658 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11659 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11660 {
11661 	USE_OPLINE
11662 	zval *container;
11663 	int result;
11664 	zval *offset;
11665 	zend_string *name, *tmp_name;
11666 
11667 	SAVE_OPLINE();
11668 	container = RT_CONSTANT(opline, opline->op1);
11669 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11670 
11671 	if (IS_CONST == IS_CONST ||
11672 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11673 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11674 			container = Z_REFVAL_P(container);
11675 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
11676 				result = (opline->extended_value & ZEND_ISEMPTY);
11677 				goto isset_object_finish;
11678 			}
11679 		} else {
11680 			result = (opline->extended_value & ZEND_ISEMPTY);
11681 			goto isset_object_finish;
11682 		}
11683 	}
11684 
11685 	if (IS_CV == IS_CONST) {
11686 		name = Z_STR_P(offset);
11687 	} else {
11688 		name = zval_try_get_tmp_string(offset, &tmp_name);
11689 		if (UNEXPECTED(!name)) {
11690 			result = 0;
11691 			goto isset_object_finish;
11692 		}
11693 	}
11694 
11695 	result =
11696 		(opline->extended_value & ZEND_ISEMPTY) ^
11697 		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));
11698 
11699 	if (IS_CV != IS_CONST) {
11700 		zend_tmp_string_release(tmp_name);
11701 	}
11702 
11703 isset_object_finish:
11704 
11705 
11706 	ZEND_VM_SMART_BRANCH(result, 1);
11707 }
11708 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11709 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11710 {
11711 	USE_OPLINE
11712 
11713 	zval *key, *subject;
11714 	HashTable *ht;
11715 	zend_bool result;
11716 
11717 	SAVE_OPLINE();
11718 
11719 	key = RT_CONSTANT(opline, opline->op1);
11720 	subject = EX_VAR(opline->op2.var);
11721 
11722 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
11723 array_key_exists_array:
11724 		ht = Z_ARRVAL_P(subject);
11725 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
11726 	} else {
11727 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
11728 			subject = Z_REFVAL_P(subject);
11729 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
11730 				goto array_key_exists_array;
11731 			}
11732 		}
11733 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
11734 		result = 0;
11735 	}
11736 
11737 
11738 	ZEND_VM_SMART_BRANCH(result, 1);
11739 }
11740 
11741 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11743 {
11744 	USE_OPLINE
11745 
11746 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
11747 
11748 	SAVE_OPLINE();
11749 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
11750 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11751 	}
11752 
11753 	/* Destroy the previously yielded value */
11754 	zval_ptr_dtor(&generator->value);
11755 
11756 	/* Destroy the previously yielded key */
11757 	zval_ptr_dtor(&generator->key);
11758 
11759 	/* Set the new yielded value */
11760 	if (IS_CONST != IS_UNUSED) {
11761 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
11762 			/* Constants and temporary variables aren't yieldable by reference,
11763 			 * but we still allow them with a notice. */
11764 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
11765 				zval *value;
11766 
11767 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
11768 
11769 				value = RT_CONSTANT(opline, opline->op1);
11770 				ZVAL_COPY_VALUE(&generator->value, value);
11771 				if (IS_CONST == IS_CONST) {
11772 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
11773 						Z_ADDREF(generator->value);
11774 					}
11775 				}
11776 			} else {
11777 				zval *value_ptr = NULL;
11778 
11779 				/* If a function call result is yielded and the function did
11780 				 * not return by reference we throw a notice. */
11781 				do {
11782 					if (IS_CONST == IS_VAR) {
11783 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
11784 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
11785 						 && !Z_ISREF_P(value_ptr)) {
11786 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
11787 							ZVAL_COPY(&generator->value, value_ptr);
11788 							break;
11789 						}
11790 					}
11791 					if (Z_ISREF_P(value_ptr)) {
11792 						Z_ADDREF_P(value_ptr);
11793 					} else {
11794 						ZVAL_MAKE_REF_EX(value_ptr, 2);
11795 					}
11796 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
11797 				} while (0);
11798 
11799 			}
11800 		} else {
11801 			zval *value = RT_CONSTANT(opline, opline->op1);
11802 
11803 			/* Consts, temporary variables and references need copying */
11804 			if (IS_CONST == IS_CONST) {
11805 				ZVAL_COPY_VALUE(&generator->value, value);
11806 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
11807 					Z_ADDREF(generator->value);
11808 				}
11809 			} else if (IS_CONST == IS_TMP_VAR) {
11810 				ZVAL_COPY_VALUE(&generator->value, value);
11811             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
11812 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
11813 
11814 			} else {
11815 				ZVAL_COPY_VALUE(&generator->value, value);
11816 				if (IS_CONST == IS_CV) {
11817 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
11818 				}
11819 			}
11820 		}
11821 	} else {
11822 		/* If no value was specified yield null */
11823 		ZVAL_NULL(&generator->value);
11824 	}
11825 
11826 	/* Set the new yielded key */
11827 	if (IS_CV != IS_UNUSED) {
11828 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11829 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
11830 			key = Z_REFVAL_P(key);
11831 		}
11832 		ZVAL_COPY(&generator->key, key);
11833 
11834 		if (Z_TYPE(generator->key) == IS_LONG
11835 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
11836 		) {
11837 			generator->largest_used_integer_key = Z_LVAL(generator->key);
11838 		}
11839 	} else {
11840 		/* If no key was specified we use auto-increment keys */
11841 		generator->largest_used_integer_key++;
11842 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
11843 	}
11844 
11845 	if (RETURN_VALUE_USED(opline)) {
11846 		/* If the return value of yield is used set the send
11847 		 * target and initialize it to NULL */
11848 		generator->send_target = EX_VAR(opline->result.var);
11849 		ZVAL_NULL(generator->send_target);
11850 	} else {
11851 		generator->send_target = NULL;
11852 	}
11853 
11854 	/* We increment to the next op, so we are at the correct position when the
11855 	 * generator is resumed. */
11856 	ZEND_VM_INC_OPCODE();
11857 
11858 	/* The GOTO VM uses a local opline variable. We need to set the opline
11859 	 * variable in execute_data so we don't resume at an old position. */
11860 	SAVE_OPLINE();
11861 
11862 	ZEND_VM_RETURN();
11863 }
11864 
ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11865 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11866 {
11867 	USE_OPLINE
11868 	zval *op1;
11869 
11870 	op1 = EX_VAR(opline->op1.var);
11871 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11872 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
11873 		ZEND_VM_NEXT_OPCODE();
11874 	}
11875 
11876 	ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11877 }
11878 
ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11879 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11880 {
11881 	USE_OPLINE
11882 	zval *value;
11883 
11884 	value = EX_VAR(opline->op1.var);
11885 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
11886 	ZEND_VM_NEXT_OPCODE();
11887 }
11888 
ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11889 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11890 {
11891 	USE_OPLINE
11892 	zval *value;
11893 
11894 	value = EX_VAR(opline->op1.var);
11895 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
11896 	ZEND_VM_NEXT_OPCODE();
11897 }
11898 
ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11899 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11900 {
11901 	USE_OPLINE
11902 	zval *value;
11903 
11904 	value = EX_VAR(opline->op1.var);
11905 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
11906 	ZEND_VM_NEXT_OPCODE();
11907 }
11908 
ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11909 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11910 {
11911 	USE_OPLINE
11912 	zval *op1, *op2, *result;
11913 	double d1, d2;
11914 
11915 	op1 = EX_VAR(opline->op1.var);
11916 	op2 = RT_CONSTANT(opline, opline->op2);
11917 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11918 		/* pass */
11919 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11920 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11921 			result = EX_VAR(opline->result.var);
11922 			fast_long_add_function(result, op1, op2);
11923 			ZEND_VM_NEXT_OPCODE();
11924 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11925 			d1 = (double)Z_LVAL_P(op1);
11926 			d2 = Z_DVAL_P(op2);
11927 			goto add_double;
11928 		}
11929 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11930 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11931 			d1 = Z_DVAL_P(op1);
11932 			d2 = Z_DVAL_P(op2);
11933 add_double:
11934 			result = EX_VAR(opline->result.var);
11935 			ZVAL_DOUBLE(result, d1 + d2);
11936 			ZEND_VM_NEXT_OPCODE();
11937 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11938 			d1 = Z_DVAL_P(op1);
11939 			d2 = (double)Z_LVAL_P(op2);
11940 			goto add_double;
11941 		}
11942 	}
11943 
11944 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11945 }
11946 
ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11947 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11948 {
11949 	USE_OPLINE
11950 	zval *op1, *op2, *result;
11951 	double d1, d2;
11952 
11953 	op1 = EX_VAR(opline->op1.var);
11954 	op2 = RT_CONSTANT(opline, opline->op2);
11955 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11956 		/* pass */
11957 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11958 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11959 			result = EX_VAR(opline->result.var);
11960 			fast_long_sub_function(result, op1, op2);
11961 			ZEND_VM_NEXT_OPCODE();
11962 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11963 			d1 = (double)Z_LVAL_P(op1);
11964 			d2 = Z_DVAL_P(op2);
11965 			goto sub_double;
11966 		}
11967 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11968 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11969 			d1 = Z_DVAL_P(op1);
11970 			d2 = Z_DVAL_P(op2);
11971 sub_double:
11972 			result = EX_VAR(opline->result.var);
11973 			ZVAL_DOUBLE(result, d1 - d2);
11974 			ZEND_VM_NEXT_OPCODE();
11975 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11976 			d1 = Z_DVAL_P(op1);
11977 			d2 = (double)Z_LVAL_P(op2);
11978 			goto sub_double;
11979 		}
11980 	}
11981 
11982 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11983 }
11984 
ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11985 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11986 {
11987 	USE_OPLINE
11988 	zval *op1, *op2, *result;
11989 	double d1, d2;
11990 
11991 	op1 = EX_VAR(opline->op1.var);
11992 	op2 = RT_CONSTANT(opline, opline->op2);
11993 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11994 		/* pass */
11995 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11996 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11997 			zend_long overflow;
11998 
11999 			result = EX_VAR(opline->result.var);
12000 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
12001 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
12002 			ZEND_VM_NEXT_OPCODE();
12003 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12004 			d1 = (double)Z_LVAL_P(op1);
12005 			d2 = Z_DVAL_P(op2);
12006 			goto mul_double;
12007 		}
12008 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12009 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12010 			d1 = Z_DVAL_P(op1);
12011 			d2 = Z_DVAL_P(op2);
12012 mul_double:
12013 			result = EX_VAR(opline->result.var);
12014 			ZVAL_DOUBLE(result, d1 * d2);
12015 			ZEND_VM_NEXT_OPCODE();
12016 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12017 			d1 = Z_DVAL_P(op1);
12018 			d2 = (double)Z_LVAL_P(op2);
12019 			goto mul_double;
12020 		}
12021 	}
12022 
12023 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12024 }
12025 
ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12027 {
12028 	USE_OPLINE
12029 	zval *op1, *op2, *result;
12030 
12031 	op1 = EX_VAR(opline->op1.var);
12032 	op2 = RT_CONSTANT(opline, opline->op2);
12033 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12034 		/* pass */
12035 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12036 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12037 			result = EX_VAR(opline->result.var);
12038 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
12039 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12040 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
12041 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
12042 				ZVAL_LONG(result, 0);
12043 			} else {
12044 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
12045 			}
12046 			ZEND_VM_NEXT_OPCODE();
12047 		}
12048 	}
12049 
12050 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12051 }
12052 
ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12053 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12054 {
12055 	USE_OPLINE
12056 	zval *op1, *op2;
12057 
12058 	op1 = EX_VAR(opline->op1.var);
12059 	op2 = RT_CONSTANT(opline, opline->op2);
12060 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12061 		/* pass */
12062 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12063 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12064 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12065 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
12066 		ZVAL_LONG(EX_VAR(opline->result.var),
12067 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
12068 		ZEND_VM_NEXT_OPCODE();
12069 	}
12070 
12071 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12072 }
12073 
ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12075 {
12076 	USE_OPLINE
12077 	zval *op1, *op2;
12078 
12079 	op1 = EX_VAR(opline->op1.var);
12080 	op2 = RT_CONSTANT(opline, opline->op2);
12081 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12082 		/* pass */
12083 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12084 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12085 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12086 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
12087 		ZEND_VM_NEXT_OPCODE();
12088 	}
12089 
12090 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12091 }
12092 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12093 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12094 {
12095 	USE_OPLINE
12096 	zval *op1, *op2;
12097 	double d1, d2;
12098 
12099 	op1 = EX_VAR(opline->op1.var);
12100 	op2 = RT_CONSTANT(opline, opline->op2);
12101 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12102 		/* pass */
12103 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12104 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12105 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12106 is_smaller_true:
12107 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
12108 			} else {
12109 is_smaller_false:
12110 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
12111 			}
12112 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12113 			d1 = (double)Z_LVAL_P(op1);
12114 			d2 = Z_DVAL_P(op2);
12115 			goto is_smaller_double;
12116 		}
12117 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12118 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12119 			d1 = Z_DVAL_P(op1);
12120 			d2 = Z_DVAL_P(op2);
12121 is_smaller_double:
12122 			if (d1 < d2) {
12123 				goto is_smaller_true;
12124 			} else {
12125 				goto is_smaller_false;
12126 			}
12127 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12128 			d1 = Z_DVAL_P(op1);
12129 			d2 = (double)Z_LVAL_P(op2);
12130 			goto is_smaller_double;
12131 		}
12132 	}
12133 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12134 }
12135 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12136 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12137 {
12138 	USE_OPLINE
12139 	zval *op1, *op2;
12140 	double d1, d2;
12141 
12142 	op1 = EX_VAR(opline->op1.var);
12143 	op2 = RT_CONSTANT(opline, opline->op2);
12144 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12145 		/* pass */
12146 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12147 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12148 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12149 is_smaller_true:
12150 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
12151 			} else {
12152 is_smaller_false:
12153 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
12154 			}
12155 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12156 			d1 = (double)Z_LVAL_P(op1);
12157 			d2 = Z_DVAL_P(op2);
12158 			goto is_smaller_double;
12159 		}
12160 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12161 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12162 			d1 = Z_DVAL_P(op1);
12163 			d2 = Z_DVAL_P(op2);
12164 is_smaller_double:
12165 			if (d1 < d2) {
12166 				goto is_smaller_true;
12167 			} else {
12168 				goto is_smaller_false;
12169 			}
12170 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12171 			d1 = Z_DVAL_P(op1);
12172 			d2 = (double)Z_LVAL_P(op2);
12173 			goto is_smaller_double;
12174 		}
12175 	}
12176 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12177 }
12178 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12179 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12180 {
12181 	USE_OPLINE
12182 	zval *op1, *op2;
12183 	double d1, d2;
12184 
12185 	op1 = EX_VAR(opline->op1.var);
12186 	op2 = RT_CONSTANT(opline, opline->op2);
12187 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12188 		/* pass */
12189 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12190 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12191 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12192 is_smaller_true:
12193 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
12194 			} else {
12195 is_smaller_false:
12196 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
12197 			}
12198 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12199 			d1 = (double)Z_LVAL_P(op1);
12200 			d2 = Z_DVAL_P(op2);
12201 			goto is_smaller_double;
12202 		}
12203 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12204 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12205 			d1 = Z_DVAL_P(op1);
12206 			d2 = Z_DVAL_P(op2);
12207 is_smaller_double:
12208 			if (d1 < d2) {
12209 				goto is_smaller_true;
12210 			} else {
12211 				goto is_smaller_false;
12212 			}
12213 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12214 			d1 = Z_DVAL_P(op1);
12215 			d2 = (double)Z_LVAL_P(op2);
12216 			goto is_smaller_double;
12217 		}
12218 	}
12219 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12220 }
12221 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12223 {
12224 	USE_OPLINE
12225 	zval *op1, *op2;
12226 	double d1, d2;
12227 
12228 	op1 = EX_VAR(opline->op1.var);
12229 	op2 = RT_CONSTANT(opline, opline->op2);
12230 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12231 		/* pass */
12232 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12233 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12234 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12235 is_smaller_or_equal_true:
12236 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
12237 				ZVAL_TRUE(EX_VAR(opline->result.var));
12238 				ZEND_VM_NEXT_OPCODE();
12239 			} else {
12240 is_smaller_or_equal_false:
12241 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
12242 				ZVAL_FALSE(EX_VAR(opline->result.var));
12243 				ZEND_VM_NEXT_OPCODE();
12244 			}
12245 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12246 			d1 = (double)Z_LVAL_P(op1);
12247 			d2 = Z_DVAL_P(op2);
12248 			goto is_smaller_or_equal_double;
12249 		}
12250 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12251 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12252 			d1 = Z_DVAL_P(op1);
12253 			d2 = Z_DVAL_P(op2);
12254 is_smaller_or_equal_double:
12255 			if (d1 <= d2) {
12256 				goto is_smaller_or_equal_true;
12257 			} else {
12258 				goto is_smaller_or_equal_false;
12259 			}
12260 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12261 			d1 = Z_DVAL_P(op1);
12262 			d2 = (double)Z_LVAL_P(op2);
12263 			goto is_smaller_or_equal_double;
12264 		}
12265 	}
12266 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12267 }
12268 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12269 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12270 {
12271 	USE_OPLINE
12272 	zval *op1, *op2;
12273 	double d1, d2;
12274 
12275 	op1 = EX_VAR(opline->op1.var);
12276 	op2 = RT_CONSTANT(opline, opline->op2);
12277 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12278 		/* pass */
12279 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12280 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12281 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12282 is_smaller_or_equal_true:
12283 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
12284 				ZVAL_TRUE(EX_VAR(opline->result.var));
12285 				ZEND_VM_NEXT_OPCODE();
12286 			} else {
12287 is_smaller_or_equal_false:
12288 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
12289 				ZVAL_FALSE(EX_VAR(opline->result.var));
12290 				ZEND_VM_NEXT_OPCODE();
12291 			}
12292 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12293 			d1 = (double)Z_LVAL_P(op1);
12294 			d2 = Z_DVAL_P(op2);
12295 			goto is_smaller_or_equal_double;
12296 		}
12297 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12298 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12299 			d1 = Z_DVAL_P(op1);
12300 			d2 = Z_DVAL_P(op2);
12301 is_smaller_or_equal_double:
12302 			if (d1 <= d2) {
12303 				goto is_smaller_or_equal_true;
12304 			} else {
12305 				goto is_smaller_or_equal_false;
12306 			}
12307 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12308 			d1 = Z_DVAL_P(op1);
12309 			d2 = (double)Z_LVAL_P(op2);
12310 			goto is_smaller_or_equal_double;
12311 		}
12312 	}
12313 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12314 }
12315 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12316 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12317 {
12318 	USE_OPLINE
12319 	zval *op1, *op2;
12320 	double d1, d2;
12321 
12322 	op1 = EX_VAR(opline->op1.var);
12323 	op2 = RT_CONSTANT(opline, opline->op2);
12324 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12325 		/* pass */
12326 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12327 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12328 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12329 is_smaller_or_equal_true:
12330 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
12331 				ZVAL_TRUE(EX_VAR(opline->result.var));
12332 				ZEND_VM_NEXT_OPCODE();
12333 			} else {
12334 is_smaller_or_equal_false:
12335 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
12336 				ZVAL_FALSE(EX_VAR(opline->result.var));
12337 				ZEND_VM_NEXT_OPCODE();
12338 			}
12339 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12340 			d1 = (double)Z_LVAL_P(op1);
12341 			d2 = Z_DVAL_P(op2);
12342 			goto is_smaller_or_equal_double;
12343 		}
12344 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12345 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12346 			d1 = Z_DVAL_P(op1);
12347 			d2 = Z_DVAL_P(op2);
12348 is_smaller_or_equal_double:
12349 			if (d1 <= d2) {
12350 				goto is_smaller_or_equal_true;
12351 			} else {
12352 				goto is_smaller_or_equal_false;
12353 			}
12354 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12355 			d1 = Z_DVAL_P(op1);
12356 			d2 = (double)Z_LVAL_P(op2);
12357 			goto is_smaller_or_equal_double;
12358 		}
12359 	}
12360 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12361 }
12362 
ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12363 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12364 {
12365 	USE_OPLINE
12366 	zval *op1, *op2;
12367 
12368 	op1 = EX_VAR(opline->op1.var);
12369 	op2 = RT_CONSTANT(opline, opline->op2);
12370 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12371 		/* pass */
12372 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12373 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12374 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
12375 		ZEND_VM_NEXT_OPCODE();
12376 	}
12377 
12378 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12379 }
12380 
ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12381 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12382 {
12383 	USE_OPLINE
12384 	zval *op1, *op2;
12385 
12386 	op1 = EX_VAR(opline->op1.var);
12387 	op2 = RT_CONSTANT(opline, opline->op2);
12388 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12389 		/* pass */
12390 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12391 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12392 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
12393 		ZEND_VM_NEXT_OPCODE();
12394 	}
12395 
12396 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12397 }
12398 
ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12399 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12400 {
12401 	USE_OPLINE
12402 	zval *op1, *op2;
12403 
12404 	op1 = EX_VAR(opline->op1.var);
12405 	op2 = RT_CONSTANT(opline, opline->op2);
12406 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12407 		/* pass */
12408 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12409 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12410 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
12411 		ZEND_VM_NEXT_OPCODE();
12412 	}
12413 
12414 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12415 }
12416 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12417 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12418 {
12419 	USE_OPLINE
12420 	zval *container;
12421 
12422 	SAVE_OPLINE();
12423 	container = EX_VAR(opline->op1.var);
12424 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
12425 
12426 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12427 }
12428 
ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12429 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12430 {
12431 	USE_OPLINE
12432 	zval *op, *jump_zv;
12433 	HashTable *jumptable;
12434 
12435 	op = EX_VAR(opline->op1.var);
12436 
12437 	if (Z_TYPE_P(op) != IS_LONG) {
12438 		ZVAL_DEREF(op);
12439 		if (Z_TYPE_P(op) != IS_LONG) {
12440 			/* Wrong type, fall back to ZEND_CASE chain */
12441 			ZEND_VM_NEXT_OPCODE();
12442 		}
12443 	}
12444 
12445 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
12446 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
12447 	if (jump_zv != NULL) {
12448 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
12449 		ZEND_VM_CONTINUE();
12450 	} else {
12451 		/* default */
12452 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
12453 		ZEND_VM_CONTINUE();
12454 	}
12455 }
12456 
ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12457 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12458 {
12459 	USE_OPLINE
12460 	zval *op, *jump_zv;
12461 	HashTable *jumptable;
12462 
12463 	op = EX_VAR(opline->op1.var);
12464 
12465 	if (Z_TYPE_P(op) != IS_STRING) {
12466 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12467 			/* Wrong type, fall back to ZEND_CASE chain */
12468 			ZEND_VM_NEXT_OPCODE();
12469 		} else {
12470 			ZVAL_DEREF(op);
12471 			if (Z_TYPE_P(op) != IS_STRING) {
12472 				/* Wrong type, fall back to ZEND_CASE chain */
12473 				ZEND_VM_NEXT_OPCODE();
12474 			}
12475 		}
12476 	}
12477 
12478 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
12479 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
12480 	if (jump_zv != NULL) {
12481 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
12482 		ZEND_VM_CONTINUE();
12483 	} else {
12484 		/* default */
12485 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
12486 		ZEND_VM_CONTINUE();
12487 	}
12488 }
12489 
ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12490 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12491 {
12492 	USE_OPLINE
12493 	zval *op, *jump_zv;
12494 	HashTable *jumptable;
12495 
12496 	op = EX_VAR(opline->op1.var);
12497 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
12498 
12499 match_try_again:
12500 	if (Z_TYPE_P(op) == IS_LONG) {
12501 		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
12502 	} else if (Z_TYPE_P(op) == IS_STRING) {
12503 		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
12504 	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
12505 		op = Z_REFVAL_P(op);
12506 		goto match_try_again;
12507 	} else {
12508 		if (UNEXPECTED(((IS_TMP_VAR|IS_VAR|IS_CV) & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
12509 			SAVE_OPLINE();
12510 			op = ZVAL_UNDEFINED_OP1();
12511 			if (UNEXPECTED(EG(exception))) {
12512 				HANDLE_EXCEPTION();
12513 			}
12514 			goto match_try_again;
12515 		}
12516 
12517 		goto default_branch;
12518 	}
12519 
12520 	if (jump_zv != NULL) {
12521 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
12522 		ZEND_VM_CONTINUE();
12523 	} else {
12524 default_branch:
12525 		/* default */
12526 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
12527 		ZEND_VM_CONTINUE();
12528 	}
12529 }
12530 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12531 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12532 {
12533 	USE_OPLINE
12534 	zval *op1, *op2, *result;
12535 
12536 	op1 = EX_VAR(opline->op1.var);
12537 	op2 = RT_CONSTANT(opline, opline->op2);
12538 	result = EX_VAR(opline->result.var);
12539 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
12540 	ZEND_VM_NEXT_OPCODE();
12541 }
12542 
ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12543 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12544 {
12545 	USE_OPLINE
12546 	zval *op1, *op2, *result;
12547 
12548 	op1 = EX_VAR(opline->op1.var);
12549 	op2 = RT_CONSTANT(opline, opline->op2);
12550 	result = EX_VAR(opline->result.var);
12551 	fast_long_add_function(result, op1, op2);
12552 	ZEND_VM_NEXT_OPCODE();
12553 }
12554 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12555 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12556 {
12557 	USE_OPLINE
12558 	zval *op1, *op2, *result;
12559 
12560 	op1 = EX_VAR(opline->op1.var);
12561 	op2 = RT_CONSTANT(opline, opline->op2);
12562 	result = EX_VAR(opline->result.var);
12563 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
12564 	ZEND_VM_NEXT_OPCODE();
12565 }
12566 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12567 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12568 {
12569 	USE_OPLINE
12570 	zval *op1, *op2, *result;
12571 
12572 	op1 = EX_VAR(opline->op1.var);
12573 	op2 = RT_CONSTANT(opline, opline->op2);
12574 	result = EX_VAR(opline->result.var);
12575 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
12576 	ZEND_VM_NEXT_OPCODE();
12577 }
12578 
ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12579 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12580 {
12581 	USE_OPLINE
12582 	zval *op1, *op2, *result;
12583 
12584 	op1 = EX_VAR(opline->op1.var);
12585 	op2 = RT_CONSTANT(opline, opline->op2);
12586 	result = EX_VAR(opline->result.var);
12587 	fast_long_sub_function(result, op1, op2);
12588 	ZEND_VM_NEXT_OPCODE();
12589 }
12590 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12591 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12592 {
12593 	USE_OPLINE
12594 	zval *op1, *op2, *result;
12595 
12596 	op1 = EX_VAR(opline->op1.var);
12597 	op2 = RT_CONSTANT(opline, opline->op2);
12598 	result = EX_VAR(opline->result.var);
12599 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
12600 	ZEND_VM_NEXT_OPCODE();
12601 }
12602 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12603 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12604 {
12605 	USE_OPLINE
12606 	zval *op1, *op2, *result;
12607 
12608 	op1 = EX_VAR(opline->op1.var);
12609 	op2 = RT_CONSTANT(opline, opline->op2);
12610 	result = EX_VAR(opline->result.var);
12611 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
12612 	ZEND_VM_NEXT_OPCODE();
12613 }
12614 
ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12615 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12616 {
12617 	USE_OPLINE
12618 	zval *op1, *op2, *result;
12619 	zend_long overflow;
12620 
12621 	op1 = EX_VAR(opline->op1.var);
12622 	op2 = RT_CONSTANT(opline, opline->op2);
12623 	result = EX_VAR(opline->result.var);
12624 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
12625 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
12626 	ZEND_VM_NEXT_OPCODE();
12627 }
12628 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12629 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12630 {
12631 	USE_OPLINE
12632 	zval *op1, *op2, *result;
12633 
12634 	op1 = EX_VAR(opline->op1.var);
12635 	op2 = RT_CONSTANT(opline, opline->op2);
12636 	result = EX_VAR(opline->result.var);
12637 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
12638 	ZEND_VM_NEXT_OPCODE();
12639 }
12640 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12642 {
12643 	USE_OPLINE
12644 	zval *op1, *op2;
12645 	bool result;
12646 
12647 	op1 = EX_VAR(opline->op1.var);
12648 	op2 = RT_CONSTANT(opline, opline->op2);
12649 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12650 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12651 }
12652 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12653 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12654 {
12655 	USE_OPLINE
12656 	zval *op1, *op2;
12657 	bool result;
12658 
12659 	op1 = EX_VAR(opline->op1.var);
12660 	op2 = RT_CONSTANT(opline, opline->op2);
12661 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12662 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12663 }
12664 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12665 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12666 {
12667 	USE_OPLINE
12668 	zval *op1, *op2;
12669 	bool result;
12670 
12671 	op1 = EX_VAR(opline->op1.var);
12672 	op2 = RT_CONSTANT(opline, opline->op2);
12673 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12674 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12675 }
12676 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12677 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12678 {
12679 	USE_OPLINE
12680 	zval *op1, *op2;
12681 	bool result;
12682 
12683 	op1 = EX_VAR(opline->op1.var);
12684 	op2 = RT_CONSTANT(opline, opline->op2);
12685 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12686 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12687 }
12688 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12689 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12690 {
12691 	USE_OPLINE
12692 	zval *op1, *op2;
12693 	bool result;
12694 
12695 	op1 = EX_VAR(opline->op1.var);
12696 	op2 = RT_CONSTANT(opline, opline->op2);
12697 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12698 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12699 }
12700 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12701 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12702 {
12703 	USE_OPLINE
12704 	zval *op1, *op2;
12705 	bool result;
12706 
12707 	op1 = EX_VAR(opline->op1.var);
12708 	op2 = RT_CONSTANT(opline, opline->op2);
12709 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12710 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12711 }
12712 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12713 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12714 {
12715 	USE_OPLINE
12716 	zval *op1, *op2;
12717 	bool result;
12718 
12719 	op1 = EX_VAR(opline->op1.var);
12720 	op2 = RT_CONSTANT(opline, opline->op2);
12721 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12722 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12723 }
12724 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12725 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12726 {
12727 	USE_OPLINE
12728 	zval *op1, *op2;
12729 	bool result;
12730 
12731 	op1 = EX_VAR(opline->op1.var);
12732 	op2 = RT_CONSTANT(opline, opline->op2);
12733 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12734 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12735 }
12736 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12737 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12738 {
12739 	USE_OPLINE
12740 	zval *op1, *op2;
12741 	bool result;
12742 
12743 	op1 = EX_VAR(opline->op1.var);
12744 	op2 = RT_CONSTANT(opline, opline->op2);
12745 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12746 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12747 }
12748 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12749 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12750 {
12751 	USE_OPLINE
12752 	zval *op1, *op2;
12753 	bool result;
12754 
12755 	op1 = EX_VAR(opline->op1.var);
12756 	op2 = RT_CONSTANT(opline, opline->op2);
12757 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12758 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12759 }
12760 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12761 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12762 {
12763 	USE_OPLINE
12764 	zval *op1, *op2;
12765 	bool result;
12766 
12767 	op1 = EX_VAR(opline->op1.var);
12768 	op2 = RT_CONSTANT(opline, opline->op2);
12769 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12770 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12771 }
12772 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12773 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12774 {
12775 	USE_OPLINE
12776 	zval *op1, *op2;
12777 	bool result;
12778 
12779 	op1 = EX_VAR(opline->op1.var);
12780 	op2 = RT_CONSTANT(opline, opline->op2);
12781 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12782 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12783 }
12784 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12786 {
12787 	USE_OPLINE
12788 	zval *op1, *op2;
12789 	bool result;
12790 
12791 	op1 = EX_VAR(opline->op1.var);
12792 	op2 = RT_CONSTANT(opline, opline->op2);
12793 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
12794 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12795 }
12796 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12797 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12798 {
12799 	USE_OPLINE
12800 	zval *op1, *op2;
12801 	bool result;
12802 
12803 	op1 = EX_VAR(opline->op1.var);
12804 	op2 = RT_CONSTANT(opline, opline->op2);
12805 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
12806 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12807 }
12808 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12809 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12810 {
12811 	USE_OPLINE
12812 	zval *op1, *op2;
12813 	bool result;
12814 
12815 	op1 = EX_VAR(opline->op1.var);
12816 	op2 = RT_CONSTANT(opline, opline->op2);
12817 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
12818 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12819 }
12820 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12821 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12822 {
12823 	USE_OPLINE
12824 	zval *op1, *op2;
12825 	bool result;
12826 
12827 	op1 = EX_VAR(opline->op1.var);
12828 	op2 = RT_CONSTANT(opline, opline->op2);
12829 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
12830 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12831 }
12832 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12833 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12834 {
12835 	USE_OPLINE
12836 	zval *op1, *op2;
12837 	bool result;
12838 
12839 	op1 = EX_VAR(opline->op1.var);
12840 	op2 = RT_CONSTANT(opline, opline->op2);
12841 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
12842 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12843 }
12844 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12845 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12846 {
12847 	USE_OPLINE
12848 	zval *op1, *op2;
12849 	bool result;
12850 
12851 	op1 = EX_VAR(opline->op1.var);
12852 	op2 = RT_CONSTANT(opline, opline->op2);
12853 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
12854 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12855 }
12856 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12857 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12858 {
12859 	USE_OPLINE
12860 	zval *op1, *op2;
12861 	bool result;
12862 
12863 	op1 = EX_VAR(opline->op1.var);
12864 	op2 = RT_CONSTANT(opline, opline->op2);
12865 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
12866 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12867 }
12868 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12869 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)
12870 {
12871 	USE_OPLINE
12872 	zval *op1, *op2;
12873 	bool result;
12874 
12875 	op1 = EX_VAR(opline->op1.var);
12876 	op2 = RT_CONSTANT(opline, opline->op2);
12877 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
12878 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12879 }
12880 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12881 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)
12882 {
12883 	USE_OPLINE
12884 	zval *op1, *op2;
12885 	bool result;
12886 
12887 	op1 = EX_VAR(opline->op1.var);
12888 	op2 = RT_CONSTANT(opline, opline->op2);
12889 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
12890 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12891 }
12892 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12893 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12894 {
12895 	USE_OPLINE
12896 	zval *op1, *op2;
12897 	bool result;
12898 
12899 	op1 = EX_VAR(opline->op1.var);
12900 	op2 = RT_CONSTANT(opline, opline->op2);
12901 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
12902 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
12903 }
12904 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12905 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)
12906 {
12907 	USE_OPLINE
12908 	zval *op1, *op2;
12909 	bool result;
12910 
12911 	op1 = EX_VAR(opline->op1.var);
12912 	op2 = RT_CONSTANT(opline, opline->op2);
12913 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
12914 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12915 }
12916 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12917 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)
12918 {
12919 	USE_OPLINE
12920 	zval *op1, *op2;
12921 	bool result;
12922 
12923 	op1 = EX_VAR(opline->op1.var);
12924 	op2 = RT_CONSTANT(opline, opline->op2);
12925 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
12926 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12927 }
12928 
ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12929 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12930 {
12931 	USE_OPLINE
12932 	zval *op1, *op2, *result;
12933 	double d1, d2;
12934 
12935 	op1 = EX_VAR(opline->op1.var);
12936 	op2 = EX_VAR(opline->op2.var);
12937 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12938 		/* pass */
12939 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12940 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12941 			result = EX_VAR(opline->result.var);
12942 			fast_long_add_function(result, op1, op2);
12943 			ZEND_VM_NEXT_OPCODE();
12944 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12945 			d1 = (double)Z_LVAL_P(op1);
12946 			d2 = Z_DVAL_P(op2);
12947 			goto add_double;
12948 		}
12949 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12950 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12951 			d1 = Z_DVAL_P(op1);
12952 			d2 = Z_DVAL_P(op2);
12953 add_double:
12954 			result = EX_VAR(opline->result.var);
12955 			ZVAL_DOUBLE(result, d1 + d2);
12956 			ZEND_VM_NEXT_OPCODE();
12957 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12958 			d1 = Z_DVAL_P(op1);
12959 			d2 = (double)Z_LVAL_P(op2);
12960 			goto add_double;
12961 		}
12962 	}
12963 
12964 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12965 }
12966 
ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12967 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12968 {
12969 	USE_OPLINE
12970 	zval *op1, *op2, *result;
12971 	double d1, d2;
12972 
12973 	op1 = EX_VAR(opline->op1.var);
12974 	op2 = EX_VAR(opline->op2.var);
12975 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12976 		/* pass */
12977 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12978 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12979 			result = EX_VAR(opline->result.var);
12980 			fast_long_sub_function(result, op1, op2);
12981 			ZEND_VM_NEXT_OPCODE();
12982 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12983 			d1 = (double)Z_LVAL_P(op1);
12984 			d2 = Z_DVAL_P(op2);
12985 			goto sub_double;
12986 		}
12987 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12988 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12989 			d1 = Z_DVAL_P(op1);
12990 			d2 = Z_DVAL_P(op2);
12991 sub_double:
12992 			result = EX_VAR(opline->result.var);
12993 			ZVAL_DOUBLE(result, d1 - d2);
12994 			ZEND_VM_NEXT_OPCODE();
12995 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12996 			d1 = Z_DVAL_P(op1);
12997 			d2 = (double)Z_LVAL_P(op2);
12998 			goto sub_double;
12999 		}
13000 	}
13001 
13002 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13003 }
13004 
ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13005 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13006 {
13007 	USE_OPLINE
13008 	zval *op1, *op2, *result;
13009 	double d1, d2;
13010 
13011 	op1 = EX_VAR(opline->op1.var);
13012 	op2 = EX_VAR(opline->op2.var);
13013 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13014 		/* pass */
13015 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13016 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13017 			zend_long overflow;
13018 
13019 			result = EX_VAR(opline->result.var);
13020 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
13021 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
13022 			ZEND_VM_NEXT_OPCODE();
13023 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13024 			d1 = (double)Z_LVAL_P(op1);
13025 			d2 = Z_DVAL_P(op2);
13026 			goto mul_double;
13027 		}
13028 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13029 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13030 			d1 = Z_DVAL_P(op1);
13031 			d2 = Z_DVAL_P(op2);
13032 mul_double:
13033 			result = EX_VAR(opline->result.var);
13034 			ZVAL_DOUBLE(result, d1 * d2);
13035 			ZEND_VM_NEXT_OPCODE();
13036 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13037 			d1 = Z_DVAL_P(op1);
13038 			d2 = (double)Z_LVAL_P(op2);
13039 			goto mul_double;
13040 		}
13041 	}
13042 
13043 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13044 }
13045 
ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13046 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13047 {
13048 	USE_OPLINE
13049 	zval *op1, *op2, *result;
13050 
13051 	op1 = EX_VAR(opline->op1.var);
13052 	op2 = EX_VAR(opline->op2.var);
13053 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13054 		/* pass */
13055 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13056 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13057 			result = EX_VAR(opline->result.var);
13058 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
13059 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
13060 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
13061 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
13062 				ZVAL_LONG(result, 0);
13063 			} else {
13064 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
13065 			}
13066 			ZEND_VM_NEXT_OPCODE();
13067 		}
13068 	}
13069 
13070 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13071 }
13072 
ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13073 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13074 {
13075 	USE_OPLINE
13076 	zval *op1, *op2;
13077 
13078 	op1 = EX_VAR(opline->op1.var);
13079 	op2 = EX_VAR(opline->op2.var);
13080 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13081 		/* pass */
13082 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13083 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
13084 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
13085 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
13086 		ZVAL_LONG(EX_VAR(opline->result.var),
13087 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
13088 		ZEND_VM_NEXT_OPCODE();
13089 	}
13090 
13091 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13092 }
13093 
ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13094 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13095 {
13096 	USE_OPLINE
13097 	zval *op1, *op2;
13098 
13099 	op1 = EX_VAR(opline->op1.var);
13100 	op2 = EX_VAR(opline->op2.var);
13101 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13102 		/* pass */
13103 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13104 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
13105 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
13106 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
13107 		ZEND_VM_NEXT_OPCODE();
13108 	}
13109 
13110 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13111 }
13112 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13114 {
13115 	USE_OPLINE
13116 	zval *op1, *op2;
13117 	double d1, d2;
13118 
13119 	op1 = EX_VAR(opline->op1.var);
13120 	op2 = EX_VAR(opline->op2.var);
13121 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13122 		/* pass */
13123 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13124 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13125 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13126 is_smaller_true:
13127 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
13128 			} else {
13129 is_smaller_false:
13130 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
13131 			}
13132 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13133 			d1 = (double)Z_LVAL_P(op1);
13134 			d2 = Z_DVAL_P(op2);
13135 			goto is_smaller_double;
13136 		}
13137 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13138 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13139 			d1 = Z_DVAL_P(op1);
13140 			d2 = Z_DVAL_P(op2);
13141 is_smaller_double:
13142 			if (d1 < d2) {
13143 				goto is_smaller_true;
13144 			} else {
13145 				goto is_smaller_false;
13146 			}
13147 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13148 			d1 = Z_DVAL_P(op1);
13149 			d2 = (double)Z_LVAL_P(op2);
13150 			goto is_smaller_double;
13151 		}
13152 	}
13153 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13154 }
13155 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13156 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13157 {
13158 	USE_OPLINE
13159 	zval *op1, *op2;
13160 	double d1, d2;
13161 
13162 	op1 = EX_VAR(opline->op1.var);
13163 	op2 = EX_VAR(opline->op2.var);
13164 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13165 		/* pass */
13166 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13167 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13168 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13169 is_smaller_true:
13170 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
13171 			} else {
13172 is_smaller_false:
13173 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
13174 			}
13175 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13176 			d1 = (double)Z_LVAL_P(op1);
13177 			d2 = Z_DVAL_P(op2);
13178 			goto is_smaller_double;
13179 		}
13180 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13181 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13182 			d1 = Z_DVAL_P(op1);
13183 			d2 = Z_DVAL_P(op2);
13184 is_smaller_double:
13185 			if (d1 < d2) {
13186 				goto is_smaller_true;
13187 			} else {
13188 				goto is_smaller_false;
13189 			}
13190 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13191 			d1 = Z_DVAL_P(op1);
13192 			d2 = (double)Z_LVAL_P(op2);
13193 			goto is_smaller_double;
13194 		}
13195 	}
13196 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13197 }
13198 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13199 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13200 {
13201 	USE_OPLINE
13202 	zval *op1, *op2;
13203 	double d1, d2;
13204 
13205 	op1 = EX_VAR(opline->op1.var);
13206 	op2 = EX_VAR(opline->op2.var);
13207 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13208 		/* pass */
13209 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13210 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13211 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13212 is_smaller_true:
13213 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
13214 			} else {
13215 is_smaller_false:
13216 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
13217 			}
13218 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13219 			d1 = (double)Z_LVAL_P(op1);
13220 			d2 = Z_DVAL_P(op2);
13221 			goto is_smaller_double;
13222 		}
13223 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13224 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13225 			d1 = Z_DVAL_P(op1);
13226 			d2 = Z_DVAL_P(op2);
13227 is_smaller_double:
13228 			if (d1 < d2) {
13229 				goto is_smaller_true;
13230 			} else {
13231 				goto is_smaller_false;
13232 			}
13233 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13234 			d1 = Z_DVAL_P(op1);
13235 			d2 = (double)Z_LVAL_P(op2);
13236 			goto is_smaller_double;
13237 		}
13238 	}
13239 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13240 }
13241 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13242 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13243 {
13244 	USE_OPLINE
13245 	zval *op1, *op2;
13246 	double d1, d2;
13247 
13248 	op1 = EX_VAR(opline->op1.var);
13249 	op2 = EX_VAR(opline->op2.var);
13250 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13251 		/* pass */
13252 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13253 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13254 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13255 is_smaller_or_equal_true:
13256 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
13257 				ZVAL_TRUE(EX_VAR(opline->result.var));
13258 				ZEND_VM_NEXT_OPCODE();
13259 			} else {
13260 is_smaller_or_equal_false:
13261 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
13262 				ZVAL_FALSE(EX_VAR(opline->result.var));
13263 				ZEND_VM_NEXT_OPCODE();
13264 			}
13265 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13266 			d1 = (double)Z_LVAL_P(op1);
13267 			d2 = Z_DVAL_P(op2);
13268 			goto is_smaller_or_equal_double;
13269 		}
13270 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13271 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13272 			d1 = Z_DVAL_P(op1);
13273 			d2 = Z_DVAL_P(op2);
13274 is_smaller_or_equal_double:
13275 			if (d1 <= d2) {
13276 				goto is_smaller_or_equal_true;
13277 			} else {
13278 				goto is_smaller_or_equal_false;
13279 			}
13280 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13281 			d1 = Z_DVAL_P(op1);
13282 			d2 = (double)Z_LVAL_P(op2);
13283 			goto is_smaller_or_equal_double;
13284 		}
13285 	}
13286 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13287 }
13288 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13289 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13290 {
13291 	USE_OPLINE
13292 	zval *op1, *op2;
13293 	double d1, d2;
13294 
13295 	op1 = EX_VAR(opline->op1.var);
13296 	op2 = EX_VAR(opline->op2.var);
13297 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13298 		/* pass */
13299 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13300 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13301 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13302 is_smaller_or_equal_true:
13303 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
13304 				ZVAL_TRUE(EX_VAR(opline->result.var));
13305 				ZEND_VM_NEXT_OPCODE();
13306 			} else {
13307 is_smaller_or_equal_false:
13308 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
13309 				ZVAL_FALSE(EX_VAR(opline->result.var));
13310 				ZEND_VM_NEXT_OPCODE();
13311 			}
13312 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13313 			d1 = (double)Z_LVAL_P(op1);
13314 			d2 = Z_DVAL_P(op2);
13315 			goto is_smaller_or_equal_double;
13316 		}
13317 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13318 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13319 			d1 = Z_DVAL_P(op1);
13320 			d2 = Z_DVAL_P(op2);
13321 is_smaller_or_equal_double:
13322 			if (d1 <= d2) {
13323 				goto is_smaller_or_equal_true;
13324 			} else {
13325 				goto is_smaller_or_equal_false;
13326 			}
13327 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13328 			d1 = Z_DVAL_P(op1);
13329 			d2 = (double)Z_LVAL_P(op2);
13330 			goto is_smaller_or_equal_double;
13331 		}
13332 	}
13333 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13334 }
13335 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13336 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13337 {
13338 	USE_OPLINE
13339 	zval *op1, *op2;
13340 	double d1, d2;
13341 
13342 	op1 = EX_VAR(opline->op1.var);
13343 	op2 = EX_VAR(opline->op2.var);
13344 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13345 		/* pass */
13346 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13347 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13348 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13349 is_smaller_or_equal_true:
13350 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
13351 				ZVAL_TRUE(EX_VAR(opline->result.var));
13352 				ZEND_VM_NEXT_OPCODE();
13353 			} else {
13354 is_smaller_or_equal_false:
13355 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
13356 				ZVAL_FALSE(EX_VAR(opline->result.var));
13357 				ZEND_VM_NEXT_OPCODE();
13358 			}
13359 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13360 			d1 = (double)Z_LVAL_P(op1);
13361 			d2 = Z_DVAL_P(op2);
13362 			goto is_smaller_or_equal_double;
13363 		}
13364 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13365 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13366 			d1 = Z_DVAL_P(op1);
13367 			d2 = Z_DVAL_P(op2);
13368 is_smaller_or_equal_double:
13369 			if (d1 <= d2) {
13370 				goto is_smaller_or_equal_true;
13371 			} else {
13372 				goto is_smaller_or_equal_false;
13373 			}
13374 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13375 			d1 = Z_DVAL_P(op1);
13376 			d2 = (double)Z_LVAL_P(op2);
13377 			goto is_smaller_or_equal_double;
13378 		}
13379 	}
13380 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13381 }
13382 
ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13383 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13384 {
13385 	USE_OPLINE
13386 	zval *op1, *op2;
13387 
13388 	op1 = EX_VAR(opline->op1.var);
13389 	op2 = EX_VAR(opline->op2.var);
13390 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13391 		/* pass */
13392 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13393 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13394 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
13395 		ZEND_VM_NEXT_OPCODE();
13396 	}
13397 
13398 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13399 }
13400 
ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13401 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13402 {
13403 	USE_OPLINE
13404 	zval *op1, *op2;
13405 
13406 	op1 = EX_VAR(opline->op1.var);
13407 	op2 = EX_VAR(opline->op2.var);
13408 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13409 		/* pass */
13410 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13411 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13412 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
13413 		ZEND_VM_NEXT_OPCODE();
13414 	}
13415 
13416 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13417 }
13418 
ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13419 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13420 {
13421 	USE_OPLINE
13422 	zval *op1, *op2;
13423 
13424 	op1 = EX_VAR(opline->op1.var);
13425 	op2 = EX_VAR(opline->op2.var);
13426 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13427 		/* pass */
13428 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13429 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13430 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
13431 		ZEND_VM_NEXT_OPCODE();
13432 	}
13433 
13434 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13435 }
13436 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13437 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13438 {
13439 	USE_OPLINE
13440 	zval *op1, *op2, *result;
13441 
13442 	op1 = EX_VAR(opline->op1.var);
13443 	op2 = EX_VAR(opline->op2.var);
13444 	result = EX_VAR(opline->result.var);
13445 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
13446 	ZEND_VM_NEXT_OPCODE();
13447 }
13448 
ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13449 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13450 {
13451 	USE_OPLINE
13452 	zval *op1, *op2, *result;
13453 
13454 	op1 = EX_VAR(opline->op1.var);
13455 	op2 = EX_VAR(opline->op2.var);
13456 	result = EX_VAR(opline->result.var);
13457 	fast_long_add_function(result, op1, op2);
13458 	ZEND_VM_NEXT_OPCODE();
13459 }
13460 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13461 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13462 {
13463 	USE_OPLINE
13464 	zval *op1, *op2, *result;
13465 
13466 	op1 = EX_VAR(opline->op1.var);
13467 	op2 = EX_VAR(opline->op2.var);
13468 	result = EX_VAR(opline->result.var);
13469 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
13470 	ZEND_VM_NEXT_OPCODE();
13471 }
13472 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13473 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13474 {
13475 	USE_OPLINE
13476 	zval *op1, *op2, *result;
13477 
13478 	op1 = EX_VAR(opline->op1.var);
13479 	op2 = EX_VAR(opline->op2.var);
13480 	result = EX_VAR(opline->result.var);
13481 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
13482 	ZEND_VM_NEXT_OPCODE();
13483 }
13484 
ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13485 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13486 {
13487 	USE_OPLINE
13488 	zval *op1, *op2, *result;
13489 
13490 	op1 = EX_VAR(opline->op1.var);
13491 	op2 = EX_VAR(opline->op2.var);
13492 	result = EX_VAR(opline->result.var);
13493 	fast_long_sub_function(result, op1, op2);
13494 	ZEND_VM_NEXT_OPCODE();
13495 }
13496 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13497 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13498 {
13499 	USE_OPLINE
13500 	zval *op1, *op2, *result;
13501 
13502 	op1 = EX_VAR(opline->op1.var);
13503 	op2 = EX_VAR(opline->op2.var);
13504 	result = EX_VAR(opline->result.var);
13505 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
13506 	ZEND_VM_NEXT_OPCODE();
13507 }
13508 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13509 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13510 {
13511 	USE_OPLINE
13512 	zval *op1, *op2, *result;
13513 
13514 	op1 = EX_VAR(opline->op1.var);
13515 	op2 = EX_VAR(opline->op2.var);
13516 	result = EX_VAR(opline->result.var);
13517 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
13518 	ZEND_VM_NEXT_OPCODE();
13519 }
13520 
ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13521 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13522 {
13523 	USE_OPLINE
13524 	zval *op1, *op2, *result;
13525 	zend_long overflow;
13526 
13527 	op1 = EX_VAR(opline->op1.var);
13528 	op2 = EX_VAR(opline->op2.var);
13529 	result = EX_VAR(opline->result.var);
13530 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
13531 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
13532 	ZEND_VM_NEXT_OPCODE();
13533 }
13534 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13535 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13536 {
13537 	USE_OPLINE
13538 	zval *op1, *op2, *result;
13539 
13540 	op1 = EX_VAR(opline->op1.var);
13541 	op2 = EX_VAR(opline->op2.var);
13542 	result = EX_VAR(opline->result.var);
13543 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
13544 	ZEND_VM_NEXT_OPCODE();
13545 }
13546 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13547 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13548 {
13549 	USE_OPLINE
13550 	zval *op1, *op2;
13551 	bool result;
13552 
13553 	op1 = EX_VAR(opline->op1.var);
13554 	op2 = EX_VAR(opline->op2.var);
13555 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13556 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13557 }
13558 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13559 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13560 {
13561 	USE_OPLINE
13562 	zval *op1, *op2;
13563 	bool result;
13564 
13565 	op1 = EX_VAR(opline->op1.var);
13566 	op2 = EX_VAR(opline->op2.var);
13567 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13568 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13569 }
13570 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13571 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13572 {
13573 	USE_OPLINE
13574 	zval *op1, *op2;
13575 	bool result;
13576 
13577 	op1 = EX_VAR(opline->op1.var);
13578 	op2 = EX_VAR(opline->op2.var);
13579 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13580 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13581 }
13582 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13584 {
13585 	USE_OPLINE
13586 	zval *op1, *op2;
13587 	bool result;
13588 
13589 	op1 = EX_VAR(opline->op1.var);
13590 	op2 = EX_VAR(opline->op2.var);
13591 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13592 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13593 }
13594 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13595 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13596 {
13597 	USE_OPLINE
13598 	zval *op1, *op2;
13599 	bool result;
13600 
13601 	op1 = EX_VAR(opline->op1.var);
13602 	op2 = EX_VAR(opline->op2.var);
13603 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13604 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13605 }
13606 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13607 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13608 {
13609 	USE_OPLINE
13610 	zval *op1, *op2;
13611 	bool result;
13612 
13613 	op1 = EX_VAR(opline->op1.var);
13614 	op2 = EX_VAR(opline->op2.var);
13615 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13616 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13617 }
13618 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13619 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13620 {
13621 	USE_OPLINE
13622 	zval *op1, *op2;
13623 	bool result;
13624 
13625 	op1 = EX_VAR(opline->op1.var);
13626 	op2 = EX_VAR(opline->op2.var);
13627 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13628 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13629 }
13630 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13631 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13632 {
13633 	USE_OPLINE
13634 	zval *op1, *op2;
13635 	bool result;
13636 
13637 	op1 = EX_VAR(opline->op1.var);
13638 	op2 = EX_VAR(opline->op2.var);
13639 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13640 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13641 }
13642 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13643 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13644 {
13645 	USE_OPLINE
13646 	zval *op1, *op2;
13647 	bool result;
13648 
13649 	op1 = EX_VAR(opline->op1.var);
13650 	op2 = EX_VAR(opline->op2.var);
13651 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13652 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13653 }
13654 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13655 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13656 {
13657 	USE_OPLINE
13658 	zval *op1, *op2;
13659 	bool result;
13660 
13661 	op1 = EX_VAR(opline->op1.var);
13662 	op2 = EX_VAR(opline->op2.var);
13663 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13664 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13665 }
13666 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13667 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13668 {
13669 	USE_OPLINE
13670 	zval *op1, *op2;
13671 	bool result;
13672 
13673 	op1 = EX_VAR(opline->op1.var);
13674 	op2 = EX_VAR(opline->op2.var);
13675 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13676 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13677 }
13678 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13679 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13680 {
13681 	USE_OPLINE
13682 	zval *op1, *op2;
13683 	bool result;
13684 
13685 	op1 = EX_VAR(opline->op1.var);
13686 	op2 = EX_VAR(opline->op2.var);
13687 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13688 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13689 }
13690 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13691 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13692 {
13693 	USE_OPLINE
13694 	zval *op1, *op2;
13695 	bool result;
13696 
13697 	op1 = EX_VAR(opline->op1.var);
13698 	op2 = EX_VAR(opline->op2.var);
13699 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13700 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13701 }
13702 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13703 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13704 {
13705 	USE_OPLINE
13706 	zval *op1, *op2;
13707 	bool result;
13708 
13709 	op1 = EX_VAR(opline->op1.var);
13710 	op2 = EX_VAR(opline->op2.var);
13711 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13712 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13713 }
13714 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13715 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13716 {
13717 	USE_OPLINE
13718 	zval *op1, *op2;
13719 	bool result;
13720 
13721 	op1 = EX_VAR(opline->op1.var);
13722 	op2 = EX_VAR(opline->op2.var);
13723 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13724 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13725 }
13726 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13727 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13728 {
13729 	USE_OPLINE
13730 	zval *op1, *op2;
13731 	bool result;
13732 
13733 	op1 = EX_VAR(opline->op1.var);
13734 	op2 = EX_VAR(opline->op2.var);
13735 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13736 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13737 }
13738 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13739 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13740 {
13741 	USE_OPLINE
13742 	zval *op1, *op2;
13743 	bool result;
13744 
13745 	op1 = EX_VAR(opline->op1.var);
13746 	op2 = EX_VAR(opline->op2.var);
13747 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13748 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13749 }
13750 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13751 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13752 {
13753 	USE_OPLINE
13754 	zval *op1, *op2;
13755 	bool result;
13756 
13757 	op1 = EX_VAR(opline->op1.var);
13758 	op2 = EX_VAR(opline->op2.var);
13759 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13760 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13761 }
13762 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13763 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13764 {
13765 	USE_OPLINE
13766 	zval *op1, *op2;
13767 	bool result;
13768 
13769 	op1 = EX_VAR(opline->op1.var);
13770 	op2 = EX_VAR(opline->op2.var);
13771 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13772 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13773 }
13774 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13775 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)
13776 {
13777 	USE_OPLINE
13778 	zval *op1, *op2;
13779 	bool result;
13780 
13781 	op1 = EX_VAR(opline->op1.var);
13782 	op2 = EX_VAR(opline->op2.var);
13783 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13784 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13785 }
13786 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13787 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)
13788 {
13789 	USE_OPLINE
13790 	zval *op1, *op2;
13791 	bool result;
13792 
13793 	op1 = EX_VAR(opline->op1.var);
13794 	op2 = EX_VAR(opline->op2.var);
13795 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13796 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13797 }
13798 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13799 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13800 {
13801 	USE_OPLINE
13802 	zval *op1, *op2;
13803 	bool result;
13804 
13805 	op1 = EX_VAR(opline->op1.var);
13806 	op2 = EX_VAR(opline->op2.var);
13807 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13808 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13809 }
13810 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13811 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)
13812 {
13813 	USE_OPLINE
13814 	zval *op1, *op2;
13815 	bool result;
13816 
13817 	op1 = EX_VAR(opline->op1.var);
13818 	op2 = EX_VAR(opline->op2.var);
13819 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13820 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13821 }
13822 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13823 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)
13824 {
13825 	USE_OPLINE
13826 	zval *op1, *op2;
13827 	bool result;
13828 
13829 	op1 = EX_VAR(opline->op1.var);
13830 	op2 = EX_VAR(opline->op2.var);
13831 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13832 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13833 }
13834 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13835 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13836 {
13837 	USE_OPLINE
13838 	zval *container;
13839 
13840 	SAVE_OPLINE();
13841 	container = EX_VAR(opline->op1.var);
13842 	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);
13843 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
13844 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13845 }
13846 
ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13847 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13848 {
13849 	USE_OPLINE
13850 	zval *op;
13851 
13852 	SAVE_OPLINE();
13853 	op = EX_VAR(opline->op1.var);
13854 	zend_throw_exception_ex(zend_ce_unhandled_match_error, 0, "Unhandled match value of type %s", zend_zval_type_name(op));
13855 	HANDLE_EXCEPTION();
13856 }
13857 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13859 {
13860 	USE_OPLINE
13861 	zval *container;
13862 
13863 	SAVE_OPLINE();
13864 	container = EX_VAR(opline->op1.var);
13865 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
13866 
13867 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13868 }
13869 
ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13871 {
13872 	USE_OPLINE
13873 	zval *val;
13874 
13875 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
13876 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
13877 		ZVAL_FALSE(EX_VAR(opline->result.var));
13878 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13879 		/* The result and op1 can be the same cv zval */
13880 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
13881 		ZVAL_TRUE(EX_VAR(opline->result.var));
13882 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
13883 			SAVE_OPLINE();
13884 			ZVAL_UNDEFINED_OP1();
13885 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13886 		}
13887 	} else {
13888 		SAVE_OPLINE();
13889 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
13890 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13891 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13892 	}
13893 	ZEND_VM_NEXT_OPCODE();
13894 }
13895 
ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13896 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13897 {
13898 	USE_OPLINE
13899 	zval *z;
13900 
13901 	SAVE_OPLINE();
13902 	z = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
13903 
13904 	if (Z_TYPE_P(z) == IS_STRING) {
13905 		zend_string *str = Z_STR_P(z);
13906 
13907 		if (ZSTR_LEN(str) != 0) {
13908 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
13909 		}
13910 	} else {
13911 		zend_string *str = zval_get_string_func(z);
13912 
13913 		if (ZSTR_LEN(str) != 0) {
13914 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
13915 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
13916 			ZVAL_UNDEFINED_OP1();
13917 		}
13918 		zend_string_release_ex(str, 0);
13919 	}
13920 
13921 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13922 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13923 }
13924 
ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13925 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13926 {
13927 	USE_OPLINE
13928 	zval *val;
13929 	zend_uchar op1_type;
13930 
13931 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
13932 
13933 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
13934 		ZEND_VM_NEXT_OPCODE();
13935 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13936 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
13937 			SAVE_OPLINE();
13938 			ZVAL_UNDEFINED_OP1();
13939 			if (UNEXPECTED(EG(exception))) {
13940 				HANDLE_EXCEPTION();
13941 			}
13942 		}
13943 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
13944 	}
13945 
13946 	SAVE_OPLINE();
13947 	op1_type = (IS_TMP_VAR|IS_VAR);
13948 	if (i_zend_is_true(val)) {
13949 		opline++;
13950 	} else {
13951 		opline = OP_JMP_ADDR(opline, opline->op2);
13952 	}
13953 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
13954 		zval_ptr_dtor_nogc(val);
13955 	}
13956 	ZEND_VM_JMP(opline);
13957 }
13958 
ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13959 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13960 {
13961 	USE_OPLINE
13962 	zval *val;
13963 	zend_uchar op1_type;
13964 
13965 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
13966 
13967 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
13968 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
13969 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13970 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
13971 			SAVE_OPLINE();
13972 			ZVAL_UNDEFINED_OP1();
13973 			if (UNEXPECTED(EG(exception))) {
13974 				HANDLE_EXCEPTION();
13975 			}
13976 		}
13977 		ZEND_VM_NEXT_OPCODE();
13978 	}
13979 
13980 	SAVE_OPLINE();
13981 	op1_type = (IS_TMP_VAR|IS_VAR);
13982 	if (i_zend_is_true(val)) {
13983 		opline = OP_JMP_ADDR(opline, opline->op2);
13984 	} else {
13985 		opline++;
13986 	}
13987 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
13988 		zval_ptr_dtor_nogc(val);
13989 	}
13990 	ZEND_VM_JMP(opline);
13991 }
13992 
ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13993 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13994 {
13995 	USE_OPLINE
13996 	zval *val;
13997 	zend_uchar op1_type;
13998 
13999 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14000 
14001 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
14002 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
14003 		ZEND_VM_CONTINUE();
14004 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14005 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14006 			SAVE_OPLINE();
14007 			ZVAL_UNDEFINED_OP1();
14008 			if (UNEXPECTED(EG(exception))) {
14009 				HANDLE_EXCEPTION();
14010 			}
14011 		}
14012 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14013 	}
14014 
14015 	SAVE_OPLINE();
14016 	op1_type = (IS_TMP_VAR|IS_VAR);
14017 	if (i_zend_is_true(val)) {
14018 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
14019 	} else {
14020 		opline = OP_JMP_ADDR(opline, opline->op2);
14021 	}
14022 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
14023 		zval_ptr_dtor_nogc(val);
14024 	}
14025 	ZEND_VM_JMP(opline);
14026 }
14027 
ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14028 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14029 {
14030 	USE_OPLINE
14031 	zval *val;
14032 	bool ret;
14033 
14034 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14035 
14036 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14037 		ZVAL_TRUE(EX_VAR(opline->result.var));
14038 		ZEND_VM_NEXT_OPCODE();
14039 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14040 		ZVAL_FALSE(EX_VAR(opline->result.var));
14041 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14042 			SAVE_OPLINE();
14043 			ZVAL_UNDEFINED_OP1();
14044 			if (UNEXPECTED(EG(exception))) {
14045 				HANDLE_EXCEPTION();
14046 			}
14047 		}
14048 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14049 	}
14050 
14051 	SAVE_OPLINE();
14052 	ret = i_zend_is_true(val);
14053 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14054 	if (ret) {
14055 		ZVAL_TRUE(EX_VAR(opline->result.var));
14056 		opline++;
14057 	} else {
14058 		ZVAL_FALSE(EX_VAR(opline->result.var));
14059 		opline = OP_JMP_ADDR(opline, opline->op2);
14060 	}
14061 	ZEND_VM_JMP(opline);
14062 }
14063 
ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14064 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14065 {
14066 	USE_OPLINE
14067 	zval *val;
14068 	bool ret;
14069 
14070 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14071 
14072 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14073 		ZVAL_TRUE(EX_VAR(opline->result.var));
14074 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14075 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14076 		ZVAL_FALSE(EX_VAR(opline->result.var));
14077 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14078 			SAVE_OPLINE();
14079 			ZVAL_UNDEFINED_OP1();
14080 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14081 		} else {
14082 			ZEND_VM_NEXT_OPCODE();
14083 		}
14084 	}
14085 
14086 	SAVE_OPLINE();
14087 	ret = i_zend_is_true(val);
14088 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14089 	if (ret) {
14090 		ZVAL_TRUE(EX_VAR(opline->result.var));
14091 		opline = OP_JMP_ADDR(opline, opline->op2);
14092 	} else {
14093 		ZVAL_FALSE(EX_VAR(opline->result.var));
14094 		opline++;
14095 	}
14096 	ZEND_VM_JMP(opline);
14097 }
14098 
ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14099 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14100 {
14101 	USE_OPLINE
14102 
14103 	SAVE_OPLINE();
14104 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14105 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14106 }
14107 
ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14108 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14109 {
14110 	zval *var;
14111 	USE_OPLINE
14112 
14113 	var = EX_VAR(opline->op1.var);
14114 	if (Z_TYPE_P(var) != IS_ARRAY) {
14115 		SAVE_OPLINE();
14116 		if (Z_FE_ITER_P(var) != (uint32_t)-1) {
14117 			zend_hash_iterator_del(Z_FE_ITER_P(var));
14118 		}
14119 		zval_ptr_dtor_nogc(var);
14120 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14121 	}
14122 
14123 	/* This is freeing an array. Use an inlined version of zval_ptr_dtor_nogc. */
14124 	/* 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) */
14125 	if (Z_REFCOUNTED_P(var) && !Z_DELREF_P(var)) {
14126 		SAVE_OPLINE();
14127 		rc_dtor_func(Z_COUNTED_P(var));
14128 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14129 	}
14130 	ZEND_VM_NEXT_OPCODE();
14131 }
14132 
ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14133 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14134 {
14135 	USE_OPLINE
14136 	zval *value;
14137 
14138 	SAVE_OPLINE();
14139 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14140 
14141 	do {
14142 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
14143 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
14144 				value = Z_REFVAL_P(value);
14145 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
14146 					break;
14147 				}
14148 			}
14149 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
14150 				ZVAL_UNDEFINED_OP1();
14151 				if (UNEXPECTED(EG(exception) != NULL)) {
14152 					HANDLE_EXCEPTION();
14153 				}
14154 			}
14155 			zend_throw_error(NULL, "Can only throw objects");
14156 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14157 			HANDLE_EXCEPTION();
14158 		}
14159 	} while (0);
14160 
14161 	zend_exception_save();
14162 	Z_TRY_ADDREF_P(value);
14163 	zend_throw_exception_object(value);
14164 	zend_exception_restore();
14165 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14166 	HANDLE_EXCEPTION();
14167 }
14168 
ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14169 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14170 {
14171 	USE_OPLINE
14172 	zval *val;
14173 
14174 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14175 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14176 		ZVAL_TRUE(EX_VAR(opline->result.var));
14177 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14178 		/* The result and op1 can be the same cv zval */
14179 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
14180 		ZVAL_FALSE(EX_VAR(opline->result.var));
14181 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
14182 			SAVE_OPLINE();
14183 			ZVAL_UNDEFINED_OP1();
14184 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14185 		}
14186 	} else {
14187 		SAVE_OPLINE();
14188 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
14189 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14190 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14191 	}
14192 	ZEND_VM_NEXT_OPCODE();
14193 }
14194 
ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14195 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14196 {
14197 	USE_OPLINE
14198 	zval *obj;
14199 	zend_object *zobj;
14200 	zend_class_entry *ce, *scope;
14201 	zend_function *clone;
14202 	zend_object_clone_obj_t clone_call;
14203 
14204 	SAVE_OPLINE();
14205 	obj = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14206 
14207 	do {
14208 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
14209 		    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
14210 		    if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
14211 				obj = Z_REFVAL_P(obj);
14212 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
14213 					break;
14214 				}
14215 			}
14216 			ZVAL_UNDEF(EX_VAR(opline->result.var));
14217 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
14218 				ZVAL_UNDEFINED_OP1();
14219 				if (UNEXPECTED(EG(exception) != NULL)) {
14220 					HANDLE_EXCEPTION();
14221 				}
14222 			}
14223 			zend_throw_error(NULL, "__clone method called on non-object");
14224 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14225 			HANDLE_EXCEPTION();
14226 		}
14227 	} while (0);
14228 
14229 	zobj = Z_OBJ_P(obj);
14230 	ce = zobj->ce;
14231 	clone = ce->clone;
14232 	clone_call = zobj->handlers->clone_obj;
14233 	if (UNEXPECTED(clone_call == NULL)) {
14234 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
14235 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14236 		ZVAL_UNDEF(EX_VAR(opline->result.var));
14237 		HANDLE_EXCEPTION();
14238 	}
14239 
14240 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
14241 		scope = EX(func)->op_array.scope;
14242 		if (clone->common.scope != scope) {
14243 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
14244 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
14245 				zend_wrong_clone_call(clone, scope);
14246 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14247 				ZVAL_UNDEF(EX_VAR(opline->result.var));
14248 				HANDLE_EXCEPTION();
14249 			}
14250 		}
14251 	}
14252 
14253 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
14254 
14255 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14256 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14257 }
14258 
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14259 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14260 {
14261 	USE_OPLINE
14262 	zend_op_array *new_op_array;
14263 	zval *inc_filename;
14264 
14265 	SAVE_OPLINE();
14266 	inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14267 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
14268 	if (UNEXPECTED(EG(exception) != NULL)) {
14269 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14270 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
14271 			destroy_op_array(new_op_array);
14272 			efree_size(new_op_array, sizeof(zend_op_array));
14273 		}
14274 		UNDEF_RESULT();
14275 		HANDLE_EXCEPTION();
14276 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
14277 		if (RETURN_VALUE_USED(opline)) {
14278 			ZVAL_TRUE(EX_VAR(opline->result.var));
14279 		}
14280 	} else if (EXPECTED(new_op_array != NULL)) {
14281 		zval *return_value = NULL;
14282 		zend_execute_data *call;
14283 
14284 		if (RETURN_VALUE_USED(opline)) {
14285 			return_value = EX_VAR(opline->result.var);
14286 		}
14287 
14288 		new_op_array->scope = EX(func)->op_array.scope;
14289 
14290 		call = zend_vm_stack_push_call_frame(
14291 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
14292 			(zend_function*)new_op_array, 0,
14293 			Z_PTR(EX(This)));
14294 
14295 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
14296 			call->symbol_table = EX(symbol_table);
14297 		} else {
14298 			call->symbol_table = zend_rebuild_symbol_table();
14299 		}
14300 
14301 		call->prev_execute_data = execute_data;
14302 		i_init_code_execute_data(call, new_op_array, return_value);
14303 
14304 		if (EXPECTED(zend_execute_ex == execute_ex)) {
14305 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14306 			ZEND_VM_ENTER();
14307 		} else {
14308 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
14309 			zend_execute_ex(call);
14310 			zend_vm_stack_free_call_frame(call);
14311 		}
14312 
14313 		destroy_op_array(new_op_array);
14314 		efree_size(new_op_array, sizeof(zend_op_array));
14315 		if (UNEXPECTED(EG(exception) != NULL)) {
14316 			zend_rethrow_exception(execute_data);
14317 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14318 			UNDEF_RESULT();
14319 			HANDLE_EXCEPTION();
14320 		}
14321 	} else if (RETURN_VALUE_USED(opline)) {
14322 		ZVAL_FALSE(EX_VAR(opline->result.var));
14323 	}
14324 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14325 	ZEND_VM_NEXT_OPCODE();
14326 }
14327 
ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14328 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14329 {
14330 	USE_OPLINE
14331 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
14332 	zval *val;
14333 
14334 	SAVE_OPLINE();
14335 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14336 
14337 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
14338 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
14339 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14340 		UNDEF_RESULT();
14341 		HANDLE_EXCEPTION();
14342 	}
14343 
14344 yield_from_try_again:
14345 	if (Z_TYPE_P(val) == IS_ARRAY) {
14346 		ZVAL_COPY_VALUE(&generator->values, val);
14347 		if (Z_OPT_REFCOUNTED_P(val)) {
14348 			Z_ADDREF_P(val);
14349 		}
14350 		Z_FE_POS(generator->values) = 0;
14351 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14352 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
14353 		zend_class_entry *ce = Z_OBJCE_P(val);
14354 		if (ce == zend_ce_generator) {
14355 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
14356 
14357 			Z_ADDREF_P(val);
14358 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14359 
14360 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
14361 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
14362 				zval_ptr_dtor(val);
14363 				UNDEF_RESULT();
14364 				HANDLE_EXCEPTION();
14365 			} else if (Z_ISUNDEF(new_gen->retval)) {
14366 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
14367 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
14368 					zval_ptr_dtor(val);
14369 					UNDEF_RESULT();
14370 					HANDLE_EXCEPTION();
14371 				} else {
14372 					zend_generator_yield_from(generator, new_gen);
14373 				}
14374 			} else {
14375 				if (RETURN_VALUE_USED(opline)) {
14376 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
14377 				}
14378 				ZEND_VM_NEXT_OPCODE();
14379 			}
14380 		} else {
14381 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
14382 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14383 
14384 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
14385 				if (!EG(exception)) {
14386 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
14387 				}
14388 				UNDEF_RESULT();
14389 				HANDLE_EXCEPTION();
14390 			}
14391 
14392 			iter->index = 0;
14393 			if (iter->funcs->rewind) {
14394 				iter->funcs->rewind(iter);
14395 				if (UNEXPECTED(EG(exception) != NULL)) {
14396 					OBJ_RELEASE(&iter->std);
14397 					UNDEF_RESULT();
14398 					HANDLE_EXCEPTION();
14399 				}
14400 			}
14401 
14402 			ZVAL_OBJ(&generator->values, &iter->std);
14403 		}
14404 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
14405 		val = Z_REFVAL_P(val);
14406 		goto yield_from_try_again;
14407 	} else {
14408 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
14409 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14410 		UNDEF_RESULT();
14411 		HANDLE_EXCEPTION();
14412 	}
14413 
14414 	/* This is the default return value
14415 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
14416 	if (RETURN_VALUE_USED(opline)) {
14417 		ZVAL_NULL(EX_VAR(opline->result.var));
14418 	}
14419 
14420 	/* This generator has no send target (though the generator we delegate to might have one) */
14421 	generator->send_target = NULL;
14422 
14423 	/* We increment to the next op, so we are at the correct position when the
14424 	 * generator is resumed. */
14425 	ZEND_VM_INC_OPCODE();
14426 
14427 	/* The GOTO VM uses a local opline variable. We need to set the opline
14428 	 * variable in execute_data so we don't resume at an old position. */
14429 	SAVE_OPLINE();
14430 
14431 	ZEND_VM_RETURN();
14432 }
14433 
ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14434 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14435 {
14436 	USE_OPLINE
14437 	zval *value;
14438 
14439 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14440 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
14441 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
14442 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14443 		ZEND_VM_NEXT_OPCODE();
14444 	} else {
14445 		zend_bool strict;
14446 
14447 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
14448 			value = Z_REFVAL_P(value);
14449 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
14450 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
14451 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14452 				ZEND_VM_NEXT_OPCODE();
14453 			}
14454 		}
14455 
14456 		SAVE_OPLINE();
14457 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
14458 			value = ZVAL_UNDEFINED_OP1();
14459 		}
14460 		strict = EX_USES_STRICT_TYPES();
14461 		do {
14462 			if (EXPECTED(!strict)) {
14463 				zend_string *str;
14464 				zval tmp;
14465 
14466 				ZVAL_COPY(&tmp, value);
14467 				if (zend_parse_arg_str_weak(&tmp, &str)) {
14468 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
14469 					zval_ptr_dtor(&tmp);
14470 					break;
14471 				}
14472 				zval_ptr_dtor(&tmp);
14473 			}
14474 			if (!EG(exception)) {
14475 				zend_type_error("strlen(): Argument #1 ($str) must be of type string, %s given", zend_zval_type_name(value));
14476 			}
14477 			ZVAL_UNDEF(EX_VAR(opline->result.var));
14478 		} while (0);
14479 	}
14480 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14481 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14482 }
14483 
ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14484 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14485 {
14486 	USE_OPLINE
14487 	zval *value;
14488 	int result = 0;
14489 
14490 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14491 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
14492 type_check_resource:
14493 		if (opline->extended_value != MAY_BE_RESOURCE
14494 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
14495 			result = 1;
14496 		}
14497 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
14498 		value = Z_REFVAL_P(value);
14499 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
14500 			goto type_check_resource;
14501 		}
14502 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
14503 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
14504 		SAVE_OPLINE();
14505 		ZVAL_UNDEFINED_OP1();
14506 		if (UNEXPECTED(EG(exception))) {
14507 			ZVAL_UNDEF(EX_VAR(opline->result.var));
14508 			HANDLE_EXCEPTION();
14509 		}
14510 	}
14511 	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14512 		SAVE_OPLINE();
14513 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14514 		ZEND_VM_SMART_BRANCH(result, 1);
14515 	} else {
14516 		ZEND_VM_SMART_BRANCH(result, 0);
14517 	}
14518 }
14519 
ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14520 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14521 {
14522 	uint32_t fetch_type;
14523 	zend_class_entry *called_scope, *scope;
14524 	USE_OPLINE
14525 
14526 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
14527 		SAVE_OPLINE();
14528 		zval *op = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14529 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
14530 			ZVAL_DEREF(op);
14531 			if (Z_TYPE_P(op) != IS_OBJECT) {
14532 				zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
14533 				ZVAL_UNDEF(EX_VAR(opline->result.var));
14534 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14535 				HANDLE_EXCEPTION();
14536 			}
14537 		}
14538 
14539 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
14540 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14541 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14542 	}
14543 
14544 	fetch_type = opline->op1.num;
14545 	scope = EX(func)->op_array.scope;
14546 	if (UNEXPECTED(scope == NULL)) {
14547 		SAVE_OPLINE();
14548 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
14549 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
14550 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
14551 		ZVAL_UNDEF(EX_VAR(opline->result.var));
14552 		HANDLE_EXCEPTION();
14553 	}
14554 
14555 	switch (fetch_type) {
14556 		case ZEND_FETCH_CLASS_SELF:
14557 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
14558 			break;
14559 		case ZEND_FETCH_CLASS_PARENT:
14560 			if (UNEXPECTED(scope->parent == NULL)) {
14561 				SAVE_OPLINE();
14562 				zend_throw_error(NULL,
14563 					"Cannot use \"parent\" when current class scope has no parent");
14564 				ZVAL_UNDEF(EX_VAR(opline->result.var));
14565 				HANDLE_EXCEPTION();
14566 			}
14567 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
14568 			break;
14569 		case ZEND_FETCH_CLASS_STATIC:
14570 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
14571 				called_scope = Z_OBJCE(EX(This));
14572 			} else {
14573 				called_scope = Z_CE(EX(This));
14574 			}
14575 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
14576 			break;
14577 		EMPTY_SWITCH_DEFAULT_CASE()
14578 	}
14579 	ZEND_VM_NEXT_OPCODE();
14580 }
14581 
ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14582 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14583 {
14584 	USE_OPLINE
14585 	zval *op1, *op2;
14586 
14587 	SAVE_OPLINE();
14588 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14589 	op2 = RT_CONSTANT(opline, opline->op2);
14590 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
14591 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14592 
14593 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14594 }
14595 
ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14596 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14597 {
14598 	USE_OPLINE
14599 	zval *op1, *op2;
14600 
14601 	SAVE_OPLINE();
14602 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14603 	op2 = RT_CONSTANT(opline, opline->op2);
14604 	pow_function(EX_VAR(opline->result.var), op1, op2);
14605 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14606 
14607 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14608 }
14609 
ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14610 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14611 {
14612 	USE_OPLINE
14613 	zval *op1, *op2;
14614 
14615 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14616 	op2 = RT_CONSTANT(opline, opline->op2);
14617 
14618 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
14619 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
14620 		zend_string *op1_str = Z_STR_P(op1);
14621 		zend_string *op2_str = Z_STR_P(op2);
14622 		zend_string *str;
14623 
14624 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
14625 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
14626 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
14627 			} else {
14628 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
14629 			}
14630 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14631 				zend_string_release_ex(op1_str, 0);
14632 			}
14633 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
14634 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
14635 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
14636 			} else {
14637 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
14638 			}
14639 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14640 				zend_string_release_ex(op2_str, 0);
14641 			}
14642 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
14643 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
14644 		    size_t len = ZSTR_LEN(op1_str);
14645 
14646 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
14647 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
14648 			}
14649 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
14650 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
14651 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
14652 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14653 				zend_string_release_ex(op2_str, 0);
14654 			}
14655 		} else {
14656 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
14657 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
14658 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
14659 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
14660 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14661 				zend_string_release_ex(op1_str, 0);
14662 			}
14663 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14664 				zend_string_release_ex(op2_str, 0);
14665 			}
14666 		}
14667 		ZEND_VM_NEXT_OPCODE();
14668 	} else {
14669 		SAVE_OPLINE();
14670 
14671 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
14672 			op1 = ZVAL_UNDEFINED_OP1();
14673 		}
14674 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
14675 			op2 = ZVAL_UNDEFINED_OP2();
14676 		}
14677 		concat_function(EX_VAR(opline->result.var), op1, op2);
14678 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14679 
14680 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14681 	}
14682 }
14683 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14684 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14685 {
14686 	USE_OPLINE
14687 	zval *op1, *op2;
14688 	double d1, d2;
14689 
14690 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14691 	op2 = RT_CONSTANT(opline, opline->op2);
14692 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14693 		/* pass */
14694 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14695 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14696 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
14697 is_equal_true:
14698 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
14699 			} else {
14700 is_equal_false:
14701 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
14702 			}
14703 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14704 			d1 = (double)Z_LVAL_P(op1);
14705 			d2 = Z_DVAL_P(op2);
14706 			goto is_equal_double;
14707 		}
14708 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14709 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14710 			d1 = Z_DVAL_P(op1);
14711 			d2 = Z_DVAL_P(op2);
14712 is_equal_double:
14713 			if (d1 == d2) {
14714 				goto is_equal_true;
14715 			} else {
14716 				goto is_equal_false;
14717 			}
14718 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14719 			d1 = Z_DVAL_P(op1);
14720 			d2 = (double)Z_LVAL_P(op2);
14721 			goto is_equal_double;
14722 		}
14723 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14724 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14725 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14726 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14727 				zval_ptr_dtor_str(op1);
14728 			}
14729 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14730 				zval_ptr_dtor_str(op2);
14731 			}
14732 			if (result) {
14733 				goto is_equal_true;
14734 			} else {
14735 				goto is_equal_false;
14736 			}
14737 		}
14738 	}
14739 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14740 }
14741 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14743 {
14744 	USE_OPLINE
14745 	zval *op1, *op2;
14746 	double d1, d2;
14747 
14748 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14749 	op2 = RT_CONSTANT(opline, opline->op2);
14750 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14751 		/* pass */
14752 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14753 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14754 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
14755 is_equal_true:
14756 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
14757 			} else {
14758 is_equal_false:
14759 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
14760 			}
14761 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14762 			d1 = (double)Z_LVAL_P(op1);
14763 			d2 = Z_DVAL_P(op2);
14764 			goto is_equal_double;
14765 		}
14766 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14767 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14768 			d1 = Z_DVAL_P(op1);
14769 			d2 = Z_DVAL_P(op2);
14770 is_equal_double:
14771 			if (d1 == d2) {
14772 				goto is_equal_true;
14773 			} else {
14774 				goto is_equal_false;
14775 			}
14776 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14777 			d1 = Z_DVAL_P(op1);
14778 			d2 = (double)Z_LVAL_P(op2);
14779 			goto is_equal_double;
14780 		}
14781 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14782 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14783 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14784 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14785 				zval_ptr_dtor_str(op1);
14786 			}
14787 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14788 				zval_ptr_dtor_str(op2);
14789 			}
14790 			if (result) {
14791 				goto is_equal_true;
14792 			} else {
14793 				goto is_equal_false;
14794 			}
14795 		}
14796 	}
14797 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14798 }
14799 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14800 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14801 {
14802 	USE_OPLINE
14803 	zval *op1, *op2;
14804 	double d1, d2;
14805 
14806 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14807 	op2 = RT_CONSTANT(opline, opline->op2);
14808 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14809 		/* pass */
14810 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14811 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14812 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
14813 is_equal_true:
14814 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
14815 			} else {
14816 is_equal_false:
14817 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
14818 			}
14819 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14820 			d1 = (double)Z_LVAL_P(op1);
14821 			d2 = Z_DVAL_P(op2);
14822 			goto is_equal_double;
14823 		}
14824 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14825 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14826 			d1 = Z_DVAL_P(op1);
14827 			d2 = Z_DVAL_P(op2);
14828 is_equal_double:
14829 			if (d1 == d2) {
14830 				goto is_equal_true;
14831 			} else {
14832 				goto is_equal_false;
14833 			}
14834 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14835 			d1 = Z_DVAL_P(op1);
14836 			d2 = (double)Z_LVAL_P(op2);
14837 			goto is_equal_double;
14838 		}
14839 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14840 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14841 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14842 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14843 				zval_ptr_dtor_str(op1);
14844 			}
14845 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14846 				zval_ptr_dtor_str(op2);
14847 			}
14848 			if (result) {
14849 				goto is_equal_true;
14850 			} else {
14851 				goto is_equal_false;
14852 			}
14853 		}
14854 	}
14855 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14856 }
14857 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14859 {
14860 	USE_OPLINE
14861 	zval *op1, *op2;
14862 	double d1, d2;
14863 
14864 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14865 	op2 = RT_CONSTANT(opline, opline->op2);
14866 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14867 		/* pass */
14868 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14869 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14870 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
14871 is_not_equal_true:
14872 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
14873 			} else {
14874 is_not_equal_false:
14875 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
14876 			}
14877 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14878 			d1 = (double)Z_LVAL_P(op1);
14879 			d2 = Z_DVAL_P(op2);
14880 			goto is_not_equal_double;
14881 		}
14882 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14883 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14884 			d1 = Z_DVAL_P(op1);
14885 			d2 = Z_DVAL_P(op2);
14886 is_not_equal_double:
14887 			if (d1 != d2) {
14888 				goto is_not_equal_true;
14889 			} else {
14890 				goto is_not_equal_false;
14891 			}
14892 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14893 			d1 = Z_DVAL_P(op1);
14894 			d2 = (double)Z_LVAL_P(op2);
14895 			goto is_not_equal_double;
14896 		}
14897 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14898 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14899 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14900 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14901 				zval_ptr_dtor_str(op1);
14902 			}
14903 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14904 				zval_ptr_dtor_str(op2);
14905 			}
14906 			if (!result) {
14907 				goto is_not_equal_true;
14908 			} else {
14909 				goto is_not_equal_false;
14910 			}
14911 		}
14912 	}
14913 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14914 }
14915 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14916 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14917 {
14918 	USE_OPLINE
14919 	zval *op1, *op2;
14920 	double d1, d2;
14921 
14922 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14923 	op2 = RT_CONSTANT(opline, opline->op2);
14924 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14925 		/* pass */
14926 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14927 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14928 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
14929 is_not_equal_true:
14930 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
14931 			} else {
14932 is_not_equal_false:
14933 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
14934 			}
14935 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14936 			d1 = (double)Z_LVAL_P(op1);
14937 			d2 = Z_DVAL_P(op2);
14938 			goto is_not_equal_double;
14939 		}
14940 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14941 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14942 			d1 = Z_DVAL_P(op1);
14943 			d2 = Z_DVAL_P(op2);
14944 is_not_equal_double:
14945 			if (d1 != d2) {
14946 				goto is_not_equal_true;
14947 			} else {
14948 				goto is_not_equal_false;
14949 			}
14950 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14951 			d1 = Z_DVAL_P(op1);
14952 			d2 = (double)Z_LVAL_P(op2);
14953 			goto is_not_equal_double;
14954 		}
14955 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14956 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14957 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14958 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14959 				zval_ptr_dtor_str(op1);
14960 			}
14961 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14962 				zval_ptr_dtor_str(op2);
14963 			}
14964 			if (!result) {
14965 				goto is_not_equal_true;
14966 			} else {
14967 				goto is_not_equal_false;
14968 			}
14969 		}
14970 	}
14971 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14972 }
14973 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14974 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14975 {
14976 	USE_OPLINE
14977 	zval *op1, *op2;
14978 	double d1, d2;
14979 
14980 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14981 	op2 = RT_CONSTANT(opline, opline->op2);
14982 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14983 		/* pass */
14984 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14985 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14986 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
14987 is_not_equal_true:
14988 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
14989 			} else {
14990 is_not_equal_false:
14991 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
14992 			}
14993 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14994 			d1 = (double)Z_LVAL_P(op1);
14995 			d2 = Z_DVAL_P(op2);
14996 			goto is_not_equal_double;
14997 		}
14998 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14999 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15000 			d1 = Z_DVAL_P(op1);
15001 			d2 = Z_DVAL_P(op2);
15002 is_not_equal_double:
15003 			if (d1 != d2) {
15004 				goto is_not_equal_true;
15005 			} else {
15006 				goto is_not_equal_false;
15007 			}
15008 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15009 			d1 = Z_DVAL_P(op1);
15010 			d2 = (double)Z_LVAL_P(op2);
15011 			goto is_not_equal_double;
15012 		}
15013 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15014 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15015 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15016 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15017 				zval_ptr_dtor_str(op1);
15018 			}
15019 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15020 				zval_ptr_dtor_str(op2);
15021 			}
15022 			if (!result) {
15023 				goto is_not_equal_true;
15024 			} else {
15025 				goto is_not_equal_false;
15026 			}
15027 		}
15028 	}
15029 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15030 }
15031 
ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15032 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15033 {
15034 	USE_OPLINE
15035 	zval *op1, *op2;
15036 
15037 	SAVE_OPLINE();
15038 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15039 	op2 = RT_CONSTANT(opline, opline->op2);
15040 	compare_function(EX_VAR(opline->result.var), op1, op2);
15041 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15042 
15043 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15044 }
15045 
ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15046 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15047 {
15048 	USE_OPLINE
15049 	zval *op1, *op2;
15050 
15051 	SAVE_OPLINE();
15052 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15053 	op2 = RT_CONSTANT(opline, opline->op2);
15054 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
15055 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15056 
15057 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15058 }
15059 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15061 {
15062 	USE_OPLINE
15063 	zval *container, *dim, *value;
15064 
15065 	SAVE_OPLINE();
15066 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15067 	dim = RT_CONSTANT(opline, opline->op2);
15068 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15069 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15070 fetch_dim_r_array:
15071 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
15072 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
15073 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
15074 			container = Z_REFVAL_P(container);
15075 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15076 				goto fetch_dim_r_array;
15077 			} else {
15078 				goto fetch_dim_r_slow;
15079 			}
15080 		} else {
15081 fetch_dim_r_slow:
15082 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
15083 				dim++;
15084 			}
15085 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
15086 		}
15087 	} else {
15088 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
15089 	}
15090 
15091 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15092 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15093 }
15094 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15095 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15096 {
15097 	USE_OPLINE
15098 	zval *container;
15099 
15100 	SAVE_OPLINE();
15101 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15102 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
15103 
15104 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15105 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15106 }
15107 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15108 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15109 {
15110 	USE_OPLINE
15111 	zval *container;
15112 	zval *offset;
15113 	void **cache_slot = NULL;
15114 
15115 	SAVE_OPLINE();
15116 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15117 	offset = RT_CONSTANT(opline, opline->op2);
15118 
15119 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15120 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15121 	    do {
15122 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15123 				container = Z_REFVAL_P(container);
15124 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
15125 					break;
15126 				}
15127 			}
15128 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15129 				ZVAL_UNDEFINED_OP1();
15130 			}
15131 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
15132 				ZVAL_UNDEFINED_OP2();
15133 			}
15134 			zend_wrong_property_read(container, offset);
15135 			ZVAL_NULL(EX_VAR(opline->result.var));
15136 			goto fetch_obj_r_finish;
15137 		} while (0);
15138 	}
15139 
15140 	/* here we are sure we are dealing with an object */
15141 	do {
15142 		zend_object *zobj = Z_OBJ_P(container);
15143 		zend_string *name, *tmp_name;
15144 		zval *retval;
15145 
15146 		if (IS_CONST == IS_CONST) {
15147 			name = Z_STR_P(offset);
15148 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
15149 
15150 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
15151 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
15152 
15153 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
15154 					retval = OBJ_PROP(zobj, prop_offset);
15155 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
15156 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15157 							goto fetch_obj_r_copy;
15158 						} else {
15159 fetch_obj_r_fast_copy:
15160 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15161 							ZEND_VM_NEXT_OPCODE();
15162 						}
15163 					}
15164 				} else if (EXPECTED(zobj->properties != NULL)) {
15165 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
15166 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
15167 
15168 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
15169 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
15170 
15171 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
15172 						        (EXPECTED(p->key == name) ||
15173 						         (EXPECTED(p->h == ZSTR_H(name)) &&
15174 						          EXPECTED(p->key != NULL) &&
15175 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
15176 								retval = &p->val;
15177 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15178 									goto fetch_obj_r_copy;
15179 								} else {
15180 									goto fetch_obj_r_fast_copy;
15181 								}
15182 							}
15183 						}
15184 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
15185 					}
15186 					retval = zend_hash_find_ex(zobj->properties, name, 1);
15187 					if (EXPECTED(retval)) {
15188 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
15189 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
15190 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15191 							goto fetch_obj_r_copy;
15192 						} else {
15193 							goto fetch_obj_r_fast_copy;
15194 						}
15195 					}
15196 				}
15197 			}
15198 		} else {
15199 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
15200 				ZVAL_UNDEFINED_OP2();
15201 			}
15202 			name = zval_try_get_tmp_string(offset, &tmp_name);
15203 			if (UNEXPECTED(!name)) {
15204 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15205 				break;
15206 			}
15207 		}
15208 
15209 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
15210 
15211 		if (IS_CONST != IS_CONST) {
15212 			zend_tmp_string_release(tmp_name);
15213 		}
15214 
15215 		if (retval != EX_VAR(opline->result.var)) {
15216 fetch_obj_r_copy:
15217 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15218 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
15219 			zend_unwrap_reference(retval);
15220 		}
15221 	} while (0);
15222 
15223 fetch_obj_r_finish:
15224 
15225 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15226 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15227 }
15228 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15229 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15230 {
15231 	USE_OPLINE
15232 	zval *container;
15233 	zval *offset;
15234 	void **cache_slot = NULL;
15235 
15236 	SAVE_OPLINE();
15237 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15238 	offset = RT_CONSTANT(opline, opline->op2);
15239 
15240 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15241 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15242 		do {
15243 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15244 				container = Z_REFVAL_P(container);
15245 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
15246 					break;
15247 				}
15248 			}
15249 			ZVAL_NULL(EX_VAR(opline->result.var));
15250 			goto fetch_obj_is_finish;
15251 		} while (0);
15252 	}
15253 
15254 	/* here we are sure we are dealing with an object */
15255 	do {
15256 		zend_object *zobj = Z_OBJ_P(container);
15257 		zend_string *name, *tmp_name;
15258 		zval *retval;
15259 
15260 		if (IS_CONST == IS_CONST) {
15261 			name = Z_STR_P(offset);
15262 			cache_slot = CACHE_ADDR(opline->extended_value);
15263 
15264 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
15265 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
15266 
15267 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
15268 					retval = OBJ_PROP(zobj, prop_offset);
15269 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
15270 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15271 							goto fetch_obj_is_copy;
15272 						} else {
15273 fetch_obj_is_fast_copy:
15274 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15275 							ZEND_VM_NEXT_OPCODE();
15276 						}
15277 					}
15278 				} else if (EXPECTED(zobj->properties != NULL)) {
15279 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
15280 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
15281 
15282 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
15283 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
15284 
15285 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
15286 						        (EXPECTED(p->key == name) ||
15287 						         (EXPECTED(p->h == ZSTR_H(name)) &&
15288 						          EXPECTED(p->key != NULL) &&
15289 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
15290 								retval = &p->val;
15291 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15292 									goto fetch_obj_is_copy;
15293 								} else {
15294 									goto fetch_obj_is_fast_copy;
15295 								}
15296 							}
15297 						}
15298 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
15299 					}
15300 					retval = zend_hash_find_ex(zobj->properties, name, 1);
15301 					if (EXPECTED(retval)) {
15302 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
15303 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
15304 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15305 							goto fetch_obj_is_copy;
15306 						} else {
15307 							goto fetch_obj_is_fast_copy;
15308 						}
15309 					}
15310 				}
15311 			}
15312 		} else {
15313 			name = zval_try_get_tmp_string(offset, &tmp_name);
15314 			if (UNEXPECTED(!name)) {
15315 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15316 				break;
15317 			}
15318 		}
15319 
15320 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
15321 
15322 		if (IS_CONST != IS_CONST) {
15323 			zend_tmp_string_release(tmp_name);
15324 		}
15325 
15326 		if (retval != EX_VAR(opline->result.var)) {
15327 fetch_obj_is_copy:
15328 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15329 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
15330 			zend_unwrap_reference(retval);
15331 		}
15332 	} while (0);
15333 
15334 fetch_obj_is_finish:
15335 
15336 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15337 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15338 }
15339 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15340 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15341 {
15342 	USE_OPLINE
15343 	zval *op1, *op2;
15344 	zend_string *op1_str, *op2_str, *str;
15345 
15346 
15347 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15348 	op2 = RT_CONSTANT(opline, opline->op2);
15349 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
15350 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
15351 		zend_string *op1_str = Z_STR_P(op1);
15352 		zend_string *op2_str = Z_STR_P(op2);
15353 		zend_string *str;
15354 
15355 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
15356 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
15357 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
15358 			} else {
15359 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
15360 			}
15361 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15362 				zend_string_release_ex(op1_str, 0);
15363 			}
15364 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
15365 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
15366 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
15367 			} else {
15368 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
15369 			}
15370 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15371 				zend_string_release_ex(op2_str, 0);
15372 			}
15373 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
15374 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
15375 		    size_t len = ZSTR_LEN(op1_str);
15376 
15377 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
15378 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15379 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15380 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15381 				zend_string_release_ex(op2_str, 0);
15382 			}
15383 		} else {
15384 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
15385 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
15386 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15387 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15388 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15389 				zend_string_release_ex(op1_str, 0);
15390 			}
15391 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15392 				zend_string_release_ex(op2_str, 0);
15393 			}
15394 		}
15395 		ZEND_VM_NEXT_OPCODE();
15396 	}
15397 
15398 	SAVE_OPLINE();
15399 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15400 		op1_str = Z_STR_P(op1);
15401 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15402 		op1_str = zend_string_copy(Z_STR_P(op1));
15403 	} else {
15404 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
15405 			ZVAL_UNDEFINED_OP1();
15406 		}
15407 		op1_str = zval_get_string_func(op1);
15408 	}
15409 	if (IS_CONST == IS_CONST) {
15410 		op2_str = Z_STR_P(op2);
15411 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15412 		op2_str = zend_string_copy(Z_STR_P(op2));
15413 	} else {
15414 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
15415 			ZVAL_UNDEFINED_OP2();
15416 		}
15417 		op2_str = zval_get_string_func(op2);
15418 	}
15419 	do {
15420 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15421 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
15422 				if (IS_CONST == IS_CONST) {
15423 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
15424 						GC_ADDREF(op2_str);
15425 					}
15426 				}
15427 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
15428 				zend_string_release_ex(op1_str, 0);
15429 				break;
15430 			}
15431 		}
15432 		if (IS_CONST != IS_CONST) {
15433 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
15434 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15435 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
15436 						GC_ADDREF(op1_str);
15437 					}
15438 				}
15439 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
15440 				zend_string_release_ex(op2_str, 0);
15441 				break;
15442 			}
15443 		}
15444 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
15445 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
15446 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15447 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15448 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15449 			zend_string_release_ex(op1_str, 0);
15450 		}
15451 		if (IS_CONST != IS_CONST) {
15452 			zend_string_release_ex(op2_str, 0);
15453 		}
15454 	} while (0);
15455 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15456 
15457 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15458 }
15459 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15460 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15461 {
15462 	USE_OPLINE
15463 	zval *function_name;
15464 	zval *object;
15465 	zend_function *fbc;
15466 	zend_class_entry *called_scope;
15467 	zend_object *obj;
15468 	zend_execute_data *call;
15469 	uint32_t call_info;
15470 
15471 	SAVE_OPLINE();
15472 
15473 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15474 
15475 	if (IS_CONST != IS_CONST) {
15476 		function_name = RT_CONSTANT(opline, opline->op2);
15477 	}
15478 
15479 	if (IS_CONST != IS_CONST &&
15480 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
15481 		do {
15482 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
15483 				function_name = Z_REFVAL_P(function_name);
15484 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
15485 					break;
15486 				}
15487 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
15488 				ZVAL_UNDEFINED_OP2();
15489 				if (UNEXPECTED(EG(exception) != NULL)) {
15490 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15491 					HANDLE_EXCEPTION();
15492 				}
15493 			}
15494 			zend_throw_error(NULL, "Method name must be a string");
15495 
15496 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15497 			HANDLE_EXCEPTION();
15498 		} while (0);
15499 	}
15500 
15501 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
15502 		obj = Z_OBJ_P(object);
15503 	} else {
15504 		do {
15505 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
15506 				obj = Z_OBJ_P(object);
15507 			} else {
15508 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
15509 					zend_reference *ref = Z_REF_P(object);
15510 
15511 					object = &ref->val;
15512 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
15513 						obj = Z_OBJ_P(object);
15514 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
15515 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
15516 								efree_size(ref, sizeof(zend_reference));
15517 							} else {
15518 								Z_ADDREF_P(object);
15519 							}
15520 						}
15521 						break;
15522 					}
15523 				}
15524 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
15525 					object = ZVAL_UNDEFINED_OP1();
15526 					if (UNEXPECTED(EG(exception) != NULL)) {
15527 						if (IS_CONST != IS_CONST) {
15528 
15529 						}
15530 						HANDLE_EXCEPTION();
15531 					}
15532 				}
15533 				if (IS_CONST == IS_CONST) {
15534 					function_name = RT_CONSTANT(opline, opline->op2);
15535 				}
15536 				zend_invalid_method_call(object, function_name);
15537 
15538 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15539 				HANDLE_EXCEPTION();
15540 			}
15541 		} while (0);
15542 	}
15543 
15544 	called_scope = obj->ce;
15545 
15546 	if (IS_CONST == IS_CONST &&
15547 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
15548 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
15549 	} else {
15550 	    zend_object *orig_obj = obj;
15551 
15552 		if (IS_CONST == IS_CONST) {
15553 			function_name = RT_CONSTANT(opline, opline->op2);
15554 		}
15555 
15556 		/* First, locate the function. */
15557 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
15558 		if (UNEXPECTED(fbc == NULL)) {
15559 			if (EXPECTED(!EG(exception))) {
15560 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
15561 			}
15562 
15563 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
15564 				zend_objects_store_del(orig_obj);
15565 			}
15566 			HANDLE_EXCEPTION();
15567 		}
15568 		if (IS_CONST == IS_CONST &&
15569 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
15570 		    EXPECTED(obj == orig_obj)) {
15571 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
15572 		}
15573 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
15574 			GC_ADDREF(obj); /* For $this pointer */
15575 			if (GC_DELREF(orig_obj) == 0) {
15576 				zend_objects_store_del(orig_obj);
15577 			}
15578 		}
15579 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
15580 			init_func_run_time_cache(&fbc->op_array);
15581 		}
15582 	}
15583 
15584 	if (IS_CONST != IS_CONST) {
15585 
15586 	}
15587 
15588 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
15589 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
15590 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
15591 			zend_objects_store_del(obj);
15592 			if (UNEXPECTED(EG(exception))) {
15593 				HANDLE_EXCEPTION();
15594 			}
15595 		}
15596 		/* call static method */
15597 		obj = (zend_object*)called_scope;
15598 		call_info = ZEND_CALL_NESTED_FUNCTION;
15599 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
15600 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
15601 			GC_ADDREF(obj); /* For $this pointer */
15602 		}
15603 		/* CV may be changed indirectly (e.g. when it's a reference) */
15604 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
15605 	}
15606 
15607 	call = zend_vm_stack_push_call_frame(call_info,
15608 		fbc, opline->extended_value, obj);
15609 	call->prev_execute_data = EX(call);
15610 	EX(call) = call;
15611 
15612 	ZEND_VM_NEXT_OPCODE();
15613 }
15614 
ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15615 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15616 {
15617 	USE_OPLINE
15618 	zval *value, *arg;
15619 
15620 	if (IS_CONST == IS_CONST) {
15621 		SAVE_OPLINE();
15622 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15623 		uint32_t arg_num;
15624 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
15625 		if (UNEXPECTED(!arg)) {
15626 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15627 			HANDLE_EXCEPTION();
15628 		}
15629 	} else {
15630 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15631 	}
15632 
15633 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15634 	ZVAL_COPY_VALUE(arg, value);
15635 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15636 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
15637 			Z_ADDREF_P(arg);
15638 		}
15639 	}
15640 	ZEND_VM_NEXT_OPCODE();
15641 }
15642 
ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15643 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15644 {
15645 	USE_OPLINE
15646 	zval *op1, *op2;
15647 	double d1, d2;
15648 
15649 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15650 	op2 = RT_CONSTANT(opline, opline->op2);
15651 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15652 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15653 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15654 case_true:
15655 				ZEND_VM_SMART_BRANCH_TRUE();
15656 			} else {
15657 case_false:
15658 				ZEND_VM_SMART_BRANCH_FALSE();
15659 			}
15660 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15661 			d1 = (double)Z_LVAL_P(op1);
15662 			d2 = Z_DVAL_P(op2);
15663 			goto case_double;
15664 		}
15665 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15666 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15667 			d1 = Z_DVAL_P(op1);
15668 			d2 = Z_DVAL_P(op2);
15669 case_double:
15670 			if (d1 == d2) {
15671 				goto case_true;
15672 			} else {
15673 				goto case_false;
15674 			}
15675 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15676 			d1 = Z_DVAL_P(op1);
15677 			d2 = (double)Z_LVAL_P(op2);
15678 			goto case_double;
15679 		}
15680 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15681 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15682 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15683 
15684 			if (result) {
15685 				goto case_true;
15686 			} else {
15687 				goto case_false;
15688 			}
15689 		}
15690 	}
15691 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15692 }
15693 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15694 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15695 {
15696 	USE_OPLINE
15697 	zval *container;
15698 	bool result;
15699 	zend_ulong hval;
15700 	zval *offset;
15701 
15702 	SAVE_OPLINE();
15703 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15704 	offset = RT_CONSTANT(opline, opline->op2);
15705 
15706 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15707 		HashTable *ht;
15708 		zval *value;
15709 		zend_string *str;
15710 
15711 isset_dim_obj_array:
15712 		ht = Z_ARRVAL_P(container);
15713 isset_again:
15714 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
15715 			str = Z_STR_P(offset);
15716 			if (IS_CONST != IS_CONST) {
15717 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
15718 					goto num_index_prop;
15719 				}
15720 			}
15721 			value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST);
15722 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
15723 			hval = Z_LVAL_P(offset);
15724 num_index_prop:
15725 			value = zend_hash_index_find(ht, hval);
15726 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
15727 			offset = Z_REFVAL_P(offset);
15728 			goto isset_again;
15729 		} else {
15730 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
15731 			if (UNEXPECTED(EG(exception))) {
15732 				result = 0;
15733 				goto isset_dim_obj_exit;
15734 			}
15735 		}
15736 
15737 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
15738 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
15739 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
15740 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
15741 
15742 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
15743 				/* avoid exception check */
15744 
15745 				ZEND_VM_SMART_BRANCH(result, 0);
15746 			}
15747 		} else {
15748 			result = (value == NULL || !i_zend_is_true(value));
15749 		}
15750 		goto isset_dim_obj_exit;
15751 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
15752 		container = Z_REFVAL_P(container);
15753 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15754 			goto isset_dim_obj_array;
15755 		}
15756 	}
15757 
15758 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
15759 		offset++;
15760 	}
15761 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
15762 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
15763 	} else {
15764 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
15765 	}
15766 
15767 isset_dim_obj_exit:
15768 
15769 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15770 	ZEND_VM_SMART_BRANCH(result, 1);
15771 }
15772 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15773 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15774 {
15775 	USE_OPLINE
15776 	zval *container;
15777 	int result;
15778 	zval *offset;
15779 	zend_string *name, *tmp_name;
15780 
15781 	SAVE_OPLINE();
15782 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15783 	offset = RT_CONSTANT(opline, opline->op2);
15784 
15785 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15786 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15787 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15788 			container = Z_REFVAL_P(container);
15789 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
15790 				result = (opline->extended_value & ZEND_ISEMPTY);
15791 				goto isset_object_finish;
15792 			}
15793 		} else {
15794 			result = (opline->extended_value & ZEND_ISEMPTY);
15795 			goto isset_object_finish;
15796 		}
15797 	}
15798 
15799 	if (IS_CONST == IS_CONST) {
15800 		name = Z_STR_P(offset);
15801 	} else {
15802 		name = zval_try_get_tmp_string(offset, &tmp_name);
15803 		if (UNEXPECTED(!name)) {
15804 			result = 0;
15805 			goto isset_object_finish;
15806 		}
15807 	}
15808 
15809 	result =
15810 		(opline->extended_value & ZEND_ISEMPTY) ^
15811 		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));
15812 
15813 	if (IS_CONST != IS_CONST) {
15814 		zend_tmp_string_release(tmp_name);
15815 	}
15816 
15817 isset_object_finish:
15818 
15819 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15820 	ZEND_VM_SMART_BRANCH(result, 1);
15821 }
15822 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15823 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15824 {
15825 	USE_OPLINE
15826 
15827 	zval *key, *subject;
15828 	HashTable *ht;
15829 	zend_bool result;
15830 
15831 	SAVE_OPLINE();
15832 
15833 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15834 	subject = RT_CONSTANT(opline, opline->op2);
15835 
15836 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
15837 array_key_exists_array:
15838 		ht = Z_ARRVAL_P(subject);
15839 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
15840 	} else {
15841 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
15842 			subject = Z_REFVAL_P(subject);
15843 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
15844 				goto array_key_exists_array;
15845 			}
15846 		}
15847 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
15848 		result = 0;
15849 	}
15850 
15851 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15852 	ZEND_VM_SMART_BRANCH(result, 1);
15853 }
15854 
15855 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15856 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15857 {
15858 	USE_OPLINE
15859 	zval *expr;
15860 	zend_bool result;
15861 
15862 	SAVE_OPLINE();
15863 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15864 
15865 try_instanceof:
15866 	if (Z_TYPE_P(expr) == IS_OBJECT) {
15867 		zend_class_entry *ce;
15868 
15869 		if (IS_CONST == IS_CONST) {
15870 			ce = CACHED_PTR(opline->extended_value);
15871 			if (UNEXPECTED(ce == NULL)) {
15872 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
15873 				if (EXPECTED(ce)) {
15874 					CACHE_PTR(opline->extended_value, ce);
15875 				}
15876 			}
15877 		} else if (IS_CONST == IS_UNUSED) {
15878 			ce = zend_fetch_class(NULL, opline->op2.num);
15879 			if (UNEXPECTED(ce == NULL)) {
15880 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15881 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15882 				HANDLE_EXCEPTION();
15883 			}
15884 		} else {
15885 			ce = Z_CE_P(EX_VAR(opline->op2.var));
15886 		}
15887 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
15888 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
15889 		expr = Z_REFVAL_P(expr);
15890 		goto try_instanceof;
15891 	} else {
15892 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
15893 			ZVAL_UNDEFINED_OP1();
15894 		}
15895 		result = 0;
15896 	}
15897 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15898 	ZEND_VM_SMART_BRANCH(result, 1);
15899 }
15900 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15901 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15902 {
15903 	USE_OPLINE
15904 	zval *container, *dim, *value;
15905 	zend_long offset;
15906 	HashTable *ht;
15907 
15908 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15909 	dim = RT_CONSTANT(opline, opline->op2);
15910 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15911 fetch_dim_r_index_array:
15912 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
15913 			offset = Z_LVAL_P(dim);
15914 		} else {
15915 			offset = zval_get_long(dim);
15916 		}
15917 		ht = Z_ARRVAL_P(container);
15918 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
15919 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
15920 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15921 			SAVE_OPLINE();
15922 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15923 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15924 		} else {
15925 			ZEND_VM_NEXT_OPCODE();
15926 		}
15927 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
15928 		container = Z_REFVAL_P(container);
15929 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15930 			goto fetch_dim_r_index_array;
15931 		} else {
15932 			goto fetch_dim_r_index_slow;
15933 		}
15934 	} else {
15935 fetch_dim_r_index_slow:
15936 		SAVE_OPLINE();
15937 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
15938 			dim++;
15939 		}
15940 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
15941 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15942 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15943 	}
15944 
15945 fetch_dim_r_index_undef:
15946 	ZVAL_NULL(EX_VAR(opline->result.var));
15947 	SAVE_OPLINE();
15948 	zend_undefined_offset(offset);
15949 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15950 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15951 }
15952 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15953 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15954 {
15955 	USE_OPLINE
15956 	zval *container, *dim, *value;
15957 	zend_long offset;
15958 	HashTable *ht;
15959 
15960 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15961 	dim = EX_VAR(opline->op2.var);
15962 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15963 fetch_dim_r_index_array:
15964 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
15965 			offset = Z_LVAL_P(dim);
15966 		} else {
15967 			offset = zval_get_long(dim);
15968 		}
15969 		ht = Z_ARRVAL_P(container);
15970 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
15971 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
15972 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15973 			SAVE_OPLINE();
15974 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15975 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15976 		} else {
15977 			ZEND_VM_NEXT_OPCODE();
15978 		}
15979 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
15980 		container = Z_REFVAL_P(container);
15981 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15982 			goto fetch_dim_r_index_array;
15983 		} else {
15984 			goto fetch_dim_r_index_slow;
15985 		}
15986 	} else {
15987 fetch_dim_r_index_slow:
15988 		SAVE_OPLINE();
15989 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
15990 			dim++;
15991 		}
15992 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
15993 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15994 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15995 	}
15996 
15997 fetch_dim_r_index_undef:
15998 	ZVAL_NULL(EX_VAR(opline->result.var));
15999 	SAVE_OPLINE();
16000 	zend_undefined_offset(offset);
16001 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16002 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16003 }
16004 
ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16005 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16006 {
16007 	USE_OPLINE
16008 	zval *op1, *op2;
16009 
16010 	SAVE_OPLINE();
16011 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16012 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16013 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
16014 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16015 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16016 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16017 }
16018 
ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16020 {
16021 	USE_OPLINE
16022 	zval *op1, *op2;
16023 
16024 	SAVE_OPLINE();
16025 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16026 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16027 	pow_function(EX_VAR(opline->result.var), op1, op2);
16028 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16029 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16030 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16031 }
16032 
ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16033 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16034 {
16035 	USE_OPLINE
16036 	zval *op1, *op2;
16037 
16038 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16039 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16040 
16041 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
16042 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
16043 		zend_string *op1_str = Z_STR_P(op1);
16044 		zend_string *op2_str = Z_STR_P(op2);
16045 		zend_string *str;
16046 
16047 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16048 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16049 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
16050 			} else {
16051 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16052 			}
16053 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16054 				zend_string_release_ex(op1_str, 0);
16055 			}
16056 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16057 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16058 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
16059 			} else {
16060 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16061 			}
16062 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16063 				zend_string_release_ex(op2_str, 0);
16064 			}
16065 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
16066 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
16067 		    size_t len = ZSTR_LEN(op1_str);
16068 
16069 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
16070 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
16071 			}
16072 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
16073 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16074 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16075 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16076 				zend_string_release_ex(op2_str, 0);
16077 			}
16078 		} else {
16079 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16080 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16081 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16082 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16083 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16084 				zend_string_release_ex(op1_str, 0);
16085 			}
16086 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16087 				zend_string_release_ex(op2_str, 0);
16088 			}
16089 		}
16090 		ZEND_VM_NEXT_OPCODE();
16091 	} else {
16092 		SAVE_OPLINE();
16093 
16094 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16095 			op1 = ZVAL_UNDEFINED_OP1();
16096 		}
16097 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
16098 			op2 = ZVAL_UNDEFINED_OP2();
16099 		}
16100 		concat_function(EX_VAR(opline->result.var), op1, op2);
16101 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16102 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16103 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16104 	}
16105 }
16106 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16107 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16108 {
16109 	USE_OPLINE
16110 	zval *op1, *op2;
16111 	double d1, d2;
16112 
16113 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16114 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16115 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16116 		/* pass */
16117 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16118 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16119 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16120 is_equal_true:
16121 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
16122 			} else {
16123 is_equal_false:
16124 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
16125 			}
16126 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16127 			d1 = (double)Z_LVAL_P(op1);
16128 			d2 = Z_DVAL_P(op2);
16129 			goto is_equal_double;
16130 		}
16131 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16132 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16133 			d1 = Z_DVAL_P(op1);
16134 			d2 = Z_DVAL_P(op2);
16135 is_equal_double:
16136 			if (d1 == d2) {
16137 				goto is_equal_true;
16138 			} else {
16139 				goto is_equal_false;
16140 			}
16141 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16142 			d1 = Z_DVAL_P(op1);
16143 			d2 = (double)Z_LVAL_P(op2);
16144 			goto is_equal_double;
16145 		}
16146 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16147 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16148 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16149 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16150 				zval_ptr_dtor_str(op1);
16151 			}
16152 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16153 				zval_ptr_dtor_str(op2);
16154 			}
16155 			if (result) {
16156 				goto is_equal_true;
16157 			} else {
16158 				goto is_equal_false;
16159 			}
16160 		}
16161 	}
16162 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16163 }
16164 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16165 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16166 {
16167 	USE_OPLINE
16168 	zval *op1, *op2;
16169 	double d1, d2;
16170 
16171 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16172 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16173 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16174 		/* pass */
16175 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16176 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16177 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16178 is_equal_true:
16179 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
16180 			} else {
16181 is_equal_false:
16182 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
16183 			}
16184 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16185 			d1 = (double)Z_LVAL_P(op1);
16186 			d2 = Z_DVAL_P(op2);
16187 			goto is_equal_double;
16188 		}
16189 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16190 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16191 			d1 = Z_DVAL_P(op1);
16192 			d2 = Z_DVAL_P(op2);
16193 is_equal_double:
16194 			if (d1 == d2) {
16195 				goto is_equal_true;
16196 			} else {
16197 				goto is_equal_false;
16198 			}
16199 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16200 			d1 = Z_DVAL_P(op1);
16201 			d2 = (double)Z_LVAL_P(op2);
16202 			goto is_equal_double;
16203 		}
16204 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16205 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16206 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16207 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16208 				zval_ptr_dtor_str(op1);
16209 			}
16210 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16211 				zval_ptr_dtor_str(op2);
16212 			}
16213 			if (result) {
16214 				goto is_equal_true;
16215 			} else {
16216 				goto is_equal_false;
16217 			}
16218 		}
16219 	}
16220 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16221 }
16222 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16223 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16224 {
16225 	USE_OPLINE
16226 	zval *op1, *op2;
16227 	double d1, d2;
16228 
16229 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16230 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16231 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16232 		/* pass */
16233 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16234 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16235 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16236 is_equal_true:
16237 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
16238 			} else {
16239 is_equal_false:
16240 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
16241 			}
16242 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16243 			d1 = (double)Z_LVAL_P(op1);
16244 			d2 = Z_DVAL_P(op2);
16245 			goto is_equal_double;
16246 		}
16247 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16248 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16249 			d1 = Z_DVAL_P(op1);
16250 			d2 = Z_DVAL_P(op2);
16251 is_equal_double:
16252 			if (d1 == d2) {
16253 				goto is_equal_true;
16254 			} else {
16255 				goto is_equal_false;
16256 			}
16257 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16258 			d1 = Z_DVAL_P(op1);
16259 			d2 = (double)Z_LVAL_P(op2);
16260 			goto is_equal_double;
16261 		}
16262 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16263 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16264 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16265 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16266 				zval_ptr_dtor_str(op1);
16267 			}
16268 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16269 				zval_ptr_dtor_str(op2);
16270 			}
16271 			if (result) {
16272 				goto is_equal_true;
16273 			} else {
16274 				goto is_equal_false;
16275 			}
16276 		}
16277 	}
16278 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16279 }
16280 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16282 {
16283 	USE_OPLINE
16284 	zval *op1, *op2;
16285 	double d1, d2;
16286 
16287 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16288 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16289 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16290 		/* pass */
16291 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16292 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16293 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
16294 is_not_equal_true:
16295 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
16296 			} else {
16297 is_not_equal_false:
16298 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
16299 			}
16300 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16301 			d1 = (double)Z_LVAL_P(op1);
16302 			d2 = Z_DVAL_P(op2);
16303 			goto is_not_equal_double;
16304 		}
16305 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16306 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16307 			d1 = Z_DVAL_P(op1);
16308 			d2 = Z_DVAL_P(op2);
16309 is_not_equal_double:
16310 			if (d1 != d2) {
16311 				goto is_not_equal_true;
16312 			} else {
16313 				goto is_not_equal_false;
16314 			}
16315 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16316 			d1 = Z_DVAL_P(op1);
16317 			d2 = (double)Z_LVAL_P(op2);
16318 			goto is_not_equal_double;
16319 		}
16320 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16321 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16322 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16323 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16324 				zval_ptr_dtor_str(op1);
16325 			}
16326 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16327 				zval_ptr_dtor_str(op2);
16328 			}
16329 			if (!result) {
16330 				goto is_not_equal_true;
16331 			} else {
16332 				goto is_not_equal_false;
16333 			}
16334 		}
16335 	}
16336 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16337 }
16338 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16339 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16340 {
16341 	USE_OPLINE
16342 	zval *op1, *op2;
16343 	double d1, d2;
16344 
16345 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16346 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16347 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16348 		/* pass */
16349 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16350 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16351 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
16352 is_not_equal_true:
16353 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
16354 			} else {
16355 is_not_equal_false:
16356 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
16357 			}
16358 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16359 			d1 = (double)Z_LVAL_P(op1);
16360 			d2 = Z_DVAL_P(op2);
16361 			goto is_not_equal_double;
16362 		}
16363 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16364 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16365 			d1 = Z_DVAL_P(op1);
16366 			d2 = Z_DVAL_P(op2);
16367 is_not_equal_double:
16368 			if (d1 != d2) {
16369 				goto is_not_equal_true;
16370 			} else {
16371 				goto is_not_equal_false;
16372 			}
16373 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16374 			d1 = Z_DVAL_P(op1);
16375 			d2 = (double)Z_LVAL_P(op2);
16376 			goto is_not_equal_double;
16377 		}
16378 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16379 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16380 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16381 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16382 				zval_ptr_dtor_str(op1);
16383 			}
16384 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16385 				zval_ptr_dtor_str(op2);
16386 			}
16387 			if (!result) {
16388 				goto is_not_equal_true;
16389 			} else {
16390 				goto is_not_equal_false;
16391 			}
16392 		}
16393 	}
16394 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16395 }
16396 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16397 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16398 {
16399 	USE_OPLINE
16400 	zval *op1, *op2;
16401 	double d1, d2;
16402 
16403 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16404 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16405 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16406 		/* pass */
16407 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16408 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16409 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
16410 is_not_equal_true:
16411 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
16412 			} else {
16413 is_not_equal_false:
16414 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
16415 			}
16416 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16417 			d1 = (double)Z_LVAL_P(op1);
16418 			d2 = Z_DVAL_P(op2);
16419 			goto is_not_equal_double;
16420 		}
16421 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16422 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16423 			d1 = Z_DVAL_P(op1);
16424 			d2 = Z_DVAL_P(op2);
16425 is_not_equal_double:
16426 			if (d1 != d2) {
16427 				goto is_not_equal_true;
16428 			} else {
16429 				goto is_not_equal_false;
16430 			}
16431 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16432 			d1 = Z_DVAL_P(op1);
16433 			d2 = (double)Z_LVAL_P(op2);
16434 			goto is_not_equal_double;
16435 		}
16436 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16437 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16438 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16439 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16440 				zval_ptr_dtor_str(op1);
16441 			}
16442 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16443 				zval_ptr_dtor_str(op2);
16444 			}
16445 			if (!result) {
16446 				goto is_not_equal_true;
16447 			} else {
16448 				goto is_not_equal_false;
16449 			}
16450 		}
16451 	}
16452 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16453 }
16454 
ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16455 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16456 {
16457 	USE_OPLINE
16458 	zval *op1, *op2;
16459 
16460 	SAVE_OPLINE();
16461 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16462 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16463 	compare_function(EX_VAR(opline->result.var), op1, op2);
16464 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16465 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16466 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16467 }
16468 
ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16469 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16470 {
16471 	USE_OPLINE
16472 	zval *op1, *op2;
16473 
16474 	SAVE_OPLINE();
16475 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16476 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16477 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
16478 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16479 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16480 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16481 }
16482 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16483 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16484 {
16485 	USE_OPLINE
16486 	zval *container, *dim, *value;
16487 
16488 	SAVE_OPLINE();
16489 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16490 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16491 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16492 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16493 fetch_dim_r_array:
16494 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
16495 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
16496 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
16497 			container = Z_REFVAL_P(container);
16498 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16499 				goto fetch_dim_r_array;
16500 			} else {
16501 				goto fetch_dim_r_slow;
16502 			}
16503 		} else {
16504 fetch_dim_r_slow:
16505 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
16506 				dim++;
16507 			}
16508 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
16509 		}
16510 	} else {
16511 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
16512 	}
16513 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16514 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16515 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16516 }
16517 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16518 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16519 {
16520 	USE_OPLINE
16521 	zval *container;
16522 
16523 	SAVE_OPLINE();
16524 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16525 	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);
16526 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16527 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16528 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16529 }
16530 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16531 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16532 {
16533 	USE_OPLINE
16534 	zval *container;
16535 	zval *offset;
16536 	void **cache_slot = NULL;
16537 
16538 	SAVE_OPLINE();
16539 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16540 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16541 
16542 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
16543 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
16544 	    do {
16545 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
16546 				container = Z_REFVAL_P(container);
16547 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
16548 					break;
16549 				}
16550 			}
16551 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
16552 				ZVAL_UNDEFINED_OP1();
16553 			}
16554 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
16555 				ZVAL_UNDEFINED_OP2();
16556 			}
16557 			zend_wrong_property_read(container, offset);
16558 			ZVAL_NULL(EX_VAR(opline->result.var));
16559 			goto fetch_obj_r_finish;
16560 		} while (0);
16561 	}
16562 
16563 	/* here we are sure we are dealing with an object */
16564 	do {
16565 		zend_object *zobj = Z_OBJ_P(container);
16566 		zend_string *name, *tmp_name;
16567 		zval *retval;
16568 
16569 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16570 			name = Z_STR_P(offset);
16571 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
16572 
16573 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
16574 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
16575 
16576 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
16577 					retval = OBJ_PROP(zobj, prop_offset);
16578 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
16579 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16580 							goto fetch_obj_r_copy;
16581 						} else {
16582 fetch_obj_r_fast_copy:
16583 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16584 							ZEND_VM_NEXT_OPCODE();
16585 						}
16586 					}
16587 				} else if (EXPECTED(zobj->properties != NULL)) {
16588 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
16589 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
16590 
16591 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
16592 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
16593 
16594 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16595 						        (EXPECTED(p->key == name) ||
16596 						         (EXPECTED(p->h == ZSTR_H(name)) &&
16597 						          EXPECTED(p->key != NULL) &&
16598 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
16599 								retval = &p->val;
16600 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16601 									goto fetch_obj_r_copy;
16602 								} else {
16603 									goto fetch_obj_r_fast_copy;
16604 								}
16605 							}
16606 						}
16607 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
16608 					}
16609 					retval = zend_hash_find_ex(zobj->properties, name, 1);
16610 					if (EXPECTED(retval)) {
16611 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
16612 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
16613 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16614 							goto fetch_obj_r_copy;
16615 						} else {
16616 							goto fetch_obj_r_fast_copy;
16617 						}
16618 					}
16619 				}
16620 			}
16621 		} else {
16622 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
16623 				ZVAL_UNDEFINED_OP2();
16624 			}
16625 			name = zval_try_get_tmp_string(offset, &tmp_name);
16626 			if (UNEXPECTED(!name)) {
16627 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16628 				break;
16629 			}
16630 		}
16631 
16632 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
16633 
16634 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16635 			zend_tmp_string_release(tmp_name);
16636 		}
16637 
16638 		if (retval != EX_VAR(opline->result.var)) {
16639 fetch_obj_r_copy:
16640 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16641 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
16642 			zend_unwrap_reference(retval);
16643 		}
16644 	} while (0);
16645 
16646 fetch_obj_r_finish:
16647 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16648 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16649 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16650 }
16651 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16652 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16653 {
16654 	USE_OPLINE
16655 	zval *container;
16656 	zval *offset;
16657 	void **cache_slot = NULL;
16658 
16659 	SAVE_OPLINE();
16660 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16661 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16662 
16663 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
16664 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
16665 		do {
16666 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
16667 				container = Z_REFVAL_P(container);
16668 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
16669 					break;
16670 				}
16671 			}
16672 			ZVAL_NULL(EX_VAR(opline->result.var));
16673 			goto fetch_obj_is_finish;
16674 		} while (0);
16675 	}
16676 
16677 	/* here we are sure we are dealing with an object */
16678 	do {
16679 		zend_object *zobj = Z_OBJ_P(container);
16680 		zend_string *name, *tmp_name;
16681 		zval *retval;
16682 
16683 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16684 			name = Z_STR_P(offset);
16685 			cache_slot = CACHE_ADDR(opline->extended_value);
16686 
16687 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
16688 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
16689 
16690 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
16691 					retval = OBJ_PROP(zobj, prop_offset);
16692 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
16693 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16694 							goto fetch_obj_is_copy;
16695 						} else {
16696 fetch_obj_is_fast_copy:
16697 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16698 							ZEND_VM_NEXT_OPCODE();
16699 						}
16700 					}
16701 				} else if (EXPECTED(zobj->properties != NULL)) {
16702 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
16703 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
16704 
16705 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
16706 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
16707 
16708 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16709 						        (EXPECTED(p->key == name) ||
16710 						         (EXPECTED(p->h == ZSTR_H(name)) &&
16711 						          EXPECTED(p->key != NULL) &&
16712 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
16713 								retval = &p->val;
16714 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16715 									goto fetch_obj_is_copy;
16716 								} else {
16717 									goto fetch_obj_is_fast_copy;
16718 								}
16719 							}
16720 						}
16721 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
16722 					}
16723 					retval = zend_hash_find_ex(zobj->properties, name, 1);
16724 					if (EXPECTED(retval)) {
16725 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
16726 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
16727 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16728 							goto fetch_obj_is_copy;
16729 						} else {
16730 							goto fetch_obj_is_fast_copy;
16731 						}
16732 					}
16733 				}
16734 			}
16735 		} else {
16736 			name = zval_try_get_tmp_string(offset, &tmp_name);
16737 			if (UNEXPECTED(!name)) {
16738 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16739 				break;
16740 			}
16741 		}
16742 
16743 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
16744 
16745 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16746 			zend_tmp_string_release(tmp_name);
16747 		}
16748 
16749 		if (retval != EX_VAR(opline->result.var)) {
16750 fetch_obj_is_copy:
16751 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16752 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
16753 			zend_unwrap_reference(retval);
16754 		}
16755 	} while (0);
16756 
16757 fetch_obj_is_finish:
16758 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16759 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16760 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16761 }
16762 
ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16763 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16764 {
16765 	USE_OPLINE
16766 	zval *op1, *op2;
16767 	zend_string *op1_str, *op2_str, *str;
16768 
16769 
16770 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16771 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16772 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
16773 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
16774 		zend_string *op1_str = Z_STR_P(op1);
16775 		zend_string *op2_str = Z_STR_P(op2);
16776 		zend_string *str;
16777 
16778 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16779 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16780 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
16781 			} else {
16782 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16783 			}
16784 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16785 				zend_string_release_ex(op1_str, 0);
16786 			}
16787 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16788 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16789 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
16790 			} else {
16791 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16792 			}
16793 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16794 				zend_string_release_ex(op2_str, 0);
16795 			}
16796 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
16797 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
16798 		    size_t len = ZSTR_LEN(op1_str);
16799 
16800 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
16801 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16802 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16803 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16804 				zend_string_release_ex(op2_str, 0);
16805 			}
16806 		} else {
16807 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16808 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16809 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16810 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16811 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16812 				zend_string_release_ex(op1_str, 0);
16813 			}
16814 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16815 				zend_string_release_ex(op2_str, 0);
16816 			}
16817 		}
16818 		ZEND_VM_NEXT_OPCODE();
16819 	}
16820 
16821 	SAVE_OPLINE();
16822 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16823 		op1_str = Z_STR_P(op1);
16824 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16825 		op1_str = zend_string_copy(Z_STR_P(op1));
16826 	} else {
16827 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16828 			ZVAL_UNDEFINED_OP1();
16829 		}
16830 		op1_str = zval_get_string_func(op1);
16831 	}
16832 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16833 		op2_str = Z_STR_P(op2);
16834 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16835 		op2_str = zend_string_copy(Z_STR_P(op2));
16836 	} else {
16837 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
16838 			ZVAL_UNDEFINED_OP2();
16839 		}
16840 		op2_str = zval_get_string_func(op2);
16841 	}
16842 	do {
16843 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16844 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16845 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16846 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
16847 						GC_ADDREF(op2_str);
16848 					}
16849 				}
16850 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16851 				zend_string_release_ex(op1_str, 0);
16852 				break;
16853 			}
16854 		}
16855 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16856 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16857 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16858 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
16859 						GC_ADDREF(op1_str);
16860 					}
16861 				}
16862 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16863 				zend_string_release_ex(op2_str, 0);
16864 				break;
16865 			}
16866 		}
16867 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16868 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16869 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16870 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16871 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16872 			zend_string_release_ex(op1_str, 0);
16873 		}
16874 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16875 			zend_string_release_ex(op2_str, 0);
16876 		}
16877 	} while (0);
16878 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16879 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16880 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16881 }
16882 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16883 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16884 {
16885 	USE_OPLINE
16886 	zval *function_name;
16887 	zval *object;
16888 	zend_function *fbc;
16889 	zend_class_entry *called_scope;
16890 	zend_object *obj;
16891 	zend_execute_data *call;
16892 	uint32_t call_info;
16893 
16894 	SAVE_OPLINE();
16895 
16896 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16897 
16898 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16899 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16900 	}
16901 
16902 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
16903 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
16904 		do {
16905 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
16906 				function_name = Z_REFVAL_P(function_name);
16907 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
16908 					break;
16909 				}
16910 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
16911 				ZVAL_UNDEFINED_OP2();
16912 				if (UNEXPECTED(EG(exception) != NULL)) {
16913 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16914 					HANDLE_EXCEPTION();
16915 				}
16916 			}
16917 			zend_throw_error(NULL, "Method name must be a string");
16918 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16919 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16920 			HANDLE_EXCEPTION();
16921 		} while (0);
16922 	}
16923 
16924 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
16925 		obj = Z_OBJ_P(object);
16926 	} else {
16927 		do {
16928 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
16929 				obj = Z_OBJ_P(object);
16930 			} else {
16931 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
16932 					zend_reference *ref = Z_REF_P(object);
16933 
16934 					object = &ref->val;
16935 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
16936 						obj = Z_OBJ_P(object);
16937 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
16938 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
16939 								efree_size(ref, sizeof(zend_reference));
16940 							} else {
16941 								Z_ADDREF_P(object);
16942 							}
16943 						}
16944 						break;
16945 					}
16946 				}
16947 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
16948 					object = ZVAL_UNDEFINED_OP1();
16949 					if (UNEXPECTED(EG(exception) != NULL)) {
16950 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16951 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16952 						}
16953 						HANDLE_EXCEPTION();
16954 					}
16955 				}
16956 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16957 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16958 				}
16959 				zend_invalid_method_call(object, function_name);
16960 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16961 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16962 				HANDLE_EXCEPTION();
16963 			}
16964 		} while (0);
16965 	}
16966 
16967 	called_scope = obj->ce;
16968 
16969 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
16970 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
16971 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
16972 	} else {
16973 	    zend_object *orig_obj = obj;
16974 
16975 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16976 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16977 		}
16978 
16979 		/* First, locate the function. */
16980 		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));
16981 		if (UNEXPECTED(fbc == NULL)) {
16982 			if (EXPECTED(!EG(exception))) {
16983 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
16984 			}
16985 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16986 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
16987 				zend_objects_store_del(orig_obj);
16988 			}
16989 			HANDLE_EXCEPTION();
16990 		}
16991 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
16992 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
16993 		    EXPECTED(obj == orig_obj)) {
16994 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
16995 		}
16996 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
16997 			GC_ADDREF(obj); /* For $this pointer */
16998 			if (GC_DELREF(orig_obj) == 0) {
16999 				zend_objects_store_del(orig_obj);
17000 			}
17001 		}
17002 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
17003 			init_func_run_time_cache(&fbc->op_array);
17004 		}
17005 	}
17006 
17007 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17008 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17009 	}
17010 
17011 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
17012 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
17013 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
17014 			zend_objects_store_del(obj);
17015 			if (UNEXPECTED(EG(exception))) {
17016 				HANDLE_EXCEPTION();
17017 			}
17018 		}
17019 		/* call static method */
17020 		obj = (zend_object*)called_scope;
17021 		call_info = ZEND_CALL_NESTED_FUNCTION;
17022 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
17023 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
17024 			GC_ADDREF(obj); /* For $this pointer */
17025 		}
17026 		/* CV may be changed indirectly (e.g. when it's a reference) */
17027 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
17028 	}
17029 
17030 	call = zend_vm_stack_push_call_frame(call_info,
17031 		fbc, opline->extended_value, obj);
17032 	call->prev_execute_data = EX(call);
17033 	EX(call) = call;
17034 
17035 	ZEND_VM_NEXT_OPCODE();
17036 }
17037 
ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17038 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17039 {
17040 	USE_OPLINE
17041 	zval *op1, *op2;
17042 	double d1, d2;
17043 
17044 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17045 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17046 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17047 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17048 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
17049 case_true:
17050 				ZEND_VM_SMART_BRANCH_TRUE();
17051 			} else {
17052 case_false:
17053 				ZEND_VM_SMART_BRANCH_FALSE();
17054 			}
17055 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17056 			d1 = (double)Z_LVAL_P(op1);
17057 			d2 = Z_DVAL_P(op2);
17058 			goto case_double;
17059 		}
17060 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17061 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17062 			d1 = Z_DVAL_P(op1);
17063 			d2 = Z_DVAL_P(op2);
17064 case_double:
17065 			if (d1 == d2) {
17066 				goto case_true;
17067 			} else {
17068 				goto case_false;
17069 			}
17070 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17071 			d1 = Z_DVAL_P(op1);
17072 			d2 = (double)Z_LVAL_P(op2);
17073 			goto case_double;
17074 		}
17075 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17076 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17077 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17078 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17079 			if (result) {
17080 				goto case_true;
17081 			} else {
17082 				goto case_false;
17083 			}
17084 		}
17085 	}
17086 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17087 }
17088 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17089 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17090 {
17091 	USE_OPLINE
17092 	zval *container;
17093 	bool result;
17094 	zend_ulong hval;
17095 	zval *offset;
17096 
17097 	SAVE_OPLINE();
17098 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17099 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17100 
17101 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17102 		HashTable *ht;
17103 		zval *value;
17104 		zend_string *str;
17105 
17106 isset_dim_obj_array:
17107 		ht = Z_ARRVAL_P(container);
17108 isset_again:
17109 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
17110 			str = Z_STR_P(offset);
17111 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17112 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
17113 					goto num_index_prop;
17114 				}
17115 			}
17116 			value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
17117 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
17118 			hval = Z_LVAL_P(offset);
17119 num_index_prop:
17120 			value = zend_hash_index_find(ht, hval);
17121 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
17122 			offset = Z_REFVAL_P(offset);
17123 			goto isset_again;
17124 		} else {
17125 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
17126 			if (UNEXPECTED(EG(exception))) {
17127 				result = 0;
17128 				goto isset_dim_obj_exit;
17129 			}
17130 		}
17131 
17132 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
17133 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
17134 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
17135 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
17136 
17137 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
17138 				/* avoid exception check */
17139 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17140 				ZEND_VM_SMART_BRANCH(result, 0);
17141 			}
17142 		} else {
17143 			result = (value == NULL || !i_zend_is_true(value));
17144 		}
17145 		goto isset_dim_obj_exit;
17146 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
17147 		container = Z_REFVAL_P(container);
17148 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17149 			goto isset_dim_obj_array;
17150 		}
17151 	}
17152 
17153 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
17154 		offset++;
17155 	}
17156 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
17157 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
17158 	} else {
17159 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
17160 	}
17161 
17162 isset_dim_obj_exit:
17163 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17164 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17165 	ZEND_VM_SMART_BRANCH(result, 1);
17166 }
17167 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17168 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17169 {
17170 	USE_OPLINE
17171 	zval *container;
17172 	int result;
17173 	zval *offset;
17174 	zend_string *name, *tmp_name;
17175 
17176 	SAVE_OPLINE();
17177 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17178 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17179 
17180 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17181 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17182 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17183 			container = Z_REFVAL_P(container);
17184 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
17185 				result = (opline->extended_value & ZEND_ISEMPTY);
17186 				goto isset_object_finish;
17187 			}
17188 		} else {
17189 			result = (opline->extended_value & ZEND_ISEMPTY);
17190 			goto isset_object_finish;
17191 		}
17192 	}
17193 
17194 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17195 		name = Z_STR_P(offset);
17196 	} else {
17197 		name = zval_try_get_tmp_string(offset, &tmp_name);
17198 		if (UNEXPECTED(!name)) {
17199 			result = 0;
17200 			goto isset_object_finish;
17201 		}
17202 	}
17203 
17204 	result =
17205 		(opline->extended_value & ZEND_ISEMPTY) ^
17206 		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));
17207 
17208 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17209 		zend_tmp_string_release(tmp_name);
17210 	}
17211 
17212 isset_object_finish:
17213 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17214 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17215 	ZEND_VM_SMART_BRANCH(result, 1);
17216 }
17217 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17218 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17219 {
17220 	USE_OPLINE
17221 
17222 	zval *key, *subject;
17223 	HashTable *ht;
17224 	zend_bool result;
17225 
17226 	SAVE_OPLINE();
17227 
17228 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17229 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17230 
17231 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
17232 array_key_exists_array:
17233 		ht = Z_ARRVAL_P(subject);
17234 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
17235 	} else {
17236 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
17237 			subject = Z_REFVAL_P(subject);
17238 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
17239 				goto array_key_exists_array;
17240 			}
17241 		}
17242 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
17243 		result = 0;
17244 	}
17245 
17246 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17247 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17248 	ZEND_VM_SMART_BRANCH(result, 1);
17249 }
17250 
17251 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17252 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17253 {
17254 	USE_OPLINE
17255 	zval *expr;
17256 	zend_bool result;
17257 
17258 	SAVE_OPLINE();
17259 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17260 
17261 try_instanceof:
17262 	if (Z_TYPE_P(expr) == IS_OBJECT) {
17263 		zend_class_entry *ce;
17264 
17265 		if (IS_VAR == IS_CONST) {
17266 			ce = CACHED_PTR(opline->extended_value);
17267 			if (UNEXPECTED(ce == NULL)) {
17268 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
17269 				if (EXPECTED(ce)) {
17270 					CACHE_PTR(opline->extended_value, ce);
17271 				}
17272 			}
17273 		} else if (IS_VAR == IS_UNUSED) {
17274 			ce = zend_fetch_class(NULL, opline->op2.num);
17275 			if (UNEXPECTED(ce == NULL)) {
17276 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17277 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17278 				HANDLE_EXCEPTION();
17279 			}
17280 		} else {
17281 			ce = Z_CE_P(EX_VAR(opline->op2.var));
17282 		}
17283 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
17284 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
17285 		expr = Z_REFVAL_P(expr);
17286 		goto try_instanceof;
17287 	} else {
17288 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
17289 			ZVAL_UNDEFINED_OP1();
17290 		}
17291 		result = 0;
17292 	}
17293 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17294 	ZEND_VM_SMART_BRANCH(result, 1);
17295 }
17296 
zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)17297 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)
17298 {
17299 	USE_OPLINE
17300 	zval *varname;
17301 	zval *retval;
17302 	zend_string *name, *tmp_name;
17303 	HashTable *target_symbol_table;
17304 
17305 	SAVE_OPLINE();
17306 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17307 
17308 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17309 		name = Z_STR_P(varname);
17310 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
17311 		name = Z_STR_P(varname);
17312 		tmp_name = NULL;
17313 	} else {
17314 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
17315 			ZVAL_UNDEFINED_OP1();
17316 		}
17317 		name = zval_try_get_tmp_string(varname, &tmp_name);
17318 		if (UNEXPECTED(!name)) {
17319 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
17320 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17321 			}
17322 			ZVAL_UNDEF(EX_VAR(opline->result.var));
17323 			HANDLE_EXCEPTION();
17324 		}
17325 	}
17326 
17327 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
17328 	retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
17329 	if (retval == NULL) {
17330 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
17331 fetch_this:
17332 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
17333 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17334 				zend_tmp_string_release(tmp_name);
17335 			}
17336 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17337 		}
17338 		if (type == BP_VAR_W) {
17339 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
17340 		} else if (type == BP_VAR_IS) {
17341 			retval = &EG(uninitialized_zval);
17342 		} else {
17343 			zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(name));
17344 			if (type == BP_VAR_RW) {
17345 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
17346 			} else {
17347 				retval = &EG(uninitialized_zval);
17348 			}
17349 		}
17350 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
17351 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
17352 		retval = Z_INDIRECT_P(retval);
17353 		if (Z_TYPE_P(retval) == IS_UNDEF) {
17354 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
17355 				goto fetch_this;
17356 			}
17357 			if (type == BP_VAR_W) {
17358 				ZVAL_NULL(retval);
17359 			} else if (type == BP_VAR_IS) {
17360 				retval = &EG(uninitialized_zval);
17361 			} else {
17362 				zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(name));
17363 				if (type == BP_VAR_RW) {
17364 					ZVAL_NULL(retval);
17365 				} else {
17366 					retval = &EG(uninitialized_zval);
17367 				}
17368 			}
17369 		}
17370 	}
17371 
17372 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
17373 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17374 	}
17375 
17376 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17377 		zend_tmp_string_release(tmp_name);
17378 	}
17379 
17380 	ZEND_ASSERT(retval != NULL);
17381 	if (type == BP_VAR_R || type == BP_VAR_IS) {
17382 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17383 	} else {
17384 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
17385 	}
17386 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17387 }
17388 
ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17389 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17390 {
17391 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17392 }
17393 
ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17395 {
17396 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17397 }
17398 
ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17399 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17400 {
17401 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17402 }
17403 
ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17405 {
17406 	int fetch_type =
17407 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
17408 			BP_VAR_W : BP_VAR_R;
17409 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17410 }
17411 
ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17412 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17413 {
17414 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17415 }
17416 
ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17417 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17418 {
17419 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17420 }
17421 
17422 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17423 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17424 {
17425 	USE_OPLINE
17426 	zval *value, *arg;
17427 
17428 	if (IS_UNUSED == IS_CONST) {
17429 		SAVE_OPLINE();
17430 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
17431 		uint32_t arg_num;
17432 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
17433 		if (UNEXPECTED(!arg)) {
17434 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17435 			HANDLE_EXCEPTION();
17436 		}
17437 	} else {
17438 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
17439 	}
17440 
17441 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17442 	ZVAL_COPY_VALUE(arg, value);
17443 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17444 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
17445 			Z_ADDREF_P(arg);
17446 		}
17447 	}
17448 	ZEND_VM_NEXT_OPCODE();
17449 }
17450 
ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17451 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17452 {
17453 	USE_OPLINE
17454 	zval *varname;
17455 	zend_string *name, *tmp_name;
17456 	HashTable *target_symbol_table;
17457 
17458 	SAVE_OPLINE();
17459 
17460 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17461 
17462 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17463 		name = Z_STR_P(varname);
17464 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
17465 		name = Z_STR_P(varname);
17466 		tmp_name = NULL;
17467 	} else {
17468 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
17469 			varname = ZVAL_UNDEFINED_OP1();
17470 		}
17471 		name = zval_try_get_tmp_string(varname, &tmp_name);
17472 		if (UNEXPECTED(!name)) {
17473 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17474 			HANDLE_EXCEPTION();
17475 		}
17476 	}
17477 
17478 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
17479 	zend_hash_del_ind(target_symbol_table, name);
17480 
17481 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17482 		zend_tmp_string_release(tmp_name);
17483 	}
17484 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17485 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17486 }
17487 
17488 /* 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)17489 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17490 {
17491 	USE_OPLINE
17492 	zval *value;
17493 	/* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
17494 	int result;
17495 	zval *varname;
17496 	zend_string *name, *tmp_name;
17497 	HashTable *target_symbol_table;
17498 
17499 	SAVE_OPLINE();
17500 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17501 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17502 		name = Z_STR_P(varname);
17503 	} else {
17504 		name = zval_get_tmp_string(varname, &tmp_name);
17505 	}
17506 
17507 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
17508 	value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
17509 
17510 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17511 		zend_tmp_string_release(tmp_name);
17512 	}
17513 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17514 
17515 	if (!value) {
17516 		result = (opline->extended_value & ZEND_ISEMPTY);
17517 	} else {
17518 		if (Z_TYPE_P(value) == IS_INDIRECT) {
17519 			value = Z_INDIRECT_P(value);
17520 		}
17521 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
17522 			if (Z_ISREF_P(value)) {
17523 				value = Z_REFVAL_P(value);
17524 			}
17525 			result = Z_TYPE_P(value) > IS_NULL;
17526 		} else {
17527 			result = !i_zend_is_true(value);
17528 		}
17529 	}
17530 
17531 	ZEND_VM_SMART_BRANCH(result, 1);
17532 }
17533 
17534 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17535 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17536 {
17537 	USE_OPLINE
17538 	zval *expr;
17539 	zend_bool result;
17540 
17541 	SAVE_OPLINE();
17542 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17543 
17544 try_instanceof:
17545 	if (Z_TYPE_P(expr) == IS_OBJECT) {
17546 		zend_class_entry *ce;
17547 
17548 		if (IS_UNUSED == IS_CONST) {
17549 			ce = CACHED_PTR(opline->extended_value);
17550 			if (UNEXPECTED(ce == NULL)) {
17551 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
17552 				if (EXPECTED(ce)) {
17553 					CACHE_PTR(opline->extended_value, ce);
17554 				}
17555 			}
17556 		} else if (IS_UNUSED == IS_UNUSED) {
17557 			ce = zend_fetch_class(NULL, opline->op2.num);
17558 			if (UNEXPECTED(ce == NULL)) {
17559 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17560 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17561 				HANDLE_EXCEPTION();
17562 			}
17563 		} else {
17564 			ce = Z_CE_P(EX_VAR(opline->op2.var));
17565 		}
17566 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
17567 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
17568 		expr = Z_REFVAL_P(expr);
17569 		goto try_instanceof;
17570 	} else {
17571 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
17572 			ZVAL_UNDEFINED_OP1();
17573 		}
17574 		result = 0;
17575 	}
17576 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17577 	ZEND_VM_SMART_BRANCH(result, 1);
17578 }
17579 
ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17580 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17581 {
17582 	USE_OPLINE
17583 	zval *op1;
17584 	zend_long count;
17585 
17586 	SAVE_OPLINE();
17587 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17588 
17589 	while (1) {
17590 		if (Z_TYPE_P(op1) == IS_ARRAY) {
17591 			count = zend_array_count(Z_ARRVAL_P(op1));
17592 			break;
17593 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
17594 			zend_object *zobj = Z_OBJ_P(op1);
17595 
17596 			/* first, we check if the handler is defined */
17597 			if (zobj->handlers->count_elements) {
17598 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
17599 					break;
17600 				}
17601 				if (UNEXPECTED(EG(exception))) {
17602 					count = 0;
17603 					break;
17604 				}
17605 			}
17606 
17607 			/* if not and the object implements Countable we call its count() method */
17608 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
17609 				zval retval;
17610 
17611 				zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
17612 				count = zval_get_long(&retval);
17613 				zval_ptr_dtor(&retval);
17614 				break;
17615 			}
17616 
17617 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
17618 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
17619 			op1 = Z_REFVAL_P(op1);
17620 			continue;
17621 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17622 			ZVAL_UNDEFINED_OP1();
17623 		}
17624 		count = 0;
17625 		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));
17626 		break;
17627 	}
17628 
17629 	ZVAL_LONG(EX_VAR(opline->result.var), count);
17630 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17631 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17632 }
17633 
ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17634 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17635 {
17636 	USE_OPLINE
17637 
17638 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
17639 		if (UNEXPECTED(!EX(func)->common.scope)) {
17640 			SAVE_OPLINE();
17641 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
17642 			ZVAL_UNDEF(EX_VAR(opline->result.var));
17643 			HANDLE_EXCEPTION();
17644 		} else {
17645 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
17646 			ZEND_VM_NEXT_OPCODE();
17647 		}
17648 	} else {
17649 		zval *op1;
17650 
17651 		SAVE_OPLINE();
17652 		op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17653 		while (1) {
17654 			if (Z_TYPE_P(op1) == IS_OBJECT) {
17655 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
17656 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
17657 				op1 = Z_REFVAL_P(op1);
17658 				continue;
17659 			} else {
17660 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17661 					ZVAL_UNDEFINED_OP1();
17662 				}
17663 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
17664 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17665 			}
17666 			break;
17667 		}
17668 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17669 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17670 	}
17671 }
17672 
ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17673 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17674 {
17675 	USE_OPLINE
17676 	zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17677 	zval *result = EX_VAR(opline->result.var);
17678 	ZVAL_COPY(result, value);
17679 	ZEND_VM_NEXT_OPCODE();
17680 }
17681 
ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17683 {
17684 	USE_OPLINE
17685 	zval *op1, *op2;
17686 
17687 	SAVE_OPLINE();
17688 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17689 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
17690 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
17691 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17692 
17693 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17694 }
17695 
ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17696 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17697 {
17698 	USE_OPLINE
17699 	zval *op1, *op2;
17700 
17701 	SAVE_OPLINE();
17702 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17703 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
17704 	pow_function(EX_VAR(opline->result.var), op1, op2);
17705 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17706 
17707 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17708 }
17709 
ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17710 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17711 {
17712 	USE_OPLINE
17713 	zval *op1, *op2;
17714 
17715 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17716 	op2 = EX_VAR(opline->op2.var);
17717 
17718 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
17719 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
17720 		zend_string *op1_str = Z_STR_P(op1);
17721 		zend_string *op2_str = Z_STR_P(op2);
17722 		zend_string *str;
17723 
17724 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17725 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
17726 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
17727 			} else {
17728 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17729 			}
17730 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17731 				zend_string_release_ex(op1_str, 0);
17732 			}
17733 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17734 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17735 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
17736 			} else {
17737 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17738 			}
17739 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17740 				zend_string_release_ex(op2_str, 0);
17741 			}
17742 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
17743 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
17744 		    size_t len = ZSTR_LEN(op1_str);
17745 
17746 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
17747 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
17748 			}
17749 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
17750 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17751 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17752 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17753 				zend_string_release_ex(op2_str, 0);
17754 			}
17755 		} else {
17756 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17757 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17758 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17759 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17760 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17761 				zend_string_release_ex(op1_str, 0);
17762 			}
17763 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17764 				zend_string_release_ex(op2_str, 0);
17765 			}
17766 		}
17767 		ZEND_VM_NEXT_OPCODE();
17768 	} else {
17769 		SAVE_OPLINE();
17770 
17771 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17772 			op1 = ZVAL_UNDEFINED_OP1();
17773 		}
17774 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
17775 			op2 = ZVAL_UNDEFINED_OP2();
17776 		}
17777 		concat_function(EX_VAR(opline->result.var), op1, op2);
17778 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17779 
17780 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17781 	}
17782 }
17783 
ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17784 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17785 {
17786 	USE_OPLINE
17787 	zval *op1, *op2;
17788 
17789 	SAVE_OPLINE();
17790 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17791 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
17792 	compare_function(EX_VAR(opline->result.var), op1, op2);
17793 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17794 
17795 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17796 }
17797 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17798 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17799 {
17800 	USE_OPLINE
17801 	zval *container, *dim, *value;
17802 
17803 	SAVE_OPLINE();
17804 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17805 	dim = EX_VAR(opline->op2.var);
17806 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17807 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17808 fetch_dim_r_array:
17809 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
17810 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
17811 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
17812 			container = Z_REFVAL_P(container);
17813 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17814 				goto fetch_dim_r_array;
17815 			} else {
17816 				goto fetch_dim_r_slow;
17817 			}
17818 		} else {
17819 fetch_dim_r_slow:
17820 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
17821 				dim++;
17822 			}
17823 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
17824 		}
17825 	} else {
17826 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
17827 	}
17828 
17829 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17830 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17831 }
17832 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17833 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17834 {
17835 	USE_OPLINE
17836 	zval *container;
17837 
17838 	SAVE_OPLINE();
17839 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17840 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
17841 
17842 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17843 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17844 }
17845 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17847 {
17848 	USE_OPLINE
17849 	zval *container;
17850 	zval *offset;
17851 	void **cache_slot = NULL;
17852 
17853 	SAVE_OPLINE();
17854 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17855 	offset = EX_VAR(opline->op2.var);
17856 
17857 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17858 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17859 	    do {
17860 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17861 				container = Z_REFVAL_P(container);
17862 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
17863 					break;
17864 				}
17865 			}
17866 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
17867 				ZVAL_UNDEFINED_OP1();
17868 			}
17869 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
17870 				ZVAL_UNDEFINED_OP2();
17871 			}
17872 			zend_wrong_property_read(container, offset);
17873 			ZVAL_NULL(EX_VAR(opline->result.var));
17874 			goto fetch_obj_r_finish;
17875 		} while (0);
17876 	}
17877 
17878 	/* here we are sure we are dealing with an object */
17879 	do {
17880 		zend_object *zobj = Z_OBJ_P(container);
17881 		zend_string *name, *tmp_name;
17882 		zval *retval;
17883 
17884 		if (IS_CV == IS_CONST) {
17885 			name = Z_STR_P(offset);
17886 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
17887 
17888 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
17889 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
17890 
17891 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
17892 					retval = OBJ_PROP(zobj, prop_offset);
17893 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
17894 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17895 							goto fetch_obj_r_copy;
17896 						} else {
17897 fetch_obj_r_fast_copy:
17898 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17899 							ZEND_VM_NEXT_OPCODE();
17900 						}
17901 					}
17902 				} else if (EXPECTED(zobj->properties != NULL)) {
17903 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
17904 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
17905 
17906 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
17907 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
17908 
17909 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
17910 						        (EXPECTED(p->key == name) ||
17911 						         (EXPECTED(p->h == ZSTR_H(name)) &&
17912 						          EXPECTED(p->key != NULL) &&
17913 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
17914 								retval = &p->val;
17915 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17916 									goto fetch_obj_r_copy;
17917 								} else {
17918 									goto fetch_obj_r_fast_copy;
17919 								}
17920 							}
17921 						}
17922 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
17923 					}
17924 					retval = zend_hash_find_ex(zobj->properties, name, 1);
17925 					if (EXPECTED(retval)) {
17926 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
17927 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
17928 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17929 							goto fetch_obj_r_copy;
17930 						} else {
17931 							goto fetch_obj_r_fast_copy;
17932 						}
17933 					}
17934 				}
17935 			}
17936 		} else {
17937 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
17938 				ZVAL_UNDEFINED_OP2();
17939 			}
17940 			name = zval_try_get_tmp_string(offset, &tmp_name);
17941 			if (UNEXPECTED(!name)) {
17942 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17943 				break;
17944 			}
17945 		}
17946 
17947 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
17948 
17949 		if (IS_CV != IS_CONST) {
17950 			zend_tmp_string_release(tmp_name);
17951 		}
17952 
17953 		if (retval != EX_VAR(opline->result.var)) {
17954 fetch_obj_r_copy:
17955 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17956 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
17957 			zend_unwrap_reference(retval);
17958 		}
17959 	} while (0);
17960 
17961 fetch_obj_r_finish:
17962 
17963 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17964 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17965 }
17966 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17967 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17968 {
17969 	USE_OPLINE
17970 	zval *container;
17971 	zval *offset;
17972 	void **cache_slot = NULL;
17973 
17974 	SAVE_OPLINE();
17975 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17976 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
17977 
17978 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17979 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17980 		do {
17981 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17982 				container = Z_REFVAL_P(container);
17983 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
17984 					break;
17985 				}
17986 			}
17987 			ZVAL_NULL(EX_VAR(opline->result.var));
17988 			goto fetch_obj_is_finish;
17989 		} while (0);
17990 	}
17991 
17992 	/* here we are sure we are dealing with an object */
17993 	do {
17994 		zend_object *zobj = Z_OBJ_P(container);
17995 		zend_string *name, *tmp_name;
17996 		zval *retval;
17997 
17998 		if (IS_CV == IS_CONST) {
17999 			name = Z_STR_P(offset);
18000 			cache_slot = CACHE_ADDR(opline->extended_value);
18001 
18002 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
18003 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
18004 
18005 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
18006 					retval = OBJ_PROP(zobj, prop_offset);
18007 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
18008 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18009 							goto fetch_obj_is_copy;
18010 						} else {
18011 fetch_obj_is_fast_copy:
18012 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18013 							ZEND_VM_NEXT_OPCODE();
18014 						}
18015 					}
18016 				} else if (EXPECTED(zobj->properties != NULL)) {
18017 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
18018 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
18019 
18020 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
18021 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
18022 
18023 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
18024 						        (EXPECTED(p->key == name) ||
18025 						         (EXPECTED(p->h == ZSTR_H(name)) &&
18026 						          EXPECTED(p->key != NULL) &&
18027 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
18028 								retval = &p->val;
18029 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18030 									goto fetch_obj_is_copy;
18031 								} else {
18032 									goto fetch_obj_is_fast_copy;
18033 								}
18034 							}
18035 						}
18036 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
18037 					}
18038 					retval = zend_hash_find_ex(zobj->properties, name, 1);
18039 					if (EXPECTED(retval)) {
18040 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
18041 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
18042 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18043 							goto fetch_obj_is_copy;
18044 						} else {
18045 							goto fetch_obj_is_fast_copy;
18046 						}
18047 					}
18048 				}
18049 			}
18050 		} else {
18051 			name = zval_try_get_tmp_string(offset, &tmp_name);
18052 			if (UNEXPECTED(!name)) {
18053 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18054 				break;
18055 			}
18056 		}
18057 
18058 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
18059 
18060 		if (IS_CV != IS_CONST) {
18061 			zend_tmp_string_release(tmp_name);
18062 		}
18063 
18064 		if (retval != EX_VAR(opline->result.var)) {
18065 fetch_obj_is_copy:
18066 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18067 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
18068 			zend_unwrap_reference(retval);
18069 		}
18070 	} while (0);
18071 
18072 fetch_obj_is_finish:
18073 
18074 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18075 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18076 }
18077 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18078 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18079 {
18080 	USE_OPLINE
18081 	zval *op1, *op2;
18082 	zend_string *op1_str, *op2_str, *str;
18083 
18084 
18085 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18086 	op2 = EX_VAR(opline->op2.var);
18087 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
18088 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
18089 		zend_string *op1_str = Z_STR_P(op1);
18090 		zend_string *op2_str = Z_STR_P(op2);
18091 		zend_string *str;
18092 
18093 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
18094 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
18095 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
18096 			} else {
18097 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
18098 			}
18099 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18100 				zend_string_release_ex(op1_str, 0);
18101 			}
18102 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
18103 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
18104 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
18105 			} else {
18106 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
18107 			}
18108 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18109 				zend_string_release_ex(op2_str, 0);
18110 			}
18111 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
18112 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
18113 		    size_t len = ZSTR_LEN(op1_str);
18114 
18115 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
18116 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18117 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18118 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18119 				zend_string_release_ex(op2_str, 0);
18120 			}
18121 		} else {
18122 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
18123 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
18124 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18125 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18126 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18127 				zend_string_release_ex(op1_str, 0);
18128 			}
18129 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18130 				zend_string_release_ex(op2_str, 0);
18131 			}
18132 		}
18133 		ZEND_VM_NEXT_OPCODE();
18134 	}
18135 
18136 	SAVE_OPLINE();
18137 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18138 		op1_str = Z_STR_P(op1);
18139 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
18140 		op1_str = zend_string_copy(Z_STR_P(op1));
18141 	} else {
18142 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18143 			ZVAL_UNDEFINED_OP1();
18144 		}
18145 		op1_str = zval_get_string_func(op1);
18146 	}
18147 	if (IS_CV == IS_CONST) {
18148 		op2_str = Z_STR_P(op2);
18149 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
18150 		op2_str = zend_string_copy(Z_STR_P(op2));
18151 	} else {
18152 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
18153 			ZVAL_UNDEFINED_OP2();
18154 		}
18155 		op2_str = zval_get_string_func(op2);
18156 	}
18157 	do {
18158 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18159 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
18160 				if (IS_CV == IS_CONST) {
18161 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
18162 						GC_ADDREF(op2_str);
18163 					}
18164 				}
18165 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
18166 				zend_string_release_ex(op1_str, 0);
18167 				break;
18168 			}
18169 		}
18170 		if (IS_CV != IS_CONST) {
18171 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
18172 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18173 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
18174 						GC_ADDREF(op1_str);
18175 					}
18176 				}
18177 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
18178 				zend_string_release_ex(op2_str, 0);
18179 				break;
18180 			}
18181 		}
18182 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
18183 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
18184 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18185 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18186 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18187 			zend_string_release_ex(op1_str, 0);
18188 		}
18189 		if (IS_CV != IS_CONST) {
18190 			zend_string_release_ex(op2_str, 0);
18191 		}
18192 	} while (0);
18193 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18194 
18195 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18196 }
18197 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18198 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18199 {
18200 	USE_OPLINE
18201 	zval *function_name;
18202 	zval *object;
18203 	zend_function *fbc;
18204 	zend_class_entry *called_scope;
18205 	zend_object *obj;
18206 	zend_execute_data *call;
18207 	uint32_t call_info;
18208 
18209 	SAVE_OPLINE();
18210 
18211 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18212 
18213 	if (IS_CV != IS_CONST) {
18214 		function_name = EX_VAR(opline->op2.var);
18215 	}
18216 
18217 	if (IS_CV != IS_CONST &&
18218 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
18219 		do {
18220 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
18221 				function_name = Z_REFVAL_P(function_name);
18222 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
18223 					break;
18224 				}
18225 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
18226 				ZVAL_UNDEFINED_OP2();
18227 				if (UNEXPECTED(EG(exception) != NULL)) {
18228 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18229 					HANDLE_EXCEPTION();
18230 				}
18231 			}
18232 			zend_throw_error(NULL, "Method name must be a string");
18233 
18234 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18235 			HANDLE_EXCEPTION();
18236 		} while (0);
18237 	}
18238 
18239 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
18240 		obj = Z_OBJ_P(object);
18241 	} else {
18242 		do {
18243 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
18244 				obj = Z_OBJ_P(object);
18245 			} else {
18246 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
18247 					zend_reference *ref = Z_REF_P(object);
18248 
18249 					object = &ref->val;
18250 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
18251 						obj = Z_OBJ_P(object);
18252 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
18253 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
18254 								efree_size(ref, sizeof(zend_reference));
18255 							} else {
18256 								Z_ADDREF_P(object);
18257 							}
18258 						}
18259 						break;
18260 					}
18261 				}
18262 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
18263 					object = ZVAL_UNDEFINED_OP1();
18264 					if (UNEXPECTED(EG(exception) != NULL)) {
18265 						if (IS_CV != IS_CONST) {
18266 
18267 						}
18268 						HANDLE_EXCEPTION();
18269 					}
18270 				}
18271 				if (IS_CV == IS_CONST) {
18272 					function_name = EX_VAR(opline->op2.var);
18273 				}
18274 				zend_invalid_method_call(object, function_name);
18275 
18276 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18277 				HANDLE_EXCEPTION();
18278 			}
18279 		} while (0);
18280 	}
18281 
18282 	called_scope = obj->ce;
18283 
18284 	if (IS_CV == IS_CONST &&
18285 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
18286 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
18287 	} else {
18288 	    zend_object *orig_obj = obj;
18289 
18290 		if (IS_CV == IS_CONST) {
18291 			function_name = EX_VAR(opline->op2.var);
18292 		}
18293 
18294 		/* First, locate the function. */
18295 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
18296 		if (UNEXPECTED(fbc == NULL)) {
18297 			if (EXPECTED(!EG(exception))) {
18298 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
18299 			}
18300 
18301 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
18302 				zend_objects_store_del(orig_obj);
18303 			}
18304 			HANDLE_EXCEPTION();
18305 		}
18306 		if (IS_CV == IS_CONST &&
18307 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
18308 		    EXPECTED(obj == orig_obj)) {
18309 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
18310 		}
18311 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
18312 			GC_ADDREF(obj); /* For $this pointer */
18313 			if (GC_DELREF(orig_obj) == 0) {
18314 				zend_objects_store_del(orig_obj);
18315 			}
18316 		}
18317 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
18318 			init_func_run_time_cache(&fbc->op_array);
18319 		}
18320 	}
18321 
18322 	if (IS_CV != IS_CONST) {
18323 
18324 	}
18325 
18326 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
18327 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
18328 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
18329 			zend_objects_store_del(obj);
18330 			if (UNEXPECTED(EG(exception))) {
18331 				HANDLE_EXCEPTION();
18332 			}
18333 		}
18334 		/* call static method */
18335 		obj = (zend_object*)called_scope;
18336 		call_info = ZEND_CALL_NESTED_FUNCTION;
18337 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
18338 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
18339 			GC_ADDREF(obj); /* For $this pointer */
18340 		}
18341 		/* CV may be changed indirectly (e.g. when it's a reference) */
18342 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
18343 	}
18344 
18345 	call = zend_vm_stack_push_call_frame(call_info,
18346 		fbc, opline->extended_value, obj);
18347 	call->prev_execute_data = EX(call);
18348 	EX(call) = call;
18349 
18350 	ZEND_VM_NEXT_OPCODE();
18351 }
18352 
ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18353 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18354 {
18355 	USE_OPLINE
18356 	zval *op1, *op2;
18357 	double d1, d2;
18358 
18359 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18360 	op2 = EX_VAR(opline->op2.var);
18361 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
18362 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
18363 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
18364 case_true:
18365 				ZEND_VM_SMART_BRANCH_TRUE();
18366 			} else {
18367 case_false:
18368 				ZEND_VM_SMART_BRANCH_FALSE();
18369 			}
18370 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
18371 			d1 = (double)Z_LVAL_P(op1);
18372 			d2 = Z_DVAL_P(op2);
18373 			goto case_double;
18374 		}
18375 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
18376 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
18377 			d1 = Z_DVAL_P(op1);
18378 			d2 = Z_DVAL_P(op2);
18379 case_double:
18380 			if (d1 == d2) {
18381 				goto case_true;
18382 			} else {
18383 				goto case_false;
18384 			}
18385 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
18386 			d1 = Z_DVAL_P(op1);
18387 			d2 = (double)Z_LVAL_P(op2);
18388 			goto case_double;
18389 		}
18390 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
18391 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
18392 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
18393 
18394 			if (result) {
18395 				goto case_true;
18396 			} else {
18397 				goto case_false;
18398 			}
18399 		}
18400 	}
18401 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18402 }
18403 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18405 {
18406 	USE_OPLINE
18407 	zval *container;
18408 	bool result;
18409 	zend_ulong hval;
18410 	zval *offset;
18411 
18412 	SAVE_OPLINE();
18413 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18414 	offset = EX_VAR(opline->op2.var);
18415 
18416 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18417 		HashTable *ht;
18418 		zval *value;
18419 		zend_string *str;
18420 
18421 isset_dim_obj_array:
18422 		ht = Z_ARRVAL_P(container);
18423 isset_again:
18424 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
18425 			str = Z_STR_P(offset);
18426 			if (IS_CV != IS_CONST) {
18427 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
18428 					goto num_index_prop;
18429 				}
18430 			}
18431 			value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST);
18432 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
18433 			hval = Z_LVAL_P(offset);
18434 num_index_prop:
18435 			value = zend_hash_index_find(ht, hval);
18436 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
18437 			offset = Z_REFVAL_P(offset);
18438 			goto isset_again;
18439 		} else {
18440 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
18441 			if (UNEXPECTED(EG(exception))) {
18442 				result = 0;
18443 				goto isset_dim_obj_exit;
18444 			}
18445 		}
18446 
18447 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
18448 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
18449 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
18450 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
18451 
18452 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
18453 				/* avoid exception check */
18454 
18455 				ZEND_VM_SMART_BRANCH(result, 0);
18456 			}
18457 		} else {
18458 			result = (value == NULL || !i_zend_is_true(value));
18459 		}
18460 		goto isset_dim_obj_exit;
18461 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
18462 		container = Z_REFVAL_P(container);
18463 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18464 			goto isset_dim_obj_array;
18465 		}
18466 	}
18467 
18468 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
18469 		offset++;
18470 	}
18471 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
18472 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
18473 	} else {
18474 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
18475 	}
18476 
18477 isset_dim_obj_exit:
18478 
18479 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18480 	ZEND_VM_SMART_BRANCH(result, 1);
18481 }
18482 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18483 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18484 {
18485 	USE_OPLINE
18486 	zval *container;
18487 	int result;
18488 	zval *offset;
18489 	zend_string *name, *tmp_name;
18490 
18491 	SAVE_OPLINE();
18492 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18493 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
18494 
18495 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
18496 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18497 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18498 			container = Z_REFVAL_P(container);
18499 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
18500 				result = (opline->extended_value & ZEND_ISEMPTY);
18501 				goto isset_object_finish;
18502 			}
18503 		} else {
18504 			result = (opline->extended_value & ZEND_ISEMPTY);
18505 			goto isset_object_finish;
18506 		}
18507 	}
18508 
18509 	if (IS_CV == IS_CONST) {
18510 		name = Z_STR_P(offset);
18511 	} else {
18512 		name = zval_try_get_tmp_string(offset, &tmp_name);
18513 		if (UNEXPECTED(!name)) {
18514 			result = 0;
18515 			goto isset_object_finish;
18516 		}
18517 	}
18518 
18519 	result =
18520 		(opline->extended_value & ZEND_ISEMPTY) ^
18521 		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));
18522 
18523 	if (IS_CV != IS_CONST) {
18524 		zend_tmp_string_release(tmp_name);
18525 	}
18526 
18527 isset_object_finish:
18528 
18529 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18530 	ZEND_VM_SMART_BRANCH(result, 1);
18531 }
18532 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18533 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18534 {
18535 	USE_OPLINE
18536 
18537 	zval *key, *subject;
18538 	HashTable *ht;
18539 	zend_bool result;
18540 
18541 	SAVE_OPLINE();
18542 
18543 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18544 	subject = EX_VAR(opline->op2.var);
18545 
18546 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
18547 array_key_exists_array:
18548 		ht = Z_ARRVAL_P(subject);
18549 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
18550 	} else {
18551 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
18552 			subject = Z_REFVAL_P(subject);
18553 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
18554 				goto array_key_exists_array;
18555 			}
18556 		}
18557 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
18558 		result = 0;
18559 	}
18560 
18561 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18562 	ZEND_VM_SMART_BRANCH(result, 1);
18563 }
18564 
18565 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18566 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18567 {
18568 	USE_OPLINE
18569 	zval *retval_ptr;
18570 	zval *return_value;
18571 
18572 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18573 	return_value = EX(return_value);
18574 
18575 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
18576 		SAVE_OPLINE();
18577 		retval_ptr = ZVAL_UNDEFINED_OP1();
18578 		if (return_value) {
18579 			ZVAL_NULL(return_value);
18580 		}
18581 	} else if (!return_value) {
18582 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
18583 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
18584 				SAVE_OPLINE();
18585 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
18586 			}
18587 		}
18588 	} else {
18589 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
18590 			ZVAL_COPY_VALUE(return_value, retval_ptr);
18591 			if (IS_TMP_VAR == IS_CONST) {
18592 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
18593 					Z_ADDREF_P(return_value);
18594 				}
18595 			}
18596 		} else if (IS_TMP_VAR == IS_CV) {
18597 			do {
18598 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
18599 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
18600 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
18601 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
18602 							ZVAL_COPY_VALUE(return_value, retval_ptr);
18603 							if (GC_MAY_LEAK(ref)) {
18604 								SAVE_OPLINE();
18605 								gc_possible_root(ref);
18606 							}
18607 							ZVAL_NULL(retval_ptr);
18608 							break;
18609 						} else {
18610 							Z_ADDREF_P(retval_ptr);
18611 						}
18612 					} else {
18613 						retval_ptr = Z_REFVAL_P(retval_ptr);
18614 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
18615 							Z_ADDREF_P(retval_ptr);
18616 						}
18617 					}
18618 				}
18619 				ZVAL_COPY_VALUE(return_value, retval_ptr);
18620 			} while (0);
18621 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
18622 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
18623 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
18624 
18625 				retval_ptr = Z_REFVAL_P(retval_ptr);
18626 				ZVAL_COPY_VALUE(return_value, retval_ptr);
18627 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
18628 					efree_size(ref, sizeof(zend_reference));
18629 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
18630 					Z_ADDREF_P(retval_ptr);
18631 				}
18632 			} else {
18633 				ZVAL_COPY_VALUE(return_value, retval_ptr);
18634 			}
18635 		}
18636 	}
18637 
18638 
18639 
18640 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18641 }
18642 
ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18643 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18644 {
18645 	USE_OPLINE
18646 	zval *retval_ptr;
18647 	zval *return_value;
18648 
18649 	SAVE_OPLINE();
18650 
18651 	return_value = EX(return_value);
18652 
18653 	do {
18654 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
18655 		    (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
18656 			/* Not supposed to happen, but we'll allow it */
18657 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
18658 
18659 			retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18660 			if (!return_value) {
18661 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18662 			} else {
18663 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
18664 					ZVAL_COPY_VALUE(return_value, retval_ptr);
18665 					break;
18666 				}
18667 
18668 				ZVAL_NEW_REF(return_value, retval_ptr);
18669 				if (IS_TMP_VAR == IS_CONST) {
18670 					Z_TRY_ADDREF_P(retval_ptr);
18671 				}
18672 			}
18673 			break;
18674 		}
18675 
18676 		retval_ptr = NULL;
18677 
18678 		if (IS_TMP_VAR == IS_VAR) {
18679 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
18680 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
18681 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
18682 				if (return_value) {
18683 					ZVAL_NEW_REF(return_value, retval_ptr);
18684 				} else {
18685 
18686 				}
18687 				break;
18688 			}
18689 		}
18690 
18691 		if (return_value) {
18692 			if (Z_ISREF_P(retval_ptr)) {
18693 				Z_ADDREF_P(retval_ptr);
18694 			} else {
18695 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
18696 			}
18697 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
18698 		}
18699 
18700 	} while (0);
18701 
18702 
18703 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18704 }
18705 
ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18706 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18707 {
18708 	USE_OPLINE
18709 	zval *retval;
18710 
18711 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
18712 
18713 	SAVE_OPLINE();
18714 	retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18715 
18716 	/* Copy return value into generator->retval */
18717 	if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
18718 		ZVAL_COPY_VALUE(&generator->retval, retval);
18719 		if (IS_TMP_VAR == IS_CONST) {
18720 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
18721 				Z_ADDREF(generator->retval);
18722 			}
18723 		}
18724 	} else if (IS_TMP_VAR == IS_CV) {
18725 		ZVAL_COPY_DEREF(&generator->retval, retval);
18726 	} else /* if (IS_TMP_VAR == IS_VAR) */ {
18727 		if (UNEXPECTED(Z_ISREF_P(retval))) {
18728 			zend_refcounted *ref = Z_COUNTED_P(retval);
18729 
18730 			retval = Z_REFVAL_P(retval);
18731 			ZVAL_COPY_VALUE(&generator->retval, retval);
18732 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
18733 				efree_size(ref, sizeof(zend_reference));
18734 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
18735 				Z_ADDREF_P(retval);
18736 			}
18737 		} else {
18738 			ZVAL_COPY_VALUE(&generator->retval, retval);
18739 		}
18740 	}
18741 
18742 	/* Close the generator to free up resources */
18743 	zend_generator_close(generator, 1);
18744 
18745 	/* Pass execution back to handling code */
18746 	ZEND_VM_RETURN();
18747 }
18748 
ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18749 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18750 {
18751 	USE_OPLINE
18752 	zval *arg, *param;
18753 
18754 	SAVE_OPLINE();
18755 
18756 	arg = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18757 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
18758 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
18759 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
18760 		Z_TRY_ADDREF_P(arg);
18761 		ZVAL_NEW_REF(param, arg);
18762 	} else {
18763 		ZVAL_COPY(param, arg);
18764 	}
18765 
18766 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18767 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18768 }
18769 
ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18771 {
18772 	USE_OPLINE
18773 	zval *expr;
18774 	zval *result = EX_VAR(opline->result.var);
18775 	HashTable *ht;
18776 
18777 	SAVE_OPLINE();
18778 	expr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18779 
18780 	switch (opline->extended_value) {
18781 		case IS_LONG:
18782 			ZVAL_LONG(result, zval_get_long(expr));
18783 			break;
18784 		case IS_DOUBLE:
18785 			ZVAL_DOUBLE(result, zval_get_double(expr));
18786 			break;
18787 		case IS_STRING:
18788 			ZVAL_STR(result, zval_get_string(expr));
18789 			break;
18790 		default:
18791 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
18792 			if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
18793 				ZVAL_DEREF(expr);
18794 			}
18795 			/* If value is already of correct type, return it directly */
18796 			if (Z_TYPE_P(expr) == opline->extended_value) {
18797 				ZVAL_COPY_VALUE(result, expr);
18798 				if (IS_TMP_VAR == IS_CONST) {
18799 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
18800 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
18801 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
18802 				}
18803 
18804 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18805 			}
18806 
18807 			if (opline->extended_value == IS_ARRAY) {
18808 				if (IS_TMP_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
18809 					if (Z_TYPE_P(expr) != IS_NULL) {
18810 						ZVAL_ARR(result, zend_new_array(1));
18811 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
18812 						if (IS_TMP_VAR == IS_CONST) {
18813 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
18814 						} else {
18815 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
18816 						}
18817 					} else {
18818 						ZVAL_EMPTY_ARRAY(result);
18819 					}
18820 				} else {
18821 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
18822 					if (obj_ht) {
18823 						/* fast copy */
18824 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
18825 							(Z_OBJCE_P(expr)->default_properties_count ||
18826 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
18827 							 GC_IS_RECURSIVE(obj_ht))));
18828 						zend_release_properties(obj_ht);
18829 					} else {
18830 						ZVAL_EMPTY_ARRAY(result);
18831 					}
18832 				}
18833 			} else {
18834 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
18835 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
18836 				if (Z_TYPE_P(expr) == IS_ARRAY) {
18837 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
18838 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
18839 						/* TODO: try not to duplicate immutable arrays as well ??? */
18840 						ht = zend_array_dup(ht);
18841 					}
18842 					Z_OBJ_P(result)->properties = ht;
18843 				} else if (Z_TYPE_P(expr) != IS_NULL) {
18844 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
18845 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
18846 					if (IS_TMP_VAR == IS_CONST) {
18847 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
18848 					} else {
18849 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
18850 					}
18851 				}
18852 			}
18853 	}
18854 
18855 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18856 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18857 }
18858 
ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18859 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18860 {
18861 	USE_OPLINE
18862 	zval *array_ptr, *result;
18863 
18864 	SAVE_OPLINE();
18865 
18866 	array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18867 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
18868 		result = EX_VAR(opline->result.var);
18869 		ZVAL_COPY_VALUE(result, array_ptr);
18870 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
18871 			Z_ADDREF_P(array_ptr);
18872 		}
18873 		Z_FE_POS_P(result) = 0;
18874 
18875 		ZEND_VM_NEXT_OPCODE();
18876 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
18877 		zend_object *zobj = Z_OBJ_P(array_ptr);
18878 		if (!zobj->ce->get_iterator) {
18879 			HashTable *properties = zobj->properties;
18880 			if (properties) {
18881 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
18882 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
18883 						GC_DELREF(properties);
18884 					}
18885 					properties = zobj->properties = zend_array_dup(properties);
18886 				}
18887 			} else {
18888 				properties = zobj->handlers->get_properties(zobj);
18889 			}
18890 
18891 			result = EX_VAR(opline->result.var);
18892 			ZVAL_COPY_VALUE(result, array_ptr);
18893 			if (IS_TMP_VAR != IS_TMP_VAR) {
18894 				Z_ADDREF_P(array_ptr);
18895 			}
18896 
18897 			if (zend_hash_num_elements(properties) == 0) {
18898 				Z_FE_ITER_P(result) = (uint32_t) -1;
18899 
18900 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
18901 			}
18902 
18903 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
18904 
18905 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18906 		} else {
18907 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
18908 
18909 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18910 			if (UNEXPECTED(EG(exception))) {
18911 				HANDLE_EXCEPTION();
18912 			} else if (is_empty) {
18913 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
18914 			} else {
18915 				ZEND_VM_NEXT_OPCODE();
18916 			}
18917 		}
18918 	} else {
18919 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
18920 		ZVAL_UNDEF(EX_VAR(opline->result.var));
18921 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
18922 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18923 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
18924 	}
18925 }
18926 
ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18927 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18928 {
18929 	USE_OPLINE
18930 	zval *array_ptr, *array_ref;
18931 
18932 	SAVE_OPLINE();
18933 
18934 	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
18935 		array_ref = array_ptr = NULL;
18936 		if (Z_ISREF_P(array_ref)) {
18937 			array_ptr = Z_REFVAL_P(array_ref);
18938 		}
18939 	} else {
18940 		array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
18941 	}
18942 
18943 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
18944 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
18945 			if (array_ptr == array_ref) {
18946 				ZVAL_NEW_REF(array_ref, array_ref);
18947 				array_ptr = Z_REFVAL_P(array_ref);
18948 			}
18949 			Z_ADDREF_P(array_ref);
18950 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
18951 		} else {
18952 			array_ref = EX_VAR(opline->result.var);
18953 			ZVAL_NEW_REF(array_ref, array_ptr);
18954 			array_ptr = Z_REFVAL_P(array_ref);
18955 		}
18956 		if (IS_TMP_VAR == IS_CONST) {
18957 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
18958 		} else {
18959 			SEPARATE_ARRAY(array_ptr);
18960 		}
18961 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
18962 
18963 		if (IS_TMP_VAR == IS_VAR) {
18964 
18965 		}
18966 		ZEND_VM_NEXT_OPCODE();
18967 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
18968 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
18969 			HashTable *properties;
18970 			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
18971 				if (array_ptr == array_ref) {
18972 					ZVAL_NEW_REF(array_ref, array_ref);
18973 					array_ptr = Z_REFVAL_P(array_ref);
18974 				}
18975 				Z_ADDREF_P(array_ref);
18976 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
18977 			} else {
18978 				array_ptr = EX_VAR(opline->result.var);
18979 				ZVAL_COPY_VALUE(array_ptr, array_ref);
18980 			}
18981 			if (Z_OBJ_P(array_ptr)->properties
18982 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
18983 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
18984 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
18985 				}
18986 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
18987 			}
18988 
18989 			properties = Z_OBJPROP_P(array_ptr);
18990 			if (zend_hash_num_elements(properties) == 0) {
18991 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
18992 
18993 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
18994 			}
18995 
18996 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
18997 
18998 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18999 		} else {
19000 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
19001 
19002 			if (IS_TMP_VAR == IS_VAR) {
19003 
19004 			} else {
19005 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19006 			}
19007 			if (UNEXPECTED(EG(exception))) {
19008 				HANDLE_EXCEPTION();
19009 			} else if (is_empty) {
19010 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19011 			} else {
19012 				ZEND_VM_NEXT_OPCODE();
19013 			}
19014 		}
19015 	} else {
19016 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
19017 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19018 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
19019 		if (IS_TMP_VAR == IS_VAR) {
19020 
19021 		} else {
19022 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19023 		}
19024 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19025 	}
19026 }
19027 
ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19028 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19029 {
19030 	USE_OPLINE
19031 
19032 	if (E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))
19033 			&& !E_HAS_ONLY_FATAL_ERRORS(Z_LVAL_P(EX_VAR(opline->op1.var)))) {
19034 		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
19035 	}
19036 	ZEND_VM_NEXT_OPCODE();
19037 }
19038 
ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19039 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19040 {
19041 	USE_OPLINE
19042 	zval *value;
19043 	zval *ref = NULL;
19044 	bool ret;
19045 
19046 	SAVE_OPLINE();
19047 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19048 
19049 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
19050 		if (IS_TMP_VAR == IS_VAR) {
19051 			ref = value;
19052 		}
19053 		value = Z_REFVAL_P(value);
19054 	}
19055 
19056 	ret = i_zend_is_true(value);
19057 
19058 	if (UNEXPECTED(EG(exception))) {
19059 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19060 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19061 		HANDLE_EXCEPTION();
19062 	}
19063 
19064 	if (ret) {
19065 		zval *result = EX_VAR(opline->result.var);
19066 
19067 		ZVAL_COPY_VALUE(result, value);
19068 		if (IS_TMP_VAR == IS_CONST) {
19069 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19070 		} else if (IS_TMP_VAR == IS_CV) {
19071 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19072 		} else if (IS_TMP_VAR == IS_VAR && ref) {
19073 			zend_reference *r = Z_REF_P(ref);
19074 
19075 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
19076 				efree_size(r, sizeof(zend_reference));
19077 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19078 				Z_ADDREF_P(result);
19079 			}
19080 		}
19081 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19082 	}
19083 
19084 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19085 	ZEND_VM_NEXT_OPCODE();
19086 }
19087 
ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19088 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19089 {
19090 	USE_OPLINE
19091 	zval *value;
19092 	zval *ref = NULL;
19093 
19094 	SAVE_OPLINE();
19095 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19096 
19097 	if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19098 		if (IS_TMP_VAR & IS_VAR) {
19099 			ref = value;
19100 		}
19101 		value = Z_REFVAL_P(value);
19102 	}
19103 
19104 	if (Z_TYPE_P(value) > IS_NULL) {
19105 		zval *result = EX_VAR(opline->result.var);
19106 		ZVAL_COPY_VALUE(result, value);
19107 		if (IS_TMP_VAR == IS_CONST) {
19108 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19109 		} else if (IS_TMP_VAR == IS_CV) {
19110 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19111 		} else if ((IS_TMP_VAR & IS_VAR) && ref) {
19112 			zend_reference *r = Z_REF_P(ref);
19113 
19114 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
19115 				efree_size(r, sizeof(zend_reference));
19116 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19117 				Z_ADDREF_P(result);
19118 			}
19119 		}
19120 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19121 	}
19122 
19123 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19124 	ZEND_VM_NEXT_OPCODE();
19125 }
19126 
ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19127 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19128 {
19129 	USE_OPLINE
19130 	zval *val, *result;
19131 
19132 	val = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19133 
19134 	if (Z_TYPE_P(val) > IS_NULL) {
19135 		do {
19136 			if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
19137 				val = Z_REFVAL_P(val);
19138 				if (Z_TYPE_P(val) <= IS_NULL) {
19139 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19140 					break;
19141 				}
19142 			}
19143 			ZEND_VM_NEXT_OPCODE();
19144 		} while (0);
19145 	}
19146 
19147 	result = EX_VAR(opline->result.var);
19148 	if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
19149 		ZVAL_NULL(result);
19150 		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
19151 			SAVE_OPLINE();
19152 			ZVAL_UNDEFINED_OP1();
19153 			if (UNEXPECTED(EG(exception) != NULL)) {
19154 				HANDLE_EXCEPTION();
19155 			}
19156 		}
19157 	} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
19158 		ZVAL_FALSE(result);
19159 	} else {
19160 		ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
19161 		ZVAL_TRUE(result);
19162 	}
19163 
19164 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19165 }
19166 
ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19167 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19168 {
19169 	USE_OPLINE
19170 	zval *value;
19171 	zval *result = EX_VAR(opline->result.var);
19172 
19173 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19174 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
19175 		SAVE_OPLINE();
19176 		ZVAL_UNDEFINED_OP1();
19177 		ZVAL_NULL(result);
19178 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19179 	}
19180 
19181 	if (IS_TMP_VAR == IS_CV) {
19182 		ZVAL_COPY_DEREF(result, value);
19183 	} else if (IS_TMP_VAR == IS_VAR) {
19184 		if (UNEXPECTED(Z_ISREF_P(value))) {
19185 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
19186 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
19187 				efree_size(Z_REF_P(value), sizeof(zend_reference));
19188 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19189 				Z_ADDREF_P(result);
19190 			}
19191 		} else {
19192 			ZVAL_COPY_VALUE(result, value);
19193 		}
19194 	} else {
19195 		ZVAL_COPY_VALUE(result, value);
19196 		if (IS_TMP_VAR == IS_CONST) {
19197 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
19198 				Z_ADDREF_P(result);
19199 			}
19200 		}
19201 	}
19202 	ZEND_VM_NEXT_OPCODE();
19203 }
19204 
ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19206 {
19207 	USE_OPLINE
19208 	zval *op1, *op2;
19209 	zend_bool result;
19210 
19211 	SAVE_OPLINE();
19212 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19213 	op2 = RT_CONSTANT(opline, opline->op2);
19214 	result = fast_is_identical_function(op1, op2);
19215 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19216 
19217 	ZEND_VM_SMART_BRANCH(result, 1);
19218 }
19219 
ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19220 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19221 {
19222 	USE_OPLINE
19223 	zval *op1, *op2;
19224 	zend_bool result;
19225 
19226 	SAVE_OPLINE();
19227 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19228 	op2 = RT_CONSTANT(opline, opline->op2);
19229 	result = fast_is_identical_function(op1, op2);
19230 
19231 	ZEND_VM_SMART_BRANCH(result, 1);
19232 }
19233 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19234 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19235 {
19236 	USE_OPLINE
19237 	zval *op1, *op2;
19238 	zend_bool result;
19239 
19240 	SAVE_OPLINE();
19241 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19242 	op2 = RT_CONSTANT(opline, opline->op2);
19243 	result = fast_is_not_identical_function(op1, op2);
19244 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19245 
19246 	ZEND_VM_SMART_BRANCH(result, 1);
19247 }
19248 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19249 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19250 {
19251 #if 0
19252 	USE_OPLINE
19253 #endif
19254 
19255 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19256         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19257 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19258         }
19259 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19260 	} else {
19261 		if (IS_CONST == IS_UNUSED) {
19262 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19263 		}
19264 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19265 	}
19266 }
19267 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19268 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19269 {
19270 #if 0
19271 	USE_OPLINE
19272 #endif
19273 
19274 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19275 		/* Behave like FETCH_OBJ_W */
19276 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19277 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19278 		}
19279 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19280 	} else {
19281 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19282 	}
19283 }
19284 
ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19285 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19286 {
19287 	USE_OPLINE
19288 	zend_string **rope;
19289 	zval *var;
19290 
19291 	/* op1 and result are the same */
19292 	rope = (zend_string**)EX_VAR(opline->op1.var);
19293 	if (IS_CONST == IS_CONST) {
19294 		var = RT_CONSTANT(opline, opline->op2);
19295 		rope[opline->extended_value] = Z_STR_P(var);
19296 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19297 			Z_ADDREF_P(var);
19298 		}
19299 	} else {
19300 		var = RT_CONSTANT(opline, opline->op2);
19301 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19302 			if (IS_CONST == IS_CV) {
19303 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19304 			} else {
19305 				rope[opline->extended_value] = Z_STR_P(var);
19306 			}
19307 		} else {
19308 			SAVE_OPLINE();
19309 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19310 				ZVAL_UNDEFINED_OP2();
19311 			}
19312 			rope[opline->extended_value] = zval_get_string_func(var);
19313 
19314 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19315 		}
19316 	}
19317 	ZEND_VM_NEXT_OPCODE();
19318 }
19319 
ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19320 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19321 {
19322 	USE_OPLINE
19323 	zend_string **rope;
19324 	zval *var, *ret;
19325 	uint32_t i;
19326 	size_t len = 0;
19327 	char *target;
19328 
19329 	rope = (zend_string**)EX_VAR(opline->op1.var);
19330 	if (IS_CONST == IS_CONST) {
19331 		var = RT_CONSTANT(opline, opline->op2);
19332 		rope[opline->extended_value] = Z_STR_P(var);
19333 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19334 			Z_ADDREF_P(var);
19335 		}
19336 	} else {
19337 		var = RT_CONSTANT(opline, opline->op2);
19338 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19339 			if (IS_CONST == IS_CV) {
19340 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19341 			} else {
19342 				rope[opline->extended_value] = Z_STR_P(var);
19343 			}
19344 		} else {
19345 			SAVE_OPLINE();
19346 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19347 				ZVAL_UNDEFINED_OP2();
19348 			}
19349 			rope[opline->extended_value] = zval_get_string_func(var);
19350 
19351 			if (UNEXPECTED(EG(exception))) {
19352 				for (i = 0; i <= opline->extended_value; i++) {
19353 					zend_string_release_ex(rope[i], 0);
19354 				}
19355 				ZVAL_UNDEF(EX_VAR(opline->result.var));
19356 				HANDLE_EXCEPTION();
19357 			}
19358 		}
19359 	}
19360 	for (i = 0; i <= opline->extended_value; i++) {
19361 		len += ZSTR_LEN(rope[i]);
19362 	}
19363 	ret = EX_VAR(opline->result.var);
19364 	ZVAL_STR(ret, zend_string_alloc(len, 0));
19365 	target = Z_STRVAL_P(ret);
19366 	for (i = 0; i <= opline->extended_value; i++) {
19367 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
19368 		target += ZSTR_LEN(rope[i]);
19369 		zend_string_release_ex(rope[i], 0);
19370 	}
19371 	*target = '\0';
19372 
19373 	ZEND_VM_NEXT_OPCODE();
19374 }
19375 
ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19376 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19377 {
19378 	USE_OPLINE
19379 	zval *value, *arg;
19380 	uint32_t arg_num;
19381 
19382 	if (IS_CONST == IS_CONST) {
19383 		SAVE_OPLINE();
19384 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
19385 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
19386 		if (UNEXPECTED(!arg)) {
19387 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19388 			HANDLE_EXCEPTION();
19389 		}
19390 	} else {
19391 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
19392 		arg_num = opline->op2.num;
19393 	}
19394 
19395 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
19396 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
19397 			goto send_val_by_ref;
19398 		}
19399 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
19400 send_val_by_ref:
19401 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19402 	}
19403 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19404 	ZVAL_COPY_VALUE(arg, value);
19405 	if (IS_TMP_VAR == IS_CONST) {
19406 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
19407 			Z_ADDREF_P(arg);
19408 		}
19409 	}
19410 	ZEND_VM_NEXT_OPCODE();
19411 }
19412 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19413 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19414 {
19415 	USE_OPLINE
19416 	zval *expr_ptr, new_expr;
19417 
19418 	SAVE_OPLINE();
19419 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
19420 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
19421 		expr_ptr = NULL;
19422 		if (Z_ISREF_P(expr_ptr)) {
19423 			Z_ADDREF_P(expr_ptr);
19424 		} else {
19425 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
19426 		}
19427 
19428 	} else {
19429 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19430 		if (IS_TMP_VAR == IS_TMP_VAR) {
19431 			/* pass */
19432 		} else if (IS_TMP_VAR == IS_CONST) {
19433 			Z_TRY_ADDREF_P(expr_ptr);
19434 		} else if (IS_TMP_VAR == IS_CV) {
19435 			ZVAL_DEREF(expr_ptr);
19436 			Z_TRY_ADDREF_P(expr_ptr);
19437 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
19438 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
19439 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
19440 
19441 				expr_ptr = Z_REFVAL_P(expr_ptr);
19442 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19443 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
19444 					expr_ptr = &new_expr;
19445 					efree_size(ref, sizeof(zend_reference));
19446 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
19447 					Z_ADDREF_P(expr_ptr);
19448 				}
19449 			}
19450 		}
19451 	}
19452 
19453 	if (IS_CONST != IS_UNUSED) {
19454 		zval *offset = RT_CONSTANT(opline, opline->op2);
19455 		zend_string *str;
19456 		zend_ulong hval;
19457 
19458 add_again:
19459 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
19460 			str = Z_STR_P(offset);
19461 			if (IS_CONST != IS_CONST) {
19462 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
19463 					goto num_index;
19464 				}
19465 			}
19466 str_index:
19467 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
19468 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
19469 			hval = Z_LVAL_P(offset);
19470 num_index:
19471 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
19472 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
19473 			offset = Z_REFVAL_P(offset);
19474 			goto add_again;
19475 		} else if (Z_TYPE_P(offset) == IS_NULL) {
19476 			str = ZSTR_EMPTY_ALLOC();
19477 			goto str_index;
19478 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
19479 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
19480 			goto num_index;
19481 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
19482 			hval = 0;
19483 			goto num_index;
19484 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
19485 			hval = 1;
19486 			goto num_index;
19487 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
19488 			zend_use_resource_as_offset(offset);
19489 			hval = Z_RES_HANDLE_P(offset);
19490 			goto num_index;
19491 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
19492 			ZVAL_UNDEFINED_OP2();
19493 			str = ZSTR_EMPTY_ALLOC();
19494 			goto str_index;
19495 		} else {
19496 			zend_illegal_offset();
19497 			zval_ptr_dtor_nogc(expr_ptr);
19498 		}
19499 
19500 	} else {
19501 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
19502 			zend_cannot_add_element();
19503 			zval_ptr_dtor_nogc(expr_ptr);
19504 		}
19505 	}
19506 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19507 }
19508 
ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19509 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19510 {
19511 	zval *array;
19512 	uint32_t size;
19513 	USE_OPLINE
19514 
19515 	array = EX_VAR(opline->result.var);
19516 	if (IS_TMP_VAR != IS_UNUSED) {
19517 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
19518 		ZVAL_ARR(array, zend_new_array(size));
19519 		/* Explicitly initialize array as not-packed if flag is set */
19520 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
19521 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
19522 		}
19523 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19524 	} else {
19525 		ZVAL_ARR(array, zend_new_array(0));
19526 		ZEND_VM_NEXT_OPCODE();
19527 	}
19528 }
19529 
ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19530 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19531 {
19532 	USE_OPLINE
19533 
19534 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
19535 
19536 	SAVE_OPLINE();
19537 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
19538 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19539 	}
19540 
19541 	/* Destroy the previously yielded value */
19542 	zval_ptr_dtor(&generator->value);
19543 
19544 	/* Destroy the previously yielded key */
19545 	zval_ptr_dtor(&generator->key);
19546 
19547 	/* Set the new yielded value */
19548 	if (IS_TMP_VAR != IS_UNUSED) {
19549 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
19550 			/* Constants and temporary variables aren't yieldable by reference,
19551 			 * but we still allow them with a notice. */
19552 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
19553 				zval *value;
19554 
19555 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19556 
19557 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19558 				ZVAL_COPY_VALUE(&generator->value, value);
19559 				if (IS_TMP_VAR == IS_CONST) {
19560 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19561 						Z_ADDREF(generator->value);
19562 					}
19563 				}
19564 			} else {
19565 				zval *value_ptr = NULL;
19566 
19567 				/* If a function call result is yielded and the function did
19568 				 * not return by reference we throw a notice. */
19569 				do {
19570 					if (IS_TMP_VAR == IS_VAR) {
19571 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
19572 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
19573 						 && !Z_ISREF_P(value_ptr)) {
19574 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19575 							ZVAL_COPY(&generator->value, value_ptr);
19576 							break;
19577 						}
19578 					}
19579 					if (Z_ISREF_P(value_ptr)) {
19580 						Z_ADDREF_P(value_ptr);
19581 					} else {
19582 						ZVAL_MAKE_REF_EX(value_ptr, 2);
19583 					}
19584 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
19585 				} while (0);
19586 
19587 			}
19588 		} else {
19589 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19590 
19591 			/* Consts, temporary variables and references need copying */
19592 			if (IS_TMP_VAR == IS_CONST) {
19593 				ZVAL_COPY_VALUE(&generator->value, value);
19594 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19595 					Z_ADDREF(generator->value);
19596 				}
19597 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
19598 				ZVAL_COPY_VALUE(&generator->value, value);
19599             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19600 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
19601 
19602 			} else {
19603 				ZVAL_COPY_VALUE(&generator->value, value);
19604 				if (IS_TMP_VAR == IS_CV) {
19605 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
19606 				}
19607 			}
19608 		}
19609 	} else {
19610 		/* If no value was specified yield null */
19611 		ZVAL_NULL(&generator->value);
19612 	}
19613 
19614 	/* Set the new yielded key */
19615 	if (IS_CONST != IS_UNUSED) {
19616 		zval *key = RT_CONSTANT(opline, opline->op2);
19617 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
19618 			key = Z_REFVAL_P(key);
19619 		}
19620 		ZVAL_COPY(&generator->key, key);
19621 
19622 		if (Z_TYPE(generator->key) == IS_LONG
19623 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
19624 		) {
19625 			generator->largest_used_integer_key = Z_LVAL(generator->key);
19626 		}
19627 	} else {
19628 		/* If no key was specified we use auto-increment keys */
19629 		generator->largest_used_integer_key++;
19630 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
19631 	}
19632 
19633 	if (RETURN_VALUE_USED(opline)) {
19634 		/* If the return value of yield is used set the send
19635 		 * target and initialize it to NULL */
19636 		generator->send_target = EX_VAR(opline->result.var);
19637 		ZVAL_NULL(generator->send_target);
19638 	} else {
19639 		generator->send_target = NULL;
19640 	}
19641 
19642 	/* We increment to the next op, so we are at the correct position when the
19643 	 * generator is resumed. */
19644 	ZEND_VM_INC_OPCODE();
19645 
19646 	/* The GOTO VM uses a local opline variable. We need to set the opline
19647 	 * variable in execute_data so we don't resume at an old position. */
19648 	SAVE_OPLINE();
19649 
19650 	ZEND_VM_RETURN();
19651 }
19652 
ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19653 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19654 {
19655 	USE_OPLINE
19656 	zval *op1;
19657 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
19658 	zval *result;
19659 
19660 	SAVE_OPLINE();
19661 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19662 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
19663 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_TMP_VAR == IS_CONST);
19664 	} else if (opline->extended_value) {
19665 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
19666 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
19667 		} else {
19668 			result = NULL;
19669 		}
19670 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
19671 		result = zend_hash_find_ex(ht, ZSTR_EMPTY_ALLOC(), 1);
19672 	} else {
19673 		zend_string *key;
19674 		zval key_tmp, *val;
19675 
19676 		result = NULL;
19677 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
19678 			ZVAL_STR(&key_tmp, key);
19679 			if (zend_compare(op1, &key_tmp) == 0) {
19680 				result = val;
19681 				break;
19682 			}
19683 		} ZEND_HASH_FOREACH_END();
19684 	}
19685 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19686 	ZEND_VM_SMART_BRANCH(result, 1);
19687 }
19688 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19689 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19690 {
19691 #if 0
19692 	USE_OPLINE
19693 #endif
19694 
19695 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19696         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19697 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19698         }
19699 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19700 	} else {
19701 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
19702 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19703 		}
19704 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19705 	}
19706 }
19707 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19708 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19709 {
19710 #if 0
19711 	USE_OPLINE
19712 #endif
19713 
19714 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19715 		/* Behave like FETCH_OBJ_W */
19716 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19717 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19718 		}
19719 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19720 	} else {
19721 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19722 	}
19723 }
19724 
ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19725 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19726 {
19727 	USE_OPLINE
19728 	zend_string **rope;
19729 	zval *var;
19730 
19731 	/* op1 and result are the same */
19732 	rope = (zend_string**)EX_VAR(opline->op1.var);
19733 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
19734 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
19735 		rope[opline->extended_value] = Z_STR_P(var);
19736 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19737 			Z_ADDREF_P(var);
19738 		}
19739 	} else {
19740 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
19741 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19742 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
19743 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19744 			} else {
19745 				rope[opline->extended_value] = Z_STR_P(var);
19746 			}
19747 		} else {
19748 			SAVE_OPLINE();
19749 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19750 				ZVAL_UNDEFINED_OP2();
19751 			}
19752 			rope[opline->extended_value] = zval_get_string_func(var);
19753 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
19754 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19755 		}
19756 	}
19757 	ZEND_VM_NEXT_OPCODE();
19758 }
19759 
ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19760 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19761 {
19762 	USE_OPLINE
19763 	zend_string **rope;
19764 	zval *var, *ret;
19765 	uint32_t i;
19766 	size_t len = 0;
19767 	char *target;
19768 
19769 	rope = (zend_string**)EX_VAR(opline->op1.var);
19770 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
19771 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
19772 		rope[opline->extended_value] = Z_STR_P(var);
19773 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19774 			Z_ADDREF_P(var);
19775 		}
19776 	} else {
19777 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
19778 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19779 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
19780 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19781 			} else {
19782 				rope[opline->extended_value] = Z_STR_P(var);
19783 			}
19784 		} else {
19785 			SAVE_OPLINE();
19786 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19787 				ZVAL_UNDEFINED_OP2();
19788 			}
19789 			rope[opline->extended_value] = zval_get_string_func(var);
19790 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
19791 			if (UNEXPECTED(EG(exception))) {
19792 				for (i = 0; i <= opline->extended_value; i++) {
19793 					zend_string_release_ex(rope[i], 0);
19794 				}
19795 				ZVAL_UNDEF(EX_VAR(opline->result.var));
19796 				HANDLE_EXCEPTION();
19797 			}
19798 		}
19799 	}
19800 	for (i = 0; i <= opline->extended_value; i++) {
19801 		len += ZSTR_LEN(rope[i]);
19802 	}
19803 	ret = EX_VAR(opline->result.var);
19804 	ZVAL_STR(ret, zend_string_alloc(len, 0));
19805 	target = Z_STRVAL_P(ret);
19806 	for (i = 0; i <= opline->extended_value; i++) {
19807 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
19808 		target += ZSTR_LEN(rope[i]);
19809 		zend_string_release_ex(rope[i], 0);
19810 	}
19811 	*target = '\0';
19812 
19813 	ZEND_VM_NEXT_OPCODE();
19814 }
19815 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19817 {
19818 	USE_OPLINE
19819 	zval *expr_ptr, new_expr;
19820 
19821 	SAVE_OPLINE();
19822 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
19823 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
19824 		expr_ptr = NULL;
19825 		if (Z_ISREF_P(expr_ptr)) {
19826 			Z_ADDREF_P(expr_ptr);
19827 		} else {
19828 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
19829 		}
19830 
19831 	} else {
19832 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19833 		if (IS_TMP_VAR == IS_TMP_VAR) {
19834 			/* pass */
19835 		} else if (IS_TMP_VAR == IS_CONST) {
19836 			Z_TRY_ADDREF_P(expr_ptr);
19837 		} else if (IS_TMP_VAR == IS_CV) {
19838 			ZVAL_DEREF(expr_ptr);
19839 			Z_TRY_ADDREF_P(expr_ptr);
19840 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
19841 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
19842 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
19843 
19844 				expr_ptr = Z_REFVAL_P(expr_ptr);
19845 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19846 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
19847 					expr_ptr = &new_expr;
19848 					efree_size(ref, sizeof(zend_reference));
19849 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
19850 					Z_ADDREF_P(expr_ptr);
19851 				}
19852 			}
19853 		}
19854 	}
19855 
19856 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
19857 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
19858 		zend_string *str;
19859 		zend_ulong hval;
19860 
19861 add_again:
19862 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
19863 			str = Z_STR_P(offset);
19864 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
19865 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
19866 					goto num_index;
19867 				}
19868 			}
19869 str_index:
19870 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
19871 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
19872 			hval = Z_LVAL_P(offset);
19873 num_index:
19874 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
19875 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
19876 			offset = Z_REFVAL_P(offset);
19877 			goto add_again;
19878 		} else if (Z_TYPE_P(offset) == IS_NULL) {
19879 			str = ZSTR_EMPTY_ALLOC();
19880 			goto str_index;
19881 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
19882 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
19883 			goto num_index;
19884 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
19885 			hval = 0;
19886 			goto num_index;
19887 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
19888 			hval = 1;
19889 			goto num_index;
19890 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
19891 			zend_use_resource_as_offset(offset);
19892 			hval = Z_RES_HANDLE_P(offset);
19893 			goto num_index;
19894 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
19895 			ZVAL_UNDEFINED_OP2();
19896 			str = ZSTR_EMPTY_ALLOC();
19897 			goto str_index;
19898 		} else {
19899 			zend_illegal_offset();
19900 			zval_ptr_dtor_nogc(expr_ptr);
19901 		}
19902 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
19903 	} else {
19904 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
19905 			zend_cannot_add_element();
19906 			zval_ptr_dtor_nogc(expr_ptr);
19907 		}
19908 	}
19909 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19910 }
19911 
ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19912 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19913 {
19914 	zval *array;
19915 	uint32_t size;
19916 	USE_OPLINE
19917 
19918 	array = EX_VAR(opline->result.var);
19919 	if (IS_TMP_VAR != IS_UNUSED) {
19920 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
19921 		ZVAL_ARR(array, zend_new_array(size));
19922 		/* Explicitly initialize array as not-packed if flag is set */
19923 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
19924 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
19925 		}
19926 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19927 	} else {
19928 		ZVAL_ARR(array, zend_new_array(0));
19929 		ZEND_VM_NEXT_OPCODE();
19930 	}
19931 }
19932 
ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19933 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19934 {
19935 	USE_OPLINE
19936 
19937 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
19938 
19939 	SAVE_OPLINE();
19940 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
19941 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19942 	}
19943 
19944 	/* Destroy the previously yielded value */
19945 	zval_ptr_dtor(&generator->value);
19946 
19947 	/* Destroy the previously yielded key */
19948 	zval_ptr_dtor(&generator->key);
19949 
19950 	/* Set the new yielded value */
19951 	if (IS_TMP_VAR != IS_UNUSED) {
19952 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
19953 			/* Constants and temporary variables aren't yieldable by reference,
19954 			 * but we still allow them with a notice. */
19955 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
19956 				zval *value;
19957 
19958 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19959 
19960 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19961 				ZVAL_COPY_VALUE(&generator->value, value);
19962 				if (IS_TMP_VAR == IS_CONST) {
19963 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19964 						Z_ADDREF(generator->value);
19965 					}
19966 				}
19967 			} else {
19968 				zval *value_ptr = NULL;
19969 
19970 				/* If a function call result is yielded and the function did
19971 				 * not return by reference we throw a notice. */
19972 				do {
19973 					if (IS_TMP_VAR == IS_VAR) {
19974 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
19975 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
19976 						 && !Z_ISREF_P(value_ptr)) {
19977 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19978 							ZVAL_COPY(&generator->value, value_ptr);
19979 							break;
19980 						}
19981 					}
19982 					if (Z_ISREF_P(value_ptr)) {
19983 						Z_ADDREF_P(value_ptr);
19984 					} else {
19985 						ZVAL_MAKE_REF_EX(value_ptr, 2);
19986 					}
19987 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
19988 				} while (0);
19989 
19990 			}
19991 		} else {
19992 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19993 
19994 			/* Consts, temporary variables and references need copying */
19995 			if (IS_TMP_VAR == IS_CONST) {
19996 				ZVAL_COPY_VALUE(&generator->value, value);
19997 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19998 					Z_ADDREF(generator->value);
19999 				}
20000 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20001 				ZVAL_COPY_VALUE(&generator->value, value);
20002             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20003 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20004 
20005 			} else {
20006 				ZVAL_COPY_VALUE(&generator->value, value);
20007 				if (IS_TMP_VAR == IS_CV) {
20008 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20009 				}
20010 			}
20011 		}
20012 	} else {
20013 		/* If no value was specified yield null */
20014 		ZVAL_NULL(&generator->value);
20015 	}
20016 
20017 	/* Set the new yielded key */
20018 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
20019 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20020 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
20021 			key = Z_REFVAL_P(key);
20022 		}
20023 		ZVAL_COPY(&generator->key, key);
20024 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20025 
20026 		if (Z_TYPE(generator->key) == IS_LONG
20027 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20028 		) {
20029 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20030 		}
20031 	} else {
20032 		/* If no key was specified we use auto-increment keys */
20033 		generator->largest_used_integer_key++;
20034 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20035 	}
20036 
20037 	if (RETURN_VALUE_USED(opline)) {
20038 		/* If the return value of yield is used set the send
20039 		 * target and initialize it to NULL */
20040 		generator->send_target = EX_VAR(opline->result.var);
20041 		ZVAL_NULL(generator->send_target);
20042 	} else {
20043 		generator->send_target = NULL;
20044 	}
20045 
20046 	/* We increment to the next op, so we are at the correct position when the
20047 	 * generator is resumed. */
20048 	ZEND_VM_INC_OPCODE();
20049 
20050 	/* The GOTO VM uses a local opline variable. We need to set the opline
20051 	 * variable in execute_data so we don't resume at an old position. */
20052 	SAVE_OPLINE();
20053 
20054 	ZEND_VM_RETURN();
20055 }
20056 
ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20057 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20058 {
20059 	USE_OPLINE
20060 	zval *op1, *op2;
20061 	zend_bool result;
20062 
20063 	SAVE_OPLINE();
20064 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20065 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
20066 	result = fast_is_identical_function(op1, op2);
20067 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20068 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20069 	ZEND_VM_SMART_BRANCH(result, 1);
20070 }
20071 
ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20073 {
20074 	USE_OPLINE
20075 	zval *op1, *op2;
20076 	zend_bool result;
20077 
20078 	SAVE_OPLINE();
20079 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20080 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
20081 	result = fast_is_identical_function(op1, op2);
20082 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20083 	ZEND_VM_SMART_BRANCH(result, 1);
20084 }
20085 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20086 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20087 {
20088 	USE_OPLINE
20089 	zval *op1, *op2;
20090 	zend_bool result;
20091 
20092 	SAVE_OPLINE();
20093 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20094 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
20095 	result = fast_is_not_identical_function(op1, op2);
20096 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20097 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20098 	ZEND_VM_SMART_BRANCH(result, 1);
20099 }
20100 
ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20101 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20102 {
20103 	USE_OPLINE
20104 	zval *op1, *op2;
20105 	zend_bool result;
20106 
20107 	SAVE_OPLINE();
20108 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20109 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
20110 	result = fast_is_identical_function(op1, op2);
20111 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20112 	ZEND_VM_SMART_BRANCH(result, 1);
20113 }
20114 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20115 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20116 {
20117 #if 0
20118 	USE_OPLINE
20119 #endif
20120 
20121 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20122         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20123 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20124         }
20125 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20126 	} else {
20127 		if (IS_UNUSED == IS_UNUSED) {
20128 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20129 		}
20130 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20131 	}
20132 }
20133 
ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20134 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20135 {
20136 	if (IS_TMP_VAR == IS_UNUSED) {
20137 		SAVE_OPLINE();
20138 		zend_verify_missing_return_type(EX(func));
20139 		HANDLE_EXCEPTION();
20140 	} else {
20141 /* prevents "undefined variable opline" errors */
20142 #if 0 || (IS_TMP_VAR != IS_UNUSED)
20143 		USE_OPLINE
20144 		zval *retval_ref, *retval_ptr;
20145 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
20146 		retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20147 
20148 		if (IS_TMP_VAR == IS_CONST) {
20149 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
20150 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
20151 		} else if (IS_TMP_VAR == IS_VAR) {
20152 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
20153 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
20154 			}
20155 			ZVAL_DEREF(retval_ptr);
20156 		} else if (IS_TMP_VAR == IS_CV) {
20157 			ZVAL_DEREF(retval_ptr);
20158 		}
20159 
20160 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
20161 			ZEND_VM_NEXT_OPCODE();
20162 		}
20163 
20164 		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
20165 			SAVE_OPLINE();
20166 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
20167 			if (UNEXPECTED(EG(exception))) {
20168 				HANDLE_EXCEPTION();
20169 			}
20170 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
20171 				ZEND_VM_NEXT_OPCODE();
20172 			}
20173 		}
20174 
20175 		zend_reference *ref = NULL;
20176 		void *cache_slot = CACHE_ADDR(opline->op2.num);
20177 		if (UNEXPECTED(retval_ref != retval_ptr)) {
20178 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20179 				ref = Z_REF_P(retval_ref);
20180 			} else {
20181 				/* A cast might happen - unwrap the reference if this is a by-value return */
20182 				if (Z_REFCOUNT_P(retval_ref) == 1) {
20183 					ZVAL_UNREF(retval_ref);
20184 				} else {
20185 					Z_DELREF_P(retval_ref);
20186 					ZVAL_COPY(retval_ref, retval_ptr);
20187 				}
20188 				retval_ptr = retval_ref;
20189 			}
20190 		}
20191 
20192 		SAVE_OPLINE();
20193 		if (UNEXPECTED(!zend_check_type_slow(ret_info->type, retval_ptr, ref, cache_slot, NULL, 1, 0))) {
20194 			zend_verify_return_error(EX(func), retval_ptr);
20195 			HANDLE_EXCEPTION();
20196 		}
20197 		ZEND_VM_NEXT_OPCODE();
20198 #endif
20199 	}
20200 }
20201 
ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20203 {
20204 	USE_OPLINE
20205 	zval *value, *arg;
20206 	uint32_t arg_num;
20207 
20208 	if (IS_UNUSED == IS_CONST) {
20209 		SAVE_OPLINE();
20210 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
20211 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
20212 		if (UNEXPECTED(!arg)) {
20213 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20214 			HANDLE_EXCEPTION();
20215 		}
20216 	} else {
20217 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20218 		arg_num = opline->op2.num;
20219 	}
20220 
20221 	if (EXPECTED(0)) {
20222 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20223 			goto send_val_by_ref;
20224 		}
20225 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20226 send_val_by_ref:
20227 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20228 	}
20229 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20230 	ZVAL_COPY_VALUE(arg, value);
20231 	if (IS_TMP_VAR == IS_CONST) {
20232 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
20233 			Z_ADDREF_P(arg);
20234 		}
20235 	}
20236 	ZEND_VM_NEXT_OPCODE();
20237 }
20238 
ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20239 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20240 {
20241 	USE_OPLINE
20242 	zval *value, *arg;
20243 	uint32_t arg_num;
20244 
20245 	if (IS_UNUSED == IS_CONST) {
20246 		SAVE_OPLINE();
20247 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
20248 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
20249 		if (UNEXPECTED(!arg)) {
20250 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20251 			HANDLE_EXCEPTION();
20252 		}
20253 	} else {
20254 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20255 		arg_num = opline->op2.num;
20256 	}
20257 
20258 	if (EXPECTED(1)) {
20259 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20260 			goto send_val_by_ref;
20261 		}
20262 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20263 send_val_by_ref:
20264 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20265 	}
20266 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20267 	ZVAL_COPY_VALUE(arg, value);
20268 	if (IS_TMP_VAR == IS_CONST) {
20269 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
20270 			Z_ADDREF_P(arg);
20271 		}
20272 	}
20273 	ZEND_VM_NEXT_OPCODE();
20274 }
20275 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20276 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20277 {
20278 	USE_OPLINE
20279 	zval *expr_ptr, new_expr;
20280 
20281 	SAVE_OPLINE();
20282 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20283 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20284 		expr_ptr = NULL;
20285 		if (Z_ISREF_P(expr_ptr)) {
20286 			Z_ADDREF_P(expr_ptr);
20287 		} else {
20288 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20289 		}
20290 
20291 	} else {
20292 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20293 		if (IS_TMP_VAR == IS_TMP_VAR) {
20294 			/* pass */
20295 		} else if (IS_TMP_VAR == IS_CONST) {
20296 			Z_TRY_ADDREF_P(expr_ptr);
20297 		} else if (IS_TMP_VAR == IS_CV) {
20298 			ZVAL_DEREF(expr_ptr);
20299 			Z_TRY_ADDREF_P(expr_ptr);
20300 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20301 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20302 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20303 
20304 				expr_ptr = Z_REFVAL_P(expr_ptr);
20305 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20306 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20307 					expr_ptr = &new_expr;
20308 					efree_size(ref, sizeof(zend_reference));
20309 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20310 					Z_ADDREF_P(expr_ptr);
20311 				}
20312 			}
20313 		}
20314 	}
20315 
20316 	if (IS_UNUSED != IS_UNUSED) {
20317 		zval *offset = NULL;
20318 		zend_string *str;
20319 		zend_ulong hval;
20320 
20321 add_again:
20322 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20323 			str = Z_STR_P(offset);
20324 			if (IS_UNUSED != IS_CONST) {
20325 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20326 					goto num_index;
20327 				}
20328 			}
20329 str_index:
20330 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20331 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20332 			hval = Z_LVAL_P(offset);
20333 num_index:
20334 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20335 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20336 			offset = Z_REFVAL_P(offset);
20337 			goto add_again;
20338 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20339 			str = ZSTR_EMPTY_ALLOC();
20340 			goto str_index;
20341 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20342 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
20343 			goto num_index;
20344 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20345 			hval = 0;
20346 			goto num_index;
20347 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20348 			hval = 1;
20349 			goto num_index;
20350 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20351 			zend_use_resource_as_offset(offset);
20352 			hval = Z_RES_HANDLE_P(offset);
20353 			goto num_index;
20354 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20355 			ZVAL_UNDEFINED_OP2();
20356 			str = ZSTR_EMPTY_ALLOC();
20357 			goto str_index;
20358 		} else {
20359 			zend_illegal_offset();
20360 			zval_ptr_dtor_nogc(expr_ptr);
20361 		}
20362 
20363 	} else {
20364 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20365 			zend_cannot_add_element();
20366 			zval_ptr_dtor_nogc(expr_ptr);
20367 		}
20368 	}
20369 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20370 }
20371 
ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20373 {
20374 	zval *array;
20375 	uint32_t size;
20376 	USE_OPLINE
20377 
20378 	array = EX_VAR(opline->result.var);
20379 	if (IS_TMP_VAR != IS_UNUSED) {
20380 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20381 		ZVAL_ARR(array, zend_new_array(size));
20382 		/* Explicitly initialize array as not-packed if flag is set */
20383 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20384 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
20385 		}
20386 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20387 	} else {
20388 		ZVAL_ARR(array, zend_new_array(0));
20389 		ZEND_VM_NEXT_OPCODE();
20390 	}
20391 }
20392 
ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20394 {
20395 	USE_OPLINE
20396 
20397 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20398 
20399 	SAVE_OPLINE();
20400 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20401 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20402 	}
20403 
20404 	/* Destroy the previously yielded value */
20405 	zval_ptr_dtor(&generator->value);
20406 
20407 	/* Destroy the previously yielded key */
20408 	zval_ptr_dtor(&generator->key);
20409 
20410 	/* Set the new yielded value */
20411 	if (IS_TMP_VAR != IS_UNUSED) {
20412 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20413 			/* Constants and temporary variables aren't yieldable by reference,
20414 			 * but we still allow them with a notice. */
20415 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
20416 				zval *value;
20417 
20418 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20419 
20420 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20421 				ZVAL_COPY_VALUE(&generator->value, value);
20422 				if (IS_TMP_VAR == IS_CONST) {
20423 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20424 						Z_ADDREF(generator->value);
20425 					}
20426 				}
20427 			} else {
20428 				zval *value_ptr = NULL;
20429 
20430 				/* If a function call result is yielded and the function did
20431 				 * not return by reference we throw a notice. */
20432 				do {
20433 					if (IS_TMP_VAR == IS_VAR) {
20434 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
20435 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
20436 						 && !Z_ISREF_P(value_ptr)) {
20437 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20438 							ZVAL_COPY(&generator->value, value_ptr);
20439 							break;
20440 						}
20441 					}
20442 					if (Z_ISREF_P(value_ptr)) {
20443 						Z_ADDREF_P(value_ptr);
20444 					} else {
20445 						ZVAL_MAKE_REF_EX(value_ptr, 2);
20446 					}
20447 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
20448 				} while (0);
20449 
20450 			}
20451 		} else {
20452 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20453 
20454 			/* Consts, temporary variables and references need copying */
20455 			if (IS_TMP_VAR == IS_CONST) {
20456 				ZVAL_COPY_VALUE(&generator->value, value);
20457 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20458 					Z_ADDREF(generator->value);
20459 				}
20460 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20461 				ZVAL_COPY_VALUE(&generator->value, value);
20462             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20463 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20464 
20465 			} else {
20466 				ZVAL_COPY_VALUE(&generator->value, value);
20467 				if (IS_TMP_VAR == IS_CV) {
20468 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20469 				}
20470 			}
20471 		}
20472 	} else {
20473 		/* If no value was specified yield null */
20474 		ZVAL_NULL(&generator->value);
20475 	}
20476 
20477 	/* Set the new yielded key */
20478 	if (IS_UNUSED != IS_UNUSED) {
20479 		zval *key = NULL;
20480 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
20481 			key = Z_REFVAL_P(key);
20482 		}
20483 		ZVAL_COPY(&generator->key, key);
20484 
20485 		if (Z_TYPE(generator->key) == IS_LONG
20486 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20487 		) {
20488 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20489 		}
20490 	} else {
20491 		/* If no key was specified we use auto-increment keys */
20492 		generator->largest_used_integer_key++;
20493 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20494 	}
20495 
20496 	if (RETURN_VALUE_USED(opline)) {
20497 		/* If the return value of yield is used set the send
20498 		 * target and initialize it to NULL */
20499 		generator->send_target = EX_VAR(opline->result.var);
20500 		ZVAL_NULL(generator->send_target);
20501 	} else {
20502 		generator->send_target = NULL;
20503 	}
20504 
20505 	/* We increment to the next op, so we are at the correct position when the
20506 	 * generator is resumed. */
20507 	ZEND_VM_INC_OPCODE();
20508 
20509 	/* The GOTO VM uses a local opline variable. We need to set the opline
20510 	 * variable in execute_data so we don't resume at an old position. */
20511 	SAVE_OPLINE();
20512 
20513 	ZEND_VM_RETURN();
20514 }
20515 
ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20516 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20517 {
20518 	USE_OPLINE
20519 	zval *op1;
20520 	zend_string *type;
20521 
20522 	SAVE_OPLINE();
20523 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20524 	type = zend_zval_get_legacy_type(op1);
20525 	if (EXPECTED(type)) {
20526 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
20527 	} else {
20528 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
20529 	}
20530 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20531 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20532 }
20533 
ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20534 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20535 {
20536 	USE_OPLINE
20537 	zval *op1, *op2;
20538 	zend_bool result;
20539 
20540 	SAVE_OPLINE();
20541 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20542 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20543 	result = fast_is_identical_function(op1, op2);
20544 
20545 	ZEND_VM_SMART_BRANCH(result, 1);
20546 }
20547 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20548 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20549 {
20550 #if 0
20551 	USE_OPLINE
20552 #endif
20553 
20554 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20555         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20556 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20557         }
20558 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20559 	} else {
20560 		if (IS_CV == IS_UNUSED) {
20561 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20562 		}
20563 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20564 	}
20565 }
20566 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20567 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20568 {
20569 #if 0
20570 	USE_OPLINE
20571 #endif
20572 
20573 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20574 		/* Behave like FETCH_OBJ_W */
20575 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20576 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20577 		}
20578 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20579 	} else {
20580 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20581 	}
20582 }
20583 
ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20584 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20585 {
20586 	USE_OPLINE
20587 	zend_string **rope;
20588 	zval *var;
20589 
20590 	/* op1 and result are the same */
20591 	rope = (zend_string**)EX_VAR(opline->op1.var);
20592 	if (IS_CV == IS_CONST) {
20593 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20594 		rope[opline->extended_value] = Z_STR_P(var);
20595 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20596 			Z_ADDREF_P(var);
20597 		}
20598 	} else {
20599 		var = EX_VAR(opline->op2.var);
20600 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20601 			if (IS_CV == IS_CV) {
20602 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20603 			} else {
20604 				rope[opline->extended_value] = Z_STR_P(var);
20605 			}
20606 		} else {
20607 			SAVE_OPLINE();
20608 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20609 				ZVAL_UNDEFINED_OP2();
20610 			}
20611 			rope[opline->extended_value] = zval_get_string_func(var);
20612 
20613 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20614 		}
20615 	}
20616 	ZEND_VM_NEXT_OPCODE();
20617 }
20618 
ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20619 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20620 {
20621 	USE_OPLINE
20622 	zend_string **rope;
20623 	zval *var, *ret;
20624 	uint32_t i;
20625 	size_t len = 0;
20626 	char *target;
20627 
20628 	rope = (zend_string**)EX_VAR(opline->op1.var);
20629 	if (IS_CV == IS_CONST) {
20630 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20631 		rope[opline->extended_value] = Z_STR_P(var);
20632 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20633 			Z_ADDREF_P(var);
20634 		}
20635 	} else {
20636 		var = EX_VAR(opline->op2.var);
20637 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20638 			if (IS_CV == IS_CV) {
20639 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20640 			} else {
20641 				rope[opline->extended_value] = Z_STR_P(var);
20642 			}
20643 		} else {
20644 			SAVE_OPLINE();
20645 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20646 				ZVAL_UNDEFINED_OP2();
20647 			}
20648 			rope[opline->extended_value] = zval_get_string_func(var);
20649 
20650 			if (UNEXPECTED(EG(exception))) {
20651 				for (i = 0; i <= opline->extended_value; i++) {
20652 					zend_string_release_ex(rope[i], 0);
20653 				}
20654 				ZVAL_UNDEF(EX_VAR(opline->result.var));
20655 				HANDLE_EXCEPTION();
20656 			}
20657 		}
20658 	}
20659 	for (i = 0; i <= opline->extended_value; i++) {
20660 		len += ZSTR_LEN(rope[i]);
20661 	}
20662 	ret = EX_VAR(opline->result.var);
20663 	ZVAL_STR(ret, zend_string_alloc(len, 0));
20664 	target = Z_STRVAL_P(ret);
20665 	for (i = 0; i <= opline->extended_value; i++) {
20666 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
20667 		target += ZSTR_LEN(rope[i]);
20668 		zend_string_release_ex(rope[i], 0);
20669 	}
20670 	*target = '\0';
20671 
20672 	ZEND_VM_NEXT_OPCODE();
20673 }
20674 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20675 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20676 {
20677 	USE_OPLINE
20678 	zval *expr_ptr, new_expr;
20679 
20680 	SAVE_OPLINE();
20681 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20682 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20683 		expr_ptr = NULL;
20684 		if (Z_ISREF_P(expr_ptr)) {
20685 			Z_ADDREF_P(expr_ptr);
20686 		} else {
20687 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20688 		}
20689 
20690 	} else {
20691 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20692 		if (IS_TMP_VAR == IS_TMP_VAR) {
20693 			/* pass */
20694 		} else if (IS_TMP_VAR == IS_CONST) {
20695 			Z_TRY_ADDREF_P(expr_ptr);
20696 		} else if (IS_TMP_VAR == IS_CV) {
20697 			ZVAL_DEREF(expr_ptr);
20698 			Z_TRY_ADDREF_P(expr_ptr);
20699 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20700 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20701 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20702 
20703 				expr_ptr = Z_REFVAL_P(expr_ptr);
20704 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20705 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20706 					expr_ptr = &new_expr;
20707 					efree_size(ref, sizeof(zend_reference));
20708 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20709 					Z_ADDREF_P(expr_ptr);
20710 				}
20711 			}
20712 		}
20713 	}
20714 
20715 	if (IS_CV != IS_UNUSED) {
20716 		zval *offset = EX_VAR(opline->op2.var);
20717 		zend_string *str;
20718 		zend_ulong hval;
20719 
20720 add_again:
20721 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20722 			str = Z_STR_P(offset);
20723 			if (IS_CV != IS_CONST) {
20724 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20725 					goto num_index;
20726 				}
20727 			}
20728 str_index:
20729 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20730 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20731 			hval = Z_LVAL_P(offset);
20732 num_index:
20733 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20734 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20735 			offset = Z_REFVAL_P(offset);
20736 			goto add_again;
20737 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20738 			str = ZSTR_EMPTY_ALLOC();
20739 			goto str_index;
20740 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20741 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
20742 			goto num_index;
20743 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20744 			hval = 0;
20745 			goto num_index;
20746 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20747 			hval = 1;
20748 			goto num_index;
20749 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20750 			zend_use_resource_as_offset(offset);
20751 			hval = Z_RES_HANDLE_P(offset);
20752 			goto num_index;
20753 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20754 			ZVAL_UNDEFINED_OP2();
20755 			str = ZSTR_EMPTY_ALLOC();
20756 			goto str_index;
20757 		} else {
20758 			zend_illegal_offset();
20759 			zval_ptr_dtor_nogc(expr_ptr);
20760 		}
20761 
20762 	} else {
20763 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20764 			zend_cannot_add_element();
20765 			zval_ptr_dtor_nogc(expr_ptr);
20766 		}
20767 	}
20768 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20769 }
20770 
ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20771 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20772 {
20773 	zval *array;
20774 	uint32_t size;
20775 	USE_OPLINE
20776 
20777 	array = EX_VAR(opline->result.var);
20778 	if (IS_TMP_VAR != IS_UNUSED) {
20779 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20780 		ZVAL_ARR(array, zend_new_array(size));
20781 		/* Explicitly initialize array as not-packed if flag is set */
20782 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20783 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
20784 		}
20785 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20786 	} else {
20787 		ZVAL_ARR(array, zend_new_array(0));
20788 		ZEND_VM_NEXT_OPCODE();
20789 	}
20790 }
20791 
ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20793 {
20794 	USE_OPLINE
20795 
20796 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20797 
20798 	SAVE_OPLINE();
20799 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20800 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20801 	}
20802 
20803 	/* Destroy the previously yielded value */
20804 	zval_ptr_dtor(&generator->value);
20805 
20806 	/* Destroy the previously yielded key */
20807 	zval_ptr_dtor(&generator->key);
20808 
20809 	/* Set the new yielded value */
20810 	if (IS_TMP_VAR != IS_UNUSED) {
20811 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20812 			/* Constants and temporary variables aren't yieldable by reference,
20813 			 * but we still allow them with a notice. */
20814 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
20815 				zval *value;
20816 
20817 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20818 
20819 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20820 				ZVAL_COPY_VALUE(&generator->value, value);
20821 				if (IS_TMP_VAR == IS_CONST) {
20822 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20823 						Z_ADDREF(generator->value);
20824 					}
20825 				}
20826 			} else {
20827 				zval *value_ptr = NULL;
20828 
20829 				/* If a function call result is yielded and the function did
20830 				 * not return by reference we throw a notice. */
20831 				do {
20832 					if (IS_TMP_VAR == IS_VAR) {
20833 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
20834 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
20835 						 && !Z_ISREF_P(value_ptr)) {
20836 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20837 							ZVAL_COPY(&generator->value, value_ptr);
20838 							break;
20839 						}
20840 					}
20841 					if (Z_ISREF_P(value_ptr)) {
20842 						Z_ADDREF_P(value_ptr);
20843 					} else {
20844 						ZVAL_MAKE_REF_EX(value_ptr, 2);
20845 					}
20846 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
20847 				} while (0);
20848 
20849 			}
20850 		} else {
20851 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20852 
20853 			/* Consts, temporary variables and references need copying */
20854 			if (IS_TMP_VAR == IS_CONST) {
20855 				ZVAL_COPY_VALUE(&generator->value, value);
20856 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20857 					Z_ADDREF(generator->value);
20858 				}
20859 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20860 				ZVAL_COPY_VALUE(&generator->value, value);
20861             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20862 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20863 
20864 			} else {
20865 				ZVAL_COPY_VALUE(&generator->value, value);
20866 				if (IS_TMP_VAR == IS_CV) {
20867 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20868 				}
20869 			}
20870 		}
20871 	} else {
20872 		/* If no value was specified yield null */
20873 		ZVAL_NULL(&generator->value);
20874 	}
20875 
20876 	/* Set the new yielded key */
20877 	if (IS_CV != IS_UNUSED) {
20878 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20879 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
20880 			key = Z_REFVAL_P(key);
20881 		}
20882 		ZVAL_COPY(&generator->key, key);
20883 
20884 		if (Z_TYPE(generator->key) == IS_LONG
20885 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20886 		) {
20887 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20888 		}
20889 	} else {
20890 		/* If no key was specified we use auto-increment keys */
20891 		generator->largest_used_integer_key++;
20892 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20893 	}
20894 
20895 	if (RETURN_VALUE_USED(opline)) {
20896 		/* If the return value of yield is used set the send
20897 		 * target and initialize it to NULL */
20898 		generator->send_target = EX_VAR(opline->result.var);
20899 		ZVAL_NULL(generator->send_target);
20900 	} else {
20901 		generator->send_target = NULL;
20902 	}
20903 
20904 	/* We increment to the next op, so we are at the correct position when the
20905 	 * generator is resumed. */
20906 	ZEND_VM_INC_OPCODE();
20907 
20908 	/* The GOTO VM uses a local opline variable. We need to set the opline
20909 	 * variable in execute_data so we don't resume at an old position. */
20910 	SAVE_OPLINE();
20911 
20912 	ZEND_VM_RETURN();
20913 }
20914 
ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20915 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20916 {
20917 	USE_OPLINE
20918 	zval *closure, *var;
20919 
20920 	closure = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20921 	if (opline->extended_value & ZEND_BIND_REF) {
20922 		/* By-ref binding */
20923 		var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
20924 		if (Z_ISREF_P(var)) {
20925 			Z_ADDREF_P(var);
20926 		} else {
20927 			ZVAL_MAKE_REF_EX(var, 2);
20928 		}
20929 	} else {
20930 		var = EX_VAR(opline->op2.var);
20931 		if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
20932 			SAVE_OPLINE();
20933 			var = ZVAL_UNDEFINED_OP2();
20934 			if (UNEXPECTED(EG(exception))) {
20935 				HANDLE_EXCEPTION();
20936 			}
20937 		}
20938 		ZVAL_DEREF(var);
20939 		Z_TRY_ADDREF_P(var);
20940 	}
20941 
20942 	zend_closure_bind_var_ex(closure,
20943 		(opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
20944 	ZEND_VM_NEXT_OPCODE();
20945 }
20946 
zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)20947 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
20948 {
20949 	USE_OPLINE
20950 	zval *var_ptr;
20951 
20952 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
20953 
20954 	SAVE_OPLINE();
20955 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
20956 		ZVAL_NULL(var_ptr);
20957 		ZVAL_UNDEFINED_OP1();
20958 	}
20959 
20960 	do {
20961 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
20962 			zend_reference *ref = Z_REF_P(var_ptr);
20963 			var_ptr = Z_REFVAL_P(var_ptr);
20964 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
20965 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
20966 				break;
20967 			}
20968 		}
20969 		increment_function(var_ptr);
20970 	} while (0);
20971 
20972 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20973 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
20974 	}
20975 
20976 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20977 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20978 }
20979 
ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20980 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20981 {
20982 	USE_OPLINE
20983 	zval *var_ptr;
20984 
20985 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
20986 
20987 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
20988 		fast_long_increment_function(var_ptr);
20989 		if (UNEXPECTED(0)) {
20990 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
20991 		}
20992 		ZEND_VM_NEXT_OPCODE();
20993 	}
20994 
20995 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20996 }
20997 
ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20998 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20999 {
21000 	USE_OPLINE
21001 	zval *var_ptr;
21002 
21003 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21004 
21005 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21006 		fast_long_increment_function(var_ptr);
21007 		if (UNEXPECTED(1)) {
21008 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21009 		}
21010 		ZEND_VM_NEXT_OPCODE();
21011 	}
21012 
21013 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21014 }
21015 
zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21016 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21017 {
21018 	USE_OPLINE
21019 	zval *var_ptr;
21020 
21021 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21022 
21023 	SAVE_OPLINE();
21024 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21025 		ZVAL_NULL(var_ptr);
21026 		ZVAL_UNDEFINED_OP1();
21027 	}
21028 
21029 	do {
21030 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21031 			zend_reference *ref = Z_REF_P(var_ptr);
21032 			var_ptr = Z_REFVAL_P(var_ptr);
21033 
21034 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21035 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
21036 				break;
21037 			}
21038 		}
21039 		decrement_function(var_ptr);
21040 	} while (0);
21041 
21042 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21043 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21044 	}
21045 
21046 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21047 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21048 }
21049 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21050 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21051 {
21052 	USE_OPLINE
21053 	zval *var_ptr;
21054 
21055 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21056 
21057 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21058 		fast_long_decrement_function(var_ptr);
21059 		if (UNEXPECTED(0)) {
21060 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21061 		}
21062 		ZEND_VM_NEXT_OPCODE();
21063 	}
21064 
21065 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21066 }
21067 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21068 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21069 {
21070 	USE_OPLINE
21071 	zval *var_ptr;
21072 
21073 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21074 
21075 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21076 		fast_long_decrement_function(var_ptr);
21077 		if (UNEXPECTED(1)) {
21078 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21079 		}
21080 		ZEND_VM_NEXT_OPCODE();
21081 	}
21082 
21083 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21084 }
21085 
zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21086 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21087 {
21088 	USE_OPLINE
21089 	zval *var_ptr;
21090 
21091 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21092 
21093 	SAVE_OPLINE();
21094 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21095 		ZVAL_NULL(var_ptr);
21096 		ZVAL_UNDEFINED_OP1();
21097 	}
21098 
21099 	do {
21100 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21101 			zend_reference *ref = Z_REF_P(var_ptr);
21102 			var_ptr = Z_REFVAL_P(var_ptr);
21103 
21104 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21105 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
21106 				break;
21107 			}
21108 		}
21109 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21110 
21111 		increment_function(var_ptr);
21112 	} while (0);
21113 
21114 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21115 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21116 }
21117 
ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21118 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21119 {
21120 	USE_OPLINE
21121 	zval *var_ptr;
21122 
21123 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21124 
21125 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21126 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
21127 		fast_long_increment_function(var_ptr);
21128 		ZEND_VM_NEXT_OPCODE();
21129 	}
21130 
21131 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21132 }
21133 
zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21134 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21135 {
21136 	USE_OPLINE
21137 	zval *var_ptr;
21138 
21139 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21140 
21141 	SAVE_OPLINE();
21142 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21143 		ZVAL_NULL(var_ptr);
21144 		ZVAL_UNDEFINED_OP1();
21145 	}
21146 
21147 	do {
21148 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21149 			zend_reference *ref = Z_REF_P(var_ptr);
21150 			var_ptr = Z_REFVAL_P(var_ptr);
21151 
21152 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21153 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
21154 				break;
21155 			}
21156 		}
21157 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21158 
21159 		decrement_function(var_ptr);
21160 	} while (0);
21161 
21162 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21163 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21164 }
21165 
ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21166 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21167 {
21168 	USE_OPLINE
21169 	zval *var_ptr;
21170 
21171 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21172 
21173 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21174 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
21175 		fast_long_decrement_function(var_ptr);
21176 		ZEND_VM_NEXT_OPCODE();
21177 	}
21178 
21179 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21180 }
21181 
ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21182 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21183 {
21184 	USE_OPLINE
21185 	zval *retval_ptr;
21186 	zval *return_value;
21187 
21188 	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21189 	return_value = EX(return_value);
21190 
21191 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
21192 		SAVE_OPLINE();
21193 		retval_ptr = ZVAL_UNDEFINED_OP1();
21194 		if (return_value) {
21195 			ZVAL_NULL(return_value);
21196 		}
21197 	} else if (!return_value) {
21198 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
21199 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
21200 				SAVE_OPLINE();
21201 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
21202 			}
21203 		}
21204 	} else {
21205 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
21206 			ZVAL_COPY_VALUE(return_value, retval_ptr);
21207 			if (IS_VAR == IS_CONST) {
21208 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
21209 					Z_ADDREF_P(return_value);
21210 				}
21211 			}
21212 		} else if (IS_VAR == IS_CV) {
21213 			do {
21214 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
21215 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
21216 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
21217 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
21218 							ZVAL_COPY_VALUE(return_value, retval_ptr);
21219 							if (GC_MAY_LEAK(ref)) {
21220 								SAVE_OPLINE();
21221 								gc_possible_root(ref);
21222 							}
21223 							ZVAL_NULL(retval_ptr);
21224 							break;
21225 						} else {
21226 							Z_ADDREF_P(retval_ptr);
21227 						}
21228 					} else {
21229 						retval_ptr = Z_REFVAL_P(retval_ptr);
21230 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
21231 							Z_ADDREF_P(retval_ptr);
21232 						}
21233 					}
21234 				}
21235 				ZVAL_COPY_VALUE(return_value, retval_ptr);
21236 			} while (0);
21237 		} else /* if (IS_VAR == IS_VAR) */ {
21238 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
21239 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
21240 
21241 				retval_ptr = Z_REFVAL_P(retval_ptr);
21242 				ZVAL_COPY_VALUE(return_value, retval_ptr);
21243 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21244 					efree_size(ref, sizeof(zend_reference));
21245 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
21246 					Z_ADDREF_P(retval_ptr);
21247 				}
21248 			} else {
21249 				ZVAL_COPY_VALUE(return_value, retval_ptr);
21250 			}
21251 		}
21252 	}
21253 
21254 
21255 
21256 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21257 }
21258 
ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21259 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21260 {
21261 	USE_OPLINE
21262 	zval *retval_ptr;
21263 	zval *return_value;
21264 
21265 	SAVE_OPLINE();
21266 
21267 	return_value = EX(return_value);
21268 
21269 	do {
21270 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
21271 		    (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
21272 			/* Not supposed to happen, but we'll allow it */
21273 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
21274 
21275 			retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21276 			if (!return_value) {
21277 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21278 			} else {
21279 				if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
21280 					ZVAL_COPY_VALUE(return_value, retval_ptr);
21281 					break;
21282 				}
21283 
21284 				ZVAL_NEW_REF(return_value, retval_ptr);
21285 				if (IS_VAR == IS_CONST) {
21286 					Z_TRY_ADDREF_P(retval_ptr);
21287 				}
21288 			}
21289 			break;
21290 		}
21291 
21292 		retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21293 
21294 		if (IS_VAR == IS_VAR) {
21295 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
21296 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
21297 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
21298 				if (return_value) {
21299 					ZVAL_NEW_REF(return_value, retval_ptr);
21300 				} else {
21301 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21302 				}
21303 				break;
21304 			}
21305 		}
21306 
21307 		if (return_value) {
21308 			if (Z_ISREF_P(retval_ptr)) {
21309 				Z_ADDREF_P(retval_ptr);
21310 			} else {
21311 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
21312 			}
21313 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
21314 		}
21315 
21316 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21317 	} while (0);
21318 
21319 
21320 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21321 }
21322 
ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21323 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21324 {
21325 	USE_OPLINE
21326 	zval *retval;
21327 
21328 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
21329 
21330 	SAVE_OPLINE();
21331 	retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21332 
21333 	/* Copy return value into generator->retval */
21334 	if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
21335 		ZVAL_COPY_VALUE(&generator->retval, retval);
21336 		if (IS_VAR == IS_CONST) {
21337 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
21338 				Z_ADDREF(generator->retval);
21339 			}
21340 		}
21341 	} else if (IS_VAR == IS_CV) {
21342 		ZVAL_COPY_DEREF(&generator->retval, retval);
21343 	} else /* if (IS_VAR == IS_VAR) */ {
21344 		if (UNEXPECTED(Z_ISREF_P(retval))) {
21345 			zend_refcounted *ref = Z_COUNTED_P(retval);
21346 
21347 			retval = Z_REFVAL_P(retval);
21348 			ZVAL_COPY_VALUE(&generator->retval, retval);
21349 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21350 				efree_size(ref, sizeof(zend_reference));
21351 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
21352 				Z_ADDREF_P(retval);
21353 			}
21354 		} else {
21355 			ZVAL_COPY_VALUE(&generator->retval, retval);
21356 		}
21357 	}
21358 
21359 	/* Close the generator to free up resources */
21360 	zend_generator_close(generator, 1);
21361 
21362 	/* Pass execution back to handling code */
21363 	ZEND_VM_RETURN();
21364 }
21365 
ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21366 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21367 {
21368 	USE_OPLINE
21369 	zval *arg, *param;
21370 
21371 	SAVE_OPLINE();
21372 
21373 	arg = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
21374 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
21375 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
21376 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
21377 		Z_TRY_ADDREF_P(arg);
21378 		ZVAL_NEW_REF(param, arg);
21379 	} else {
21380 		ZVAL_COPY(param, arg);
21381 	}
21382 
21383 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21384 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21385 }
21386 
ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21387 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21388 {
21389 	USE_OPLINE
21390 	zval *expr;
21391 	zval *result = EX_VAR(opline->result.var);
21392 	HashTable *ht;
21393 
21394 	SAVE_OPLINE();
21395 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21396 
21397 	switch (opline->extended_value) {
21398 		case IS_LONG:
21399 			ZVAL_LONG(result, zval_get_long(expr));
21400 			break;
21401 		case IS_DOUBLE:
21402 			ZVAL_DOUBLE(result, zval_get_double(expr));
21403 			break;
21404 		case IS_STRING:
21405 			ZVAL_STR(result, zval_get_string(expr));
21406 			break;
21407 		default:
21408 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
21409 			if (IS_VAR & (IS_VAR|IS_CV)) {
21410 				ZVAL_DEREF(expr);
21411 			}
21412 			/* If value is already of correct type, return it directly */
21413 			if (Z_TYPE_P(expr) == opline->extended_value) {
21414 				ZVAL_COPY_VALUE(result, expr);
21415 				if (IS_VAR == IS_CONST) {
21416 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
21417 				} else if (IS_VAR != IS_TMP_VAR) {
21418 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
21419 				}
21420 
21421 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21422 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21423 			}
21424 
21425 			if (opline->extended_value == IS_ARRAY) {
21426 				if (IS_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
21427 					if (Z_TYPE_P(expr) != IS_NULL) {
21428 						ZVAL_ARR(result, zend_new_array(1));
21429 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
21430 						if (IS_VAR == IS_CONST) {
21431 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
21432 						} else {
21433 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
21434 						}
21435 					} else {
21436 						ZVAL_EMPTY_ARRAY(result);
21437 					}
21438 				} else {
21439 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
21440 					if (obj_ht) {
21441 						/* fast copy */
21442 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
21443 							(Z_OBJCE_P(expr)->default_properties_count ||
21444 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
21445 							 GC_IS_RECURSIVE(obj_ht))));
21446 						zend_release_properties(obj_ht);
21447 					} else {
21448 						ZVAL_EMPTY_ARRAY(result);
21449 					}
21450 				}
21451 			} else {
21452 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
21453 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
21454 				if (Z_TYPE_P(expr) == IS_ARRAY) {
21455 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
21456 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
21457 						/* TODO: try not to duplicate immutable arrays as well ??? */
21458 						ht = zend_array_dup(ht);
21459 					}
21460 					Z_OBJ_P(result)->properties = ht;
21461 				} else if (Z_TYPE_P(expr) != IS_NULL) {
21462 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
21463 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
21464 					if (IS_VAR == IS_CONST) {
21465 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
21466 					} else {
21467 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
21468 					}
21469 				}
21470 			}
21471 	}
21472 
21473 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21474 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21475 }
21476 
ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21477 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21478 {
21479 	USE_OPLINE
21480 	zval *array_ptr, *result;
21481 
21482 	SAVE_OPLINE();
21483 
21484 	array_ptr = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
21485 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
21486 		result = EX_VAR(opline->result.var);
21487 		ZVAL_COPY_VALUE(result, array_ptr);
21488 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
21489 			Z_ADDREF_P(array_ptr);
21490 		}
21491 		Z_FE_POS_P(result) = 0;
21492 
21493 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21494 		ZEND_VM_NEXT_OPCODE();
21495 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
21496 		zend_object *zobj = Z_OBJ_P(array_ptr);
21497 		if (!zobj->ce->get_iterator) {
21498 			HashTable *properties = zobj->properties;
21499 			if (properties) {
21500 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
21501 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
21502 						GC_DELREF(properties);
21503 					}
21504 					properties = zobj->properties = zend_array_dup(properties);
21505 				}
21506 			} else {
21507 				properties = zobj->handlers->get_properties(zobj);
21508 			}
21509 
21510 			result = EX_VAR(opline->result.var);
21511 			ZVAL_COPY_VALUE(result, array_ptr);
21512 			if (IS_VAR != IS_TMP_VAR) {
21513 				Z_ADDREF_P(array_ptr);
21514 			}
21515 
21516 			if (zend_hash_num_elements(properties) == 0) {
21517 				Z_FE_ITER_P(result) = (uint32_t) -1;
21518 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21519 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21520 			}
21521 
21522 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
21523 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21524 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21525 		} else {
21526 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
21527 
21528 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21529 			if (UNEXPECTED(EG(exception))) {
21530 				HANDLE_EXCEPTION();
21531 			} else if (is_empty) {
21532 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
21533 			} else {
21534 				ZEND_VM_NEXT_OPCODE();
21535 			}
21536 		}
21537 	} else {
21538 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
21539 		ZVAL_UNDEF(EX_VAR(opline->result.var));
21540 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
21541 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21542 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21543 	}
21544 }
21545 
ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21546 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21547 {
21548 	USE_OPLINE
21549 	zval *array_ptr, *array_ref;
21550 
21551 	SAVE_OPLINE();
21552 
21553 	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
21554 		array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21555 		if (Z_ISREF_P(array_ref)) {
21556 			array_ptr = Z_REFVAL_P(array_ref);
21557 		}
21558 	} else {
21559 		array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21560 	}
21561 
21562 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
21563 		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
21564 			if (array_ptr == array_ref) {
21565 				ZVAL_NEW_REF(array_ref, array_ref);
21566 				array_ptr = Z_REFVAL_P(array_ref);
21567 			}
21568 			Z_ADDREF_P(array_ref);
21569 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
21570 		} else {
21571 			array_ref = EX_VAR(opline->result.var);
21572 			ZVAL_NEW_REF(array_ref, array_ptr);
21573 			array_ptr = Z_REFVAL_P(array_ref);
21574 		}
21575 		if (IS_VAR == IS_CONST) {
21576 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
21577 		} else {
21578 			SEPARATE_ARRAY(array_ptr);
21579 		}
21580 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
21581 
21582 		if (IS_VAR == IS_VAR) {
21583 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21584 		}
21585 		ZEND_VM_NEXT_OPCODE();
21586 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
21587 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
21588 			HashTable *properties;
21589 			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
21590 				if (array_ptr == array_ref) {
21591 					ZVAL_NEW_REF(array_ref, array_ref);
21592 					array_ptr = Z_REFVAL_P(array_ref);
21593 				}
21594 				Z_ADDREF_P(array_ref);
21595 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
21596 			} else {
21597 				array_ptr = EX_VAR(opline->result.var);
21598 				ZVAL_COPY_VALUE(array_ptr, array_ref);
21599 			}
21600 			if (Z_OBJ_P(array_ptr)->properties
21601 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
21602 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
21603 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
21604 				}
21605 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
21606 			}
21607 
21608 			properties = Z_OBJPROP_P(array_ptr);
21609 			if (zend_hash_num_elements(properties) == 0) {
21610 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
21611 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21612 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21613 			}
21614 
21615 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
21616 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21617 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21618 		} else {
21619 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
21620 
21621 			if (IS_VAR == IS_VAR) {
21622 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21623 			} else {
21624 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21625 			}
21626 			if (UNEXPECTED(EG(exception))) {
21627 				HANDLE_EXCEPTION();
21628 			} else if (is_empty) {
21629 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
21630 			} else {
21631 				ZEND_VM_NEXT_OPCODE();
21632 			}
21633 		}
21634 	} else {
21635 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
21636 		ZVAL_UNDEF(EX_VAR(opline->result.var));
21637 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
21638 		if (IS_VAR == IS_VAR) {
21639 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21640 		} else {
21641 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21642 		}
21643 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21644 	}
21645 }
21646 
ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21647 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21648 {
21649 	USE_OPLINE
21650 	zval *array;
21651 	zval *value;
21652 	uint32_t value_type;
21653 	HashTable *fe_ht;
21654 	HashPosition pos;
21655 	Bucket *p;
21656 
21657 	array = EX_VAR(opline->op1.var);
21658 	SAVE_OPLINE();
21659 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
21660 		fe_ht = Z_ARRVAL_P(array);
21661 		pos = Z_FE_POS_P(array);
21662 		p = fe_ht->arData + pos;
21663 		while (1) {
21664 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
21665 				/* reached end of iteration */
21666 fe_fetch_r_exit:
21667 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
21668 				ZEND_VM_CONTINUE();
21669 			}
21670 			pos++;
21671 			value = &p->val;
21672 			value_type = Z_TYPE_INFO_P(value);
21673 			if (EXPECTED(value_type != IS_UNDEF)) {
21674 				if (UNEXPECTED(value_type == IS_INDIRECT)) {
21675 					value = Z_INDIRECT_P(value);
21676 					value_type = Z_TYPE_INFO_P(value);
21677 					if (EXPECTED(value_type != IS_UNDEF)) {
21678 						break;
21679 					}
21680 				} else {
21681 					break;
21682 				}
21683 			}
21684 			p++;
21685 		}
21686 		Z_FE_POS_P(array) = pos;
21687 		if (RETURN_VALUE_USED(opline)) {
21688 			if (!p->key) {
21689 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
21690 			} else {
21691 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
21692 			}
21693 		}
21694 	} else {
21695 		zend_object_iterator *iter;
21696 
21697 		ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
21698 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
21699 			/* plain object */
21700 
21701 			fe_ht = Z_OBJPROP_P(array);
21702 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
21703 			p = fe_ht->arData + pos;
21704 			while (1) {
21705 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
21706 					/* reached end of iteration */
21707 					goto fe_fetch_r_exit;
21708 				}
21709 				pos++;
21710 				value = &p->val;
21711 				value_type = Z_TYPE_INFO_P(value);
21712 				if (EXPECTED(value_type != IS_UNDEF)) {
21713 					if (UNEXPECTED(value_type == IS_INDIRECT)) {
21714 						value = Z_INDIRECT_P(value);
21715 						value_type = Z_TYPE_INFO_P(value);
21716 						if (EXPECTED(value_type != IS_UNDEF)
21717 						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
21718 							break;
21719 						}
21720 					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
21721 							|| !p->key
21722 							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
21723 						break;
21724 					}
21725 				}
21726 				p++;
21727 			}
21728 			EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
21729 			if (RETURN_VALUE_USED(opline)) {
21730 				if (UNEXPECTED(!p->key)) {
21731 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
21732 				} else if (ZSTR_VAL(p->key)[0]) {
21733 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
21734 				} else {
21735 					const char *class_name, *prop_name;
21736 					size_t prop_name_len;
21737 					zend_unmangle_property_name_ex(
21738 						p->key, &class_name, &prop_name, &prop_name_len);
21739 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
21740 				}
21741 			}
21742 		} else {
21743 			if (EXPECTED(++iter->index > 0)) {
21744 				/* This could cause an endless loop if index becomes zero again.
21745 				 * In case that ever happens we need an additional flag. */
21746 				iter->funcs->move_forward(iter);
21747 				if (UNEXPECTED(EG(exception) != NULL)) {
21748 					UNDEF_RESULT();
21749 					HANDLE_EXCEPTION();
21750 				}
21751 				if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
21752 					/* reached end of iteration */
21753 					if (UNEXPECTED(EG(exception) != NULL)) {
21754 						UNDEF_RESULT();
21755 						HANDLE_EXCEPTION();
21756 					}
21757 					goto fe_fetch_r_exit;
21758 				}
21759 			}
21760 			value = iter->funcs->get_current_data(iter);
21761 			if (UNEXPECTED(EG(exception) != NULL)) {
21762 				UNDEF_RESULT();
21763 				HANDLE_EXCEPTION();
21764 			}
21765 			if (!value) {
21766 				/* failure in get_current_data */
21767 				goto fe_fetch_r_exit;
21768 			}
21769 			if (RETURN_VALUE_USED(opline)) {
21770 				if (iter->funcs->get_current_key) {
21771 					iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
21772 					if (UNEXPECTED(EG(exception) != NULL)) {
21773 						UNDEF_RESULT();
21774 						HANDLE_EXCEPTION();
21775 					}
21776 				} else {
21777 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
21778 				}
21779 			}
21780 			value_type = Z_TYPE_INFO_P(value);
21781 		}
21782 	}
21783 
21784 	if (EXPECTED(opline->op2_type == IS_CV)) {
21785 		zval *variable_ptr = EX_VAR(opline->op2.var);
21786 		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
21787 	} else {
21788 		zval *res = EX_VAR(opline->op2.var);
21789 		zend_refcounted *gc = Z_COUNTED_P(value);
21790 
21791 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
21792 		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
21793 			GC_ADDREF(gc);
21794 		}
21795 	}
21796 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21797 }
21798 
ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21799 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21800 {
21801 	USE_OPLINE
21802 	zval *array;
21803 	zval *value;
21804 	uint32_t value_type;
21805 	HashTable *fe_ht;
21806 	HashPosition pos;
21807 	Bucket *p;
21808 
21809 	array = EX_VAR(opline->op1.var);
21810 	SAVE_OPLINE();
21811 
21812 	ZVAL_DEREF(array);
21813 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
21814 		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
21815 		fe_ht = Z_ARRVAL_P(array);
21816 		p = fe_ht->arData + pos;
21817 		while (1) {
21818 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
21819 				/* reached end of iteration */
21820 				goto fe_fetch_w_exit;
21821 			}
21822 			pos++;
21823 			value = &p->val;
21824 			value_type = Z_TYPE_INFO_P(value);
21825 			if (EXPECTED(value_type != IS_UNDEF)) {
21826 				if (UNEXPECTED(value_type == IS_INDIRECT)) {
21827 					value = Z_INDIRECT_P(value);
21828 					value_type = Z_TYPE_INFO_P(value);
21829 					if (EXPECTED(value_type != IS_UNDEF)) {
21830 						break;
21831 					}
21832 				} else {
21833 					break;
21834 				}
21835 			}
21836 			p++;
21837 		}
21838 		EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
21839 		if (RETURN_VALUE_USED(opline)) {
21840 			if (!p->key) {
21841 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
21842 			} else {
21843 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
21844 			}
21845 		}
21846 	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
21847 		zend_object_iterator *iter;
21848 
21849 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
21850 			/* plain object */
21851 
21852 			fe_ht = Z_OBJPROP_P(array);
21853 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
21854 			p = fe_ht->arData + pos;
21855 			while (1) {
21856 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
21857 					/* reached end of iteration */
21858 					goto fe_fetch_w_exit;
21859 				}
21860 				pos++;
21861 				value = &p->val;
21862 				value_type = Z_TYPE_INFO_P(value);
21863 				if (EXPECTED(value_type != IS_UNDEF)) {
21864 					if (UNEXPECTED(value_type == IS_INDIRECT)) {
21865 						value = Z_INDIRECT_P(value);
21866 						value_type = Z_TYPE_INFO_P(value);
21867 						if (EXPECTED(value_type != IS_UNDEF)
21868 						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
21869 							if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
21870 								zend_property_info *prop_info =
21871 									zend_get_typed_property_info_for_slot(Z_OBJ_P(array), value);
21872 								if (UNEXPECTED(prop_info)) {
21873 									ZVAL_NEW_REF(value, value);
21874 									ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
21875 									value_type = IS_REFERENCE_EX;
21876 								}
21877 							}
21878 							break;
21879 						}
21880 					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
21881 							|| !p->key
21882 							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
21883 						break;
21884 					}
21885 				}
21886 				p++;
21887 			}
21888 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
21889 			if (RETURN_VALUE_USED(opline)) {
21890 				if (UNEXPECTED(!p->key)) {
21891 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
21892 				} else if (ZSTR_VAL(p->key)[0]) {
21893 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
21894 				} else {
21895 					const char *class_name, *prop_name;
21896 					size_t prop_name_len;
21897 					zend_unmangle_property_name_ex(
21898 						p->key, &class_name, &prop_name, &prop_name_len);
21899 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
21900 				}
21901 			}
21902 		} else {
21903 			if (++iter->index > 0) {
21904 				/* This could cause an endless loop if index becomes zero again.
21905 				 * In case that ever happens we need an additional flag. */
21906 				iter->funcs->move_forward(iter);
21907 				if (UNEXPECTED(EG(exception) != NULL)) {
21908 					UNDEF_RESULT();
21909 					HANDLE_EXCEPTION();
21910 				}
21911 				if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
21912 					/* reached end of iteration */
21913 					if (UNEXPECTED(EG(exception) != NULL)) {
21914 						UNDEF_RESULT();
21915 						HANDLE_EXCEPTION();
21916 					}
21917 					goto fe_fetch_w_exit;
21918 				}
21919 			}
21920 			value = iter->funcs->get_current_data(iter);
21921 			if (UNEXPECTED(EG(exception) != NULL)) {
21922 				UNDEF_RESULT();
21923 				HANDLE_EXCEPTION();
21924 			}
21925 			if (!value) {
21926 				/* failure in get_current_data */
21927 				goto fe_fetch_w_exit;
21928 			}
21929 			if (RETURN_VALUE_USED(opline)) {
21930 				if (iter->funcs->get_current_key) {
21931 					iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
21932 					if (UNEXPECTED(EG(exception) != NULL)) {
21933 						UNDEF_RESULT();
21934 						HANDLE_EXCEPTION();
21935 					}
21936 				} else {
21937 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
21938 				}
21939 			}
21940 			value_type = Z_TYPE_INFO_P(value);
21941 		}
21942 	} else {
21943 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array));
21944 		if (UNEXPECTED(EG(exception))) {
21945 			UNDEF_RESULT();
21946 			HANDLE_EXCEPTION();
21947 		}
21948 fe_fetch_w_exit:
21949 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
21950 		ZEND_VM_CONTINUE();
21951 	}
21952 
21953 	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
21954 		zend_refcounted *gc = Z_COUNTED_P(value);
21955 		zval *ref;
21956 		ZVAL_NEW_EMPTY_REF(value);
21957 		ref = Z_REFVAL_P(value);
21958 		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
21959 	}
21960 	if (EXPECTED(opline->op2_type == IS_CV)) {
21961 		zval *variable_ptr = EX_VAR(opline->op2.var);
21962 		if (EXPECTED(variable_ptr != value)) {
21963 			zend_reference *ref;
21964 
21965 			ref = Z_REF_P(value);
21966 			GC_ADDREF(ref);
21967 			i_zval_ptr_dtor(variable_ptr);
21968 			ZVAL_REF(variable_ptr, ref);
21969 		}
21970 	} else {
21971 		Z_ADDREF_P(value);
21972 		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
21973 	}
21974 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21975 }
21976 
ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21977 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21978 {
21979 	USE_OPLINE
21980 	zval *value;
21981 	zval *ref = NULL;
21982 	bool ret;
21983 
21984 	SAVE_OPLINE();
21985 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21986 
21987 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
21988 		if (IS_VAR == IS_VAR) {
21989 			ref = value;
21990 		}
21991 		value = Z_REFVAL_P(value);
21992 	}
21993 
21994 	ret = i_zend_is_true(value);
21995 
21996 	if (UNEXPECTED(EG(exception))) {
21997 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21998 		ZVAL_UNDEF(EX_VAR(opline->result.var));
21999 		HANDLE_EXCEPTION();
22000 	}
22001 
22002 	if (ret) {
22003 		zval *result = EX_VAR(opline->result.var);
22004 
22005 		ZVAL_COPY_VALUE(result, value);
22006 		if (IS_VAR == IS_CONST) {
22007 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22008 		} else if (IS_VAR == IS_CV) {
22009 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22010 		} else if (IS_VAR == IS_VAR && ref) {
22011 			zend_reference *r = Z_REF_P(ref);
22012 
22013 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
22014 				efree_size(r, sizeof(zend_reference));
22015 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22016 				Z_ADDREF_P(result);
22017 			}
22018 		}
22019 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22020 	}
22021 
22022 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22023 	ZEND_VM_NEXT_OPCODE();
22024 }
22025 
ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22027 {
22028 	USE_OPLINE
22029 	zval *value;
22030 	zval *ref = NULL;
22031 
22032 	SAVE_OPLINE();
22033 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22034 
22035 	if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
22036 		if (IS_VAR & IS_VAR) {
22037 			ref = value;
22038 		}
22039 		value = Z_REFVAL_P(value);
22040 	}
22041 
22042 	if (Z_TYPE_P(value) > IS_NULL) {
22043 		zval *result = EX_VAR(opline->result.var);
22044 		ZVAL_COPY_VALUE(result, value);
22045 		if (IS_VAR == IS_CONST) {
22046 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22047 		} else if (IS_VAR == IS_CV) {
22048 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22049 		} else if ((IS_VAR & IS_VAR) && ref) {
22050 			zend_reference *r = Z_REF_P(ref);
22051 
22052 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
22053 				efree_size(r, sizeof(zend_reference));
22054 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22055 				Z_ADDREF_P(result);
22056 			}
22057 		}
22058 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22059 	}
22060 
22061 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22062 	ZEND_VM_NEXT_OPCODE();
22063 }
22064 
ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22065 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22066 {
22067 	USE_OPLINE
22068 	zval *val, *result;
22069 
22070 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22071 
22072 	if (Z_TYPE_P(val) > IS_NULL) {
22073 		do {
22074 			if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
22075 				val = Z_REFVAL_P(val);
22076 				if (Z_TYPE_P(val) <= IS_NULL) {
22077 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22078 					break;
22079 				}
22080 			}
22081 			ZEND_VM_NEXT_OPCODE();
22082 		} while (0);
22083 	}
22084 
22085 	result = EX_VAR(opline->result.var);
22086 	if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
22087 		ZVAL_NULL(result);
22088 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
22089 			SAVE_OPLINE();
22090 			ZVAL_UNDEFINED_OP1();
22091 			if (UNEXPECTED(EG(exception) != NULL)) {
22092 				HANDLE_EXCEPTION();
22093 			}
22094 		}
22095 	} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
22096 		ZVAL_FALSE(result);
22097 	} else {
22098 		ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
22099 		ZVAL_TRUE(result);
22100 	}
22101 
22102 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22103 }
22104 
ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22105 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22106 {
22107 	USE_OPLINE
22108 	zval *value;
22109 	zval *result = EX_VAR(opline->result.var);
22110 
22111 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22112 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
22113 		SAVE_OPLINE();
22114 		ZVAL_UNDEFINED_OP1();
22115 		ZVAL_NULL(result);
22116 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22117 	}
22118 
22119 	if (IS_VAR == IS_CV) {
22120 		ZVAL_COPY_DEREF(result, value);
22121 	} else if (IS_VAR == IS_VAR) {
22122 		if (UNEXPECTED(Z_ISREF_P(value))) {
22123 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
22124 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
22125 				efree_size(Z_REF_P(value), sizeof(zend_reference));
22126 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22127 				Z_ADDREF_P(result);
22128 			}
22129 		} else {
22130 			ZVAL_COPY_VALUE(result, value);
22131 		}
22132 	} else {
22133 		ZVAL_COPY_VALUE(result, value);
22134 		if (IS_VAR == IS_CONST) {
22135 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
22136 				Z_ADDREF_P(result);
22137 			}
22138 		}
22139 	}
22140 	ZEND_VM_NEXT_OPCODE();
22141 }
22142 
ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22143 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22144 {
22145 	USE_OPLINE
22146 	zval *varptr, *arg;
22147 
22148 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22149 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
22150 
22151 	if (IS_VAR == IS_CV) {
22152 		ZVAL_COPY(arg, varptr);
22153 	} else /* if (IS_VAR == IS_VAR) */ {
22154 		ZVAL_COPY_VALUE(arg, varptr);
22155 	}
22156 
22157 	ZEND_VM_NEXT_OPCODE();
22158 }
22159 
ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22160 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22161 {
22162 	USE_OPLINE
22163 	zval *op1, *op2;
22164 	zend_bool result;
22165 
22166 	SAVE_OPLINE();
22167 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22168 	op2 = RT_CONSTANT(opline, opline->op2);
22169 	result = fast_is_identical_function(op1, op2);
22170 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22171 
22172 	ZEND_VM_SMART_BRANCH(result, 1);
22173 }
22174 
ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22176 {
22177 	USE_OPLINE
22178 	zval *op1, *op2;
22179 	zend_bool result;
22180 
22181 	SAVE_OPLINE();
22182 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22183 	op2 = RT_CONSTANT(opline, opline->op2);
22184 	result = fast_is_identical_function(op1, op2);
22185 
22186 	ZEND_VM_SMART_BRANCH(result, 1);
22187 }
22188 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22189 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22190 {
22191 	USE_OPLINE
22192 	zval *op1, *op2;
22193 	zend_bool result;
22194 
22195 	SAVE_OPLINE();
22196 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22197 	op2 = RT_CONSTANT(opline, opline->op2);
22198 	result = fast_is_not_identical_function(op1, op2);
22199 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22200 
22201 	ZEND_VM_SMART_BRANCH(result, 1);
22202 }
22203 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22204 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22205 {
22206 	USE_OPLINE
22207 	zval *object;
22208 	zval *property;
22209 	zval *value;
22210 	zval *zptr;
22211 	void **cache_slot;
22212 	zend_property_info *prop_info;
22213 	zend_object *zobj;
22214 	zend_string *name, *tmp_name;
22215 
22216 	SAVE_OPLINE();
22217 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22218 	property = RT_CONSTANT(opline, opline->op2);
22219 
22220 	do {
22221 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
22222 
22223 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22224 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22225 				object = Z_REFVAL_P(object);
22226 				goto assign_op_object;
22227 			}
22228 			if (IS_VAR == IS_CV
22229 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22230 				ZVAL_UNDEFINED_OP1();
22231 			}
22232 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
22233 			break;
22234 		}
22235 
22236 assign_op_object:
22237 		/* here we are sure we are dealing with an object */
22238 		zobj = Z_OBJ_P(object);
22239 		if (IS_CONST == IS_CONST) {
22240 			name = Z_STR_P(property);
22241 		} else {
22242 			name = zval_try_get_tmp_string(property, &tmp_name);
22243 			if (UNEXPECTED(!name)) {
22244 				UNDEF_RESULT();
22245 				break;
22246 			}
22247 		}
22248 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
22249 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
22250 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22251 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22252 					ZVAL_NULL(EX_VAR(opline->result.var));
22253 				}
22254 			} else {
22255 				zval *orig_zptr = zptr;
22256 				zend_reference *ref;
22257 
22258 				do {
22259 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
22260 						ref = Z_REF_P(zptr);
22261 						zptr = Z_REFVAL_P(zptr);
22262 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22263 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22264 							break;
22265 						}
22266 					}
22267 
22268 					if (IS_CONST == IS_CONST) {
22269 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
22270 					} else {
22271 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
22272 					}
22273 					if (UNEXPECTED(prop_info)) {
22274 						/* special case for typed properties */
22275 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
22276 					} else {
22277 						zend_binary_op(zptr, zptr, value OPLINE_CC);
22278 					}
22279 				} while (0);
22280 
22281 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22282 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
22283 				}
22284 			}
22285 		} else {
22286 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
22287 		}
22288 		if (IS_CONST != IS_CONST) {
22289 			zend_tmp_string_release(tmp_name);
22290 		}
22291 	} while (0);
22292 
22293 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
22294 
22295 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22296 	/* assign_obj has two opcodes! */
22297 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22298 }
22299 
22300 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22301 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22302 {
22303 	USE_OPLINE
22304 	zval *var_ptr;
22305 	zval *value, *container, *dim;
22306 
22307 	SAVE_OPLINE();
22308 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22309 
22310 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22311 assign_dim_op_array:
22312 		SEPARATE_ARRAY(container);
22313 assign_dim_op_new_array:
22314 		dim = RT_CONSTANT(opline, opline->op2);
22315 		if (IS_CONST == IS_UNUSED) {
22316 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
22317 			if (UNEXPECTED(!var_ptr)) {
22318 				zend_cannot_add_element();
22319 				goto assign_dim_op_ret_null;
22320 			}
22321 		} else {
22322 			if (IS_CONST == IS_CONST) {
22323 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
22324 			} else {
22325 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
22326 			}
22327 			if (UNEXPECTED(!var_ptr)) {
22328 				goto assign_dim_op_ret_null;
22329 			}
22330 		}
22331 
22332 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
22333 
22334 		do {
22335 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
22336 				zend_reference *ref = Z_REF_P(var_ptr);
22337 				var_ptr = Z_REFVAL_P(var_ptr);
22338 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22339 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22340 					break;
22341 				}
22342 			}
22343 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
22344 		} while (0);
22345 
22346 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22347 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22348 		}
22349 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
22350 	} else {
22351 		if (EXPECTED(Z_ISREF_P(container))) {
22352 			container = Z_REFVAL_P(container);
22353 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22354 				goto assign_dim_op_array;
22355 			}
22356 		}
22357 
22358 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
22359 			zend_object *obj = Z_OBJ_P(container);
22360 
22361 			GC_ADDREF(obj);
22362 			dim = RT_CONSTANT(opline, opline->op2);
22363 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
22364 				dim = ZVAL_UNDEFINED_OP2();
22365 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
22366 				dim++;
22367 			}
22368 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
22369 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
22370 				zend_objects_store_del(obj);
22371 			}
22372 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
22373 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
22374 				ZVAL_UNDEFINED_OP1();
22375 			}
22376 			ZVAL_ARR(container, zend_new_array(8));
22377 			goto assign_dim_op_new_array;
22378 		} else {
22379 			dim = RT_CONSTANT(opline, opline->op2);
22380 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
22381 assign_dim_op_ret_null:
22382 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
22383 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22384 				ZVAL_NULL(EX_VAR(opline->result.var));
22385 			}
22386 		}
22387 	}
22388 
22389 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22390 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22391 }
22392 
ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22394 {
22395 	USE_OPLINE
22396 	zval *var_ptr;
22397 	zval *value;
22398 
22399 	SAVE_OPLINE();
22400 	value = RT_CONSTANT(opline, opline->op2);
22401 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22402 
22403 	do {
22404 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
22405 			zend_reference *ref = Z_REF_P(var_ptr);
22406 			var_ptr = Z_REFVAL_P(var_ptr);
22407 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22408 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22409 				break;
22410 			}
22411 		}
22412 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
22413 	} while (0);
22414 
22415 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22416 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22417 	}
22418 
22419 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22420 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22421 }
22422 
ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22423 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22424 {
22425 	USE_OPLINE
22426 	zval *object;
22427 	zval *property;
22428 	zval *zptr;
22429 	void **cache_slot;
22430 	zend_property_info *prop_info;
22431 	zend_object *zobj;
22432 	zend_string *name, *tmp_name;
22433 
22434 	SAVE_OPLINE();
22435 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22436 	property = RT_CONSTANT(opline, opline->op2);
22437 
22438 	do {
22439 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22440 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22441 				object = Z_REFVAL_P(object);
22442 				goto pre_incdec_object;
22443 			}
22444 			if (IS_VAR == IS_CV
22445 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22446 				ZVAL_UNDEFINED_OP1();
22447 			}
22448 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
22449 			break;
22450 		}
22451 
22452 pre_incdec_object:
22453 		/* here we are sure we are dealing with an object */
22454 		zobj = Z_OBJ_P(object);
22455 		if (IS_CONST == IS_CONST) {
22456 			name = Z_STR_P(property);
22457 		} else {
22458 			name = zval_try_get_tmp_string(property, &tmp_name);
22459 			if (UNEXPECTED(!name)) {
22460 				UNDEF_RESULT();
22461 				break;
22462 			}
22463 		}
22464 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
22465 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
22466 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22467 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22468 					ZVAL_NULL(EX_VAR(opline->result.var));
22469 				}
22470 			} else {
22471 				if (IS_CONST == IS_CONST) {
22472 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
22473 				} else {
22474 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
22475 				}
22476 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
22477 			}
22478 		} else {
22479 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
22480 		}
22481 		if (IS_CONST != IS_CONST) {
22482 			zend_tmp_string_release(tmp_name);
22483 		}
22484 	} while (0);
22485 
22486 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22487 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22488 }
22489 
ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22490 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22491 {
22492 	USE_OPLINE
22493 	zval *object;
22494 	zval *property;
22495 	zval *zptr;
22496 	void **cache_slot;
22497 	zend_property_info *prop_info;
22498 	zend_object *zobj;
22499 	zend_string *name, *tmp_name;
22500 
22501 	SAVE_OPLINE();
22502 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22503 	property = RT_CONSTANT(opline, opline->op2);
22504 
22505 	do {
22506 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22507 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22508 				object = Z_REFVAL_P(object);
22509 				goto post_incdec_object;
22510 			}
22511 			if (IS_VAR == IS_CV
22512 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22513 				ZVAL_UNDEFINED_OP1();
22514 			}
22515 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
22516 			break;
22517 		}
22518 
22519 post_incdec_object:
22520 		/* here we are sure we are dealing with an object */
22521 		zobj = Z_OBJ_P(object);
22522 		if (IS_CONST == IS_CONST) {
22523 			name = Z_STR_P(property);
22524 		} else {
22525 			name = zval_try_get_tmp_string(property, &tmp_name);
22526 			if (UNEXPECTED(!name)) {
22527 				ZVAL_UNDEF(EX_VAR(opline->result.var));
22528 				break;
22529 			}
22530 		}
22531 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
22532 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
22533 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22534 				ZVAL_NULL(EX_VAR(opline->result.var));
22535 			} else {
22536 				if (IS_CONST == IS_CONST) {
22537 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
22538 				} else {
22539 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
22540 				}
22541 
22542 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
22543 			}
22544 		} else {
22545 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
22546 		}
22547 		if (IS_CONST != IS_CONST) {
22548 			zend_tmp_string_release(tmp_name);
22549 		}
22550 	} while (0);
22551 
22552 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22553 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22554 }
22555 
ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22556 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22557 {
22558 	USE_OPLINE
22559 	zval *container;
22560 
22561 	SAVE_OPLINE();
22562 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22563 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22564 
22565 	if (IS_VAR == IS_VAR) {
22566 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22567 	}
22568 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22569 }
22570 
ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22572 {
22573 	USE_OPLINE
22574 	zval *container;
22575 
22576 	SAVE_OPLINE();
22577 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22578 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22579 
22580 	if (IS_VAR == IS_VAR) {
22581 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22582 	}
22583 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22584 }
22585 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22586 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22587 {
22588 #if 0
22589 	USE_OPLINE
22590 #endif
22591 
22592 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
22593         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
22594 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22595         }
22596 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22597 	} else {
22598 		if (IS_CONST == IS_UNUSED) {
22599 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22600 		}
22601 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22602 	}
22603 }
22604 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22605 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22606 {
22607 	USE_OPLINE
22608 	zval *container;
22609 
22610 	SAVE_OPLINE();
22611 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22612 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22613 
22614 	if (IS_VAR == IS_VAR) {
22615 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22616 	}
22617 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22618 }
22619 
ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22620 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22621 {
22622 	USE_OPLINE
22623 	zval *property, *container, *result;
22624 
22625 	SAVE_OPLINE();
22626 
22627 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22628 	property = RT_CONSTANT(opline, opline->op2);
22629 	result = EX_VAR(opline->result.var);
22630 	zend_fetch_property_address(
22631 		result, container, IS_VAR, property, IS_CONST,
22632 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
22633 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
22634 
22635 	if (IS_VAR == IS_VAR) {
22636 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22637 	}
22638 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22639 }
22640 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22642 {
22643 	USE_OPLINE
22644 	zval *property, *container, *result;
22645 
22646 	SAVE_OPLINE();
22647 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22648 	property = RT_CONSTANT(opline, opline->op2);
22649 	result = EX_VAR(opline->result.var);
22650 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
22651 
22652 	if (IS_VAR == IS_VAR) {
22653 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22654 	}
22655 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22656 }
22657 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22658 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22659 {
22660 #if 0
22661 	USE_OPLINE
22662 #endif
22663 
22664 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
22665 		/* Behave like FETCH_OBJ_W */
22666 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
22667 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22668 		}
22669 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22670 	} else {
22671 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22672 	}
22673 }
22674 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22675 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22676 {
22677 	USE_OPLINE
22678 	zval *container, *property, *result;
22679 
22680 	SAVE_OPLINE();
22681 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22682 	property = RT_CONSTANT(opline, opline->op2);
22683 	result = EX_VAR(opline->result.var);
22684 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
22685 
22686 	if (IS_VAR == IS_VAR) {
22687 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
22688 	}
22689 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22690 }
22691 
ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22692 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22693 {
22694 	USE_OPLINE
22695 	zval *container, *dim;
22696 
22697 	SAVE_OPLINE();
22698 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22699 	dim = RT_CONSTANT(opline, opline->op2);
22700 
22701 	if (IS_VAR == IS_VAR
22702 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
22703 		&& UNEXPECTED(!Z_ISREF_P(container))
22704 	) {
22705 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
22706 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22707 	} else {
22708 		zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22709 	}
22710 
22711 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22712 }
22713 
ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22714 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22715 {
22716 	USE_OPLINE
22717 	zval *object, *property, *value, tmp;
22718 	zend_object *zobj;
22719 	zend_string *name, *tmp_name;
22720 
22721 	SAVE_OPLINE();
22722 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22723 	property = RT_CONSTANT(opline, opline->op2);
22724 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
22725 
22726 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22727 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22728 			object = Z_REFVAL_P(object);
22729 			goto assign_object;
22730 		}
22731 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
22732 		value = &EG(uninitialized_zval);
22733 		goto free_and_exit_assign_obj;
22734 	}
22735 
22736 assign_object:
22737 	zobj = Z_OBJ_P(object);
22738 	if (IS_CONST == IS_CONST &&
22739 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
22740 		void **cache_slot = CACHE_ADDR(opline->extended_value);
22741 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
22742 		zend_object *zobj = Z_OBJ_P(object);
22743 		zval *property_val;
22744 
22745 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
22746 			property_val = OBJ_PROP(zobj, prop_offset);
22747 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
22748 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
22749 
22750 				if (UNEXPECTED(prop_info != NULL)) {
22751 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
22752 					goto free_and_exit_assign_obj;
22753 				} else {
22754 fast_assign_obj:
22755 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
22756 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22757 						ZVAL_COPY(EX_VAR(opline->result.var), value);
22758 					}
22759 					goto exit_assign_obj;
22760 				}
22761 			}
22762 		} else {
22763 			if (EXPECTED(zobj->properties != NULL)) {
22764 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
22765 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
22766 						GC_DELREF(zobj->properties);
22767 					}
22768 					zobj->properties = zend_array_dup(zobj->properties);
22769 				}
22770 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
22771 				if (property_val) {
22772 					goto fast_assign_obj;
22773 				}
22774 			}
22775 
22776 			if (!zobj->ce->__set) {
22777 
22778 				if (EXPECTED(zobj->properties == NULL)) {
22779 					rebuild_object_properties(zobj);
22780 				}
22781 				if (IS_CONST == IS_CONST) {
22782 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
22783 						Z_ADDREF_P(value);
22784 					}
22785 				} else if (IS_CONST != IS_TMP_VAR) {
22786 					if (Z_ISREF_P(value)) {
22787 						if (IS_CONST == IS_VAR) {
22788 							zend_reference *ref = Z_REF_P(value);
22789 							if (GC_DELREF(ref) == 0) {
22790 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
22791 								efree_size(ref, sizeof(zend_reference));
22792 								value = &tmp;
22793 							} else {
22794 								value = Z_REFVAL_P(value);
22795 								Z_TRY_ADDREF_P(value);
22796 							}
22797 						} else {
22798 							value = Z_REFVAL_P(value);
22799 							Z_TRY_ADDREF_P(value);
22800 						}
22801 					} else if (IS_CONST == IS_CV) {
22802 						Z_TRY_ADDREF_P(value);
22803 					}
22804 				}
22805 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
22806 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22807 					ZVAL_COPY(EX_VAR(opline->result.var), value);
22808 				}
22809 				goto exit_assign_obj;
22810 			}
22811 		}
22812 	}
22813 
22814 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
22815 		ZVAL_DEREF(value);
22816 	}
22817 
22818 	if (IS_CONST == IS_CONST) {
22819 		name = Z_STR_P(property);
22820 	} else {
22821 		name = zval_try_get_tmp_string(property, &tmp_name);
22822 		if (UNEXPECTED(!name)) {
22823 
22824 			UNDEF_RESULT();
22825 			goto exit_assign_obj;
22826 		}
22827 	}
22828 
22829 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
22830 
22831 	if (IS_CONST != IS_CONST) {
22832 		zend_tmp_string_release(tmp_name);
22833 	}
22834 
22835 free_and_exit_assign_obj:
22836 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22837 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
22838 	}
22839 
22840 exit_assign_obj:
22841 
22842 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22843 	/* assign_obj has two opcodes! */
22844 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22845 }
22846 
22847 /* 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)22848 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22849 {
22850 	USE_OPLINE
22851 	zval *object, *property, *value, tmp;
22852 	zend_object *zobj;
22853 	zend_string *name, *tmp_name;
22854 
22855 	SAVE_OPLINE();
22856 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22857 	property = RT_CONSTANT(opline, opline->op2);
22858 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
22859 
22860 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22861 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22862 			object = Z_REFVAL_P(object);
22863 			goto assign_object;
22864 		}
22865 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
22866 		value = &EG(uninitialized_zval);
22867 		goto free_and_exit_assign_obj;
22868 	}
22869 
22870 assign_object:
22871 	zobj = Z_OBJ_P(object);
22872 	if (IS_CONST == IS_CONST &&
22873 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
22874 		void **cache_slot = CACHE_ADDR(opline->extended_value);
22875 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
22876 		zend_object *zobj = Z_OBJ_P(object);
22877 		zval *property_val;
22878 
22879 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
22880 			property_val = OBJ_PROP(zobj, prop_offset);
22881 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
22882 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
22883 
22884 				if (UNEXPECTED(prop_info != NULL)) {
22885 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
22886 					goto free_and_exit_assign_obj;
22887 				} else {
22888 fast_assign_obj:
22889 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
22890 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22891 						ZVAL_COPY(EX_VAR(opline->result.var), value);
22892 					}
22893 					goto exit_assign_obj;
22894 				}
22895 			}
22896 		} else {
22897 			if (EXPECTED(zobj->properties != NULL)) {
22898 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
22899 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
22900 						GC_DELREF(zobj->properties);
22901 					}
22902 					zobj->properties = zend_array_dup(zobj->properties);
22903 				}
22904 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
22905 				if (property_val) {
22906 					goto fast_assign_obj;
22907 				}
22908 			}
22909 
22910 			if (!zobj->ce->__set) {
22911 
22912 				if (EXPECTED(zobj->properties == NULL)) {
22913 					rebuild_object_properties(zobj);
22914 				}
22915 				if (IS_TMP_VAR == IS_CONST) {
22916 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
22917 						Z_ADDREF_P(value);
22918 					}
22919 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
22920 					if (Z_ISREF_P(value)) {
22921 						if (IS_TMP_VAR == IS_VAR) {
22922 							zend_reference *ref = Z_REF_P(value);
22923 							if (GC_DELREF(ref) == 0) {
22924 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
22925 								efree_size(ref, sizeof(zend_reference));
22926 								value = &tmp;
22927 							} else {
22928 								value = Z_REFVAL_P(value);
22929 								Z_TRY_ADDREF_P(value);
22930 							}
22931 						} else {
22932 							value = Z_REFVAL_P(value);
22933 							Z_TRY_ADDREF_P(value);
22934 						}
22935 					} else if (IS_TMP_VAR == IS_CV) {
22936 						Z_TRY_ADDREF_P(value);
22937 					}
22938 				}
22939 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
22940 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22941 					ZVAL_COPY(EX_VAR(opline->result.var), value);
22942 				}
22943 				goto exit_assign_obj;
22944 			}
22945 		}
22946 	}
22947 
22948 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
22949 		ZVAL_DEREF(value);
22950 	}
22951 
22952 	if (IS_CONST == IS_CONST) {
22953 		name = Z_STR_P(property);
22954 	} else {
22955 		name = zval_try_get_tmp_string(property, &tmp_name);
22956 		if (UNEXPECTED(!name)) {
22957 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
22958 			UNDEF_RESULT();
22959 			goto exit_assign_obj;
22960 		}
22961 	}
22962 
22963 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
22964 
22965 	if (IS_CONST != IS_CONST) {
22966 		zend_tmp_string_release(tmp_name);
22967 	}
22968 
22969 free_and_exit_assign_obj:
22970 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22971 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
22972 	}
22973 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
22974 exit_assign_obj:
22975 
22976 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22977 	/* assign_obj has two opcodes! */
22978 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22979 }
22980 
22981 /* 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)22982 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22983 {
22984 	USE_OPLINE
22985 	zval *object, *property, *value, tmp;
22986 	zend_object *zobj;
22987 	zend_string *name, *tmp_name;
22988 
22989 	SAVE_OPLINE();
22990 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22991 	property = RT_CONSTANT(opline, opline->op2);
22992 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
22993 
22994 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22995 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22996 			object = Z_REFVAL_P(object);
22997 			goto assign_object;
22998 		}
22999 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
23000 		value = &EG(uninitialized_zval);
23001 		goto free_and_exit_assign_obj;
23002 	}
23003 
23004 assign_object:
23005 	zobj = Z_OBJ_P(object);
23006 	if (IS_CONST == IS_CONST &&
23007 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23008 		void **cache_slot = CACHE_ADDR(opline->extended_value);
23009 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23010 		zend_object *zobj = Z_OBJ_P(object);
23011 		zval *property_val;
23012 
23013 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23014 			property_val = OBJ_PROP(zobj, prop_offset);
23015 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
23016 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23017 
23018 				if (UNEXPECTED(prop_info != NULL)) {
23019 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
23020 					goto free_and_exit_assign_obj;
23021 				} else {
23022 fast_assign_obj:
23023 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
23024 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23025 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23026 					}
23027 					goto exit_assign_obj;
23028 				}
23029 			}
23030 		} else {
23031 			if (EXPECTED(zobj->properties != NULL)) {
23032 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23033 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23034 						GC_DELREF(zobj->properties);
23035 					}
23036 					zobj->properties = zend_array_dup(zobj->properties);
23037 				}
23038 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
23039 				if (property_val) {
23040 					goto fast_assign_obj;
23041 				}
23042 			}
23043 
23044 			if (!zobj->ce->__set) {
23045 
23046 				if (EXPECTED(zobj->properties == NULL)) {
23047 					rebuild_object_properties(zobj);
23048 				}
23049 				if (IS_VAR == IS_CONST) {
23050 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23051 						Z_ADDREF_P(value);
23052 					}
23053 				} else if (IS_VAR != IS_TMP_VAR) {
23054 					if (Z_ISREF_P(value)) {
23055 						if (IS_VAR == IS_VAR) {
23056 							zend_reference *ref = Z_REF_P(value);
23057 							if (GC_DELREF(ref) == 0) {
23058 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23059 								efree_size(ref, sizeof(zend_reference));
23060 								value = &tmp;
23061 							} else {
23062 								value = Z_REFVAL_P(value);
23063 								Z_TRY_ADDREF_P(value);
23064 							}
23065 						} else {
23066 							value = Z_REFVAL_P(value);
23067 							Z_TRY_ADDREF_P(value);
23068 						}
23069 					} else if (IS_VAR == IS_CV) {
23070 						Z_TRY_ADDREF_P(value);
23071 					}
23072 				}
23073 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
23074 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23075 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23076 				}
23077 				goto exit_assign_obj;
23078 			}
23079 		}
23080 	}
23081 
23082 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
23083 		ZVAL_DEREF(value);
23084 	}
23085 
23086 	if (IS_CONST == IS_CONST) {
23087 		name = Z_STR_P(property);
23088 	} else {
23089 		name = zval_try_get_tmp_string(property, &tmp_name);
23090 		if (UNEXPECTED(!name)) {
23091 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23092 			UNDEF_RESULT();
23093 			goto exit_assign_obj;
23094 		}
23095 	}
23096 
23097 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23098 
23099 	if (IS_CONST != IS_CONST) {
23100 		zend_tmp_string_release(tmp_name);
23101 	}
23102 
23103 free_and_exit_assign_obj:
23104 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23105 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23106 	}
23107 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23108 exit_assign_obj:
23109 
23110 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23111 	/* assign_obj has two opcodes! */
23112 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23113 }
23114 
23115 /* 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)23116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23117 {
23118 	USE_OPLINE
23119 	zval *object, *property, *value, tmp;
23120 	zend_object *zobj;
23121 	zend_string *name, *tmp_name;
23122 
23123 	SAVE_OPLINE();
23124 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23125 	property = RT_CONSTANT(opline, opline->op2);
23126 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
23127 
23128 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23129 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23130 			object = Z_REFVAL_P(object);
23131 			goto assign_object;
23132 		}
23133 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
23134 		value = &EG(uninitialized_zval);
23135 		goto free_and_exit_assign_obj;
23136 	}
23137 
23138 assign_object:
23139 	zobj = Z_OBJ_P(object);
23140 	if (IS_CONST == IS_CONST &&
23141 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23142 		void **cache_slot = CACHE_ADDR(opline->extended_value);
23143 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23144 		zend_object *zobj = Z_OBJ_P(object);
23145 		zval *property_val;
23146 
23147 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23148 			property_val = OBJ_PROP(zobj, prop_offset);
23149 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
23150 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23151 
23152 				if (UNEXPECTED(prop_info != NULL)) {
23153 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
23154 					goto free_and_exit_assign_obj;
23155 				} else {
23156 fast_assign_obj:
23157 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
23158 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23159 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23160 					}
23161 					goto exit_assign_obj;
23162 				}
23163 			}
23164 		} else {
23165 			if (EXPECTED(zobj->properties != NULL)) {
23166 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23167 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23168 						GC_DELREF(zobj->properties);
23169 					}
23170 					zobj->properties = zend_array_dup(zobj->properties);
23171 				}
23172 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
23173 				if (property_val) {
23174 					goto fast_assign_obj;
23175 				}
23176 			}
23177 
23178 			if (!zobj->ce->__set) {
23179 
23180 				if (EXPECTED(zobj->properties == NULL)) {
23181 					rebuild_object_properties(zobj);
23182 				}
23183 				if (IS_CV == IS_CONST) {
23184 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23185 						Z_ADDREF_P(value);
23186 					}
23187 				} else if (IS_CV != IS_TMP_VAR) {
23188 					if (Z_ISREF_P(value)) {
23189 						if (IS_CV == IS_VAR) {
23190 							zend_reference *ref = Z_REF_P(value);
23191 							if (GC_DELREF(ref) == 0) {
23192 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23193 								efree_size(ref, sizeof(zend_reference));
23194 								value = &tmp;
23195 							} else {
23196 								value = Z_REFVAL_P(value);
23197 								Z_TRY_ADDREF_P(value);
23198 							}
23199 						} else {
23200 							value = Z_REFVAL_P(value);
23201 							Z_TRY_ADDREF_P(value);
23202 						}
23203 					} else if (IS_CV == IS_CV) {
23204 						Z_TRY_ADDREF_P(value);
23205 					}
23206 				}
23207 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
23208 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23209 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23210 				}
23211 				goto exit_assign_obj;
23212 			}
23213 		}
23214 	}
23215 
23216 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
23217 		ZVAL_DEREF(value);
23218 	}
23219 
23220 	if (IS_CONST == IS_CONST) {
23221 		name = Z_STR_P(property);
23222 	} else {
23223 		name = zval_try_get_tmp_string(property, &tmp_name);
23224 		if (UNEXPECTED(!name)) {
23225 
23226 			UNDEF_RESULT();
23227 			goto exit_assign_obj;
23228 		}
23229 	}
23230 
23231 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23232 
23233 	if (IS_CONST != IS_CONST) {
23234 		zend_tmp_string_release(tmp_name);
23235 	}
23236 
23237 free_and_exit_assign_obj:
23238 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23239 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23240 	}
23241 
23242 exit_assign_obj:
23243 
23244 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23245 	/* assign_obj has two opcodes! */
23246 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23247 }
23248 
23249 /* 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)23250 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23251 {
23252 	USE_OPLINE
23253 	zval *object_ptr, *orig_object_ptr;
23254 	zval *value;
23255 	zval *variable_ptr;
23256 	zval *dim;
23257 
23258 	SAVE_OPLINE();
23259 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23260 
23261 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23262 try_assign_dim_array:
23263 		SEPARATE_ARRAY(object_ptr);
23264 		if (IS_CONST == IS_UNUSED) {
23265 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23266 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23267 				HashTable *ht = Z_ARRVAL_P(object_ptr);
23268 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
23269 					GC_ADDREF(ht);
23270 				}
23271 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23272 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
23273 					zend_array_destroy(ht);
23274 					goto assign_dim_error;
23275 				}
23276 			}
23277 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
23278 				ZVAL_DEREF(value);
23279 			}
23280 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23281 			if (UNEXPECTED(variable_ptr == NULL)) {
23282 				zend_cannot_add_element();
23283 				goto assign_dim_error;
23284 			} else if (IS_CONST == IS_CV) {
23285 				if (Z_REFCOUNTED_P(value)) {
23286 					Z_ADDREF_P(value);
23287 				}
23288 			} else if (IS_CONST == IS_VAR) {
23289 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
23290 				if (value != free_op_data) {
23291 					if (Z_REFCOUNTED_P(value)) {
23292 						Z_ADDREF_P(value);
23293 					}
23294 					zval_ptr_dtor_nogc(free_op_data);
23295 				}
23296 			} else if (IS_CONST == IS_CONST) {
23297 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23298 					Z_ADDREF_P(value);
23299 				}
23300 			}
23301 		} else {
23302 			dim = RT_CONSTANT(opline, opline->op2);
23303 			if (IS_CONST == IS_CONST) {
23304 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23305 			} else {
23306 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23307 			}
23308 			if (UNEXPECTED(variable_ptr == NULL)) {
23309 				goto assign_dim_error;
23310 			}
23311 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23312 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
23313 		}
23314 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23315 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23316 		}
23317 	} else {
23318 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23319 			object_ptr = Z_REFVAL_P(object_ptr);
23320 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23321 				goto try_assign_dim_array;
23322 			}
23323 		}
23324 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23325 			zend_object *obj = Z_OBJ_P(object_ptr);
23326 
23327 			GC_ADDREF(obj);
23328 			dim = RT_CONSTANT(opline, opline->op2);
23329 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
23330 				dim = ZVAL_UNDEFINED_OP2();
23331 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23332 				dim++;
23333 			}
23334 
23335 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23336 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
23337 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23338 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
23339 				ZVAL_DEREF(value);
23340 			}
23341 
23342 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
23343 
23344 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
23345 				zend_objects_store_del(obj);
23346 			}
23347 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23348 			if (IS_CONST == IS_UNUSED) {
23349 				zend_use_new_element_for_string();
23350 
23351 				UNDEF_RESULT();
23352 			} else {
23353 				dim = RT_CONSTANT(opline, opline->op2);
23354 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
23355 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23356 
23357 			}
23358 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23359 			if (Z_ISREF_P(orig_object_ptr)
23360 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23361 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23362 				dim = RT_CONSTANT(opline, opline->op2);
23363 
23364 				UNDEF_RESULT();
23365 			} else {
23366 				ZVAL_ARR(object_ptr, zend_new_array(8));
23367 				goto try_assign_dim_array;
23368 			}
23369 		} else {
23370 			zend_use_scalar_as_array();
23371 			dim = RT_CONSTANT(opline, opline->op2);
23372 assign_dim_error:
23373 
23374 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23375 				ZVAL_NULL(EX_VAR(opline->result.var));
23376 			}
23377 		}
23378 	}
23379 	if (IS_CONST != IS_UNUSED) {
23380 
23381 	}
23382 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23383 	/* assign_dim has two opcodes! */
23384 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23385 }
23386 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23387 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23388 {
23389 	USE_OPLINE
23390 	zval *object_ptr, *orig_object_ptr;
23391 	zval *value;
23392 	zval *variable_ptr;
23393 	zval *dim;
23394 
23395 	SAVE_OPLINE();
23396 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23397 
23398 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23399 try_assign_dim_array:
23400 		SEPARATE_ARRAY(object_ptr);
23401 		if (IS_CONST == IS_UNUSED) {
23402 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23403 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23404 				HashTable *ht = Z_ARRVAL_P(object_ptr);
23405 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
23406 					GC_ADDREF(ht);
23407 				}
23408 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23409 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
23410 					zend_array_destroy(ht);
23411 					goto assign_dim_error;
23412 				}
23413 			}
23414 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
23415 				ZVAL_DEREF(value);
23416 			}
23417 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23418 			if (UNEXPECTED(variable_ptr == NULL)) {
23419 				zend_cannot_add_element();
23420 				goto assign_dim_error;
23421 			} else if (IS_TMP_VAR == IS_CV) {
23422 				if (Z_REFCOUNTED_P(value)) {
23423 					Z_ADDREF_P(value);
23424 				}
23425 			} else if (IS_TMP_VAR == IS_VAR) {
23426 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
23427 				if (value != free_op_data) {
23428 					if (Z_REFCOUNTED_P(value)) {
23429 						Z_ADDREF_P(value);
23430 					}
23431 					zval_ptr_dtor_nogc(free_op_data);
23432 				}
23433 			} else if (IS_TMP_VAR == IS_CONST) {
23434 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23435 					Z_ADDREF_P(value);
23436 				}
23437 			}
23438 		} else {
23439 			dim = RT_CONSTANT(opline, opline->op2);
23440 			if (IS_CONST == IS_CONST) {
23441 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23442 			} else {
23443 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23444 			}
23445 			if (UNEXPECTED(variable_ptr == NULL)) {
23446 				goto assign_dim_error;
23447 			}
23448 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23449 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
23450 		}
23451 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23452 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23453 		}
23454 	} else {
23455 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23456 			object_ptr = Z_REFVAL_P(object_ptr);
23457 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23458 				goto try_assign_dim_array;
23459 			}
23460 		}
23461 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23462 			zend_object *obj = Z_OBJ_P(object_ptr);
23463 
23464 			GC_ADDREF(obj);
23465 			dim = RT_CONSTANT(opline, opline->op2);
23466 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
23467 				dim = ZVAL_UNDEFINED_OP2();
23468 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23469 				dim++;
23470 			}
23471 
23472 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23473 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
23474 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23475 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
23476 				ZVAL_DEREF(value);
23477 			}
23478 
23479 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
23480 
23481 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23482 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
23483 				zend_objects_store_del(obj);
23484 			}
23485 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23486 			if (IS_CONST == IS_UNUSED) {
23487 				zend_use_new_element_for_string();
23488 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23489 				UNDEF_RESULT();
23490 			} else {
23491 				dim = RT_CONSTANT(opline, opline->op2);
23492 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23493 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23494 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23495 			}
23496 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23497 			if (Z_ISREF_P(orig_object_ptr)
23498 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23499 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23500 				dim = RT_CONSTANT(opline, opline->op2);
23501 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23502 				UNDEF_RESULT();
23503 			} else {
23504 				ZVAL_ARR(object_ptr, zend_new_array(8));
23505 				goto try_assign_dim_array;
23506 			}
23507 		} else {
23508 			zend_use_scalar_as_array();
23509 			dim = RT_CONSTANT(opline, opline->op2);
23510 assign_dim_error:
23511 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23512 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23513 				ZVAL_NULL(EX_VAR(opline->result.var));
23514 			}
23515 		}
23516 	}
23517 	if (IS_CONST != IS_UNUSED) {
23518 
23519 	}
23520 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23521 	/* assign_dim has two opcodes! */
23522 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23523 }
23524 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23525 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23526 {
23527 	USE_OPLINE
23528 	zval *object_ptr, *orig_object_ptr;
23529 	zval *value;
23530 	zval *variable_ptr;
23531 	zval *dim;
23532 
23533 	SAVE_OPLINE();
23534 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23535 
23536 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23537 try_assign_dim_array:
23538 		SEPARATE_ARRAY(object_ptr);
23539 		if (IS_CONST == IS_UNUSED) {
23540 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23541 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23542 				HashTable *ht = Z_ARRVAL_P(object_ptr);
23543 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
23544 					GC_ADDREF(ht);
23545 				}
23546 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23547 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
23548 					zend_array_destroy(ht);
23549 					goto assign_dim_error;
23550 				}
23551 			}
23552 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
23553 				ZVAL_DEREF(value);
23554 			}
23555 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23556 			if (UNEXPECTED(variable_ptr == NULL)) {
23557 				zend_cannot_add_element();
23558 				goto assign_dim_error;
23559 			} else if (IS_VAR == IS_CV) {
23560 				if (Z_REFCOUNTED_P(value)) {
23561 					Z_ADDREF_P(value);
23562 				}
23563 			} else if (IS_VAR == IS_VAR) {
23564 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
23565 				if (value != free_op_data) {
23566 					if (Z_REFCOUNTED_P(value)) {
23567 						Z_ADDREF_P(value);
23568 					}
23569 					zval_ptr_dtor_nogc(free_op_data);
23570 				}
23571 			} else if (IS_VAR == IS_CONST) {
23572 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23573 					Z_ADDREF_P(value);
23574 				}
23575 			}
23576 		} else {
23577 			dim = RT_CONSTANT(opline, opline->op2);
23578 			if (IS_CONST == IS_CONST) {
23579 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23580 			} else {
23581 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23582 			}
23583 			if (UNEXPECTED(variable_ptr == NULL)) {
23584 				goto assign_dim_error;
23585 			}
23586 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23587 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
23588 		}
23589 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23590 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23591 		}
23592 	} else {
23593 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23594 			object_ptr = Z_REFVAL_P(object_ptr);
23595 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23596 				goto try_assign_dim_array;
23597 			}
23598 		}
23599 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23600 			zend_object *obj = Z_OBJ_P(object_ptr);
23601 
23602 			GC_ADDREF(obj);
23603 			dim = RT_CONSTANT(opline, opline->op2);
23604 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
23605 				dim = ZVAL_UNDEFINED_OP2();
23606 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23607 				dim++;
23608 			}
23609 
23610 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23611 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
23612 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23613 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
23614 				ZVAL_DEREF(value);
23615 			}
23616 
23617 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
23618 
23619 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23620 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
23621 				zend_objects_store_del(obj);
23622 			}
23623 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23624 			if (IS_CONST == IS_UNUSED) {
23625 				zend_use_new_element_for_string();
23626 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23627 				UNDEF_RESULT();
23628 			} else {
23629 				dim = RT_CONSTANT(opline, opline->op2);
23630 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23631 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23632 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23633 			}
23634 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23635 			if (Z_ISREF_P(orig_object_ptr)
23636 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23637 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23638 				dim = RT_CONSTANT(opline, opline->op2);
23639 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23640 				UNDEF_RESULT();
23641 			} else {
23642 				ZVAL_ARR(object_ptr, zend_new_array(8));
23643 				goto try_assign_dim_array;
23644 			}
23645 		} else {
23646 			zend_use_scalar_as_array();
23647 			dim = RT_CONSTANT(opline, opline->op2);
23648 assign_dim_error:
23649 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23650 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23651 				ZVAL_NULL(EX_VAR(opline->result.var));
23652 			}
23653 		}
23654 	}
23655 	if (IS_CONST != IS_UNUSED) {
23656 
23657 	}
23658 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23659 	/* assign_dim has two opcodes! */
23660 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23661 }
23662 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23663 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23664 {
23665 	USE_OPLINE
23666 	zval *object_ptr, *orig_object_ptr;
23667 	zval *value;
23668 	zval *variable_ptr;
23669 	zval *dim;
23670 
23671 	SAVE_OPLINE();
23672 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23673 
23674 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23675 try_assign_dim_array:
23676 		SEPARATE_ARRAY(object_ptr);
23677 		if (IS_CONST == IS_UNUSED) {
23678 			value = EX_VAR((opline+1)->op1.var);
23679 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23680 				HashTable *ht = Z_ARRVAL_P(object_ptr);
23681 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
23682 					GC_ADDREF(ht);
23683 				}
23684 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23685 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
23686 					zend_array_destroy(ht);
23687 					goto assign_dim_error;
23688 				}
23689 			}
23690 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
23691 				ZVAL_DEREF(value);
23692 			}
23693 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23694 			if (UNEXPECTED(variable_ptr == NULL)) {
23695 				zend_cannot_add_element();
23696 				goto assign_dim_error;
23697 			} else if (IS_CV == IS_CV) {
23698 				if (Z_REFCOUNTED_P(value)) {
23699 					Z_ADDREF_P(value);
23700 				}
23701 			} else if (IS_CV == IS_VAR) {
23702 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
23703 				if (value != free_op_data) {
23704 					if (Z_REFCOUNTED_P(value)) {
23705 						Z_ADDREF_P(value);
23706 					}
23707 					zval_ptr_dtor_nogc(free_op_data);
23708 				}
23709 			} else if (IS_CV == IS_CONST) {
23710 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23711 					Z_ADDREF_P(value);
23712 				}
23713 			}
23714 		} else {
23715 			dim = RT_CONSTANT(opline, opline->op2);
23716 			if (IS_CONST == IS_CONST) {
23717 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23718 			} else {
23719 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23720 			}
23721 			if (UNEXPECTED(variable_ptr == NULL)) {
23722 				goto assign_dim_error;
23723 			}
23724 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
23725 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
23726 		}
23727 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23728 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23729 		}
23730 	} else {
23731 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23732 			object_ptr = Z_REFVAL_P(object_ptr);
23733 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23734 				goto try_assign_dim_array;
23735 			}
23736 		}
23737 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23738 			zend_object *obj = Z_OBJ_P(object_ptr);
23739 
23740 			GC_ADDREF(obj);
23741 			dim = RT_CONSTANT(opline, opline->op2);
23742 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
23743 				dim = ZVAL_UNDEFINED_OP2();
23744 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23745 				dim++;
23746 			}
23747 
23748 			value = EX_VAR((opline+1)->op1.var);
23749 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
23750 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23751 			} else if (IS_CV & (IS_CV|IS_VAR)) {
23752 				ZVAL_DEREF(value);
23753 			}
23754 
23755 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
23756 
23757 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
23758 				zend_objects_store_del(obj);
23759 			}
23760 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23761 			if (IS_CONST == IS_UNUSED) {
23762 				zend_use_new_element_for_string();
23763 
23764 				UNDEF_RESULT();
23765 			} else {
23766 				dim = RT_CONSTANT(opline, opline->op2);
23767 				value = EX_VAR((opline+1)->op1.var);
23768 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23769 
23770 			}
23771 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23772 			if (Z_ISREF_P(orig_object_ptr)
23773 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23774 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23775 				dim = RT_CONSTANT(opline, opline->op2);
23776 
23777 				UNDEF_RESULT();
23778 			} else {
23779 				ZVAL_ARR(object_ptr, zend_new_array(8));
23780 				goto try_assign_dim_array;
23781 			}
23782 		} else {
23783 			zend_use_scalar_as_array();
23784 			dim = RT_CONSTANT(opline, opline->op2);
23785 assign_dim_error:
23786 
23787 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23788 				ZVAL_NULL(EX_VAR(opline->result.var));
23789 			}
23790 		}
23791 	}
23792 	if (IS_CONST != IS_UNUSED) {
23793 
23794 	}
23795 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23796 	/* assign_dim has two opcodes! */
23797 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23798 }
23799 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23800 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23801 {
23802 	USE_OPLINE
23803 	zval *value;
23804 	zval *variable_ptr;
23805 
23806 	SAVE_OPLINE();
23807 	value = RT_CONSTANT(opline, opline->op2);
23808 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23809 
23810 	value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
23811 	if (UNEXPECTED(0)) {
23812 		ZVAL_COPY(EX_VAR(opline->result.var), value);
23813 	}
23814 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23815 	/* zend_assign_to_variable() always takes care of op2, never free it! */
23816 
23817 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23818 }
23819 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23820 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23821 {
23822 	USE_OPLINE
23823 	zval *value;
23824 	zval *variable_ptr;
23825 
23826 	SAVE_OPLINE();
23827 	value = RT_CONSTANT(opline, opline->op2);
23828 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23829 
23830 	value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
23831 	if (UNEXPECTED(1)) {
23832 		ZVAL_COPY(EX_VAR(opline->result.var), value);
23833 	}
23834 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23835 	/* zend_assign_to_variable() always takes care of op2, never free it! */
23836 
23837 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23838 }
23839 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23840 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23841 {
23842 	USE_OPLINE
23843 	zval *property, *container, *value_ptr;
23844 
23845 	SAVE_OPLINE();
23846 
23847 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23848 	property = RT_CONSTANT(opline, opline->op2);
23849 
23850 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23851 
23852 	if (1) {
23853 		if (IS_VAR == IS_UNUSED) {
23854 			if (IS_CONST == IS_CONST) {
23855 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23856 			} else {
23857 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23858 			}
23859 		} else {
23860 			if (IS_CONST == IS_CONST) {
23861 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23862 			} else {
23863 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23864 			}
23865 		}
23866 	} else {
23867 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23868 	}
23869 
23870 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23871 
23872 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
23873 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23874 }
23875 
23876 /* 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)23877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23878 {
23879 	USE_OPLINE
23880 	zval *property, *container, *value_ptr;
23881 
23882 	SAVE_OPLINE();
23883 
23884 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23885 	property = RT_CONSTANT(opline, opline->op2);
23886 
23887 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
23888 
23889 	if (1) {
23890 		if (IS_VAR == IS_UNUSED) {
23891 			if (IS_CONST == IS_CONST) {
23892 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23893 			} else {
23894 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23895 			}
23896 		} else {
23897 			if (IS_CONST == IS_CONST) {
23898 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23899 			} else {
23900 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23901 			}
23902 		}
23903 	} else {
23904 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23905 	}
23906 
23907 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23908 
23909 
23910 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23911 }
23912 
23913 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23914 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23915 {
23916 	USE_OPLINE
23917 	zval *function_name;
23918 	zend_class_entry *ce;
23919 	uint32_t call_info;
23920 	zend_function *fbc;
23921 	zend_execute_data *call;
23922 
23923 	SAVE_OPLINE();
23924 
23925 	if (IS_VAR == IS_CONST) {
23926 		/* no function found. try a static method in class */
23927 		ce = CACHED_PTR(opline->result.num);
23928 		if (UNEXPECTED(ce == NULL)) {
23929 			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);
23930 			if (UNEXPECTED(ce == NULL)) {
23931 
23932 				HANDLE_EXCEPTION();
23933 			}
23934 			if (IS_CONST != IS_CONST) {
23935 				CACHE_PTR(opline->result.num, ce);
23936 			}
23937 		}
23938 	} else if (IS_VAR == IS_UNUSED) {
23939 		ce = zend_fetch_class(NULL, opline->op1.num);
23940 		if (UNEXPECTED(ce == NULL)) {
23941 
23942 			HANDLE_EXCEPTION();
23943 		}
23944 	} else {
23945 		ce = Z_CE_P(EX_VAR(opline->op1.var));
23946 	}
23947 
23948 	if (IS_VAR == IS_CONST &&
23949 	    IS_CONST == IS_CONST &&
23950 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
23951 		/* nothing to do */
23952 	} else if (IS_VAR != IS_CONST &&
23953 	           IS_CONST == IS_CONST &&
23954 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
23955 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
23956 	} else if (IS_CONST != IS_UNUSED) {
23957 		function_name = RT_CONSTANT(opline, opline->op2);
23958 		if (IS_CONST != IS_CONST) {
23959 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
23960 				do {
23961 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
23962 						function_name = Z_REFVAL_P(function_name);
23963 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
23964 							break;
23965 						}
23966 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
23967 						ZVAL_UNDEFINED_OP2();
23968 						if (UNEXPECTED(EG(exception) != NULL)) {
23969 							HANDLE_EXCEPTION();
23970 						}
23971 					}
23972 					zend_throw_error(NULL, "Method name must be a string");
23973 
23974 					HANDLE_EXCEPTION();
23975 				} while (0);
23976 			}
23977 		}
23978 
23979 		if (ce->get_static_method) {
23980 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
23981 		} else {
23982 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
23983 		}
23984 		if (UNEXPECTED(fbc == NULL)) {
23985 			if (EXPECTED(!EG(exception))) {
23986 				zend_undefined_method(ce, Z_STR_P(function_name));
23987 			}
23988 
23989 			HANDLE_EXCEPTION();
23990 		}
23991 		if (IS_CONST == IS_CONST &&
23992 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
23993 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
23994 		}
23995 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
23996 			init_func_run_time_cache(&fbc->op_array);
23997 		}
23998 		if (IS_CONST != IS_CONST) {
23999 
24000 		}
24001 	} else {
24002 		if (UNEXPECTED(ce->constructor == NULL)) {
24003 			zend_throw_error(NULL, "Cannot call constructor");
24004 			HANDLE_EXCEPTION();
24005 		}
24006 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
24007 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
24008 			HANDLE_EXCEPTION();
24009 		}
24010 		fbc = ce->constructor;
24011 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
24012 			init_func_run_time_cache(&fbc->op_array);
24013 		}
24014 	}
24015 
24016 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
24017 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
24018 			ce = (zend_class_entry*)Z_OBJ(EX(This));
24019 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
24020 		} else {
24021 			zend_non_static_method_call(fbc);
24022 			HANDLE_EXCEPTION();
24023 		}
24024 	} else {
24025 		/* previous opcode is ZEND_FETCH_CLASS */
24026 		if (IS_VAR == IS_UNUSED
24027 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
24028 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
24029 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
24030 				ce = Z_OBJCE(EX(This));
24031 			} else {
24032 				ce = Z_CE(EX(This));
24033 			}
24034 		}
24035 		call_info = ZEND_CALL_NESTED_FUNCTION;
24036 	}
24037 
24038 	call = zend_vm_stack_push_call_frame(call_info,
24039 		fbc, opline->extended_value, ce);
24040 	call->prev_execute_data = EX(call);
24041 	EX(call) = call;
24042 
24043 	ZEND_VM_NEXT_OPCODE();
24044 }
24045 
ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24046 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24047 {
24048 	USE_OPLINE
24049 	zval *varptr, *arg;
24050 
24051 	if (IS_CONST == IS_CONST) {
24052 		SAVE_OPLINE();
24053 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24054 		uint32_t arg_num;
24055 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24056 		if (UNEXPECTED(!arg)) {
24057 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24058 			HANDLE_EXCEPTION();
24059 		}
24060 	} else {
24061 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24062 	}
24063 
24064 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24065 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
24066 		SAVE_OPLINE();
24067 		ZVAL_UNDEFINED_OP1();
24068 		ZVAL_NULL(arg);
24069 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24070 	}
24071 
24072 	if (IS_VAR == IS_CV) {
24073 		ZVAL_COPY_DEREF(arg, varptr);
24074 	} else /* if (IS_VAR == IS_VAR) */ {
24075 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
24076 			zend_refcounted *ref = Z_COUNTED_P(varptr);
24077 
24078 			varptr = Z_REFVAL_P(varptr);
24079 			ZVAL_COPY_VALUE(arg, varptr);
24080 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24081 				efree_size(ref, sizeof(zend_reference));
24082 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
24083 				Z_ADDREF_P(arg);
24084 			}
24085 		} else {
24086 			ZVAL_COPY_VALUE(arg, varptr);
24087 		}
24088 	}
24089 
24090 	ZEND_VM_NEXT_OPCODE();
24091 }
24092 
ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24093 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24094 {
24095 	USE_OPLINE
24096 	zval *varptr, *arg;
24097 
24098 	if (IS_CONST == IS_CONST) {
24099 		SAVE_OPLINE();
24100 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24101 		uint32_t arg_num;
24102 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24103 		if (UNEXPECTED(!arg)) {
24104 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24105 			HANDLE_EXCEPTION();
24106 		}
24107 	} else {
24108 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24109 	}
24110 
24111 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24112 	ZVAL_COPY_VALUE(arg, varptr);
24113 
24114 	if (EXPECTED(Z_ISREF_P(varptr))) {
24115 		ZEND_VM_NEXT_OPCODE();
24116 	}
24117 
24118 	SAVE_OPLINE();
24119 	ZVAL_NEW_REF(arg, arg);
24120 	zend_error(E_NOTICE, "Only variables should be passed by reference");
24121 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24122 }
24123 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24124 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24125 {
24126 	USE_OPLINE
24127 	zval *varptr, *arg;
24128 	uint32_t arg_num;
24129 
24130 	if (IS_CONST == IS_CONST) {
24131 		SAVE_OPLINE();
24132 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24133 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24134 		if (UNEXPECTED(!arg)) {
24135 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24136 			HANDLE_EXCEPTION();
24137 		}
24138 	} else {
24139 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24140 		arg_num = opline->op2.num;
24141 	}
24142 
24143 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
24144 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24145 			goto send_var;
24146 		}
24147 
24148 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24149 		ZVAL_COPY_VALUE(arg, varptr);
24150 
24151 		if (EXPECTED(Z_ISREF_P(varptr) ||
24152 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
24153 			ZEND_VM_NEXT_OPCODE();
24154 		}
24155 	} else {
24156 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24157 			goto send_var;
24158 		}
24159 
24160 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24161 		ZVAL_COPY_VALUE(arg, varptr);
24162 
24163 		if (EXPECTED(Z_ISREF_P(varptr) ||
24164 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
24165 			ZEND_VM_NEXT_OPCODE();
24166 		}
24167 	}
24168 
24169 	SAVE_OPLINE();
24170 	ZVAL_NEW_REF(arg, arg);
24171 	zend_error(E_NOTICE, "Only variables should be passed by reference");
24172 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24173 
24174 send_var:
24175 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24176 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
24177 		zend_refcounted *ref = Z_COUNTED_P(varptr);
24178 
24179 		varptr = Z_REFVAL_P(varptr);
24180 		ZVAL_COPY_VALUE(arg, varptr);
24181 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24182 			efree_size(ref, sizeof(zend_reference));
24183 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
24184 			Z_ADDREF_P(arg);
24185 		}
24186 	} else {
24187 		ZVAL_COPY_VALUE(arg, varptr);
24188 	}
24189 	ZEND_VM_NEXT_OPCODE();
24190 }
24191 
ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24193 {
24194 	USE_OPLINE
24195 	zval *varptr, *arg;
24196 
24197 	SAVE_OPLINE();
24198 	if (IS_CONST == IS_CONST) {
24199 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24200 		uint32_t arg_num;
24201 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24202 		if (UNEXPECTED(!arg)) {
24203 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24204 			HANDLE_EXCEPTION();
24205 		}
24206 	} else {
24207 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24208 	}
24209 
24210 	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24211 	if (Z_ISREF_P(varptr)) {
24212 		Z_ADDREF_P(varptr);
24213 	} else {
24214 		ZVAL_MAKE_REF_EX(varptr, 2);
24215 	}
24216 	ZVAL_REF(arg, Z_REF_P(varptr));
24217 
24218 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24219 	ZEND_VM_NEXT_OPCODE();
24220 }
24221 
ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24223 {
24224 	USE_OPLINE
24225 	zval *varptr, *arg;
24226 	uint32_t arg_num;
24227 
24228 	if (IS_CONST == IS_CONST) {
24229 		SAVE_OPLINE();
24230 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24231 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24232 		if (UNEXPECTED(!arg)) {
24233 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24234 			HANDLE_EXCEPTION();
24235 		}
24236 	} else {
24237 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24238 		arg_num = opline->op2.num;
24239 	}
24240 
24241 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
24242 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24243 			goto send_var_by_ref;
24244 		}
24245 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24246 send_var_by_ref:
24247 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24248 		if (Z_ISREF_P(varptr)) {
24249 			Z_ADDREF_P(varptr);
24250 		} else {
24251 			ZVAL_MAKE_REF_EX(varptr, 2);
24252 		}
24253 		ZVAL_REF(arg, Z_REF_P(varptr));
24254 
24255 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24256 		ZEND_VM_NEXT_OPCODE();
24257 	}
24258 
24259 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24260 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
24261 		SAVE_OPLINE();
24262 		ZVAL_UNDEFINED_OP1();
24263 		ZVAL_NULL(arg);
24264 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24265 	}
24266 
24267 	if (IS_VAR == IS_CV) {
24268 		ZVAL_COPY_DEREF(arg, varptr);
24269 	} else /* if (IS_VAR == IS_VAR) */ {
24270 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
24271 			zend_refcounted *ref = Z_COUNTED_P(varptr);
24272 
24273 			varptr = Z_REFVAL_P(varptr);
24274 			ZVAL_COPY_VALUE(arg, varptr);
24275 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24276 				efree_size(ref, sizeof(zend_reference));
24277 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
24278 				Z_ADDREF_P(arg);
24279 			}
24280 		} else {
24281 			ZVAL_COPY_VALUE(arg, varptr);
24282 		}
24283 	}
24284 
24285 	ZEND_VM_NEXT_OPCODE();
24286 }
24287 
ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24288 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24289 {
24290 	USE_OPLINE
24291 	zval *varptr, *arg;
24292 
24293 	if (IS_CONST == IS_CONST) {
24294 		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
24295 		SAVE_OPLINE();
24296 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24297 		uint32_t arg_num;
24298 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24299 		if (UNEXPECTED(!arg)) {
24300 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24301 			HANDLE_EXCEPTION();
24302 		}
24303 	} else {
24304 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24305 	}
24306 
24307 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
24308 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24309 		if (Z_ISREF_P(varptr)) {
24310 			Z_ADDREF_P(varptr);
24311 		} else {
24312 			ZVAL_MAKE_REF_EX(varptr, 2);
24313 		}
24314 		ZVAL_REF(arg, Z_REF_P(varptr));
24315 
24316 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24317 		ZEND_VM_NEXT_OPCODE();
24318 	}
24319 
24320 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24321 
24322 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
24323 		zend_refcounted *ref = Z_COUNTED_P(varptr);
24324 
24325 		varptr = Z_REFVAL_P(varptr);
24326 		ZVAL_COPY_VALUE(arg, varptr);
24327 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24328 			efree_size(ref, sizeof(zend_reference));
24329 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
24330 			Z_ADDREF_P(arg);
24331 		}
24332 	} else {
24333 		ZVAL_COPY_VALUE(arg, varptr);
24334 	}
24335 
24336 	ZEND_VM_NEXT_OPCODE();
24337 }
24338 
ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24339 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24340 {
24341 	zend_class_entry *ce, *scope;
24342 	zend_class_constant *c;
24343 	zval *value, *zv;
24344 	USE_OPLINE
24345 
24346 	SAVE_OPLINE();
24347 
24348 	do {
24349 		if (IS_VAR == IS_CONST) {
24350 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
24351 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
24352 				break;
24353 			} else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
24354 				ce = CACHED_PTR(opline->extended_value);
24355 			} else {
24356 				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);
24357 				if (UNEXPECTED(ce == NULL)) {
24358 					ZVAL_UNDEF(EX_VAR(opline->result.var));
24359 					HANDLE_EXCEPTION();
24360 				}
24361 			}
24362 		} else {
24363 			if (IS_VAR == IS_UNUSED) {
24364 				ce = zend_fetch_class(NULL, opline->op1.num);
24365 				if (UNEXPECTED(ce == NULL)) {
24366 					ZVAL_UNDEF(EX_VAR(opline->result.var));
24367 					HANDLE_EXCEPTION();
24368 				}
24369 			} else {
24370 				ce = Z_CE_P(EX_VAR(opline->op1.var));
24371 			}
24372 			if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
24373 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
24374 				break;
24375 			}
24376 		}
24377 
24378 		zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1);
24379 		if (EXPECTED(zv != NULL)) {
24380 			c = Z_PTR_P(zv);
24381 			scope = EX(func)->op_array.scope;
24382 			if (!zend_verify_const_access(c, scope)) {
24383 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
24384 				ZVAL_UNDEF(EX_VAR(opline->result.var));
24385 				HANDLE_EXCEPTION();
24386 			}
24387 			value = &c->value;
24388 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
24389 				zval_update_constant_ex(value, c->ce);
24390 				if (UNEXPECTED(EG(exception) != NULL)) {
24391 					ZVAL_UNDEF(EX_VAR(opline->result.var));
24392 					HANDLE_EXCEPTION();
24393 				}
24394 			}
24395 			CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
24396 		} else {
24397 			zend_throw_error(NULL, "Undefined constant %s::%s",
24398 				ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
24399 			ZVAL_UNDEF(EX_VAR(opline->result.var));
24400 			HANDLE_EXCEPTION();
24401 		}
24402 	} while (0);
24403 
24404 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
24405 
24406 	ZEND_VM_NEXT_OPCODE();
24407 }
24408 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24410 {
24411 	USE_OPLINE
24412 	zval *expr_ptr, new_expr;
24413 
24414 	SAVE_OPLINE();
24415 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
24416 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
24417 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24418 		if (Z_ISREF_P(expr_ptr)) {
24419 			Z_ADDREF_P(expr_ptr);
24420 		} else {
24421 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
24422 		}
24423 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24424 	} else {
24425 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24426 		if (IS_VAR == IS_TMP_VAR) {
24427 			/* pass */
24428 		} else if (IS_VAR == IS_CONST) {
24429 			Z_TRY_ADDREF_P(expr_ptr);
24430 		} else if (IS_VAR == IS_CV) {
24431 			ZVAL_DEREF(expr_ptr);
24432 			Z_TRY_ADDREF_P(expr_ptr);
24433 		} else /* if (IS_VAR == IS_VAR) */ {
24434 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
24435 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
24436 
24437 				expr_ptr = Z_REFVAL_P(expr_ptr);
24438 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24439 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
24440 					expr_ptr = &new_expr;
24441 					efree_size(ref, sizeof(zend_reference));
24442 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
24443 					Z_ADDREF_P(expr_ptr);
24444 				}
24445 			}
24446 		}
24447 	}
24448 
24449 	if (IS_CONST != IS_UNUSED) {
24450 		zval *offset = RT_CONSTANT(opline, opline->op2);
24451 		zend_string *str;
24452 		zend_ulong hval;
24453 
24454 add_again:
24455 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24456 			str = Z_STR_P(offset);
24457 			if (IS_CONST != IS_CONST) {
24458 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
24459 					goto num_index;
24460 				}
24461 			}
24462 str_index:
24463 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
24464 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24465 			hval = Z_LVAL_P(offset);
24466 num_index:
24467 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
24468 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
24469 			offset = Z_REFVAL_P(offset);
24470 			goto add_again;
24471 		} else if (Z_TYPE_P(offset) == IS_NULL) {
24472 			str = ZSTR_EMPTY_ALLOC();
24473 			goto str_index;
24474 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24475 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
24476 			goto num_index;
24477 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
24478 			hval = 0;
24479 			goto num_index;
24480 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
24481 			hval = 1;
24482 			goto num_index;
24483 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
24484 			zend_use_resource_as_offset(offset);
24485 			hval = Z_RES_HANDLE_P(offset);
24486 			goto num_index;
24487 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
24488 			ZVAL_UNDEFINED_OP2();
24489 			str = ZSTR_EMPTY_ALLOC();
24490 			goto str_index;
24491 		} else {
24492 			zend_illegal_offset();
24493 			zval_ptr_dtor_nogc(expr_ptr);
24494 		}
24495 
24496 	} else {
24497 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
24498 			zend_cannot_add_element();
24499 			zval_ptr_dtor_nogc(expr_ptr);
24500 		}
24501 	}
24502 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24503 }
24504 
ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24505 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24506 {
24507 	zval *array;
24508 	uint32_t size;
24509 	USE_OPLINE
24510 
24511 	array = EX_VAR(opline->result.var);
24512 	if (IS_VAR != IS_UNUSED) {
24513 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
24514 		ZVAL_ARR(array, zend_new_array(size));
24515 		/* Explicitly initialize array as not-packed if flag is set */
24516 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
24517 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
24518 		}
24519 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24520 	} else {
24521 		ZVAL_ARR(array, zend_new_array(0));
24522 		ZEND_VM_NEXT_OPCODE();
24523 	}
24524 }
24525 
ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24526 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24527 {
24528 	USE_OPLINE
24529 	zval *container;
24530 	zval *offset;
24531 	zend_ulong hval;
24532 	zend_string *key;
24533 
24534 	SAVE_OPLINE();
24535 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24536 	offset = RT_CONSTANT(opline, opline->op2);
24537 
24538 	do {
24539 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24540 			HashTable *ht;
24541 
24542 unset_dim_array:
24543 			SEPARATE_ARRAY(container);
24544 			ht = Z_ARRVAL_P(container);
24545 offset_again:
24546 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24547 				key = Z_STR_P(offset);
24548 				if (IS_CONST != IS_CONST) {
24549 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
24550 						goto num_index_dim;
24551 					}
24552 				}
24553 str_index_dim:
24554 				if (ht == &EG(symbol_table)) {
24555 					zend_delete_global_variable(key);
24556 				} else {
24557 					zend_hash_del(ht, key);
24558 				}
24559 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24560 				hval = Z_LVAL_P(offset);
24561 num_index_dim:
24562 				zend_hash_index_del(ht, hval);
24563 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
24564 				offset = Z_REFVAL_P(offset);
24565 				goto offset_again;
24566 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24567 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
24568 				goto num_index_dim;
24569 			} else if (Z_TYPE_P(offset) == IS_NULL) {
24570 				key = ZSTR_EMPTY_ALLOC();
24571 				goto str_index_dim;
24572 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
24573 				hval = 0;
24574 				goto num_index_dim;
24575 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
24576 				hval = 1;
24577 				goto num_index_dim;
24578 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
24579 				hval = Z_RES_HANDLE_P(offset);
24580 				goto num_index_dim;
24581 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
24582 				ZVAL_UNDEFINED_OP2();
24583 				key = ZSTR_EMPTY_ALLOC();
24584 				goto str_index_dim;
24585 			} else {
24586 				zend_type_error("Illegal offset type in unset");
24587 			}
24588 			break;
24589 		} else if (Z_ISREF_P(container)) {
24590 			container = Z_REFVAL_P(container);
24591 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24592 				goto unset_dim_array;
24593 			}
24594 		}
24595 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24596 			container = ZVAL_UNDEFINED_OP1();
24597 		}
24598 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
24599 			offset = ZVAL_UNDEFINED_OP2();
24600 		}
24601 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
24602 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
24603 				offset++;
24604 			}
24605 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
24606 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
24607 			zend_throw_error(NULL, "Cannot unset string offsets");
24608 		}
24609 	} while (0);
24610 
24611 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24612 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24613 }
24614 
ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24615 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24616 {
24617 	USE_OPLINE
24618 	zval *container;
24619 	zval *offset;
24620 	zend_string *name, *tmp_name;
24621 
24622 	SAVE_OPLINE();
24623 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24624 	offset = RT_CONSTANT(opline, opline->op2);
24625 
24626 	do {
24627 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
24628 			if (Z_ISREF_P(container)) {
24629 				container = Z_REFVAL_P(container);
24630 				if (Z_TYPE_P(container) != IS_OBJECT) {
24631 					if (IS_VAR == IS_CV
24632 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24633 						ZVAL_UNDEFINED_OP1();
24634 					}
24635 					break;
24636 				}
24637 			} else {
24638 				break;
24639 			}
24640 		}
24641 		if (IS_CONST == IS_CONST) {
24642 			name = Z_STR_P(offset);
24643 		} else {
24644 			name = zval_try_get_tmp_string(offset, &tmp_name);
24645 			if (UNEXPECTED(!name)) {
24646 				break;
24647 			}
24648 		}
24649 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
24650 		if (IS_CONST != IS_CONST) {
24651 			zend_tmp_string_release(tmp_name);
24652 		}
24653 	} while (0);
24654 
24655 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24656 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24657 }
24658 
ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24659 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24660 {
24661 	USE_OPLINE
24662 
24663 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
24664 
24665 	SAVE_OPLINE();
24666 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
24667 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24668 	}
24669 
24670 	/* Destroy the previously yielded value */
24671 	zval_ptr_dtor(&generator->value);
24672 
24673 	/* Destroy the previously yielded key */
24674 	zval_ptr_dtor(&generator->key);
24675 
24676 	/* Set the new yielded value */
24677 	if (IS_VAR != IS_UNUSED) {
24678 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
24679 			/* Constants and temporary variables aren't yieldable by reference,
24680 			 * but we still allow them with a notice. */
24681 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
24682 				zval *value;
24683 
24684 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24685 
24686 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24687 				ZVAL_COPY_VALUE(&generator->value, value);
24688 				if (IS_VAR == IS_CONST) {
24689 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
24690 						Z_ADDREF(generator->value);
24691 					}
24692 				}
24693 			} else {
24694 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24695 
24696 				/* If a function call result is yielded and the function did
24697 				 * not return by reference we throw a notice. */
24698 				do {
24699 					if (IS_VAR == IS_VAR) {
24700 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
24701 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
24702 						 && !Z_ISREF_P(value_ptr)) {
24703 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24704 							ZVAL_COPY(&generator->value, value_ptr);
24705 							break;
24706 						}
24707 					}
24708 					if (Z_ISREF_P(value_ptr)) {
24709 						Z_ADDREF_P(value_ptr);
24710 					} else {
24711 						ZVAL_MAKE_REF_EX(value_ptr, 2);
24712 					}
24713 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
24714 				} while (0);
24715 
24716 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24717 			}
24718 		} else {
24719 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24720 
24721 			/* Consts, temporary variables and references need copying */
24722 			if (IS_VAR == IS_CONST) {
24723 				ZVAL_COPY_VALUE(&generator->value, value);
24724 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
24725 					Z_ADDREF(generator->value);
24726 				}
24727 			} else if (IS_VAR == IS_TMP_VAR) {
24728 				ZVAL_COPY_VALUE(&generator->value, value);
24729             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
24730 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
24731 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24732 			} else {
24733 				ZVAL_COPY_VALUE(&generator->value, value);
24734 				if (IS_VAR == IS_CV) {
24735 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
24736 				}
24737 			}
24738 		}
24739 	} else {
24740 		/* If no value was specified yield null */
24741 		ZVAL_NULL(&generator->value);
24742 	}
24743 
24744 	/* Set the new yielded key */
24745 	if (IS_CONST != IS_UNUSED) {
24746 		zval *key = RT_CONSTANT(opline, opline->op2);
24747 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
24748 			key = Z_REFVAL_P(key);
24749 		}
24750 		ZVAL_COPY(&generator->key, key);
24751 
24752 		if (Z_TYPE(generator->key) == IS_LONG
24753 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
24754 		) {
24755 			generator->largest_used_integer_key = Z_LVAL(generator->key);
24756 		}
24757 	} else {
24758 		/* If no key was specified we use auto-increment keys */
24759 		generator->largest_used_integer_key++;
24760 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
24761 	}
24762 
24763 	if (RETURN_VALUE_USED(opline)) {
24764 		/* If the return value of yield is used set the send
24765 		 * target and initialize it to NULL */
24766 		generator->send_target = EX_VAR(opline->result.var);
24767 		ZVAL_NULL(generator->send_target);
24768 	} else {
24769 		generator->send_target = NULL;
24770 	}
24771 
24772 	/* We increment to the next op, so we are at the correct position when the
24773 	 * generator is resumed. */
24774 	ZEND_VM_INC_OPCODE();
24775 
24776 	/* The GOTO VM uses a local opline variable. We need to set the opline
24777 	 * variable in execute_data so we don't resume at an old position. */
24778 	SAVE_OPLINE();
24779 
24780 	ZEND_VM_RETURN();
24781 }
24782 
ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24783 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24784 {
24785 	USE_OPLINE
24786 	zval *op1;
24787 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
24788 	zval *result;
24789 
24790 	SAVE_OPLINE();
24791 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
24792 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
24793 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_VAR == IS_CONST);
24794 	} else if (opline->extended_value) {
24795 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
24796 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
24797 		} else {
24798 			result = NULL;
24799 		}
24800 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
24801 		result = zend_hash_find_ex(ht, ZSTR_EMPTY_ALLOC(), 1);
24802 	} else {
24803 		zend_string *key;
24804 		zval key_tmp, *val;
24805 
24806 		result = NULL;
24807 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
24808 			ZVAL_STR(&key_tmp, key);
24809 			if (zend_compare(op1, &key_tmp) == 0) {
24810 				result = val;
24811 				break;
24812 			}
24813 		} ZEND_HASH_FOREACH_END();
24814 	}
24815 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24816 	ZEND_VM_SMART_BRANCH(result, 1);
24817 }
24818 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24819 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24820 {
24821 	USE_OPLINE
24822 	zval *object;
24823 	zval *property;
24824 	zval *value;
24825 	zval *zptr;
24826 	void **cache_slot;
24827 	zend_property_info *prop_info;
24828 	zend_object *zobj;
24829 	zend_string *name, *tmp_name;
24830 
24831 	SAVE_OPLINE();
24832 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24833 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
24834 
24835 	do {
24836 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
24837 
24838 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
24839 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
24840 				object = Z_REFVAL_P(object);
24841 				goto assign_op_object;
24842 			}
24843 			if (IS_VAR == IS_CV
24844 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24845 				ZVAL_UNDEFINED_OP1();
24846 			}
24847 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
24848 			break;
24849 		}
24850 
24851 assign_op_object:
24852 		/* here we are sure we are dealing with an object */
24853 		zobj = Z_OBJ_P(object);
24854 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
24855 			name = Z_STR_P(property);
24856 		} else {
24857 			name = zval_try_get_tmp_string(property, &tmp_name);
24858 			if (UNEXPECTED(!name)) {
24859 				UNDEF_RESULT();
24860 				break;
24861 			}
24862 		}
24863 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
24864 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
24865 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
24866 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24867 					ZVAL_NULL(EX_VAR(opline->result.var));
24868 				}
24869 			} else {
24870 				zval *orig_zptr = zptr;
24871 				zend_reference *ref;
24872 
24873 				do {
24874 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
24875 						ref = Z_REF_P(zptr);
24876 						zptr = Z_REFVAL_P(zptr);
24877 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
24878 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
24879 							break;
24880 						}
24881 					}
24882 
24883 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
24884 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
24885 					} else {
24886 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
24887 					}
24888 					if (UNEXPECTED(prop_info)) {
24889 						/* special case for typed properties */
24890 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
24891 					} else {
24892 						zend_binary_op(zptr, zptr, value OPLINE_CC);
24893 					}
24894 				} while (0);
24895 
24896 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24897 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
24898 				}
24899 			}
24900 		} else {
24901 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
24902 		}
24903 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
24904 			zend_tmp_string_release(tmp_name);
24905 		}
24906 	} while (0);
24907 
24908 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
24909 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
24910 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24911 	/* assign_obj has two opcodes! */
24912 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24913 }
24914 
24915 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24916 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24917 {
24918 	USE_OPLINE
24919 	zval *var_ptr;
24920 	zval *value, *container, *dim;
24921 
24922 	SAVE_OPLINE();
24923 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24924 
24925 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24926 assign_dim_op_array:
24927 		SEPARATE_ARRAY(container);
24928 assign_dim_op_new_array:
24929 		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
24930 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
24931 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
24932 			if (UNEXPECTED(!var_ptr)) {
24933 				zend_cannot_add_element();
24934 				goto assign_dim_op_ret_null;
24935 			}
24936 		} else {
24937 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
24938 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
24939 			} else {
24940 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
24941 			}
24942 			if (UNEXPECTED(!var_ptr)) {
24943 				goto assign_dim_op_ret_null;
24944 			}
24945 		}
24946 
24947 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
24948 
24949 		do {
24950 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
24951 				zend_reference *ref = Z_REF_P(var_ptr);
24952 				var_ptr = Z_REFVAL_P(var_ptr);
24953 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
24954 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
24955 					break;
24956 				}
24957 			}
24958 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
24959 		} while (0);
24960 
24961 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24962 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
24963 		}
24964 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
24965 	} else {
24966 		if (EXPECTED(Z_ISREF_P(container))) {
24967 			container = Z_REFVAL_P(container);
24968 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24969 				goto assign_dim_op_array;
24970 			}
24971 		}
24972 
24973 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
24974 			zend_object *obj = Z_OBJ_P(container);
24975 
24976 			GC_ADDREF(obj);
24977 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
24978 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
24979 				dim = ZVAL_UNDEFINED_OP2();
24980 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
24981 				dim++;
24982 			}
24983 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
24984 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24985 				zend_objects_store_del(obj);
24986 			}
24987 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
24988 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
24989 				ZVAL_UNDEFINED_OP1();
24990 			}
24991 			ZVAL_ARR(container, zend_new_array(8));
24992 			goto assign_dim_op_new_array;
24993 		} else {
24994 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
24995 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
24996 assign_dim_op_ret_null:
24997 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
24998 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24999 				ZVAL_NULL(EX_VAR(opline->result.var));
25000 			}
25001 		}
25002 	}
25003 
25004 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25005 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25006 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25007 }
25008 
ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25009 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25010 {
25011 	USE_OPLINE
25012 	zval *var_ptr;
25013 	zval *value;
25014 
25015 	SAVE_OPLINE();
25016 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25017 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25018 
25019 	do {
25020 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
25021 			zend_reference *ref = Z_REF_P(var_ptr);
25022 			var_ptr = Z_REFVAL_P(var_ptr);
25023 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
25024 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
25025 				break;
25026 			}
25027 		}
25028 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
25029 	} while (0);
25030 
25031 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25032 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
25033 	}
25034 
25035 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25036 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25037 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25038 }
25039 
ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25040 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25041 {
25042 	USE_OPLINE
25043 	zval *object;
25044 	zval *property;
25045 	zval *zptr;
25046 	void **cache_slot;
25047 	zend_property_info *prop_info;
25048 	zend_object *zobj;
25049 	zend_string *name, *tmp_name;
25050 
25051 	SAVE_OPLINE();
25052 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25053 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25054 
25055 	do {
25056 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25057 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25058 				object = Z_REFVAL_P(object);
25059 				goto pre_incdec_object;
25060 			}
25061 			if (IS_VAR == IS_CV
25062 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25063 				ZVAL_UNDEFINED_OP1();
25064 			}
25065 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25066 			break;
25067 		}
25068 
25069 pre_incdec_object:
25070 		/* here we are sure we are dealing with an object */
25071 		zobj = Z_OBJ_P(object);
25072 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25073 			name = Z_STR_P(property);
25074 		} else {
25075 			name = zval_try_get_tmp_string(property, &tmp_name);
25076 			if (UNEXPECTED(!name)) {
25077 				UNDEF_RESULT();
25078 				break;
25079 			}
25080 		}
25081 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
25082 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
25083 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
25084 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25085 					ZVAL_NULL(EX_VAR(opline->result.var));
25086 				}
25087 			} else {
25088 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25089 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
25090 				} else {
25091 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
25092 				}
25093 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
25094 			}
25095 		} else {
25096 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
25097 		}
25098 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25099 			zend_tmp_string_release(tmp_name);
25100 		}
25101 	} while (0);
25102 
25103 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25104 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25105 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25106 }
25107 
ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25108 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25109 {
25110 	USE_OPLINE
25111 	zval *object;
25112 	zval *property;
25113 	zval *zptr;
25114 	void **cache_slot;
25115 	zend_property_info *prop_info;
25116 	zend_object *zobj;
25117 	zend_string *name, *tmp_name;
25118 
25119 	SAVE_OPLINE();
25120 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25121 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25122 
25123 	do {
25124 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25125 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25126 				object = Z_REFVAL_P(object);
25127 				goto post_incdec_object;
25128 			}
25129 			if (IS_VAR == IS_CV
25130 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25131 				ZVAL_UNDEFINED_OP1();
25132 			}
25133 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25134 			break;
25135 		}
25136 
25137 post_incdec_object:
25138 		/* here we are sure we are dealing with an object */
25139 		zobj = Z_OBJ_P(object);
25140 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25141 			name = Z_STR_P(property);
25142 		} else {
25143 			name = zval_try_get_tmp_string(property, &tmp_name);
25144 			if (UNEXPECTED(!name)) {
25145 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25146 				break;
25147 			}
25148 		}
25149 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
25150 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
25151 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
25152 				ZVAL_NULL(EX_VAR(opline->result.var));
25153 			} else {
25154 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25155 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
25156 				} else {
25157 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
25158 				}
25159 
25160 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
25161 			}
25162 		} else {
25163 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
25164 		}
25165 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25166 			zend_tmp_string_release(tmp_name);
25167 		}
25168 	} while (0);
25169 
25170 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25171 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25172 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25173 }
25174 
ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25176 {
25177 	USE_OPLINE
25178 	zval *container;
25179 
25180 	SAVE_OPLINE();
25181 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25182 	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);
25183 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25184 	if (IS_VAR == IS_VAR) {
25185 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25186 	}
25187 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25188 }
25189 
ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25190 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25191 {
25192 	USE_OPLINE
25193 	zval *container;
25194 
25195 	SAVE_OPLINE();
25196 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25197 	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);
25198 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25199 	if (IS_VAR == IS_VAR) {
25200 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25201 	}
25202 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25203 }
25204 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25206 {
25207 #if 0
25208 	USE_OPLINE
25209 #endif
25210 
25211 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
25212         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
25213 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25214         }
25215 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25216 	} else {
25217 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25218 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25219 		}
25220 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25221 	}
25222 }
25223 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25224 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25225 {
25226 	USE_OPLINE
25227 	zval *container;
25228 
25229 	SAVE_OPLINE();
25230 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25231 	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);
25232 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25233 	if (IS_VAR == IS_VAR) {
25234 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25235 	}
25236 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25237 }
25238 
ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25239 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25240 {
25241 	USE_OPLINE
25242 	zval *property, *container, *result;
25243 
25244 	SAVE_OPLINE();
25245 
25246 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25247 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25248 	result = EX_VAR(opline->result.var);
25249 	zend_fetch_property_address(
25250 		result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
25251 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
25252 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
25253 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25254 	if (IS_VAR == IS_VAR) {
25255 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25256 	}
25257 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25258 }
25259 
ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25260 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25261 {
25262 	USE_OPLINE
25263 	zval *property, *container, *result;
25264 
25265 	SAVE_OPLINE();
25266 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25267 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25268 	result = EX_VAR(opline->result.var);
25269 	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
25270 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25271 	if (IS_VAR == IS_VAR) {
25272 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25273 	}
25274 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25275 }
25276 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25277 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25278 {
25279 #if 0
25280 	USE_OPLINE
25281 #endif
25282 
25283 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
25284 		/* Behave like FETCH_OBJ_W */
25285 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
25286 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25287 		}
25288 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25289 	} else {
25290 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25291 	}
25292 }
25293 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25294 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25295 {
25296 	USE_OPLINE
25297 	zval *container, *property, *result;
25298 
25299 	SAVE_OPLINE();
25300 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25301 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25302 	result = EX_VAR(opline->result.var);
25303 	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
25304 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25305 	if (IS_VAR == IS_VAR) {
25306 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
25307 	}
25308 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25309 }
25310 
ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25312 {
25313 	USE_OPLINE
25314 	zval *container, *dim;
25315 
25316 	SAVE_OPLINE();
25317 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25318 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25319 
25320 	if (IS_VAR == IS_VAR
25321 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
25322 		&& UNEXPECTED(!Z_ISREF_P(container))
25323 	) {
25324 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
25325 		zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
25326 	} else {
25327 		zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
25328 	}
25329 
25330 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25331 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25332 }
25333 
ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25334 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25335 {
25336 	USE_OPLINE
25337 	zval *object, *property, *value, tmp;
25338 	zend_object *zobj;
25339 	zend_string *name, *tmp_name;
25340 
25341 	SAVE_OPLINE();
25342 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25343 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25344 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
25345 
25346 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25347 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25348 			object = Z_REFVAL_P(object);
25349 			goto assign_object;
25350 		}
25351 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25352 		value = &EG(uninitialized_zval);
25353 		goto free_and_exit_assign_obj;
25354 	}
25355 
25356 assign_object:
25357 	zobj = Z_OBJ_P(object);
25358 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
25359 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
25360 		void **cache_slot = CACHE_ADDR(opline->extended_value);
25361 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25362 		zend_object *zobj = Z_OBJ_P(object);
25363 		zval *property_val;
25364 
25365 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25366 			property_val = OBJ_PROP(zobj, prop_offset);
25367 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
25368 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25369 
25370 				if (UNEXPECTED(prop_info != NULL)) {
25371 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25372 					goto free_and_exit_assign_obj;
25373 				} else {
25374 fast_assign_obj:
25375 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
25376 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25377 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25378 					}
25379 					goto exit_assign_obj;
25380 				}
25381 			}
25382 		} else {
25383 			if (EXPECTED(zobj->properties != NULL)) {
25384 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25385 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25386 						GC_DELREF(zobj->properties);
25387 					}
25388 					zobj->properties = zend_array_dup(zobj->properties);
25389 				}
25390 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
25391 				if (property_val) {
25392 					goto fast_assign_obj;
25393 				}
25394 			}
25395 
25396 			if (!zobj->ce->__set) {
25397 
25398 				if (EXPECTED(zobj->properties == NULL)) {
25399 					rebuild_object_properties(zobj);
25400 				}
25401 				if (IS_CONST == IS_CONST) {
25402 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25403 						Z_ADDREF_P(value);
25404 					}
25405 				} else if (IS_CONST != IS_TMP_VAR) {
25406 					if (Z_ISREF_P(value)) {
25407 						if (IS_CONST == IS_VAR) {
25408 							zend_reference *ref = Z_REF_P(value);
25409 							if (GC_DELREF(ref) == 0) {
25410 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25411 								efree_size(ref, sizeof(zend_reference));
25412 								value = &tmp;
25413 							} else {
25414 								value = Z_REFVAL_P(value);
25415 								Z_TRY_ADDREF_P(value);
25416 							}
25417 						} else {
25418 							value = Z_REFVAL_P(value);
25419 							Z_TRY_ADDREF_P(value);
25420 						}
25421 					} else if (IS_CONST == IS_CV) {
25422 						Z_TRY_ADDREF_P(value);
25423 					}
25424 				}
25425 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
25426 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25427 					ZVAL_COPY(EX_VAR(opline->result.var), value);
25428 				}
25429 				goto exit_assign_obj;
25430 			}
25431 		}
25432 	}
25433 
25434 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
25435 		ZVAL_DEREF(value);
25436 	}
25437 
25438 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25439 		name = Z_STR_P(property);
25440 	} else {
25441 		name = zval_try_get_tmp_string(property, &tmp_name);
25442 		if (UNEXPECTED(!name)) {
25443 
25444 			UNDEF_RESULT();
25445 			goto exit_assign_obj;
25446 		}
25447 	}
25448 
25449 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25450 
25451 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25452 		zend_tmp_string_release(tmp_name);
25453 	}
25454 
25455 free_and_exit_assign_obj:
25456 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25457 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
25458 	}
25459 
25460 exit_assign_obj:
25461 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25462 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25463 	/* assign_obj has two opcodes! */
25464 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25465 }
25466 
25467 /* 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)25468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25469 {
25470 	USE_OPLINE
25471 	zval *object, *property, *value, tmp;
25472 	zend_object *zobj;
25473 	zend_string *name, *tmp_name;
25474 
25475 	SAVE_OPLINE();
25476 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25477 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25478 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
25479 
25480 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25481 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25482 			object = Z_REFVAL_P(object);
25483 			goto assign_object;
25484 		}
25485 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25486 		value = &EG(uninitialized_zval);
25487 		goto free_and_exit_assign_obj;
25488 	}
25489 
25490 assign_object:
25491 	zobj = Z_OBJ_P(object);
25492 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
25493 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
25494 		void **cache_slot = CACHE_ADDR(opline->extended_value);
25495 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25496 		zend_object *zobj = Z_OBJ_P(object);
25497 		zval *property_val;
25498 
25499 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25500 			property_val = OBJ_PROP(zobj, prop_offset);
25501 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
25502 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25503 
25504 				if (UNEXPECTED(prop_info != NULL)) {
25505 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25506 					goto free_and_exit_assign_obj;
25507 				} else {
25508 fast_assign_obj:
25509 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
25510 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25511 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25512 					}
25513 					goto exit_assign_obj;
25514 				}
25515 			}
25516 		} else {
25517 			if (EXPECTED(zobj->properties != NULL)) {
25518 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25519 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25520 						GC_DELREF(zobj->properties);
25521 					}
25522 					zobj->properties = zend_array_dup(zobj->properties);
25523 				}
25524 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
25525 				if (property_val) {
25526 					goto fast_assign_obj;
25527 				}
25528 			}
25529 
25530 			if (!zobj->ce->__set) {
25531 
25532 				if (EXPECTED(zobj->properties == NULL)) {
25533 					rebuild_object_properties(zobj);
25534 				}
25535 				if (IS_TMP_VAR == IS_CONST) {
25536 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25537 						Z_ADDREF_P(value);
25538 					}
25539 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
25540 					if (Z_ISREF_P(value)) {
25541 						if (IS_TMP_VAR == IS_VAR) {
25542 							zend_reference *ref = Z_REF_P(value);
25543 							if (GC_DELREF(ref) == 0) {
25544 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25545 								efree_size(ref, sizeof(zend_reference));
25546 								value = &tmp;
25547 							} else {
25548 								value = Z_REFVAL_P(value);
25549 								Z_TRY_ADDREF_P(value);
25550 							}
25551 						} else {
25552 							value = Z_REFVAL_P(value);
25553 							Z_TRY_ADDREF_P(value);
25554 						}
25555 					} else if (IS_TMP_VAR == IS_CV) {
25556 						Z_TRY_ADDREF_P(value);
25557 					}
25558 				}
25559 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
25560 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25561 					ZVAL_COPY(EX_VAR(opline->result.var), value);
25562 				}
25563 				goto exit_assign_obj;
25564 			}
25565 		}
25566 	}
25567 
25568 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
25569 		ZVAL_DEREF(value);
25570 	}
25571 
25572 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25573 		name = Z_STR_P(property);
25574 	} else {
25575 		name = zval_try_get_tmp_string(property, &tmp_name);
25576 		if (UNEXPECTED(!name)) {
25577 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25578 			UNDEF_RESULT();
25579 			goto exit_assign_obj;
25580 		}
25581 	}
25582 
25583 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25584 
25585 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25586 		zend_tmp_string_release(tmp_name);
25587 	}
25588 
25589 free_and_exit_assign_obj:
25590 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25591 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
25592 	}
25593 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25594 exit_assign_obj:
25595 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25596 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25597 	/* assign_obj has two opcodes! */
25598 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25599 }
25600 
25601 /* 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)25602 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25603 {
25604 	USE_OPLINE
25605 	zval *object, *property, *value, tmp;
25606 	zend_object *zobj;
25607 	zend_string *name, *tmp_name;
25608 
25609 	SAVE_OPLINE();
25610 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25611 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25612 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
25613 
25614 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25615 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25616 			object = Z_REFVAL_P(object);
25617 			goto assign_object;
25618 		}
25619 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25620 		value = &EG(uninitialized_zval);
25621 		goto free_and_exit_assign_obj;
25622 	}
25623 
25624 assign_object:
25625 	zobj = Z_OBJ_P(object);
25626 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
25627 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
25628 		void **cache_slot = CACHE_ADDR(opline->extended_value);
25629 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25630 		zend_object *zobj = Z_OBJ_P(object);
25631 		zval *property_val;
25632 
25633 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25634 			property_val = OBJ_PROP(zobj, prop_offset);
25635 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
25636 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25637 
25638 				if (UNEXPECTED(prop_info != NULL)) {
25639 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25640 					goto free_and_exit_assign_obj;
25641 				} else {
25642 fast_assign_obj:
25643 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
25644 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25645 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25646 					}
25647 					goto exit_assign_obj;
25648 				}
25649 			}
25650 		} else {
25651 			if (EXPECTED(zobj->properties != NULL)) {
25652 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25653 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25654 						GC_DELREF(zobj->properties);
25655 					}
25656 					zobj->properties = zend_array_dup(zobj->properties);
25657 				}
25658 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
25659 				if (property_val) {
25660 					goto fast_assign_obj;
25661 				}
25662 			}
25663 
25664 			if (!zobj->ce->__set) {
25665 
25666 				if (EXPECTED(zobj->properties == NULL)) {
25667 					rebuild_object_properties(zobj);
25668 				}
25669 				if (IS_VAR == IS_CONST) {
25670 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25671 						Z_ADDREF_P(value);
25672 					}
25673 				} else if (IS_VAR != IS_TMP_VAR) {
25674 					if (Z_ISREF_P(value)) {
25675 						if (IS_VAR == IS_VAR) {
25676 							zend_reference *ref = Z_REF_P(value);
25677 							if (GC_DELREF(ref) == 0) {
25678 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25679 								efree_size(ref, sizeof(zend_reference));
25680 								value = &tmp;
25681 							} else {
25682 								value = Z_REFVAL_P(value);
25683 								Z_TRY_ADDREF_P(value);
25684 							}
25685 						} else {
25686 							value = Z_REFVAL_P(value);
25687 							Z_TRY_ADDREF_P(value);
25688 						}
25689 					} else if (IS_VAR == IS_CV) {
25690 						Z_TRY_ADDREF_P(value);
25691 					}
25692 				}
25693 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
25694 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25695 					ZVAL_COPY(EX_VAR(opline->result.var), value);
25696 				}
25697 				goto exit_assign_obj;
25698 			}
25699 		}
25700 	}
25701 
25702 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
25703 		ZVAL_DEREF(value);
25704 	}
25705 
25706 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25707 		name = Z_STR_P(property);
25708 	} else {
25709 		name = zval_try_get_tmp_string(property, &tmp_name);
25710 		if (UNEXPECTED(!name)) {
25711 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25712 			UNDEF_RESULT();
25713 			goto exit_assign_obj;
25714 		}
25715 	}
25716 
25717 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25718 
25719 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25720 		zend_tmp_string_release(tmp_name);
25721 	}
25722 
25723 free_and_exit_assign_obj:
25724 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25725 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
25726 	}
25727 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25728 exit_assign_obj:
25729 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25730 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25731 	/* assign_obj has two opcodes! */
25732 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25733 }
25734 
25735 /* 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)25736 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25737 {
25738 	USE_OPLINE
25739 	zval *object, *property, *value, tmp;
25740 	zend_object *zobj;
25741 	zend_string *name, *tmp_name;
25742 
25743 	SAVE_OPLINE();
25744 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25745 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25746 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
25747 
25748 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25749 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25750 			object = Z_REFVAL_P(object);
25751 			goto assign_object;
25752 		}
25753 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25754 		value = &EG(uninitialized_zval);
25755 		goto free_and_exit_assign_obj;
25756 	}
25757 
25758 assign_object:
25759 	zobj = Z_OBJ_P(object);
25760 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
25761 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
25762 		void **cache_slot = CACHE_ADDR(opline->extended_value);
25763 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25764 		zend_object *zobj = Z_OBJ_P(object);
25765 		zval *property_val;
25766 
25767 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25768 			property_val = OBJ_PROP(zobj, prop_offset);
25769 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
25770 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25771 
25772 				if (UNEXPECTED(prop_info != NULL)) {
25773 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25774 					goto free_and_exit_assign_obj;
25775 				} else {
25776 fast_assign_obj:
25777 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
25778 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25779 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25780 					}
25781 					goto exit_assign_obj;
25782 				}
25783 			}
25784 		} else {
25785 			if (EXPECTED(zobj->properties != NULL)) {
25786 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25787 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25788 						GC_DELREF(zobj->properties);
25789 					}
25790 					zobj->properties = zend_array_dup(zobj->properties);
25791 				}
25792 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
25793 				if (property_val) {
25794 					goto fast_assign_obj;
25795 				}
25796 			}
25797 
25798 			if (!zobj->ce->__set) {
25799 
25800 				if (EXPECTED(zobj->properties == NULL)) {
25801 					rebuild_object_properties(zobj);
25802 				}
25803 				if (IS_CV == IS_CONST) {
25804 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25805 						Z_ADDREF_P(value);
25806 					}
25807 				} else if (IS_CV != IS_TMP_VAR) {
25808 					if (Z_ISREF_P(value)) {
25809 						if (IS_CV == IS_VAR) {
25810 							zend_reference *ref = Z_REF_P(value);
25811 							if (GC_DELREF(ref) == 0) {
25812 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25813 								efree_size(ref, sizeof(zend_reference));
25814 								value = &tmp;
25815 							} else {
25816 								value = Z_REFVAL_P(value);
25817 								Z_TRY_ADDREF_P(value);
25818 							}
25819 						} else {
25820 							value = Z_REFVAL_P(value);
25821 							Z_TRY_ADDREF_P(value);
25822 						}
25823 					} else if (IS_CV == IS_CV) {
25824 						Z_TRY_ADDREF_P(value);
25825 					}
25826 				}
25827 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
25828 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25829 					ZVAL_COPY(EX_VAR(opline->result.var), value);
25830 				}
25831 				goto exit_assign_obj;
25832 			}
25833 		}
25834 	}
25835 
25836 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
25837 		ZVAL_DEREF(value);
25838 	}
25839 
25840 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25841 		name = Z_STR_P(property);
25842 	} else {
25843 		name = zval_try_get_tmp_string(property, &tmp_name);
25844 		if (UNEXPECTED(!name)) {
25845 
25846 			UNDEF_RESULT();
25847 			goto exit_assign_obj;
25848 		}
25849 	}
25850 
25851 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25852 
25853 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25854 		zend_tmp_string_release(tmp_name);
25855 	}
25856 
25857 free_and_exit_assign_obj:
25858 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25859 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
25860 	}
25861 
25862 exit_assign_obj:
25863 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25864 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25865 	/* assign_obj has two opcodes! */
25866 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25867 }
25868 
25869 /* 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)25870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25871 {
25872 	USE_OPLINE
25873 	zval *object_ptr, *orig_object_ptr;
25874 	zval *value;
25875 	zval *variable_ptr;
25876 	zval *dim;
25877 
25878 	SAVE_OPLINE();
25879 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25880 
25881 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25882 try_assign_dim_array:
25883 		SEPARATE_ARRAY(object_ptr);
25884 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25885 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
25886 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
25887 				HashTable *ht = Z_ARRVAL_P(object_ptr);
25888 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
25889 					GC_ADDREF(ht);
25890 				}
25891 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
25892 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
25893 					zend_array_destroy(ht);
25894 					goto assign_dim_error;
25895 				}
25896 			}
25897 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
25898 				ZVAL_DEREF(value);
25899 			}
25900 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
25901 			if (UNEXPECTED(variable_ptr == NULL)) {
25902 				zend_cannot_add_element();
25903 				goto assign_dim_error;
25904 			} else if (IS_CONST == IS_CV) {
25905 				if (Z_REFCOUNTED_P(value)) {
25906 					Z_ADDREF_P(value);
25907 				}
25908 			} else if (IS_CONST == IS_VAR) {
25909 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
25910 				if (value != free_op_data) {
25911 					if (Z_REFCOUNTED_P(value)) {
25912 						Z_ADDREF_P(value);
25913 					}
25914 					zval_ptr_dtor_nogc(free_op_data);
25915 				}
25916 			} else if (IS_CONST == IS_CONST) {
25917 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
25918 					Z_ADDREF_P(value);
25919 				}
25920 			}
25921 		} else {
25922 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25923 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25924 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25925 			} else {
25926 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25927 			}
25928 			if (UNEXPECTED(variable_ptr == NULL)) {
25929 				goto assign_dim_error;
25930 			}
25931 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
25932 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
25933 		}
25934 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25935 			ZVAL_COPY(EX_VAR(opline->result.var), value);
25936 		}
25937 	} else {
25938 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
25939 			object_ptr = Z_REFVAL_P(object_ptr);
25940 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25941 				goto try_assign_dim_array;
25942 			}
25943 		}
25944 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
25945 			zend_object *obj = Z_OBJ_P(object_ptr);
25946 
25947 			GC_ADDREF(obj);
25948 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25949 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
25950 				dim = ZVAL_UNDEFINED_OP2();
25951 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
25952 				dim++;
25953 			}
25954 
25955 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
25956 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
25957 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
25958 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
25959 				ZVAL_DEREF(value);
25960 			}
25961 
25962 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
25963 
25964 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
25965 				zend_objects_store_del(obj);
25966 			}
25967 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
25968 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25969 				zend_use_new_element_for_string();
25970 
25971 				UNDEF_RESULT();
25972 			} else {
25973 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25974 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
25975 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
25976 
25977 			}
25978 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
25979 			if (Z_ISREF_P(orig_object_ptr)
25980 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
25981 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
25982 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25983 
25984 				UNDEF_RESULT();
25985 			} else {
25986 				ZVAL_ARR(object_ptr, zend_new_array(8));
25987 				goto try_assign_dim_array;
25988 			}
25989 		} else {
25990 			zend_use_scalar_as_array();
25991 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25992 assign_dim_error:
25993 
25994 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25995 				ZVAL_NULL(EX_VAR(opline->result.var));
25996 			}
25997 		}
25998 	}
25999 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26000 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26001 	}
26002 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26003 	/* assign_dim has two opcodes! */
26004 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26005 }
26006 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26008 {
26009 	USE_OPLINE
26010 	zval *object_ptr, *orig_object_ptr;
26011 	zval *value;
26012 	zval *variable_ptr;
26013 	zval *dim;
26014 
26015 	SAVE_OPLINE();
26016 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26017 
26018 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26019 try_assign_dim_array:
26020 		SEPARATE_ARRAY(object_ptr);
26021 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26022 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26023 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
26024 				HashTable *ht = Z_ARRVAL_P(object_ptr);
26025 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
26026 					GC_ADDREF(ht);
26027 				}
26028 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26029 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
26030 					zend_array_destroy(ht);
26031 					goto assign_dim_error;
26032 				}
26033 			}
26034 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
26035 				ZVAL_DEREF(value);
26036 			}
26037 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
26038 			if (UNEXPECTED(variable_ptr == NULL)) {
26039 				zend_cannot_add_element();
26040 				goto assign_dim_error;
26041 			} else if (IS_TMP_VAR == IS_CV) {
26042 				if (Z_REFCOUNTED_P(value)) {
26043 					Z_ADDREF_P(value);
26044 				}
26045 			} else if (IS_TMP_VAR == IS_VAR) {
26046 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
26047 				if (value != free_op_data) {
26048 					if (Z_REFCOUNTED_P(value)) {
26049 						Z_ADDREF_P(value);
26050 					}
26051 					zval_ptr_dtor_nogc(free_op_data);
26052 				}
26053 			} else if (IS_TMP_VAR == IS_CONST) {
26054 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
26055 					Z_ADDREF_P(value);
26056 				}
26057 			}
26058 		} else {
26059 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26060 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26061 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26062 			} else {
26063 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26064 			}
26065 			if (UNEXPECTED(variable_ptr == NULL)) {
26066 				goto assign_dim_error;
26067 			}
26068 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26069 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
26070 		}
26071 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26072 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26073 		}
26074 	} else {
26075 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
26076 			object_ptr = Z_REFVAL_P(object_ptr);
26077 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26078 				goto try_assign_dim_array;
26079 			}
26080 		}
26081 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
26082 			zend_object *obj = Z_OBJ_P(object_ptr);
26083 
26084 			GC_ADDREF(obj);
26085 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26086 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
26087 				dim = ZVAL_UNDEFINED_OP2();
26088 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26089 				dim++;
26090 			}
26091 
26092 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26093 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
26094 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26095 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
26096 				ZVAL_DEREF(value);
26097 			}
26098 
26099 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
26100 
26101 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26102 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
26103 				zend_objects_store_del(obj);
26104 			}
26105 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
26106 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26107 				zend_use_new_element_for_string();
26108 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26109 				UNDEF_RESULT();
26110 			} else {
26111 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26112 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26113 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
26114 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26115 			}
26116 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
26117 			if (Z_ISREF_P(orig_object_ptr)
26118 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
26119 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
26120 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26121 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26122 				UNDEF_RESULT();
26123 			} else {
26124 				ZVAL_ARR(object_ptr, zend_new_array(8));
26125 				goto try_assign_dim_array;
26126 			}
26127 		} else {
26128 			zend_use_scalar_as_array();
26129 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26130 assign_dim_error:
26131 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26132 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26133 				ZVAL_NULL(EX_VAR(opline->result.var));
26134 			}
26135 		}
26136 	}
26137 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26138 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26139 	}
26140 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26141 	/* assign_dim has two opcodes! */
26142 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26143 }
26144 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26145 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26146 {
26147 	USE_OPLINE
26148 	zval *object_ptr, *orig_object_ptr;
26149 	zval *value;
26150 	zval *variable_ptr;
26151 	zval *dim;
26152 
26153 	SAVE_OPLINE();
26154 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26155 
26156 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26157 try_assign_dim_array:
26158 		SEPARATE_ARRAY(object_ptr);
26159 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26160 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26161 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
26162 				HashTable *ht = Z_ARRVAL_P(object_ptr);
26163 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
26164 					GC_ADDREF(ht);
26165 				}
26166 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26167 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
26168 					zend_array_destroy(ht);
26169 					goto assign_dim_error;
26170 				}
26171 			}
26172 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
26173 				ZVAL_DEREF(value);
26174 			}
26175 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
26176 			if (UNEXPECTED(variable_ptr == NULL)) {
26177 				zend_cannot_add_element();
26178 				goto assign_dim_error;
26179 			} else if (IS_VAR == IS_CV) {
26180 				if (Z_REFCOUNTED_P(value)) {
26181 					Z_ADDREF_P(value);
26182 				}
26183 			} else if (IS_VAR == IS_VAR) {
26184 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
26185 				if (value != free_op_data) {
26186 					if (Z_REFCOUNTED_P(value)) {
26187 						Z_ADDREF_P(value);
26188 					}
26189 					zval_ptr_dtor_nogc(free_op_data);
26190 				}
26191 			} else if (IS_VAR == IS_CONST) {
26192 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
26193 					Z_ADDREF_P(value);
26194 				}
26195 			}
26196 		} else {
26197 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26198 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26199 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26200 			} else {
26201 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26202 			}
26203 			if (UNEXPECTED(variable_ptr == NULL)) {
26204 				goto assign_dim_error;
26205 			}
26206 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26207 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
26208 		}
26209 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26210 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26211 		}
26212 	} else {
26213 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
26214 			object_ptr = Z_REFVAL_P(object_ptr);
26215 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26216 				goto try_assign_dim_array;
26217 			}
26218 		}
26219 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
26220 			zend_object *obj = Z_OBJ_P(object_ptr);
26221 
26222 			GC_ADDREF(obj);
26223 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26224 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
26225 				dim = ZVAL_UNDEFINED_OP2();
26226 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26227 				dim++;
26228 			}
26229 
26230 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26231 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
26232 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26233 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
26234 				ZVAL_DEREF(value);
26235 			}
26236 
26237 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
26238 
26239 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26240 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
26241 				zend_objects_store_del(obj);
26242 			}
26243 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
26244 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26245 				zend_use_new_element_for_string();
26246 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26247 				UNDEF_RESULT();
26248 			} else {
26249 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26250 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26251 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
26252 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26253 			}
26254 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
26255 			if (Z_ISREF_P(orig_object_ptr)
26256 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
26257 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
26258 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26259 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26260 				UNDEF_RESULT();
26261 			} else {
26262 				ZVAL_ARR(object_ptr, zend_new_array(8));
26263 				goto try_assign_dim_array;
26264 			}
26265 		} else {
26266 			zend_use_scalar_as_array();
26267 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26268 assign_dim_error:
26269 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26270 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26271 				ZVAL_NULL(EX_VAR(opline->result.var));
26272 			}
26273 		}
26274 	}
26275 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26276 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26277 	}
26278 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26279 	/* assign_dim has two opcodes! */
26280 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26281 }
26282 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26283 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26284 {
26285 	USE_OPLINE
26286 	zval *object_ptr, *orig_object_ptr;
26287 	zval *value;
26288 	zval *variable_ptr;
26289 	zval *dim;
26290 
26291 	SAVE_OPLINE();
26292 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26293 
26294 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26295 try_assign_dim_array:
26296 		SEPARATE_ARRAY(object_ptr);
26297 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26298 			value = EX_VAR((opline+1)->op1.var);
26299 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
26300 				HashTable *ht = Z_ARRVAL_P(object_ptr);
26301 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
26302 					GC_ADDREF(ht);
26303 				}
26304 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26305 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
26306 					zend_array_destroy(ht);
26307 					goto assign_dim_error;
26308 				}
26309 			}
26310 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
26311 				ZVAL_DEREF(value);
26312 			}
26313 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
26314 			if (UNEXPECTED(variable_ptr == NULL)) {
26315 				zend_cannot_add_element();
26316 				goto assign_dim_error;
26317 			} else if (IS_CV == IS_CV) {
26318 				if (Z_REFCOUNTED_P(value)) {
26319 					Z_ADDREF_P(value);
26320 				}
26321 			} else if (IS_CV == IS_VAR) {
26322 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
26323 				if (value != free_op_data) {
26324 					if (Z_REFCOUNTED_P(value)) {
26325 						Z_ADDREF_P(value);
26326 					}
26327 					zval_ptr_dtor_nogc(free_op_data);
26328 				}
26329 			} else if (IS_CV == IS_CONST) {
26330 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
26331 					Z_ADDREF_P(value);
26332 				}
26333 			}
26334 		} else {
26335 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26336 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26337 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26338 			} else {
26339 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26340 			}
26341 			if (UNEXPECTED(variable_ptr == NULL)) {
26342 				goto assign_dim_error;
26343 			}
26344 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
26345 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
26346 		}
26347 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26348 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26349 		}
26350 	} else {
26351 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
26352 			object_ptr = Z_REFVAL_P(object_ptr);
26353 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26354 				goto try_assign_dim_array;
26355 			}
26356 		}
26357 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
26358 			zend_object *obj = Z_OBJ_P(object_ptr);
26359 
26360 			GC_ADDREF(obj);
26361 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26362 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
26363 				dim = ZVAL_UNDEFINED_OP2();
26364 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26365 				dim++;
26366 			}
26367 
26368 			value = EX_VAR((opline+1)->op1.var);
26369 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
26370 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26371 			} else if (IS_CV & (IS_CV|IS_VAR)) {
26372 				ZVAL_DEREF(value);
26373 			}
26374 
26375 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
26376 
26377 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
26378 				zend_objects_store_del(obj);
26379 			}
26380 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
26381 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26382 				zend_use_new_element_for_string();
26383 
26384 				UNDEF_RESULT();
26385 			} else {
26386 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26387 				value = EX_VAR((opline+1)->op1.var);
26388 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
26389 
26390 			}
26391 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
26392 			if (Z_ISREF_P(orig_object_ptr)
26393 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
26394 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
26395 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26396 
26397 				UNDEF_RESULT();
26398 			} else {
26399 				ZVAL_ARR(object_ptr, zend_new_array(8));
26400 				goto try_assign_dim_array;
26401 			}
26402 		} else {
26403 			zend_use_scalar_as_array();
26404 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26405 assign_dim_error:
26406 
26407 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26408 				ZVAL_NULL(EX_VAR(opline->result.var));
26409 			}
26410 		}
26411 	}
26412 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26413 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26414 	}
26415 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26416 	/* assign_dim has two opcodes! */
26417 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26418 }
26419 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26420 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26421 {
26422 	USE_OPLINE
26423 	zval *property, *container, *value_ptr;
26424 
26425 	SAVE_OPLINE();
26426 
26427 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26428 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26429 
26430 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26431 
26432 	if (1) {
26433 		if (IS_VAR == IS_UNUSED) {
26434 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26435 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26436 			} else {
26437 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26438 			}
26439 		} else {
26440 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26441 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26442 			} else {
26443 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26444 			}
26445 		}
26446 	} else {
26447 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
26448 	}
26449 
26450 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26451 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26452 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
26453 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26454 }
26455 
26456 /* 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)26457 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26458 {
26459 	USE_OPLINE
26460 	zval *property, *container, *value_ptr;
26461 
26462 	SAVE_OPLINE();
26463 
26464 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26465 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26466 
26467 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
26468 
26469 	if (1) {
26470 		if (IS_VAR == IS_UNUSED) {
26471 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26472 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26473 			} else {
26474 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26475 			}
26476 		} else {
26477 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26478 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26479 			} else {
26480 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26481 			}
26482 		}
26483 	} else {
26484 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
26485 	}
26486 
26487 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26488 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26489 
26490 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26491 }
26492 
26493 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26494 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26495 {
26496 	USE_OPLINE
26497 	zval *function_name;
26498 	zend_class_entry *ce;
26499 	uint32_t call_info;
26500 	zend_function *fbc;
26501 	zend_execute_data *call;
26502 
26503 	SAVE_OPLINE();
26504 
26505 	if (IS_VAR == IS_CONST) {
26506 		/* no function found. try a static method in class */
26507 		ce = CACHED_PTR(opline->result.num);
26508 		if (UNEXPECTED(ce == NULL)) {
26509 			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);
26510 			if (UNEXPECTED(ce == NULL)) {
26511 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26512 				HANDLE_EXCEPTION();
26513 			}
26514 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26515 				CACHE_PTR(opline->result.num, ce);
26516 			}
26517 		}
26518 	} else if (IS_VAR == IS_UNUSED) {
26519 		ce = zend_fetch_class(NULL, opline->op1.num);
26520 		if (UNEXPECTED(ce == NULL)) {
26521 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26522 			HANDLE_EXCEPTION();
26523 		}
26524 	} else {
26525 		ce = Z_CE_P(EX_VAR(opline->op1.var));
26526 	}
26527 
26528 	if (IS_VAR == IS_CONST &&
26529 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
26530 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
26531 		/* nothing to do */
26532 	} else if (IS_VAR != IS_CONST &&
26533 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
26534 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
26535 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
26536 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26537 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26538 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26539 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
26540 				do {
26541 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
26542 						function_name = Z_REFVAL_P(function_name);
26543 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
26544 							break;
26545 						}
26546 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
26547 						ZVAL_UNDEFINED_OP2();
26548 						if (UNEXPECTED(EG(exception) != NULL)) {
26549 							HANDLE_EXCEPTION();
26550 						}
26551 					}
26552 					zend_throw_error(NULL, "Method name must be a string");
26553 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26554 					HANDLE_EXCEPTION();
26555 				} while (0);
26556 			}
26557 		}
26558 
26559 		if (ce->get_static_method) {
26560 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
26561 		} else {
26562 			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));
26563 		}
26564 		if (UNEXPECTED(fbc == NULL)) {
26565 			if (EXPECTED(!EG(exception))) {
26566 				zend_undefined_method(ce, Z_STR_P(function_name));
26567 			}
26568 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26569 			HANDLE_EXCEPTION();
26570 		}
26571 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
26572 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
26573 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
26574 		}
26575 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
26576 			init_func_run_time_cache(&fbc->op_array);
26577 		}
26578 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26579 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26580 		}
26581 	} else {
26582 		if (UNEXPECTED(ce->constructor == NULL)) {
26583 			zend_throw_error(NULL, "Cannot call constructor");
26584 			HANDLE_EXCEPTION();
26585 		}
26586 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
26587 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
26588 			HANDLE_EXCEPTION();
26589 		}
26590 		fbc = ce->constructor;
26591 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
26592 			init_func_run_time_cache(&fbc->op_array);
26593 		}
26594 	}
26595 
26596 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
26597 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
26598 			ce = (zend_class_entry*)Z_OBJ(EX(This));
26599 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
26600 		} else {
26601 			zend_non_static_method_call(fbc);
26602 			HANDLE_EXCEPTION();
26603 		}
26604 	} else {
26605 		/* previous opcode is ZEND_FETCH_CLASS */
26606 		if (IS_VAR == IS_UNUSED
26607 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
26608 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
26609 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
26610 				ce = Z_OBJCE(EX(This));
26611 			} else {
26612 				ce = Z_CE(EX(This));
26613 			}
26614 		}
26615 		call_info = ZEND_CALL_NESTED_FUNCTION;
26616 	}
26617 
26618 	call = zend_vm_stack_push_call_frame(call_info,
26619 		fbc, opline->extended_value, ce);
26620 	call->prev_execute_data = EX(call);
26621 	EX(call) = call;
26622 
26623 	ZEND_VM_NEXT_OPCODE();
26624 }
26625 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26626 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26627 {
26628 	USE_OPLINE
26629 	zval *expr_ptr, new_expr;
26630 
26631 	SAVE_OPLINE();
26632 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
26633 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
26634 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26635 		if (Z_ISREF_P(expr_ptr)) {
26636 			Z_ADDREF_P(expr_ptr);
26637 		} else {
26638 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
26639 		}
26640 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26641 	} else {
26642 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26643 		if (IS_VAR == IS_TMP_VAR) {
26644 			/* pass */
26645 		} else if (IS_VAR == IS_CONST) {
26646 			Z_TRY_ADDREF_P(expr_ptr);
26647 		} else if (IS_VAR == IS_CV) {
26648 			ZVAL_DEREF(expr_ptr);
26649 			Z_TRY_ADDREF_P(expr_ptr);
26650 		} else /* if (IS_VAR == IS_VAR) */ {
26651 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
26652 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
26653 
26654 				expr_ptr = Z_REFVAL_P(expr_ptr);
26655 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
26656 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
26657 					expr_ptr = &new_expr;
26658 					efree_size(ref, sizeof(zend_reference));
26659 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
26660 					Z_ADDREF_P(expr_ptr);
26661 				}
26662 			}
26663 		}
26664 	}
26665 
26666 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26667 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26668 		zend_string *str;
26669 		zend_ulong hval;
26670 
26671 add_again:
26672 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
26673 			str = Z_STR_P(offset);
26674 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26675 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
26676 					goto num_index;
26677 				}
26678 			}
26679 str_index:
26680 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
26681 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
26682 			hval = Z_LVAL_P(offset);
26683 num_index:
26684 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
26685 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
26686 			offset = Z_REFVAL_P(offset);
26687 			goto add_again;
26688 		} else if (Z_TYPE_P(offset) == IS_NULL) {
26689 			str = ZSTR_EMPTY_ALLOC();
26690 			goto str_index;
26691 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
26692 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
26693 			goto num_index;
26694 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
26695 			hval = 0;
26696 			goto num_index;
26697 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
26698 			hval = 1;
26699 			goto num_index;
26700 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
26701 			zend_use_resource_as_offset(offset);
26702 			hval = Z_RES_HANDLE_P(offset);
26703 			goto num_index;
26704 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
26705 			ZVAL_UNDEFINED_OP2();
26706 			str = ZSTR_EMPTY_ALLOC();
26707 			goto str_index;
26708 		} else {
26709 			zend_illegal_offset();
26710 			zval_ptr_dtor_nogc(expr_ptr);
26711 		}
26712 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26713 	} else {
26714 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
26715 			zend_cannot_add_element();
26716 			zval_ptr_dtor_nogc(expr_ptr);
26717 		}
26718 	}
26719 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26720 }
26721 
ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26722 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26723 {
26724 	zval *array;
26725 	uint32_t size;
26726 	USE_OPLINE
26727 
26728 	array = EX_VAR(opline->result.var);
26729 	if (IS_VAR != IS_UNUSED) {
26730 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
26731 		ZVAL_ARR(array, zend_new_array(size));
26732 		/* Explicitly initialize array as not-packed if flag is set */
26733 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
26734 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
26735 		}
26736 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26737 	} else {
26738 		ZVAL_ARR(array, zend_new_array(0));
26739 		ZEND_VM_NEXT_OPCODE();
26740 	}
26741 }
26742 
ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26744 {
26745 	USE_OPLINE
26746 	zval *container;
26747 	zval *offset;
26748 	zend_ulong hval;
26749 	zend_string *key;
26750 
26751 	SAVE_OPLINE();
26752 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26753 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26754 
26755 	do {
26756 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26757 			HashTable *ht;
26758 
26759 unset_dim_array:
26760 			SEPARATE_ARRAY(container);
26761 			ht = Z_ARRVAL_P(container);
26762 offset_again:
26763 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
26764 				key = Z_STR_P(offset);
26765 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26766 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
26767 						goto num_index_dim;
26768 					}
26769 				}
26770 str_index_dim:
26771 				if (ht == &EG(symbol_table)) {
26772 					zend_delete_global_variable(key);
26773 				} else {
26774 					zend_hash_del(ht, key);
26775 				}
26776 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
26777 				hval = Z_LVAL_P(offset);
26778 num_index_dim:
26779 				zend_hash_index_del(ht, hval);
26780 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
26781 				offset = Z_REFVAL_P(offset);
26782 				goto offset_again;
26783 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
26784 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
26785 				goto num_index_dim;
26786 			} else if (Z_TYPE_P(offset) == IS_NULL) {
26787 				key = ZSTR_EMPTY_ALLOC();
26788 				goto str_index_dim;
26789 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
26790 				hval = 0;
26791 				goto num_index_dim;
26792 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
26793 				hval = 1;
26794 				goto num_index_dim;
26795 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
26796 				hval = Z_RES_HANDLE_P(offset);
26797 				goto num_index_dim;
26798 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
26799 				ZVAL_UNDEFINED_OP2();
26800 				key = ZSTR_EMPTY_ALLOC();
26801 				goto str_index_dim;
26802 			} else {
26803 				zend_type_error("Illegal offset type in unset");
26804 			}
26805 			break;
26806 		} else if (Z_ISREF_P(container)) {
26807 			container = Z_REFVAL_P(container);
26808 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26809 				goto unset_dim_array;
26810 			}
26811 		}
26812 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26813 			container = ZVAL_UNDEFINED_OP1();
26814 		}
26815 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
26816 			offset = ZVAL_UNDEFINED_OP2();
26817 		}
26818 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
26819 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
26820 				offset++;
26821 			}
26822 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
26823 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
26824 			zend_throw_error(NULL, "Cannot unset string offsets");
26825 		}
26826 	} while (0);
26827 
26828 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26829 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26830 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26831 }
26832 
ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26833 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26834 {
26835 	USE_OPLINE
26836 	zval *container;
26837 	zval *offset;
26838 	zend_string *name, *tmp_name;
26839 
26840 	SAVE_OPLINE();
26841 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26842 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26843 
26844 	do {
26845 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
26846 			if (Z_ISREF_P(container)) {
26847 				container = Z_REFVAL_P(container);
26848 				if (Z_TYPE_P(container) != IS_OBJECT) {
26849 					if (IS_VAR == IS_CV
26850 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26851 						ZVAL_UNDEFINED_OP1();
26852 					}
26853 					break;
26854 				}
26855 			} else {
26856 				break;
26857 			}
26858 		}
26859 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26860 			name = Z_STR_P(offset);
26861 		} else {
26862 			name = zval_try_get_tmp_string(offset, &tmp_name);
26863 			if (UNEXPECTED(!name)) {
26864 				break;
26865 			}
26866 		}
26867 		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));
26868 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26869 			zend_tmp_string_release(tmp_name);
26870 		}
26871 	} while (0);
26872 
26873 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26874 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26875 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26876 }
26877 
ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26878 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26879 {
26880 	USE_OPLINE
26881 
26882 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
26883 
26884 	SAVE_OPLINE();
26885 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
26886 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26887 	}
26888 
26889 	/* Destroy the previously yielded value */
26890 	zval_ptr_dtor(&generator->value);
26891 
26892 	/* Destroy the previously yielded key */
26893 	zval_ptr_dtor(&generator->key);
26894 
26895 	/* Set the new yielded value */
26896 	if (IS_VAR != IS_UNUSED) {
26897 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
26898 			/* Constants and temporary variables aren't yieldable by reference,
26899 			 * but we still allow them with a notice. */
26900 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
26901 				zval *value;
26902 
26903 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
26904 
26905 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26906 				ZVAL_COPY_VALUE(&generator->value, value);
26907 				if (IS_VAR == IS_CONST) {
26908 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
26909 						Z_ADDREF(generator->value);
26910 					}
26911 				}
26912 			} else {
26913 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26914 
26915 				/* If a function call result is yielded and the function did
26916 				 * not return by reference we throw a notice. */
26917 				do {
26918 					if (IS_VAR == IS_VAR) {
26919 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
26920 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
26921 						 && !Z_ISREF_P(value_ptr)) {
26922 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
26923 							ZVAL_COPY(&generator->value, value_ptr);
26924 							break;
26925 						}
26926 					}
26927 					if (Z_ISREF_P(value_ptr)) {
26928 						Z_ADDREF_P(value_ptr);
26929 					} else {
26930 						ZVAL_MAKE_REF_EX(value_ptr, 2);
26931 					}
26932 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
26933 				} while (0);
26934 
26935 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26936 			}
26937 		} else {
26938 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26939 
26940 			/* Consts, temporary variables and references need copying */
26941 			if (IS_VAR == IS_CONST) {
26942 				ZVAL_COPY_VALUE(&generator->value, value);
26943 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
26944 					Z_ADDREF(generator->value);
26945 				}
26946 			} else if (IS_VAR == IS_TMP_VAR) {
26947 				ZVAL_COPY_VALUE(&generator->value, value);
26948             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
26949 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
26950 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26951 			} else {
26952 				ZVAL_COPY_VALUE(&generator->value, value);
26953 				if (IS_VAR == IS_CV) {
26954 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
26955 				}
26956 			}
26957 		}
26958 	} else {
26959 		/* If no value was specified yield null */
26960 		ZVAL_NULL(&generator->value);
26961 	}
26962 
26963 	/* Set the new yielded key */
26964 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26965 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26966 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
26967 			key = Z_REFVAL_P(key);
26968 		}
26969 		ZVAL_COPY(&generator->key, key);
26970 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26971 
26972 		if (Z_TYPE(generator->key) == IS_LONG
26973 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
26974 		) {
26975 			generator->largest_used_integer_key = Z_LVAL(generator->key);
26976 		}
26977 	} else {
26978 		/* If no key was specified we use auto-increment keys */
26979 		generator->largest_used_integer_key++;
26980 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
26981 	}
26982 
26983 	if (RETURN_VALUE_USED(opline)) {
26984 		/* If the return value of yield is used set the send
26985 		 * target and initialize it to NULL */
26986 		generator->send_target = EX_VAR(opline->result.var);
26987 		ZVAL_NULL(generator->send_target);
26988 	} else {
26989 		generator->send_target = NULL;
26990 	}
26991 
26992 	/* We increment to the next op, so we are at the correct position when the
26993 	 * generator is resumed. */
26994 	ZEND_VM_INC_OPCODE();
26995 
26996 	/* The GOTO VM uses a local opline variable. We need to set the opline
26997 	 * variable in execute_data so we don't resume at an old position. */
26998 	SAVE_OPLINE();
26999 
27000 	ZEND_VM_RETURN();
27001 }
27002 
ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27003 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27004 {
27005 	USE_OPLINE
27006 	zval *op1, *op2;
27007 	zend_bool result;
27008 
27009 	SAVE_OPLINE();
27010 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27011 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27012 	result = fast_is_identical_function(op1, op2);
27013 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27014 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27015 	ZEND_VM_SMART_BRANCH(result, 1);
27016 }
27017 
ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27018 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27019 {
27020 	USE_OPLINE
27021 	zval *op1, *op2;
27022 	zend_bool result;
27023 
27024 	SAVE_OPLINE();
27025 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27026 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27027 	result = fast_is_identical_function(op1, op2);
27028 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27029 	ZEND_VM_SMART_BRANCH(result, 1);
27030 }
27031 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27032 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27033 {
27034 	USE_OPLINE
27035 	zval *op1, *op2;
27036 	zend_bool result;
27037 
27038 	SAVE_OPLINE();
27039 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27040 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27041 	result = fast_is_not_identical_function(op1, op2);
27042 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27043 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27044 	ZEND_VM_SMART_BRANCH(result, 1);
27045 }
27046 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27047 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27048 {
27049 	USE_OPLINE
27050 	zval *value;
27051 	zval *variable_ptr;
27052 
27053 	SAVE_OPLINE();
27054 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27055 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27056 
27057 	value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
27058 	if (UNEXPECTED(0)) {
27059 		ZVAL_COPY(EX_VAR(opline->result.var), value);
27060 	}
27061 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27062 	/* zend_assign_to_variable() always takes care of op2, never free it! */
27063 
27064 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27065 }
27066 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27067 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27068 {
27069 	USE_OPLINE
27070 	zval *value;
27071 	zval *variable_ptr;
27072 
27073 	SAVE_OPLINE();
27074 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
27075 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27076 
27077 	value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
27078 	if (UNEXPECTED(1)) {
27079 		ZVAL_COPY(EX_VAR(opline->result.var), value);
27080 	}
27081 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27082 	/* zend_assign_to_variable() always takes care of op2, never free it! */
27083 
27084 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27085 }
27086 
ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27087 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27088 {
27089 	USE_OPLINE
27090 	zval *op1, *op2;
27091 	zend_bool result;
27092 
27093 	SAVE_OPLINE();
27094 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27095 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
27096 	result = fast_is_identical_function(op1, op2);
27097 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27098 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27099 	ZEND_VM_SMART_BRANCH(result, 1);
27100 }
27101 
ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27102 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27103 {
27104 	USE_OPLINE
27105 	zval *op1, *op2;
27106 	zend_bool result;
27107 
27108 	SAVE_OPLINE();
27109 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27110 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
27111 	result = fast_is_identical_function(op1, op2);
27112 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27113 	ZEND_VM_SMART_BRANCH(result, 1);
27114 }
27115 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27117 {
27118 	USE_OPLINE
27119 	zval *op1, *op2;
27120 	zend_bool result;
27121 
27122 	SAVE_OPLINE();
27123 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
27124 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
27125 	result = fast_is_not_identical_function(op1, op2);
27126 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27127 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27128 	ZEND_VM_SMART_BRANCH(result, 1);
27129 }
27130 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27131 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27132 {
27133 	USE_OPLINE
27134 	zval *value;
27135 	zval *variable_ptr;
27136 
27137 	SAVE_OPLINE();
27138 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27139 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27140 
27141 	value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
27142 	if (UNEXPECTED(0)) {
27143 		ZVAL_COPY(EX_VAR(opline->result.var), value);
27144 	}
27145 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27146 	/* zend_assign_to_variable() always takes care of op2, never free it! */
27147 
27148 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27149 }
27150 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27151 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27152 {
27153 	USE_OPLINE
27154 	zval *value;
27155 	zval *variable_ptr;
27156 
27157 	SAVE_OPLINE();
27158 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27159 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27160 
27161 	value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
27162 	if (UNEXPECTED(1)) {
27163 		ZVAL_COPY(EX_VAR(opline->result.var), value);
27164 	}
27165 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27166 	/* zend_assign_to_variable() always takes care of op2, never free it! */
27167 
27168 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27169 }
27170 
ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27171 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27172 {
27173 	USE_OPLINE
27174 	zval *variable_ptr;
27175 	zval *value_ptr;
27176 
27177 	SAVE_OPLINE();
27178 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27179 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27180 
27181 	if (IS_VAR == IS_VAR &&
27182 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
27183 
27184 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
27185 		variable_ptr = &EG(uninitialized_zval);
27186 	} else if (IS_VAR == IS_VAR &&
27187 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
27188 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
27189 
27190 		variable_ptr = zend_wrong_assign_to_variable_reference(
27191 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27192 	} else {
27193 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
27194 	}
27195 
27196 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27197 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
27198 	}
27199 
27200 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27201 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27202 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27203 }
27204 
ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27206 {
27207 	USE_OPLINE
27208 	zval *var_ptr;
27209 	zval *value, *container, *dim;
27210 
27211 	SAVE_OPLINE();
27212 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27213 
27214 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27215 assign_dim_op_array:
27216 		SEPARATE_ARRAY(container);
27217 assign_dim_op_new_array:
27218 		dim = NULL;
27219 		if (IS_UNUSED == IS_UNUSED) {
27220 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
27221 			if (UNEXPECTED(!var_ptr)) {
27222 				zend_cannot_add_element();
27223 				goto assign_dim_op_ret_null;
27224 			}
27225 		} else {
27226 			if (IS_UNUSED == IS_CONST) {
27227 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
27228 			} else {
27229 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
27230 			}
27231 			if (UNEXPECTED(!var_ptr)) {
27232 				goto assign_dim_op_ret_null;
27233 			}
27234 		}
27235 
27236 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
27237 
27238 		do {
27239 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
27240 				zend_reference *ref = Z_REF_P(var_ptr);
27241 				var_ptr = Z_REFVAL_P(var_ptr);
27242 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
27243 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
27244 					break;
27245 				}
27246 			}
27247 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
27248 		} while (0);
27249 
27250 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27251 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
27252 		}
27253 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
27254 	} else {
27255 		if (EXPECTED(Z_ISREF_P(container))) {
27256 			container = Z_REFVAL_P(container);
27257 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27258 				goto assign_dim_op_array;
27259 			}
27260 		}
27261 
27262 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
27263 			zend_object *obj = Z_OBJ_P(container);
27264 
27265 			GC_ADDREF(obj);
27266 			dim = NULL;
27267 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27268 				dim = ZVAL_UNDEFINED_OP2();
27269 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27270 				dim++;
27271 			}
27272 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
27273 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27274 				zend_objects_store_del(obj);
27275 			}
27276 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
27277 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
27278 				ZVAL_UNDEFINED_OP1();
27279 			}
27280 			ZVAL_ARR(container, zend_new_array(8));
27281 			goto assign_dim_op_new_array;
27282 		} else {
27283 			dim = NULL;
27284 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
27285 assign_dim_op_ret_null:
27286 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
27287 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27288 				ZVAL_NULL(EX_VAR(opline->result.var));
27289 			}
27290 		}
27291 	}
27292 
27293 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27294 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27295 }
27296 
ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27297 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27298 {
27299 	USE_OPLINE
27300 	zval *container;
27301 
27302 	SAVE_OPLINE();
27303 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27304 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
27305 
27306 	if (IS_VAR == IS_VAR) {
27307 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
27308 	}
27309 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27310 }
27311 
ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27312 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27313 {
27314 	USE_OPLINE
27315 	zval *container;
27316 
27317 	SAVE_OPLINE();
27318 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27319 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
27320 
27321 	if (IS_VAR == IS_VAR) {
27322 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
27323 	}
27324 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27325 }
27326 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27327 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27328 {
27329 #if 0
27330 	USE_OPLINE
27331 #endif
27332 
27333 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
27334         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
27335 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27336         }
27337 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27338 	} else {
27339 		if (IS_UNUSED == IS_UNUSED) {
27340 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27341 		}
27342 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27343 	}
27344 }
27345 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27346 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27347 {
27348 	USE_OPLINE
27349 	zval *object_ptr, *orig_object_ptr;
27350 	zval *value;
27351 	zval *variable_ptr;
27352 	zval *dim;
27353 
27354 	SAVE_OPLINE();
27355 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27356 
27357 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27358 try_assign_dim_array:
27359 		SEPARATE_ARRAY(object_ptr);
27360 		if (IS_UNUSED == IS_UNUSED) {
27361 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27362 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27363 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27364 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27365 					GC_ADDREF(ht);
27366 				}
27367 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27368 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27369 					zend_array_destroy(ht);
27370 					goto assign_dim_error;
27371 				}
27372 			}
27373 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
27374 				ZVAL_DEREF(value);
27375 			}
27376 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27377 			if (UNEXPECTED(variable_ptr == NULL)) {
27378 				zend_cannot_add_element();
27379 				goto assign_dim_error;
27380 			} else if (IS_CONST == IS_CV) {
27381 				if (Z_REFCOUNTED_P(value)) {
27382 					Z_ADDREF_P(value);
27383 				}
27384 			} else if (IS_CONST == IS_VAR) {
27385 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27386 				if (value != free_op_data) {
27387 					if (Z_REFCOUNTED_P(value)) {
27388 						Z_ADDREF_P(value);
27389 					}
27390 					zval_ptr_dtor_nogc(free_op_data);
27391 				}
27392 			} else if (IS_CONST == IS_CONST) {
27393 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27394 					Z_ADDREF_P(value);
27395 				}
27396 			}
27397 		} else {
27398 			dim = NULL;
27399 			if (IS_UNUSED == IS_CONST) {
27400 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27401 			} else {
27402 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27403 			}
27404 			if (UNEXPECTED(variable_ptr == NULL)) {
27405 				goto assign_dim_error;
27406 			}
27407 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27408 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
27409 		}
27410 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27411 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27412 		}
27413 	} else {
27414 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27415 			object_ptr = Z_REFVAL_P(object_ptr);
27416 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27417 				goto try_assign_dim_array;
27418 			}
27419 		}
27420 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27421 			zend_object *obj = Z_OBJ_P(object_ptr);
27422 
27423 			GC_ADDREF(obj);
27424 			dim = NULL;
27425 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27426 				dim = ZVAL_UNDEFINED_OP2();
27427 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27428 				dim++;
27429 			}
27430 
27431 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27432 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27433 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27434 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
27435 				ZVAL_DEREF(value);
27436 			}
27437 
27438 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27439 
27440 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27441 				zend_objects_store_del(obj);
27442 			}
27443 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27444 			if (IS_UNUSED == IS_UNUSED) {
27445 				zend_use_new_element_for_string();
27446 
27447 				UNDEF_RESULT();
27448 			} else {
27449 				dim = NULL;
27450 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
27451 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27452 
27453 			}
27454 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27455 			if (Z_ISREF_P(orig_object_ptr)
27456 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27457 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27458 				dim = NULL;
27459 
27460 				UNDEF_RESULT();
27461 			} else {
27462 				ZVAL_ARR(object_ptr, zend_new_array(8));
27463 				goto try_assign_dim_array;
27464 			}
27465 		} else {
27466 			zend_use_scalar_as_array();
27467 			dim = NULL;
27468 assign_dim_error:
27469 
27470 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27471 				ZVAL_NULL(EX_VAR(opline->result.var));
27472 			}
27473 		}
27474 	}
27475 	if (IS_UNUSED != IS_UNUSED) {
27476 
27477 	}
27478 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27479 	/* assign_dim has two opcodes! */
27480 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27481 }
27482 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27483 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27484 {
27485 	USE_OPLINE
27486 	zval *object_ptr, *orig_object_ptr;
27487 	zval *value;
27488 	zval *variable_ptr;
27489 	zval *dim;
27490 
27491 	SAVE_OPLINE();
27492 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27493 
27494 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27495 try_assign_dim_array:
27496 		SEPARATE_ARRAY(object_ptr);
27497 		if (IS_UNUSED == IS_UNUSED) {
27498 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27499 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27500 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27501 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27502 					GC_ADDREF(ht);
27503 				}
27504 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27505 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27506 					zend_array_destroy(ht);
27507 					goto assign_dim_error;
27508 				}
27509 			}
27510 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
27511 				ZVAL_DEREF(value);
27512 			}
27513 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27514 			if (UNEXPECTED(variable_ptr == NULL)) {
27515 				zend_cannot_add_element();
27516 				goto assign_dim_error;
27517 			} else if (IS_TMP_VAR == IS_CV) {
27518 				if (Z_REFCOUNTED_P(value)) {
27519 					Z_ADDREF_P(value);
27520 				}
27521 			} else if (IS_TMP_VAR == IS_VAR) {
27522 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27523 				if (value != free_op_data) {
27524 					if (Z_REFCOUNTED_P(value)) {
27525 						Z_ADDREF_P(value);
27526 					}
27527 					zval_ptr_dtor_nogc(free_op_data);
27528 				}
27529 			} else if (IS_TMP_VAR == IS_CONST) {
27530 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27531 					Z_ADDREF_P(value);
27532 				}
27533 			}
27534 		} else {
27535 			dim = NULL;
27536 			if (IS_UNUSED == IS_CONST) {
27537 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27538 			} else {
27539 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27540 			}
27541 			if (UNEXPECTED(variable_ptr == NULL)) {
27542 				goto assign_dim_error;
27543 			}
27544 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27545 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
27546 		}
27547 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27548 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27549 		}
27550 	} else {
27551 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27552 			object_ptr = Z_REFVAL_P(object_ptr);
27553 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27554 				goto try_assign_dim_array;
27555 			}
27556 		}
27557 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27558 			zend_object *obj = Z_OBJ_P(object_ptr);
27559 
27560 			GC_ADDREF(obj);
27561 			dim = NULL;
27562 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27563 				dim = ZVAL_UNDEFINED_OP2();
27564 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27565 				dim++;
27566 			}
27567 
27568 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27569 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27570 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27571 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
27572 				ZVAL_DEREF(value);
27573 			}
27574 
27575 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27576 
27577 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27578 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27579 				zend_objects_store_del(obj);
27580 			}
27581 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27582 			if (IS_UNUSED == IS_UNUSED) {
27583 				zend_use_new_element_for_string();
27584 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27585 				UNDEF_RESULT();
27586 			} else {
27587 				dim = NULL;
27588 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27589 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27590 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27591 			}
27592 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27593 			if (Z_ISREF_P(orig_object_ptr)
27594 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27595 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27596 				dim = NULL;
27597 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27598 				UNDEF_RESULT();
27599 			} else {
27600 				ZVAL_ARR(object_ptr, zend_new_array(8));
27601 				goto try_assign_dim_array;
27602 			}
27603 		} else {
27604 			zend_use_scalar_as_array();
27605 			dim = NULL;
27606 assign_dim_error:
27607 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27608 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27609 				ZVAL_NULL(EX_VAR(opline->result.var));
27610 			}
27611 		}
27612 	}
27613 	if (IS_UNUSED != IS_UNUSED) {
27614 
27615 	}
27616 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27617 	/* assign_dim has two opcodes! */
27618 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27619 }
27620 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27621 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27622 {
27623 	USE_OPLINE
27624 	zval *object_ptr, *orig_object_ptr;
27625 	zval *value;
27626 	zval *variable_ptr;
27627 	zval *dim;
27628 
27629 	SAVE_OPLINE();
27630 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27631 
27632 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27633 try_assign_dim_array:
27634 		SEPARATE_ARRAY(object_ptr);
27635 		if (IS_UNUSED == IS_UNUSED) {
27636 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27637 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27638 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27639 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27640 					GC_ADDREF(ht);
27641 				}
27642 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27643 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27644 					zend_array_destroy(ht);
27645 					goto assign_dim_error;
27646 				}
27647 			}
27648 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
27649 				ZVAL_DEREF(value);
27650 			}
27651 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27652 			if (UNEXPECTED(variable_ptr == NULL)) {
27653 				zend_cannot_add_element();
27654 				goto assign_dim_error;
27655 			} else if (IS_VAR == IS_CV) {
27656 				if (Z_REFCOUNTED_P(value)) {
27657 					Z_ADDREF_P(value);
27658 				}
27659 			} else if (IS_VAR == IS_VAR) {
27660 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27661 				if (value != free_op_data) {
27662 					if (Z_REFCOUNTED_P(value)) {
27663 						Z_ADDREF_P(value);
27664 					}
27665 					zval_ptr_dtor_nogc(free_op_data);
27666 				}
27667 			} else if (IS_VAR == IS_CONST) {
27668 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27669 					Z_ADDREF_P(value);
27670 				}
27671 			}
27672 		} else {
27673 			dim = NULL;
27674 			if (IS_UNUSED == IS_CONST) {
27675 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27676 			} else {
27677 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27678 			}
27679 			if (UNEXPECTED(variable_ptr == NULL)) {
27680 				goto assign_dim_error;
27681 			}
27682 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27683 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
27684 		}
27685 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27686 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27687 		}
27688 	} else {
27689 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27690 			object_ptr = Z_REFVAL_P(object_ptr);
27691 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27692 				goto try_assign_dim_array;
27693 			}
27694 		}
27695 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27696 			zend_object *obj = Z_OBJ_P(object_ptr);
27697 
27698 			GC_ADDREF(obj);
27699 			dim = NULL;
27700 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27701 				dim = ZVAL_UNDEFINED_OP2();
27702 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27703 				dim++;
27704 			}
27705 
27706 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27707 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27708 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27709 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
27710 				ZVAL_DEREF(value);
27711 			}
27712 
27713 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27714 
27715 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27716 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27717 				zend_objects_store_del(obj);
27718 			}
27719 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27720 			if (IS_UNUSED == IS_UNUSED) {
27721 				zend_use_new_element_for_string();
27722 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27723 				UNDEF_RESULT();
27724 			} else {
27725 				dim = NULL;
27726 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27727 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27728 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27729 			}
27730 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27731 			if (Z_ISREF_P(orig_object_ptr)
27732 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27733 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27734 				dim = NULL;
27735 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27736 				UNDEF_RESULT();
27737 			} else {
27738 				ZVAL_ARR(object_ptr, zend_new_array(8));
27739 				goto try_assign_dim_array;
27740 			}
27741 		} else {
27742 			zend_use_scalar_as_array();
27743 			dim = NULL;
27744 assign_dim_error:
27745 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27746 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27747 				ZVAL_NULL(EX_VAR(opline->result.var));
27748 			}
27749 		}
27750 	}
27751 	if (IS_UNUSED != IS_UNUSED) {
27752 
27753 	}
27754 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27755 	/* assign_dim has two opcodes! */
27756 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27757 }
27758 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27760 {
27761 	USE_OPLINE
27762 	zval *object_ptr, *orig_object_ptr;
27763 	zval *value;
27764 	zval *variable_ptr;
27765 	zval *dim;
27766 
27767 	SAVE_OPLINE();
27768 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27769 
27770 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27771 try_assign_dim_array:
27772 		SEPARATE_ARRAY(object_ptr);
27773 		if (IS_UNUSED == IS_UNUSED) {
27774 			value = EX_VAR((opline+1)->op1.var);
27775 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27776 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27777 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27778 					GC_ADDREF(ht);
27779 				}
27780 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27781 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27782 					zend_array_destroy(ht);
27783 					goto assign_dim_error;
27784 				}
27785 			}
27786 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
27787 				ZVAL_DEREF(value);
27788 			}
27789 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27790 			if (UNEXPECTED(variable_ptr == NULL)) {
27791 				zend_cannot_add_element();
27792 				goto assign_dim_error;
27793 			} else if (IS_CV == IS_CV) {
27794 				if (Z_REFCOUNTED_P(value)) {
27795 					Z_ADDREF_P(value);
27796 				}
27797 			} else if (IS_CV == IS_VAR) {
27798 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27799 				if (value != free_op_data) {
27800 					if (Z_REFCOUNTED_P(value)) {
27801 						Z_ADDREF_P(value);
27802 					}
27803 					zval_ptr_dtor_nogc(free_op_data);
27804 				}
27805 			} else if (IS_CV == IS_CONST) {
27806 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27807 					Z_ADDREF_P(value);
27808 				}
27809 			}
27810 		} else {
27811 			dim = NULL;
27812 			if (IS_UNUSED == IS_CONST) {
27813 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27814 			} else {
27815 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27816 			}
27817 			if (UNEXPECTED(variable_ptr == NULL)) {
27818 				goto assign_dim_error;
27819 			}
27820 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
27821 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
27822 		}
27823 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27824 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27825 		}
27826 	} else {
27827 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27828 			object_ptr = Z_REFVAL_P(object_ptr);
27829 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27830 				goto try_assign_dim_array;
27831 			}
27832 		}
27833 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27834 			zend_object *obj = Z_OBJ_P(object_ptr);
27835 
27836 			GC_ADDREF(obj);
27837 			dim = NULL;
27838 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27839 				dim = ZVAL_UNDEFINED_OP2();
27840 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27841 				dim++;
27842 			}
27843 
27844 			value = EX_VAR((opline+1)->op1.var);
27845 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27846 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27847 			} else if (IS_CV & (IS_CV|IS_VAR)) {
27848 				ZVAL_DEREF(value);
27849 			}
27850 
27851 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27852 
27853 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27854 				zend_objects_store_del(obj);
27855 			}
27856 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27857 			if (IS_UNUSED == IS_UNUSED) {
27858 				zend_use_new_element_for_string();
27859 
27860 				UNDEF_RESULT();
27861 			} else {
27862 				dim = NULL;
27863 				value = EX_VAR((opline+1)->op1.var);
27864 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27865 
27866 			}
27867 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27868 			if (Z_ISREF_P(orig_object_ptr)
27869 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27870 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27871 				dim = NULL;
27872 
27873 				UNDEF_RESULT();
27874 			} else {
27875 				ZVAL_ARR(object_ptr, zend_new_array(8));
27876 				goto try_assign_dim_array;
27877 			}
27878 		} else {
27879 			zend_use_scalar_as_array();
27880 			dim = NULL;
27881 assign_dim_error:
27882 
27883 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27884 				ZVAL_NULL(EX_VAR(opline->result.var));
27885 			}
27886 		}
27887 	}
27888 	if (IS_UNUSED != IS_UNUSED) {
27889 
27890 	}
27891 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27892 	/* assign_dim has two opcodes! */
27893 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27894 }
27895 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27896 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27897 {
27898 	USE_OPLINE
27899 	zval *function_name;
27900 	zend_class_entry *ce;
27901 	uint32_t call_info;
27902 	zend_function *fbc;
27903 	zend_execute_data *call;
27904 
27905 	SAVE_OPLINE();
27906 
27907 	if (IS_VAR == IS_CONST) {
27908 		/* no function found. try a static method in class */
27909 		ce = CACHED_PTR(opline->result.num);
27910 		if (UNEXPECTED(ce == NULL)) {
27911 			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);
27912 			if (UNEXPECTED(ce == NULL)) {
27913 
27914 				HANDLE_EXCEPTION();
27915 			}
27916 			if (IS_UNUSED != IS_CONST) {
27917 				CACHE_PTR(opline->result.num, ce);
27918 			}
27919 		}
27920 	} else if (IS_VAR == IS_UNUSED) {
27921 		ce = zend_fetch_class(NULL, opline->op1.num);
27922 		if (UNEXPECTED(ce == NULL)) {
27923 
27924 			HANDLE_EXCEPTION();
27925 		}
27926 	} else {
27927 		ce = Z_CE_P(EX_VAR(opline->op1.var));
27928 	}
27929 
27930 	if (IS_VAR == IS_CONST &&
27931 	    IS_UNUSED == IS_CONST &&
27932 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
27933 		/* nothing to do */
27934 	} else if (IS_VAR != IS_CONST &&
27935 	           IS_UNUSED == IS_CONST &&
27936 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
27937 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
27938 	} else if (IS_UNUSED != IS_UNUSED) {
27939 		function_name = NULL;
27940 		if (IS_UNUSED != IS_CONST) {
27941 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
27942 				do {
27943 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
27944 						function_name = Z_REFVAL_P(function_name);
27945 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
27946 							break;
27947 						}
27948 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
27949 						ZVAL_UNDEFINED_OP2();
27950 						if (UNEXPECTED(EG(exception) != NULL)) {
27951 							HANDLE_EXCEPTION();
27952 						}
27953 					}
27954 					zend_throw_error(NULL, "Method name must be a string");
27955 
27956 					HANDLE_EXCEPTION();
27957 				} while (0);
27958 			}
27959 		}
27960 
27961 		if (ce->get_static_method) {
27962 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
27963 		} else {
27964 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
27965 		}
27966 		if (UNEXPECTED(fbc == NULL)) {
27967 			if (EXPECTED(!EG(exception))) {
27968 				zend_undefined_method(ce, Z_STR_P(function_name));
27969 			}
27970 
27971 			HANDLE_EXCEPTION();
27972 		}
27973 		if (IS_UNUSED == IS_CONST &&
27974 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
27975 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
27976 		}
27977 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
27978 			init_func_run_time_cache(&fbc->op_array);
27979 		}
27980 		if (IS_UNUSED != IS_CONST) {
27981 
27982 		}
27983 	} else {
27984 		if (UNEXPECTED(ce->constructor == NULL)) {
27985 			zend_throw_error(NULL, "Cannot call constructor");
27986 			HANDLE_EXCEPTION();
27987 		}
27988 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
27989 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
27990 			HANDLE_EXCEPTION();
27991 		}
27992 		fbc = ce->constructor;
27993 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
27994 			init_func_run_time_cache(&fbc->op_array);
27995 		}
27996 	}
27997 
27998 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
27999 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
28000 			ce = (zend_class_entry*)Z_OBJ(EX(This));
28001 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
28002 		} else {
28003 			zend_non_static_method_call(fbc);
28004 			HANDLE_EXCEPTION();
28005 		}
28006 	} else {
28007 		/* previous opcode is ZEND_FETCH_CLASS */
28008 		if (IS_VAR == IS_UNUSED
28009 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
28010 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
28011 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
28012 				ce = Z_OBJCE(EX(This));
28013 			} else {
28014 				ce = Z_CE(EX(This));
28015 			}
28016 		}
28017 		call_info = ZEND_CALL_NESTED_FUNCTION;
28018 	}
28019 
28020 	call = zend_vm_stack_push_call_frame(call_info,
28021 		fbc, opline->extended_value, ce);
28022 	call->prev_execute_data = EX(call);
28023 	EX(call) = call;
28024 
28025 	ZEND_VM_NEXT_OPCODE();
28026 }
28027 
ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28028 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28029 {
28030 	if (IS_VAR == IS_UNUSED) {
28031 		SAVE_OPLINE();
28032 		zend_verify_missing_return_type(EX(func));
28033 		HANDLE_EXCEPTION();
28034 	} else {
28035 /* prevents "undefined variable opline" errors */
28036 #if 0 || (IS_VAR != IS_UNUSED)
28037 		USE_OPLINE
28038 		zval *retval_ref, *retval_ptr;
28039 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
28040 		retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28041 
28042 		if (IS_VAR == IS_CONST) {
28043 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
28044 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
28045 		} else if (IS_VAR == IS_VAR) {
28046 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
28047 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
28048 			}
28049 			ZVAL_DEREF(retval_ptr);
28050 		} else if (IS_VAR == IS_CV) {
28051 			ZVAL_DEREF(retval_ptr);
28052 		}
28053 
28054 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
28055 			ZEND_VM_NEXT_OPCODE();
28056 		}
28057 
28058 		if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
28059 			SAVE_OPLINE();
28060 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
28061 			if (UNEXPECTED(EG(exception))) {
28062 				HANDLE_EXCEPTION();
28063 			}
28064 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
28065 				ZEND_VM_NEXT_OPCODE();
28066 			}
28067 		}
28068 
28069 		zend_reference *ref = NULL;
28070 		void *cache_slot = CACHE_ADDR(opline->op2.num);
28071 		if (UNEXPECTED(retval_ref != retval_ptr)) {
28072 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
28073 				ref = Z_REF_P(retval_ref);
28074 			} else {
28075 				/* A cast might happen - unwrap the reference if this is a by-value return */
28076 				if (Z_REFCOUNT_P(retval_ref) == 1) {
28077 					ZVAL_UNREF(retval_ref);
28078 				} else {
28079 					Z_DELREF_P(retval_ref);
28080 					ZVAL_COPY(retval_ref, retval_ptr);
28081 				}
28082 				retval_ptr = retval_ref;
28083 			}
28084 		}
28085 
28086 		SAVE_OPLINE();
28087 		if (UNEXPECTED(!zend_check_type_slow(ret_info->type, retval_ptr, ref, cache_slot, NULL, 1, 0))) {
28088 			zend_verify_return_error(EX(func), retval_ptr);
28089 			HANDLE_EXCEPTION();
28090 		}
28091 		ZEND_VM_NEXT_OPCODE();
28092 #endif
28093 	}
28094 }
28095 
ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28096 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28097 {
28098 	USE_OPLINE
28099 	zval *varptr, *arg;
28100 
28101 	if (IS_UNUSED == IS_CONST) {
28102 		SAVE_OPLINE();
28103 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28104 		uint32_t arg_num;
28105 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28106 		if (UNEXPECTED(!arg)) {
28107 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28108 			HANDLE_EXCEPTION();
28109 		}
28110 	} else {
28111 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28112 	}
28113 
28114 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28115 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
28116 		SAVE_OPLINE();
28117 		ZVAL_UNDEFINED_OP1();
28118 		ZVAL_NULL(arg);
28119 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28120 	}
28121 
28122 	if (IS_VAR == IS_CV) {
28123 		ZVAL_COPY_DEREF(arg, varptr);
28124 	} else /* if (IS_VAR == IS_VAR) */ {
28125 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
28126 			zend_refcounted *ref = Z_COUNTED_P(varptr);
28127 
28128 			varptr = Z_REFVAL_P(varptr);
28129 			ZVAL_COPY_VALUE(arg, varptr);
28130 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28131 				efree_size(ref, sizeof(zend_reference));
28132 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
28133 				Z_ADDREF_P(arg);
28134 			}
28135 		} else {
28136 			ZVAL_COPY_VALUE(arg, varptr);
28137 		}
28138 	}
28139 
28140 	ZEND_VM_NEXT_OPCODE();
28141 }
28142 
ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28143 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28144 {
28145 	USE_OPLINE
28146 	zval *varptr, *arg;
28147 
28148 	if (IS_UNUSED == IS_CONST) {
28149 		SAVE_OPLINE();
28150 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28151 		uint32_t arg_num;
28152 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28153 		if (UNEXPECTED(!arg)) {
28154 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28155 			HANDLE_EXCEPTION();
28156 		}
28157 	} else {
28158 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28159 	}
28160 
28161 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28162 	ZVAL_COPY_VALUE(arg, varptr);
28163 
28164 	if (EXPECTED(Z_ISREF_P(varptr))) {
28165 		ZEND_VM_NEXT_OPCODE();
28166 	}
28167 
28168 	SAVE_OPLINE();
28169 	ZVAL_NEW_REF(arg, arg);
28170 	zend_error(E_NOTICE, "Only variables should be passed by reference");
28171 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28172 }
28173 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28174 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28175 {
28176 	USE_OPLINE
28177 	zval *varptr, *arg;
28178 	uint32_t arg_num;
28179 
28180 	if (IS_UNUSED == IS_CONST) {
28181 		SAVE_OPLINE();
28182 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28183 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28184 		if (UNEXPECTED(!arg)) {
28185 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28186 			HANDLE_EXCEPTION();
28187 		}
28188 	} else {
28189 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28190 		arg_num = opline->op2.num;
28191 	}
28192 
28193 	if (EXPECTED(0)) {
28194 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28195 			goto send_var;
28196 		}
28197 
28198 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28199 		ZVAL_COPY_VALUE(arg, varptr);
28200 
28201 		if (EXPECTED(Z_ISREF_P(varptr) ||
28202 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
28203 			ZEND_VM_NEXT_OPCODE();
28204 		}
28205 	} else {
28206 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28207 			goto send_var;
28208 		}
28209 
28210 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28211 		ZVAL_COPY_VALUE(arg, varptr);
28212 
28213 		if (EXPECTED(Z_ISREF_P(varptr) ||
28214 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
28215 			ZEND_VM_NEXT_OPCODE();
28216 		}
28217 	}
28218 
28219 	SAVE_OPLINE();
28220 	ZVAL_NEW_REF(arg, arg);
28221 	zend_error(E_NOTICE, "Only variables should be passed by reference");
28222 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28223 
28224 send_var:
28225 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28226 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
28227 		zend_refcounted *ref = Z_COUNTED_P(varptr);
28228 
28229 		varptr = Z_REFVAL_P(varptr);
28230 		ZVAL_COPY_VALUE(arg, varptr);
28231 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28232 			efree_size(ref, sizeof(zend_reference));
28233 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
28234 			Z_ADDREF_P(arg);
28235 		}
28236 	} else {
28237 		ZVAL_COPY_VALUE(arg, varptr);
28238 	}
28239 	ZEND_VM_NEXT_OPCODE();
28240 }
28241 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28242 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)
28243 {
28244 	USE_OPLINE
28245 	zval *varptr, *arg;
28246 	uint32_t arg_num;
28247 
28248 	if (IS_UNUSED == IS_CONST) {
28249 		SAVE_OPLINE();
28250 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28251 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28252 		if (UNEXPECTED(!arg)) {
28253 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28254 			HANDLE_EXCEPTION();
28255 		}
28256 	} else {
28257 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28258 		arg_num = opline->op2.num;
28259 	}
28260 
28261 	if (EXPECTED(1)) {
28262 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28263 			goto send_var;
28264 		}
28265 
28266 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28267 		ZVAL_COPY_VALUE(arg, varptr);
28268 
28269 		if (EXPECTED(Z_ISREF_P(varptr) ||
28270 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
28271 			ZEND_VM_NEXT_OPCODE();
28272 		}
28273 	} else {
28274 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28275 			goto send_var;
28276 		}
28277 
28278 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28279 		ZVAL_COPY_VALUE(arg, varptr);
28280 
28281 		if (EXPECTED(Z_ISREF_P(varptr) ||
28282 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
28283 			ZEND_VM_NEXT_OPCODE();
28284 		}
28285 	}
28286 
28287 	SAVE_OPLINE();
28288 	ZVAL_NEW_REF(arg, arg);
28289 	zend_error(E_NOTICE, "Only variables should be passed by reference");
28290 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28291 
28292 send_var:
28293 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28294 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
28295 		zend_refcounted *ref = Z_COUNTED_P(varptr);
28296 
28297 		varptr = Z_REFVAL_P(varptr);
28298 		ZVAL_COPY_VALUE(arg, varptr);
28299 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28300 			efree_size(ref, sizeof(zend_reference));
28301 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
28302 			Z_ADDREF_P(arg);
28303 		}
28304 	} else {
28305 		ZVAL_COPY_VALUE(arg, varptr);
28306 	}
28307 	ZEND_VM_NEXT_OPCODE();
28308 }
28309 
ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28310 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28311 {
28312 	USE_OPLINE
28313 	zval *varptr, *arg;
28314 
28315 	SAVE_OPLINE();
28316 	if (IS_UNUSED == IS_CONST) {
28317 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28318 		uint32_t arg_num;
28319 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28320 		if (UNEXPECTED(!arg)) {
28321 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28322 			HANDLE_EXCEPTION();
28323 		}
28324 	} else {
28325 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28326 	}
28327 
28328 	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28329 	if (Z_ISREF_P(varptr)) {
28330 		Z_ADDREF_P(varptr);
28331 	} else {
28332 		ZVAL_MAKE_REF_EX(varptr, 2);
28333 	}
28334 	ZVAL_REF(arg, Z_REF_P(varptr));
28335 
28336 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28337 	ZEND_VM_NEXT_OPCODE();
28338 }
28339 
ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28340 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28341 {
28342 	USE_OPLINE
28343 	zval *varptr, *arg;
28344 	uint32_t arg_num;
28345 
28346 	if (IS_UNUSED == IS_CONST) {
28347 		SAVE_OPLINE();
28348 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28349 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28350 		if (UNEXPECTED(!arg)) {
28351 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28352 			HANDLE_EXCEPTION();
28353 		}
28354 	} else {
28355 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28356 		arg_num = opline->op2.num;
28357 	}
28358 
28359 	if (EXPECTED(0)) {
28360 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28361 			goto send_var_by_ref;
28362 		}
28363 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28364 send_var_by_ref:
28365 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28366 		if (Z_ISREF_P(varptr)) {
28367 			Z_ADDREF_P(varptr);
28368 		} else {
28369 			ZVAL_MAKE_REF_EX(varptr, 2);
28370 		}
28371 		ZVAL_REF(arg, Z_REF_P(varptr));
28372 
28373 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28374 		ZEND_VM_NEXT_OPCODE();
28375 	}
28376 
28377 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28378 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
28379 		SAVE_OPLINE();
28380 		ZVAL_UNDEFINED_OP1();
28381 		ZVAL_NULL(arg);
28382 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28383 	}
28384 
28385 	if (IS_VAR == IS_CV) {
28386 		ZVAL_COPY_DEREF(arg, varptr);
28387 	} else /* if (IS_VAR == IS_VAR) */ {
28388 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
28389 			zend_refcounted *ref = Z_COUNTED_P(varptr);
28390 
28391 			varptr = Z_REFVAL_P(varptr);
28392 			ZVAL_COPY_VALUE(arg, varptr);
28393 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28394 				efree_size(ref, sizeof(zend_reference));
28395 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
28396 				Z_ADDREF_P(arg);
28397 			}
28398 		} else {
28399 			ZVAL_COPY_VALUE(arg, varptr);
28400 		}
28401 	}
28402 
28403 	ZEND_VM_NEXT_OPCODE();
28404 }
28405 
ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28406 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28407 {
28408 	USE_OPLINE
28409 	zval *varptr, *arg;
28410 	uint32_t arg_num;
28411 
28412 	if (IS_UNUSED == IS_CONST) {
28413 		SAVE_OPLINE();
28414 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28415 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28416 		if (UNEXPECTED(!arg)) {
28417 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28418 			HANDLE_EXCEPTION();
28419 		}
28420 	} else {
28421 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28422 		arg_num = opline->op2.num;
28423 	}
28424 
28425 	if (EXPECTED(1)) {
28426 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28427 			goto send_var_by_ref;
28428 		}
28429 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28430 send_var_by_ref:
28431 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28432 		if (Z_ISREF_P(varptr)) {
28433 			Z_ADDREF_P(varptr);
28434 		} else {
28435 			ZVAL_MAKE_REF_EX(varptr, 2);
28436 		}
28437 		ZVAL_REF(arg, Z_REF_P(varptr));
28438 
28439 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28440 		ZEND_VM_NEXT_OPCODE();
28441 	}
28442 
28443 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28444 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
28445 		SAVE_OPLINE();
28446 		ZVAL_UNDEFINED_OP1();
28447 		ZVAL_NULL(arg);
28448 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28449 	}
28450 
28451 	if (IS_VAR == IS_CV) {
28452 		ZVAL_COPY_DEREF(arg, varptr);
28453 	} else /* if (IS_VAR == IS_VAR) */ {
28454 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
28455 			zend_refcounted *ref = Z_COUNTED_P(varptr);
28456 
28457 			varptr = Z_REFVAL_P(varptr);
28458 			ZVAL_COPY_VALUE(arg, varptr);
28459 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28460 				efree_size(ref, sizeof(zend_reference));
28461 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
28462 				Z_ADDREF_P(arg);
28463 			}
28464 		} else {
28465 			ZVAL_COPY_VALUE(arg, varptr);
28466 		}
28467 	}
28468 
28469 	ZEND_VM_NEXT_OPCODE();
28470 }
28471 
ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28472 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28473 {
28474 	USE_OPLINE
28475 	zval *varptr, *arg;
28476 
28477 	if (IS_UNUSED == IS_CONST) {
28478 		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
28479 		SAVE_OPLINE();
28480 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
28481 		uint32_t arg_num;
28482 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
28483 		if (UNEXPECTED(!arg)) {
28484 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28485 			HANDLE_EXCEPTION();
28486 		}
28487 	} else {
28488 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28489 	}
28490 
28491 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
28492 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28493 		if (Z_ISREF_P(varptr)) {
28494 			Z_ADDREF_P(varptr);
28495 		} else {
28496 			ZVAL_MAKE_REF_EX(varptr, 2);
28497 		}
28498 		ZVAL_REF(arg, Z_REF_P(varptr));
28499 
28500 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28501 		ZEND_VM_NEXT_OPCODE();
28502 	}
28503 
28504 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28505 
28506 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
28507 		zend_refcounted *ref = Z_COUNTED_P(varptr);
28508 
28509 		varptr = Z_REFVAL_P(varptr);
28510 		ZVAL_COPY_VALUE(arg, varptr);
28511 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28512 			efree_size(ref, sizeof(zend_reference));
28513 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
28514 			Z_ADDREF_P(arg);
28515 		}
28516 	} else {
28517 		ZVAL_COPY_VALUE(arg, varptr);
28518 	}
28519 
28520 	ZEND_VM_NEXT_OPCODE();
28521 }
28522 
ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28523 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28524 {
28525 	USE_OPLINE
28526 	zval *result;
28527 	zend_function *constructor;
28528 	zend_class_entry *ce;
28529 	zend_execute_data *call;
28530 
28531 	SAVE_OPLINE();
28532 	if (IS_VAR == IS_CONST) {
28533 		ce = CACHED_PTR(opline->op2.num);
28534 		if (UNEXPECTED(ce == NULL)) {
28535 			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);
28536 			if (UNEXPECTED(ce == NULL)) {
28537 				ZVAL_UNDEF(EX_VAR(opline->result.var));
28538 				HANDLE_EXCEPTION();
28539 			}
28540 			CACHE_PTR(opline->op2.num, ce);
28541 		}
28542 	} else if (IS_VAR == IS_UNUSED) {
28543 		ce = zend_fetch_class(NULL, opline->op1.num);
28544 		if (UNEXPECTED(ce == NULL)) {
28545 			ZVAL_UNDEF(EX_VAR(opline->result.var));
28546 			HANDLE_EXCEPTION();
28547 		}
28548 	} else {
28549 		ce = Z_CE_P(EX_VAR(opline->op1.var));
28550 	}
28551 
28552 	result = EX_VAR(opline->result.var);
28553 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
28554 		ZVAL_UNDEF(result);
28555 		HANDLE_EXCEPTION();
28556 	}
28557 
28558 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
28559 	if (constructor == NULL) {
28560 		if (UNEXPECTED(EG(exception))) {
28561 			HANDLE_EXCEPTION();
28562 		}
28563 
28564 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
28565 		 * opcode is DO_FCALL in case EXT instructions are used. */
28566 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
28567 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
28568 		}
28569 
28570 		/* Perform a dummy function call */
28571 		call = zend_vm_stack_push_call_frame(
28572 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
28573 			opline->extended_value, NULL);
28574 	} else {
28575 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
28576 			init_func_run_time_cache(&constructor->op_array);
28577 		}
28578 		/* We are not handling overloaded classes right now */
28579 		call = zend_vm_stack_push_call_frame(
28580 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
28581 			constructor,
28582 			opline->extended_value,
28583 			Z_OBJ_P(result));
28584 		Z_ADDREF_P(result);
28585 	}
28586 
28587 	call->prev_execute_data = EX(call);
28588 	EX(call) = call;
28589 	ZEND_VM_NEXT_OPCODE();
28590 }
28591 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28592 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28593 {
28594 	USE_OPLINE
28595 	zval *expr_ptr, new_expr;
28596 
28597 	SAVE_OPLINE();
28598 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
28599 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
28600 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28601 		if (Z_ISREF_P(expr_ptr)) {
28602 			Z_ADDREF_P(expr_ptr);
28603 		} else {
28604 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
28605 		}
28606 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28607 	} else {
28608 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28609 		if (IS_VAR == IS_TMP_VAR) {
28610 			/* pass */
28611 		} else if (IS_VAR == IS_CONST) {
28612 			Z_TRY_ADDREF_P(expr_ptr);
28613 		} else if (IS_VAR == IS_CV) {
28614 			ZVAL_DEREF(expr_ptr);
28615 			Z_TRY_ADDREF_P(expr_ptr);
28616 		} else /* if (IS_VAR == IS_VAR) */ {
28617 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
28618 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
28619 
28620 				expr_ptr = Z_REFVAL_P(expr_ptr);
28621 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
28622 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
28623 					expr_ptr = &new_expr;
28624 					efree_size(ref, sizeof(zend_reference));
28625 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
28626 					Z_ADDREF_P(expr_ptr);
28627 				}
28628 			}
28629 		}
28630 	}
28631 
28632 	if (IS_UNUSED != IS_UNUSED) {
28633 		zval *offset = NULL;
28634 		zend_string *str;
28635 		zend_ulong hval;
28636 
28637 add_again:
28638 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
28639 			str = Z_STR_P(offset);
28640 			if (IS_UNUSED != IS_CONST) {
28641 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
28642 					goto num_index;
28643 				}
28644 			}
28645 str_index:
28646 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
28647 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
28648 			hval = Z_LVAL_P(offset);
28649 num_index:
28650 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
28651 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
28652 			offset = Z_REFVAL_P(offset);
28653 			goto add_again;
28654 		} else if (Z_TYPE_P(offset) == IS_NULL) {
28655 			str = ZSTR_EMPTY_ALLOC();
28656 			goto str_index;
28657 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
28658 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
28659 			goto num_index;
28660 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
28661 			hval = 0;
28662 			goto num_index;
28663 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
28664 			hval = 1;
28665 			goto num_index;
28666 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
28667 			zend_use_resource_as_offset(offset);
28668 			hval = Z_RES_HANDLE_P(offset);
28669 			goto num_index;
28670 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
28671 			ZVAL_UNDEFINED_OP2();
28672 			str = ZSTR_EMPTY_ALLOC();
28673 			goto str_index;
28674 		} else {
28675 			zend_illegal_offset();
28676 			zval_ptr_dtor_nogc(expr_ptr);
28677 		}
28678 
28679 	} else {
28680 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
28681 			zend_cannot_add_element();
28682 			zval_ptr_dtor_nogc(expr_ptr);
28683 		}
28684 	}
28685 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28686 }
28687 
ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28688 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28689 {
28690 	zval *array;
28691 	uint32_t size;
28692 	USE_OPLINE
28693 
28694 	array = EX_VAR(opline->result.var);
28695 	if (IS_VAR != IS_UNUSED) {
28696 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
28697 		ZVAL_ARR(array, zend_new_array(size));
28698 		/* Explicitly initialize array as not-packed if flag is set */
28699 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
28700 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
28701 		}
28702 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28703 	} else {
28704 		ZVAL_ARR(array, zend_new_array(0));
28705 		ZEND_VM_NEXT_OPCODE();
28706 	}
28707 }
28708 
ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28709 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28710 {
28711 	USE_OPLINE
28712 	zval *var_ptr;
28713 
28714 	var_ptr = EX_VAR(opline->op1.var);
28715 	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
28716 		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
28717 			ZVAL_UNREF(var_ptr);
28718 		}
28719 	}
28720 
28721 	ZEND_VM_NEXT_OPCODE();
28722 }
28723 
ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28724 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28725 {
28726 	USE_OPLINE
28727 
28728 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
28729 
28730 	SAVE_OPLINE();
28731 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
28732 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28733 	}
28734 
28735 	/* Destroy the previously yielded value */
28736 	zval_ptr_dtor(&generator->value);
28737 
28738 	/* Destroy the previously yielded key */
28739 	zval_ptr_dtor(&generator->key);
28740 
28741 	/* Set the new yielded value */
28742 	if (IS_VAR != IS_UNUSED) {
28743 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
28744 			/* Constants and temporary variables aren't yieldable by reference,
28745 			 * but we still allow them with a notice. */
28746 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
28747 				zval *value;
28748 
28749 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
28750 
28751 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28752 				ZVAL_COPY_VALUE(&generator->value, value);
28753 				if (IS_VAR == IS_CONST) {
28754 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
28755 						Z_ADDREF(generator->value);
28756 					}
28757 				}
28758 			} else {
28759 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28760 
28761 				/* If a function call result is yielded and the function did
28762 				 * not return by reference we throw a notice. */
28763 				do {
28764 					if (IS_VAR == IS_VAR) {
28765 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
28766 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
28767 						 && !Z_ISREF_P(value_ptr)) {
28768 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
28769 							ZVAL_COPY(&generator->value, value_ptr);
28770 							break;
28771 						}
28772 					}
28773 					if (Z_ISREF_P(value_ptr)) {
28774 						Z_ADDREF_P(value_ptr);
28775 					} else {
28776 						ZVAL_MAKE_REF_EX(value_ptr, 2);
28777 					}
28778 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
28779 				} while (0);
28780 
28781 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28782 			}
28783 		} else {
28784 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28785 
28786 			/* Consts, temporary variables and references need copying */
28787 			if (IS_VAR == IS_CONST) {
28788 				ZVAL_COPY_VALUE(&generator->value, value);
28789 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
28790 					Z_ADDREF(generator->value);
28791 				}
28792 			} else if (IS_VAR == IS_TMP_VAR) {
28793 				ZVAL_COPY_VALUE(&generator->value, value);
28794             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
28795 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
28796 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28797 			} else {
28798 				ZVAL_COPY_VALUE(&generator->value, value);
28799 				if (IS_VAR == IS_CV) {
28800 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
28801 				}
28802 			}
28803 		}
28804 	} else {
28805 		/* If no value was specified yield null */
28806 		ZVAL_NULL(&generator->value);
28807 	}
28808 
28809 	/* Set the new yielded key */
28810 	if (IS_UNUSED != IS_UNUSED) {
28811 		zval *key = NULL;
28812 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
28813 			key = Z_REFVAL_P(key);
28814 		}
28815 		ZVAL_COPY(&generator->key, key);
28816 
28817 		if (Z_TYPE(generator->key) == IS_LONG
28818 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
28819 		) {
28820 			generator->largest_used_integer_key = Z_LVAL(generator->key);
28821 		}
28822 	} else {
28823 		/* If no key was specified we use auto-increment keys */
28824 		generator->largest_used_integer_key++;
28825 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
28826 	}
28827 
28828 	if (RETURN_VALUE_USED(opline)) {
28829 		/* If the return value of yield is used set the send
28830 		 * target and initialize it to NULL */
28831 		generator->send_target = EX_VAR(opline->result.var);
28832 		ZVAL_NULL(generator->send_target);
28833 	} else {
28834 		generator->send_target = NULL;
28835 	}
28836 
28837 	/* We increment to the next op, so we are at the correct position when the
28838 	 * generator is resumed. */
28839 	ZEND_VM_INC_OPCODE();
28840 
28841 	/* The GOTO VM uses a local opline variable. We need to set the opline
28842 	 * variable in execute_data so we don't resume at an old position. */
28843 	SAVE_OPLINE();
28844 
28845 	ZEND_VM_RETURN();
28846 }
28847 
ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28848 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28849 {
28850 	USE_OPLINE
28851 	zval *op1 = EX_VAR(opline->op1.var);
28852 
28853 	if (IS_VAR == IS_CV) {
28854 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
28855 			ZVAL_NEW_EMPTY_REF(op1);
28856 			Z_SET_REFCOUNT_P(op1, 2);
28857 			ZVAL_NULL(Z_REFVAL_P(op1));
28858 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
28859 		} else {
28860 			if (Z_ISREF_P(op1)) {
28861 				Z_ADDREF_P(op1);
28862 			} else {
28863 				ZVAL_MAKE_REF_EX(op1, 2);
28864 			}
28865 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
28866 		}
28867 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
28868 		op1 = Z_INDIRECT_P(op1);
28869 		if (EXPECTED(!Z_ISREF_P(op1))) {
28870 			ZVAL_MAKE_REF_EX(op1, 2);
28871 		} else {
28872 			GC_ADDREF(Z_REF_P(op1));
28873 		}
28874 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
28875 	} else {
28876 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
28877 	}
28878 	ZEND_VM_NEXT_OPCODE();
28879 }
28880 
ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28881 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28882 {
28883 	USE_OPLINE
28884 	zval *op1;
28885 	zend_string *type;
28886 
28887 	SAVE_OPLINE();
28888 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28889 	type = zend_zval_get_legacy_type(op1);
28890 	if (EXPECTED(type)) {
28891 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
28892 	} else {
28893 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
28894 	}
28895 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28896 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28897 }
28898 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28899 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28900 {
28901 	USE_OPLINE
28902 	zval *varptr, *arg;
28903 	uint32_t arg_num = opline->op2.num;
28904 
28905 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
28906 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28907 	}
28908 
28909 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28910 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
28911 
28912 	if (IS_VAR == IS_CV) {
28913 		ZVAL_COPY(arg, varptr);
28914 	} else /* if (IS_VAR == IS_VAR) */ {
28915 		ZVAL_COPY_VALUE(arg, varptr);
28916 	}
28917 
28918 	ZEND_VM_NEXT_OPCODE();
28919 }
28920 
ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28921 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28922 {
28923 	USE_OPLINE
28924 	zval *op1, *op2;
28925 	zend_bool result;
28926 
28927 	SAVE_OPLINE();
28928 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28929 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28930 	result = fast_is_identical_function(op1, op2);
28931 
28932 	ZEND_VM_SMART_BRANCH(result, 1);
28933 }
28934 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28935 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28936 {
28937 	USE_OPLINE
28938 	zval *object;
28939 	zval *property;
28940 	zval *value;
28941 	zval *zptr;
28942 	void **cache_slot;
28943 	zend_property_info *prop_info;
28944 	zend_object *zobj;
28945 	zend_string *name, *tmp_name;
28946 
28947 	SAVE_OPLINE();
28948 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28949 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28950 
28951 	do {
28952 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
28953 
28954 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28955 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
28956 				object = Z_REFVAL_P(object);
28957 				goto assign_op_object;
28958 			}
28959 			if (IS_VAR == IS_CV
28960 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28961 				ZVAL_UNDEFINED_OP1();
28962 			}
28963 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
28964 			break;
28965 		}
28966 
28967 assign_op_object:
28968 		/* here we are sure we are dealing with an object */
28969 		zobj = Z_OBJ_P(object);
28970 		if (IS_CV == IS_CONST) {
28971 			name = Z_STR_P(property);
28972 		} else {
28973 			name = zval_try_get_tmp_string(property, &tmp_name);
28974 			if (UNEXPECTED(!name)) {
28975 				UNDEF_RESULT();
28976 				break;
28977 			}
28978 		}
28979 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
28980 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
28981 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
28982 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28983 					ZVAL_NULL(EX_VAR(opline->result.var));
28984 				}
28985 			} else {
28986 				zval *orig_zptr = zptr;
28987 				zend_reference *ref;
28988 
28989 				do {
28990 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
28991 						ref = Z_REF_P(zptr);
28992 						zptr = Z_REFVAL_P(zptr);
28993 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
28994 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
28995 							break;
28996 						}
28997 					}
28998 
28999 					if (IS_CV == IS_CONST) {
29000 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
29001 					} else {
29002 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
29003 					}
29004 					if (UNEXPECTED(prop_info)) {
29005 						/* special case for typed properties */
29006 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
29007 					} else {
29008 						zend_binary_op(zptr, zptr, value OPLINE_CC);
29009 					}
29010 				} while (0);
29011 
29012 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29013 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
29014 				}
29015 			}
29016 		} else {
29017 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
29018 		}
29019 		if (IS_CV != IS_CONST) {
29020 			zend_tmp_string_release(tmp_name);
29021 		}
29022 	} while (0);
29023 
29024 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
29025 
29026 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29027 	/* assign_obj has two opcodes! */
29028 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29029 }
29030 
29031 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29032 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29033 {
29034 	USE_OPLINE
29035 	zval *var_ptr;
29036 	zval *value, *container, *dim;
29037 
29038 	SAVE_OPLINE();
29039 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29040 
29041 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
29042 assign_dim_op_array:
29043 		SEPARATE_ARRAY(container);
29044 assign_dim_op_new_array:
29045 		dim = EX_VAR(opline->op2.var);
29046 		if (IS_CV == IS_UNUSED) {
29047 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
29048 			if (UNEXPECTED(!var_ptr)) {
29049 				zend_cannot_add_element();
29050 				goto assign_dim_op_ret_null;
29051 			}
29052 		} else {
29053 			if (IS_CV == IS_CONST) {
29054 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
29055 			} else {
29056 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
29057 			}
29058 			if (UNEXPECTED(!var_ptr)) {
29059 				goto assign_dim_op_ret_null;
29060 			}
29061 		}
29062 
29063 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
29064 
29065 		do {
29066 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
29067 				zend_reference *ref = Z_REF_P(var_ptr);
29068 				var_ptr = Z_REFVAL_P(var_ptr);
29069 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
29070 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
29071 					break;
29072 				}
29073 			}
29074 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
29075 		} while (0);
29076 
29077 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29078 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
29079 		}
29080 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
29081 	} else {
29082 		if (EXPECTED(Z_ISREF_P(container))) {
29083 			container = Z_REFVAL_P(container);
29084 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
29085 				goto assign_dim_op_array;
29086 			}
29087 		}
29088 
29089 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
29090 			zend_object *obj = Z_OBJ_P(container);
29091 
29092 			GC_ADDREF(obj);
29093 			dim = EX_VAR(opline->op2.var);
29094 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
29095 				dim = ZVAL_UNDEFINED_OP2();
29096 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
29097 				dim++;
29098 			}
29099 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
29100 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
29101 				zend_objects_store_del(obj);
29102 			}
29103 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
29104 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
29105 				ZVAL_UNDEFINED_OP1();
29106 			}
29107 			ZVAL_ARR(container, zend_new_array(8));
29108 			goto assign_dim_op_new_array;
29109 		} else {
29110 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29111 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
29112 assign_dim_op_ret_null:
29113 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
29114 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29115 				ZVAL_NULL(EX_VAR(opline->result.var));
29116 			}
29117 		}
29118 	}
29119 
29120 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29121 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29122 }
29123 
ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29124 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29125 {
29126 	USE_OPLINE
29127 	zval *var_ptr;
29128 	zval *value;
29129 
29130 	SAVE_OPLINE();
29131 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29132 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29133 
29134 	do {
29135 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
29136 			zend_reference *ref = Z_REF_P(var_ptr);
29137 			var_ptr = Z_REFVAL_P(var_ptr);
29138 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
29139 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
29140 				break;
29141 			}
29142 		}
29143 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
29144 	} while (0);
29145 
29146 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29147 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
29148 	}
29149 
29150 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29151 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29152 }
29153 
ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29154 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29155 {
29156 	USE_OPLINE
29157 	zval *object;
29158 	zval *property;
29159 	zval *zptr;
29160 	void **cache_slot;
29161 	zend_property_info *prop_info;
29162 	zend_object *zobj;
29163 	zend_string *name, *tmp_name;
29164 
29165 	SAVE_OPLINE();
29166 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29167 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29168 
29169 	do {
29170 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29171 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29172 				object = Z_REFVAL_P(object);
29173 				goto pre_incdec_object;
29174 			}
29175 			if (IS_VAR == IS_CV
29176 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
29177 				ZVAL_UNDEFINED_OP1();
29178 			}
29179 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
29180 			break;
29181 		}
29182 
29183 pre_incdec_object:
29184 		/* here we are sure we are dealing with an object */
29185 		zobj = Z_OBJ_P(object);
29186 		if (IS_CV == IS_CONST) {
29187 			name = Z_STR_P(property);
29188 		} else {
29189 			name = zval_try_get_tmp_string(property, &tmp_name);
29190 			if (UNEXPECTED(!name)) {
29191 				UNDEF_RESULT();
29192 				break;
29193 			}
29194 		}
29195 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
29196 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
29197 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
29198 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29199 					ZVAL_NULL(EX_VAR(opline->result.var));
29200 				}
29201 			} else {
29202 				if (IS_CV == IS_CONST) {
29203 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
29204 				} else {
29205 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
29206 				}
29207 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
29208 			}
29209 		} else {
29210 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
29211 		}
29212 		if (IS_CV != IS_CONST) {
29213 			zend_tmp_string_release(tmp_name);
29214 		}
29215 	} while (0);
29216 
29217 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29218 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29219 }
29220 
ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29221 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29222 {
29223 	USE_OPLINE
29224 	zval *object;
29225 	zval *property;
29226 	zval *zptr;
29227 	void **cache_slot;
29228 	zend_property_info *prop_info;
29229 	zend_object *zobj;
29230 	zend_string *name, *tmp_name;
29231 
29232 	SAVE_OPLINE();
29233 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29234 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29235 
29236 	do {
29237 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29238 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29239 				object = Z_REFVAL_P(object);
29240 				goto post_incdec_object;
29241 			}
29242 			if (IS_VAR == IS_CV
29243 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
29244 				ZVAL_UNDEFINED_OP1();
29245 			}
29246 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
29247 			break;
29248 		}
29249 
29250 post_incdec_object:
29251 		/* here we are sure we are dealing with an object */
29252 		zobj = Z_OBJ_P(object);
29253 		if (IS_CV == IS_CONST) {
29254 			name = Z_STR_P(property);
29255 		} else {
29256 			name = zval_try_get_tmp_string(property, &tmp_name);
29257 			if (UNEXPECTED(!name)) {
29258 				ZVAL_UNDEF(EX_VAR(opline->result.var));
29259 				break;
29260 			}
29261 		}
29262 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
29263 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
29264 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
29265 				ZVAL_NULL(EX_VAR(opline->result.var));
29266 			} else {
29267 				if (IS_CV == IS_CONST) {
29268 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
29269 				} else {
29270 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
29271 				}
29272 
29273 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
29274 			}
29275 		} else {
29276 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
29277 		}
29278 		if (IS_CV != IS_CONST) {
29279 			zend_tmp_string_release(tmp_name);
29280 		}
29281 	} while (0);
29282 
29283 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29284 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29285 }
29286 
ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29287 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29288 {
29289 	USE_OPLINE
29290 	zval *container;
29291 
29292 	SAVE_OPLINE();
29293 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29294 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
29295 
29296 	if (IS_VAR == IS_VAR) {
29297 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29298 	}
29299 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29300 }
29301 
ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29302 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29303 {
29304 	USE_OPLINE
29305 	zval *container;
29306 
29307 	SAVE_OPLINE();
29308 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29309 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
29310 
29311 	if (IS_VAR == IS_VAR) {
29312 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29313 	}
29314 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29315 }
29316 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29317 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29318 {
29319 #if 0
29320 	USE_OPLINE
29321 #endif
29322 
29323 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
29324         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
29325 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29326         }
29327 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29328 	} else {
29329 		if (IS_CV == IS_UNUSED) {
29330 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29331 		}
29332 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29333 	}
29334 }
29335 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29336 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29337 {
29338 	USE_OPLINE
29339 	zval *container;
29340 
29341 	SAVE_OPLINE();
29342 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29343 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
29344 
29345 	if (IS_VAR == IS_VAR) {
29346 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29347 	}
29348 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29349 }
29350 
ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29351 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29352 {
29353 	USE_OPLINE
29354 	zval *property, *container, *result;
29355 
29356 	SAVE_OPLINE();
29357 
29358 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29359 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29360 	result = EX_VAR(opline->result.var);
29361 	zend_fetch_property_address(
29362 		result, container, IS_VAR, property, IS_CV,
29363 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
29364 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
29365 
29366 	if (IS_VAR == IS_VAR) {
29367 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29368 	}
29369 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29370 }
29371 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29373 {
29374 	USE_OPLINE
29375 	zval *property, *container, *result;
29376 
29377 	SAVE_OPLINE();
29378 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29379 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29380 	result = EX_VAR(opline->result.var);
29381 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
29382 
29383 	if (IS_VAR == IS_VAR) {
29384 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29385 	}
29386 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29387 }
29388 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29389 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29390 {
29391 #if 0
29392 	USE_OPLINE
29393 #endif
29394 
29395 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
29396 		/* Behave like FETCH_OBJ_W */
29397 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
29398 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29399 		}
29400 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29401 	} else {
29402 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29403 	}
29404 }
29405 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29406 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29407 {
29408 	USE_OPLINE
29409 	zval *container, *property, *result;
29410 
29411 	SAVE_OPLINE();
29412 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29413 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29414 	result = EX_VAR(opline->result.var);
29415 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
29416 
29417 	if (IS_VAR == IS_VAR) {
29418 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
29419 	}
29420 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29421 }
29422 
ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29423 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29424 {
29425 	USE_OPLINE
29426 	zval *container, *dim;
29427 
29428 	SAVE_OPLINE();
29429 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29430 	dim = EX_VAR(opline->op2.var);
29431 
29432 	if (IS_VAR == IS_VAR
29433 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
29434 		&& UNEXPECTED(!Z_ISREF_P(container))
29435 	) {
29436 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
29437 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
29438 	} else {
29439 		zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
29440 	}
29441 
29442 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29443 }
29444 
ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29445 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29446 {
29447 	USE_OPLINE
29448 	zval *object, *property, *value, tmp;
29449 	zend_object *zobj;
29450 	zend_string *name, *tmp_name;
29451 
29452 	SAVE_OPLINE();
29453 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29454 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29455 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
29456 
29457 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29458 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29459 			object = Z_REFVAL_P(object);
29460 			goto assign_object;
29461 		}
29462 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
29463 		value = &EG(uninitialized_zval);
29464 		goto free_and_exit_assign_obj;
29465 	}
29466 
29467 assign_object:
29468 	zobj = Z_OBJ_P(object);
29469 	if (IS_CV == IS_CONST &&
29470 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
29471 		void **cache_slot = CACHE_ADDR(opline->extended_value);
29472 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
29473 		zend_object *zobj = Z_OBJ_P(object);
29474 		zval *property_val;
29475 
29476 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
29477 			property_val = OBJ_PROP(zobj, prop_offset);
29478 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
29479 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
29480 
29481 				if (UNEXPECTED(prop_info != NULL)) {
29482 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
29483 					goto free_and_exit_assign_obj;
29484 				} else {
29485 fast_assign_obj:
29486 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
29487 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29488 						ZVAL_COPY(EX_VAR(opline->result.var), value);
29489 					}
29490 					goto exit_assign_obj;
29491 				}
29492 			}
29493 		} else {
29494 			if (EXPECTED(zobj->properties != NULL)) {
29495 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
29496 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
29497 						GC_DELREF(zobj->properties);
29498 					}
29499 					zobj->properties = zend_array_dup(zobj->properties);
29500 				}
29501 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
29502 				if (property_val) {
29503 					goto fast_assign_obj;
29504 				}
29505 			}
29506 
29507 			if (!zobj->ce->__set) {
29508 
29509 				if (EXPECTED(zobj->properties == NULL)) {
29510 					rebuild_object_properties(zobj);
29511 				}
29512 				if (IS_CONST == IS_CONST) {
29513 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
29514 						Z_ADDREF_P(value);
29515 					}
29516 				} else if (IS_CONST != IS_TMP_VAR) {
29517 					if (Z_ISREF_P(value)) {
29518 						if (IS_CONST == IS_VAR) {
29519 							zend_reference *ref = Z_REF_P(value);
29520 							if (GC_DELREF(ref) == 0) {
29521 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
29522 								efree_size(ref, sizeof(zend_reference));
29523 								value = &tmp;
29524 							} else {
29525 								value = Z_REFVAL_P(value);
29526 								Z_TRY_ADDREF_P(value);
29527 							}
29528 						} else {
29529 							value = Z_REFVAL_P(value);
29530 							Z_TRY_ADDREF_P(value);
29531 						}
29532 					} else if (IS_CONST == IS_CV) {
29533 						Z_TRY_ADDREF_P(value);
29534 					}
29535 				}
29536 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
29537 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29538 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29539 				}
29540 				goto exit_assign_obj;
29541 			}
29542 		}
29543 	}
29544 
29545 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
29546 		ZVAL_DEREF(value);
29547 	}
29548 
29549 	if (IS_CV == IS_CONST) {
29550 		name = Z_STR_P(property);
29551 	} else {
29552 		name = zval_try_get_tmp_string(property, &tmp_name);
29553 		if (UNEXPECTED(!name)) {
29554 
29555 			UNDEF_RESULT();
29556 			goto exit_assign_obj;
29557 		}
29558 	}
29559 
29560 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
29561 
29562 	if (IS_CV != IS_CONST) {
29563 		zend_tmp_string_release(tmp_name);
29564 	}
29565 
29566 free_and_exit_assign_obj:
29567 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29568 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
29569 	}
29570 
29571 exit_assign_obj:
29572 
29573 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29574 	/* assign_obj has two opcodes! */
29575 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29576 }
29577 
29578 /* 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)29579 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29580 {
29581 	USE_OPLINE
29582 	zval *object, *property, *value, tmp;
29583 	zend_object *zobj;
29584 	zend_string *name, *tmp_name;
29585 
29586 	SAVE_OPLINE();
29587 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29588 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29589 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
29590 
29591 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29592 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29593 			object = Z_REFVAL_P(object);
29594 			goto assign_object;
29595 		}
29596 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
29597 		value = &EG(uninitialized_zval);
29598 		goto free_and_exit_assign_obj;
29599 	}
29600 
29601 assign_object:
29602 	zobj = Z_OBJ_P(object);
29603 	if (IS_CV == IS_CONST &&
29604 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
29605 		void **cache_slot = CACHE_ADDR(opline->extended_value);
29606 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
29607 		zend_object *zobj = Z_OBJ_P(object);
29608 		zval *property_val;
29609 
29610 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
29611 			property_val = OBJ_PROP(zobj, prop_offset);
29612 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
29613 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
29614 
29615 				if (UNEXPECTED(prop_info != NULL)) {
29616 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
29617 					goto free_and_exit_assign_obj;
29618 				} else {
29619 fast_assign_obj:
29620 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
29621 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29622 						ZVAL_COPY(EX_VAR(opline->result.var), value);
29623 					}
29624 					goto exit_assign_obj;
29625 				}
29626 			}
29627 		} else {
29628 			if (EXPECTED(zobj->properties != NULL)) {
29629 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
29630 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
29631 						GC_DELREF(zobj->properties);
29632 					}
29633 					zobj->properties = zend_array_dup(zobj->properties);
29634 				}
29635 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
29636 				if (property_val) {
29637 					goto fast_assign_obj;
29638 				}
29639 			}
29640 
29641 			if (!zobj->ce->__set) {
29642 
29643 				if (EXPECTED(zobj->properties == NULL)) {
29644 					rebuild_object_properties(zobj);
29645 				}
29646 				if (IS_TMP_VAR == IS_CONST) {
29647 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
29648 						Z_ADDREF_P(value);
29649 					}
29650 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
29651 					if (Z_ISREF_P(value)) {
29652 						if (IS_TMP_VAR == IS_VAR) {
29653 							zend_reference *ref = Z_REF_P(value);
29654 							if (GC_DELREF(ref) == 0) {
29655 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
29656 								efree_size(ref, sizeof(zend_reference));
29657 								value = &tmp;
29658 							} else {
29659 								value = Z_REFVAL_P(value);
29660 								Z_TRY_ADDREF_P(value);
29661 							}
29662 						} else {
29663 							value = Z_REFVAL_P(value);
29664 							Z_TRY_ADDREF_P(value);
29665 						}
29666 					} else if (IS_TMP_VAR == IS_CV) {
29667 						Z_TRY_ADDREF_P(value);
29668 					}
29669 				}
29670 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
29671 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29672 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29673 				}
29674 				goto exit_assign_obj;
29675 			}
29676 		}
29677 	}
29678 
29679 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
29680 		ZVAL_DEREF(value);
29681 	}
29682 
29683 	if (IS_CV == IS_CONST) {
29684 		name = Z_STR_P(property);
29685 	} else {
29686 		name = zval_try_get_tmp_string(property, &tmp_name);
29687 		if (UNEXPECTED(!name)) {
29688 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29689 			UNDEF_RESULT();
29690 			goto exit_assign_obj;
29691 		}
29692 	}
29693 
29694 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
29695 
29696 	if (IS_CV != IS_CONST) {
29697 		zend_tmp_string_release(tmp_name);
29698 	}
29699 
29700 free_and_exit_assign_obj:
29701 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29702 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
29703 	}
29704 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29705 exit_assign_obj:
29706 
29707 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29708 	/* assign_obj has two opcodes! */
29709 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29710 }
29711 
29712 /* 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)29713 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29714 {
29715 	USE_OPLINE
29716 	zval *object, *property, *value, tmp;
29717 	zend_object *zobj;
29718 	zend_string *name, *tmp_name;
29719 
29720 	SAVE_OPLINE();
29721 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29722 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29723 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
29724 
29725 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29726 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29727 			object = Z_REFVAL_P(object);
29728 			goto assign_object;
29729 		}
29730 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
29731 		value = &EG(uninitialized_zval);
29732 		goto free_and_exit_assign_obj;
29733 	}
29734 
29735 assign_object:
29736 	zobj = Z_OBJ_P(object);
29737 	if (IS_CV == IS_CONST &&
29738 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
29739 		void **cache_slot = CACHE_ADDR(opline->extended_value);
29740 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
29741 		zend_object *zobj = Z_OBJ_P(object);
29742 		zval *property_val;
29743 
29744 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
29745 			property_val = OBJ_PROP(zobj, prop_offset);
29746 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
29747 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
29748 
29749 				if (UNEXPECTED(prop_info != NULL)) {
29750 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
29751 					goto free_and_exit_assign_obj;
29752 				} else {
29753 fast_assign_obj:
29754 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
29755 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29756 						ZVAL_COPY(EX_VAR(opline->result.var), value);
29757 					}
29758 					goto exit_assign_obj;
29759 				}
29760 			}
29761 		} else {
29762 			if (EXPECTED(zobj->properties != NULL)) {
29763 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
29764 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
29765 						GC_DELREF(zobj->properties);
29766 					}
29767 					zobj->properties = zend_array_dup(zobj->properties);
29768 				}
29769 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
29770 				if (property_val) {
29771 					goto fast_assign_obj;
29772 				}
29773 			}
29774 
29775 			if (!zobj->ce->__set) {
29776 
29777 				if (EXPECTED(zobj->properties == NULL)) {
29778 					rebuild_object_properties(zobj);
29779 				}
29780 				if (IS_VAR == IS_CONST) {
29781 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
29782 						Z_ADDREF_P(value);
29783 					}
29784 				} else if (IS_VAR != IS_TMP_VAR) {
29785 					if (Z_ISREF_P(value)) {
29786 						if (IS_VAR == IS_VAR) {
29787 							zend_reference *ref = Z_REF_P(value);
29788 							if (GC_DELREF(ref) == 0) {
29789 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
29790 								efree_size(ref, sizeof(zend_reference));
29791 								value = &tmp;
29792 							} else {
29793 								value = Z_REFVAL_P(value);
29794 								Z_TRY_ADDREF_P(value);
29795 							}
29796 						} else {
29797 							value = Z_REFVAL_P(value);
29798 							Z_TRY_ADDREF_P(value);
29799 						}
29800 					} else if (IS_VAR == IS_CV) {
29801 						Z_TRY_ADDREF_P(value);
29802 					}
29803 				}
29804 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
29805 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29806 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29807 				}
29808 				goto exit_assign_obj;
29809 			}
29810 		}
29811 	}
29812 
29813 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
29814 		ZVAL_DEREF(value);
29815 	}
29816 
29817 	if (IS_CV == IS_CONST) {
29818 		name = Z_STR_P(property);
29819 	} else {
29820 		name = zval_try_get_tmp_string(property, &tmp_name);
29821 		if (UNEXPECTED(!name)) {
29822 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29823 			UNDEF_RESULT();
29824 			goto exit_assign_obj;
29825 		}
29826 	}
29827 
29828 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
29829 
29830 	if (IS_CV != IS_CONST) {
29831 		zend_tmp_string_release(tmp_name);
29832 	}
29833 
29834 free_and_exit_assign_obj:
29835 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29836 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
29837 	}
29838 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29839 exit_assign_obj:
29840 
29841 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29842 	/* assign_obj has two opcodes! */
29843 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29844 }
29845 
29846 /* 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)29847 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29848 {
29849 	USE_OPLINE
29850 	zval *object, *property, *value, tmp;
29851 	zend_object *zobj;
29852 	zend_string *name, *tmp_name;
29853 
29854 	SAVE_OPLINE();
29855 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29856 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29857 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
29858 
29859 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29860 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
29861 			object = Z_REFVAL_P(object);
29862 			goto assign_object;
29863 		}
29864 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
29865 		value = &EG(uninitialized_zval);
29866 		goto free_and_exit_assign_obj;
29867 	}
29868 
29869 assign_object:
29870 	zobj = Z_OBJ_P(object);
29871 	if (IS_CV == IS_CONST &&
29872 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
29873 		void **cache_slot = CACHE_ADDR(opline->extended_value);
29874 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
29875 		zend_object *zobj = Z_OBJ_P(object);
29876 		zval *property_val;
29877 
29878 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
29879 			property_val = OBJ_PROP(zobj, prop_offset);
29880 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
29881 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
29882 
29883 				if (UNEXPECTED(prop_info != NULL)) {
29884 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
29885 					goto free_and_exit_assign_obj;
29886 				} else {
29887 fast_assign_obj:
29888 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
29889 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29890 						ZVAL_COPY(EX_VAR(opline->result.var), value);
29891 					}
29892 					goto exit_assign_obj;
29893 				}
29894 			}
29895 		} else {
29896 			if (EXPECTED(zobj->properties != NULL)) {
29897 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
29898 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
29899 						GC_DELREF(zobj->properties);
29900 					}
29901 					zobj->properties = zend_array_dup(zobj->properties);
29902 				}
29903 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
29904 				if (property_val) {
29905 					goto fast_assign_obj;
29906 				}
29907 			}
29908 
29909 			if (!zobj->ce->__set) {
29910 
29911 				if (EXPECTED(zobj->properties == NULL)) {
29912 					rebuild_object_properties(zobj);
29913 				}
29914 				if (IS_CV == IS_CONST) {
29915 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
29916 						Z_ADDREF_P(value);
29917 					}
29918 				} else if (IS_CV != IS_TMP_VAR) {
29919 					if (Z_ISREF_P(value)) {
29920 						if (IS_CV == IS_VAR) {
29921 							zend_reference *ref = Z_REF_P(value);
29922 							if (GC_DELREF(ref) == 0) {
29923 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
29924 								efree_size(ref, sizeof(zend_reference));
29925 								value = &tmp;
29926 							} else {
29927 								value = Z_REFVAL_P(value);
29928 								Z_TRY_ADDREF_P(value);
29929 							}
29930 						} else {
29931 							value = Z_REFVAL_P(value);
29932 							Z_TRY_ADDREF_P(value);
29933 						}
29934 					} else if (IS_CV == IS_CV) {
29935 						Z_TRY_ADDREF_P(value);
29936 					}
29937 				}
29938 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
29939 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29940 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29941 				}
29942 				goto exit_assign_obj;
29943 			}
29944 		}
29945 	}
29946 
29947 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
29948 		ZVAL_DEREF(value);
29949 	}
29950 
29951 	if (IS_CV == IS_CONST) {
29952 		name = Z_STR_P(property);
29953 	} else {
29954 		name = zval_try_get_tmp_string(property, &tmp_name);
29955 		if (UNEXPECTED(!name)) {
29956 
29957 			UNDEF_RESULT();
29958 			goto exit_assign_obj;
29959 		}
29960 	}
29961 
29962 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
29963 
29964 	if (IS_CV != IS_CONST) {
29965 		zend_tmp_string_release(tmp_name);
29966 	}
29967 
29968 free_and_exit_assign_obj:
29969 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29970 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
29971 	}
29972 
29973 exit_assign_obj:
29974 
29975 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29976 	/* assign_obj has two opcodes! */
29977 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29978 }
29979 
29980 /* 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)29981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29982 {
29983 	USE_OPLINE
29984 	zval *object_ptr, *orig_object_ptr;
29985 	zval *value;
29986 	zval *variable_ptr;
29987 	zval *dim;
29988 
29989 	SAVE_OPLINE();
29990 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29991 
29992 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29993 try_assign_dim_array:
29994 		SEPARATE_ARRAY(object_ptr);
29995 		if (IS_CV == IS_UNUSED) {
29996 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
29997 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
29998 				HashTable *ht = Z_ARRVAL_P(object_ptr);
29999 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
30000 					GC_ADDREF(ht);
30001 				}
30002 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30003 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
30004 					zend_array_destroy(ht);
30005 					goto assign_dim_error;
30006 				}
30007 			}
30008 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
30009 				ZVAL_DEREF(value);
30010 			}
30011 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
30012 			if (UNEXPECTED(variable_ptr == NULL)) {
30013 				zend_cannot_add_element();
30014 				goto assign_dim_error;
30015 			} else if (IS_CONST == IS_CV) {
30016 				if (Z_REFCOUNTED_P(value)) {
30017 					Z_ADDREF_P(value);
30018 				}
30019 			} else if (IS_CONST == IS_VAR) {
30020 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
30021 				if (value != free_op_data) {
30022 					if (Z_REFCOUNTED_P(value)) {
30023 						Z_ADDREF_P(value);
30024 					}
30025 					zval_ptr_dtor_nogc(free_op_data);
30026 				}
30027 			} else if (IS_CONST == IS_CONST) {
30028 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
30029 					Z_ADDREF_P(value);
30030 				}
30031 			}
30032 		} else {
30033 			dim = EX_VAR(opline->op2.var);
30034 			if (IS_CV == IS_CONST) {
30035 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30036 			} else {
30037 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30038 			}
30039 			if (UNEXPECTED(variable_ptr == NULL)) {
30040 				goto assign_dim_error;
30041 			}
30042 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
30043 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
30044 		}
30045 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30046 			ZVAL_COPY(EX_VAR(opline->result.var), value);
30047 		}
30048 	} else {
30049 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
30050 			object_ptr = Z_REFVAL_P(object_ptr);
30051 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30052 				goto try_assign_dim_array;
30053 			}
30054 		}
30055 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
30056 			zend_object *obj = Z_OBJ_P(object_ptr);
30057 
30058 			GC_ADDREF(obj);
30059 			dim = EX_VAR(opline->op2.var);
30060 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
30061 				dim = ZVAL_UNDEFINED_OP2();
30062 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30063 				dim++;
30064 			}
30065 
30066 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
30067 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
30068 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30069 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
30070 				ZVAL_DEREF(value);
30071 			}
30072 
30073 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
30074 
30075 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
30076 				zend_objects_store_del(obj);
30077 			}
30078 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
30079 			if (IS_CV == IS_UNUSED) {
30080 				zend_use_new_element_for_string();
30081 
30082 				UNDEF_RESULT();
30083 			} else {
30084 				dim = EX_VAR(opline->op2.var);
30085 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
30086 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
30087 
30088 			}
30089 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
30090 			if (Z_ISREF_P(orig_object_ptr)
30091 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
30092 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
30093 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30094 
30095 				UNDEF_RESULT();
30096 			} else {
30097 				ZVAL_ARR(object_ptr, zend_new_array(8));
30098 				goto try_assign_dim_array;
30099 			}
30100 		} else {
30101 			zend_use_scalar_as_array();
30102 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30103 assign_dim_error:
30104 
30105 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30106 				ZVAL_NULL(EX_VAR(opline->result.var));
30107 			}
30108 		}
30109 	}
30110 	if (IS_CV != IS_UNUSED) {
30111 
30112 	}
30113 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30114 	/* assign_dim has two opcodes! */
30115 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30116 }
30117 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30119 {
30120 	USE_OPLINE
30121 	zval *object_ptr, *orig_object_ptr;
30122 	zval *value;
30123 	zval *variable_ptr;
30124 	zval *dim;
30125 
30126 	SAVE_OPLINE();
30127 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30128 
30129 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30130 try_assign_dim_array:
30131 		SEPARATE_ARRAY(object_ptr);
30132 		if (IS_CV == IS_UNUSED) {
30133 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30134 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
30135 				HashTable *ht = Z_ARRVAL_P(object_ptr);
30136 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
30137 					GC_ADDREF(ht);
30138 				}
30139 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30140 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
30141 					zend_array_destroy(ht);
30142 					goto assign_dim_error;
30143 				}
30144 			}
30145 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
30146 				ZVAL_DEREF(value);
30147 			}
30148 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
30149 			if (UNEXPECTED(variable_ptr == NULL)) {
30150 				zend_cannot_add_element();
30151 				goto assign_dim_error;
30152 			} else if (IS_TMP_VAR == IS_CV) {
30153 				if (Z_REFCOUNTED_P(value)) {
30154 					Z_ADDREF_P(value);
30155 				}
30156 			} else if (IS_TMP_VAR == IS_VAR) {
30157 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
30158 				if (value != free_op_data) {
30159 					if (Z_REFCOUNTED_P(value)) {
30160 						Z_ADDREF_P(value);
30161 					}
30162 					zval_ptr_dtor_nogc(free_op_data);
30163 				}
30164 			} else if (IS_TMP_VAR == IS_CONST) {
30165 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
30166 					Z_ADDREF_P(value);
30167 				}
30168 			}
30169 		} else {
30170 			dim = EX_VAR(opline->op2.var);
30171 			if (IS_CV == IS_CONST) {
30172 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30173 			} else {
30174 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30175 			}
30176 			if (UNEXPECTED(variable_ptr == NULL)) {
30177 				goto assign_dim_error;
30178 			}
30179 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30180 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
30181 		}
30182 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30183 			ZVAL_COPY(EX_VAR(opline->result.var), value);
30184 		}
30185 	} else {
30186 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
30187 			object_ptr = Z_REFVAL_P(object_ptr);
30188 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30189 				goto try_assign_dim_array;
30190 			}
30191 		}
30192 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
30193 			zend_object *obj = Z_OBJ_P(object_ptr);
30194 
30195 			GC_ADDREF(obj);
30196 			dim = EX_VAR(opline->op2.var);
30197 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
30198 				dim = ZVAL_UNDEFINED_OP2();
30199 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30200 				dim++;
30201 			}
30202 
30203 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30204 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
30205 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30206 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
30207 				ZVAL_DEREF(value);
30208 			}
30209 
30210 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
30211 
30212 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30213 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
30214 				zend_objects_store_del(obj);
30215 			}
30216 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
30217 			if (IS_CV == IS_UNUSED) {
30218 				zend_use_new_element_for_string();
30219 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30220 				UNDEF_RESULT();
30221 			} else {
30222 				dim = EX_VAR(opline->op2.var);
30223 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30224 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
30225 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30226 			}
30227 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
30228 			if (Z_ISREF_P(orig_object_ptr)
30229 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
30230 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
30231 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30232 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30233 				UNDEF_RESULT();
30234 			} else {
30235 				ZVAL_ARR(object_ptr, zend_new_array(8));
30236 				goto try_assign_dim_array;
30237 			}
30238 		} else {
30239 			zend_use_scalar_as_array();
30240 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30241 assign_dim_error:
30242 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30243 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30244 				ZVAL_NULL(EX_VAR(opline->result.var));
30245 			}
30246 		}
30247 	}
30248 	if (IS_CV != IS_UNUSED) {
30249 
30250 	}
30251 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30252 	/* assign_dim has two opcodes! */
30253 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30254 }
30255 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30257 {
30258 	USE_OPLINE
30259 	zval *object_ptr, *orig_object_ptr;
30260 	zval *value;
30261 	zval *variable_ptr;
30262 	zval *dim;
30263 
30264 	SAVE_OPLINE();
30265 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30266 
30267 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30268 try_assign_dim_array:
30269 		SEPARATE_ARRAY(object_ptr);
30270 		if (IS_CV == IS_UNUSED) {
30271 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30272 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
30273 				HashTable *ht = Z_ARRVAL_P(object_ptr);
30274 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
30275 					GC_ADDREF(ht);
30276 				}
30277 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30278 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
30279 					zend_array_destroy(ht);
30280 					goto assign_dim_error;
30281 				}
30282 			}
30283 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
30284 				ZVAL_DEREF(value);
30285 			}
30286 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
30287 			if (UNEXPECTED(variable_ptr == NULL)) {
30288 				zend_cannot_add_element();
30289 				goto assign_dim_error;
30290 			} else if (IS_VAR == IS_CV) {
30291 				if (Z_REFCOUNTED_P(value)) {
30292 					Z_ADDREF_P(value);
30293 				}
30294 			} else if (IS_VAR == IS_VAR) {
30295 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
30296 				if (value != free_op_data) {
30297 					if (Z_REFCOUNTED_P(value)) {
30298 						Z_ADDREF_P(value);
30299 					}
30300 					zval_ptr_dtor_nogc(free_op_data);
30301 				}
30302 			} else if (IS_VAR == IS_CONST) {
30303 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
30304 					Z_ADDREF_P(value);
30305 				}
30306 			}
30307 		} else {
30308 			dim = EX_VAR(opline->op2.var);
30309 			if (IS_CV == IS_CONST) {
30310 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30311 			} else {
30312 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30313 			}
30314 			if (UNEXPECTED(variable_ptr == NULL)) {
30315 				goto assign_dim_error;
30316 			}
30317 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30318 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
30319 		}
30320 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30321 			ZVAL_COPY(EX_VAR(opline->result.var), value);
30322 		}
30323 	} else {
30324 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
30325 			object_ptr = Z_REFVAL_P(object_ptr);
30326 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30327 				goto try_assign_dim_array;
30328 			}
30329 		}
30330 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
30331 			zend_object *obj = Z_OBJ_P(object_ptr);
30332 
30333 			GC_ADDREF(obj);
30334 			dim = EX_VAR(opline->op2.var);
30335 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
30336 				dim = ZVAL_UNDEFINED_OP2();
30337 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30338 				dim++;
30339 			}
30340 
30341 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30342 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
30343 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30344 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
30345 				ZVAL_DEREF(value);
30346 			}
30347 
30348 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
30349 
30350 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30351 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
30352 				zend_objects_store_del(obj);
30353 			}
30354 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
30355 			if (IS_CV == IS_UNUSED) {
30356 				zend_use_new_element_for_string();
30357 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30358 				UNDEF_RESULT();
30359 			} else {
30360 				dim = EX_VAR(opline->op2.var);
30361 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30362 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
30363 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30364 			}
30365 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
30366 			if (Z_ISREF_P(orig_object_ptr)
30367 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
30368 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
30369 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30370 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30371 				UNDEF_RESULT();
30372 			} else {
30373 				ZVAL_ARR(object_ptr, zend_new_array(8));
30374 				goto try_assign_dim_array;
30375 			}
30376 		} else {
30377 			zend_use_scalar_as_array();
30378 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30379 assign_dim_error:
30380 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30381 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30382 				ZVAL_NULL(EX_VAR(opline->result.var));
30383 			}
30384 		}
30385 	}
30386 	if (IS_CV != IS_UNUSED) {
30387 
30388 	}
30389 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30390 	/* assign_dim has two opcodes! */
30391 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30392 }
30393 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30395 {
30396 	USE_OPLINE
30397 	zval *object_ptr, *orig_object_ptr;
30398 	zval *value;
30399 	zval *variable_ptr;
30400 	zval *dim;
30401 
30402 	SAVE_OPLINE();
30403 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30404 
30405 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30406 try_assign_dim_array:
30407 		SEPARATE_ARRAY(object_ptr);
30408 		if (IS_CV == IS_UNUSED) {
30409 			value = EX_VAR((opline+1)->op1.var);
30410 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
30411 				HashTable *ht = Z_ARRVAL_P(object_ptr);
30412 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
30413 					GC_ADDREF(ht);
30414 				}
30415 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30416 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
30417 					zend_array_destroy(ht);
30418 					goto assign_dim_error;
30419 				}
30420 			}
30421 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
30422 				ZVAL_DEREF(value);
30423 			}
30424 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
30425 			if (UNEXPECTED(variable_ptr == NULL)) {
30426 				zend_cannot_add_element();
30427 				goto assign_dim_error;
30428 			} else if (IS_CV == IS_CV) {
30429 				if (Z_REFCOUNTED_P(value)) {
30430 					Z_ADDREF_P(value);
30431 				}
30432 			} else if (IS_CV == IS_VAR) {
30433 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
30434 				if (value != free_op_data) {
30435 					if (Z_REFCOUNTED_P(value)) {
30436 						Z_ADDREF_P(value);
30437 					}
30438 					zval_ptr_dtor_nogc(free_op_data);
30439 				}
30440 			} else if (IS_CV == IS_CONST) {
30441 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
30442 					Z_ADDREF_P(value);
30443 				}
30444 			}
30445 		} else {
30446 			dim = EX_VAR(opline->op2.var);
30447 			if (IS_CV == IS_CONST) {
30448 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30449 			} else {
30450 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
30451 			}
30452 			if (UNEXPECTED(variable_ptr == NULL)) {
30453 				goto assign_dim_error;
30454 			}
30455 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
30456 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
30457 		}
30458 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30459 			ZVAL_COPY(EX_VAR(opline->result.var), value);
30460 		}
30461 	} else {
30462 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
30463 			object_ptr = Z_REFVAL_P(object_ptr);
30464 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
30465 				goto try_assign_dim_array;
30466 			}
30467 		}
30468 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
30469 			zend_object *obj = Z_OBJ_P(object_ptr);
30470 
30471 			GC_ADDREF(obj);
30472 			dim = EX_VAR(opline->op2.var);
30473 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
30474 				dim = ZVAL_UNDEFINED_OP2();
30475 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30476 				dim++;
30477 			}
30478 
30479 			value = EX_VAR((opline+1)->op1.var);
30480 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
30481 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
30482 			} else if (IS_CV & (IS_CV|IS_VAR)) {
30483 				ZVAL_DEREF(value);
30484 			}
30485 
30486 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
30487 
30488 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
30489 				zend_objects_store_del(obj);
30490 			}
30491 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
30492 			if (IS_CV == IS_UNUSED) {
30493 				zend_use_new_element_for_string();
30494 
30495 				UNDEF_RESULT();
30496 			} else {
30497 				dim = EX_VAR(opline->op2.var);
30498 				value = EX_VAR((opline+1)->op1.var);
30499 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
30500 
30501 			}
30502 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
30503 			if (Z_ISREF_P(orig_object_ptr)
30504 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
30505 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
30506 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30507 
30508 				UNDEF_RESULT();
30509 			} else {
30510 				ZVAL_ARR(object_ptr, zend_new_array(8));
30511 				goto try_assign_dim_array;
30512 			}
30513 		} else {
30514 			zend_use_scalar_as_array();
30515 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30516 assign_dim_error:
30517 
30518 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30519 				ZVAL_NULL(EX_VAR(opline->result.var));
30520 			}
30521 		}
30522 	}
30523 	if (IS_CV != IS_UNUSED) {
30524 
30525 	}
30526 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30527 	/* assign_dim has two opcodes! */
30528 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30529 }
30530 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30531 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30532 {
30533 	USE_OPLINE
30534 	zval *value;
30535 	zval *variable_ptr;
30536 
30537 	SAVE_OPLINE();
30538 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30539 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30540 
30541 	value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
30542 	if (UNEXPECTED(0)) {
30543 		ZVAL_COPY(EX_VAR(opline->result.var), value);
30544 	}
30545 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30546 	/* zend_assign_to_variable() always takes care of op2, never free it! */
30547 
30548 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30549 }
30550 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30551 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30552 {
30553 	USE_OPLINE
30554 	zval *value;
30555 	zval *variable_ptr;
30556 
30557 	SAVE_OPLINE();
30558 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30559 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30560 
30561 	value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
30562 	if (UNEXPECTED(1)) {
30563 		ZVAL_COPY(EX_VAR(opline->result.var), value);
30564 	}
30565 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30566 	/* zend_assign_to_variable() always takes care of op2, never free it! */
30567 
30568 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30569 }
30570 
ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30572 {
30573 	USE_OPLINE
30574 	zval *variable_ptr;
30575 	zval *value_ptr;
30576 
30577 	SAVE_OPLINE();
30578 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
30579 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30580 
30581 	if (IS_VAR == IS_VAR &&
30582 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
30583 
30584 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
30585 		variable_ptr = &EG(uninitialized_zval);
30586 	} else if (IS_CV == IS_VAR &&
30587 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
30588 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
30589 
30590 		variable_ptr = zend_wrong_assign_to_variable_reference(
30591 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30592 	} else {
30593 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
30594 	}
30595 
30596 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30597 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
30598 	}
30599 
30600 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30601 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30602 }
30603 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30604 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30605 {
30606 	USE_OPLINE
30607 	zval *property, *container, *value_ptr;
30608 
30609 	SAVE_OPLINE();
30610 
30611 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30612 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30613 
30614 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30615 
30616 	if (1) {
30617 		if (IS_VAR == IS_UNUSED) {
30618 			if (IS_CV == IS_CONST) {
30619 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30620 			} else {
30621 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30622 			}
30623 		} else {
30624 			if (IS_CV == IS_CONST) {
30625 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30626 			} else {
30627 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30628 			}
30629 		}
30630 	} else {
30631 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30632 	}
30633 
30634 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30635 
30636 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
30637 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30638 }
30639 
30640 /* 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)30641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30642 {
30643 	USE_OPLINE
30644 	zval *property, *container, *value_ptr;
30645 
30646 	SAVE_OPLINE();
30647 
30648 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30649 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30650 
30651 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
30652 
30653 	if (1) {
30654 		if (IS_VAR == IS_UNUSED) {
30655 			if (IS_CV == IS_CONST) {
30656 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30657 			} else {
30658 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30659 			}
30660 		} else {
30661 			if (IS_CV == IS_CONST) {
30662 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30663 			} else {
30664 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30665 			}
30666 		}
30667 	} else {
30668 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
30669 	}
30670 
30671 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30672 
30673 
30674 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30675 }
30676 
30677 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30678 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30679 {
30680 	USE_OPLINE
30681 	zval *function_name;
30682 	zend_class_entry *ce;
30683 	uint32_t call_info;
30684 	zend_function *fbc;
30685 	zend_execute_data *call;
30686 
30687 	SAVE_OPLINE();
30688 
30689 	if (IS_VAR == IS_CONST) {
30690 		/* no function found. try a static method in class */
30691 		ce = CACHED_PTR(opline->result.num);
30692 		if (UNEXPECTED(ce == NULL)) {
30693 			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);
30694 			if (UNEXPECTED(ce == NULL)) {
30695 
30696 				HANDLE_EXCEPTION();
30697 			}
30698 			if (IS_CV != IS_CONST) {
30699 				CACHE_PTR(opline->result.num, ce);
30700 			}
30701 		}
30702 	} else if (IS_VAR == IS_UNUSED) {
30703 		ce = zend_fetch_class(NULL, opline->op1.num);
30704 		if (UNEXPECTED(ce == NULL)) {
30705 
30706 			HANDLE_EXCEPTION();
30707 		}
30708 	} else {
30709 		ce = Z_CE_P(EX_VAR(opline->op1.var));
30710 	}
30711 
30712 	if (IS_VAR == IS_CONST &&
30713 	    IS_CV == IS_CONST &&
30714 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
30715 		/* nothing to do */
30716 	} else if (IS_VAR != IS_CONST &&
30717 	           IS_CV == IS_CONST &&
30718 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
30719 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
30720 	} else if (IS_CV != IS_UNUSED) {
30721 		function_name = EX_VAR(opline->op2.var);
30722 		if (IS_CV != IS_CONST) {
30723 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
30724 				do {
30725 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
30726 						function_name = Z_REFVAL_P(function_name);
30727 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
30728 							break;
30729 						}
30730 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
30731 						ZVAL_UNDEFINED_OP2();
30732 						if (UNEXPECTED(EG(exception) != NULL)) {
30733 							HANDLE_EXCEPTION();
30734 						}
30735 					}
30736 					zend_throw_error(NULL, "Method name must be a string");
30737 
30738 					HANDLE_EXCEPTION();
30739 				} while (0);
30740 			}
30741 		}
30742 
30743 		if (ce->get_static_method) {
30744 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
30745 		} else {
30746 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
30747 		}
30748 		if (UNEXPECTED(fbc == NULL)) {
30749 			if (EXPECTED(!EG(exception))) {
30750 				zend_undefined_method(ce, Z_STR_P(function_name));
30751 			}
30752 
30753 			HANDLE_EXCEPTION();
30754 		}
30755 		if (IS_CV == IS_CONST &&
30756 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
30757 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
30758 		}
30759 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
30760 			init_func_run_time_cache(&fbc->op_array);
30761 		}
30762 		if (IS_CV != IS_CONST) {
30763 
30764 		}
30765 	} else {
30766 		if (UNEXPECTED(ce->constructor == NULL)) {
30767 			zend_throw_error(NULL, "Cannot call constructor");
30768 			HANDLE_EXCEPTION();
30769 		}
30770 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
30771 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
30772 			HANDLE_EXCEPTION();
30773 		}
30774 		fbc = ce->constructor;
30775 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
30776 			init_func_run_time_cache(&fbc->op_array);
30777 		}
30778 	}
30779 
30780 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
30781 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
30782 			ce = (zend_class_entry*)Z_OBJ(EX(This));
30783 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
30784 		} else {
30785 			zend_non_static_method_call(fbc);
30786 			HANDLE_EXCEPTION();
30787 		}
30788 	} else {
30789 		/* previous opcode is ZEND_FETCH_CLASS */
30790 		if (IS_VAR == IS_UNUSED
30791 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
30792 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
30793 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
30794 				ce = Z_OBJCE(EX(This));
30795 			} else {
30796 				ce = Z_CE(EX(This));
30797 			}
30798 		}
30799 		call_info = ZEND_CALL_NESTED_FUNCTION;
30800 	}
30801 
30802 	call = zend_vm_stack_push_call_frame(call_info,
30803 		fbc, opline->extended_value, ce);
30804 	call->prev_execute_data = EX(call);
30805 	EX(call) = call;
30806 
30807 	ZEND_VM_NEXT_OPCODE();
30808 }
30809 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30810 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30811 {
30812 	USE_OPLINE
30813 	zval *expr_ptr, new_expr;
30814 
30815 	SAVE_OPLINE();
30816 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
30817 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
30818 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30819 		if (Z_ISREF_P(expr_ptr)) {
30820 			Z_ADDREF_P(expr_ptr);
30821 		} else {
30822 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
30823 		}
30824 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30825 	} else {
30826 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30827 		if (IS_VAR == IS_TMP_VAR) {
30828 			/* pass */
30829 		} else if (IS_VAR == IS_CONST) {
30830 			Z_TRY_ADDREF_P(expr_ptr);
30831 		} else if (IS_VAR == IS_CV) {
30832 			ZVAL_DEREF(expr_ptr);
30833 			Z_TRY_ADDREF_P(expr_ptr);
30834 		} else /* if (IS_VAR == IS_VAR) */ {
30835 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
30836 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
30837 
30838 				expr_ptr = Z_REFVAL_P(expr_ptr);
30839 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
30840 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
30841 					expr_ptr = &new_expr;
30842 					efree_size(ref, sizeof(zend_reference));
30843 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
30844 					Z_ADDREF_P(expr_ptr);
30845 				}
30846 			}
30847 		}
30848 	}
30849 
30850 	if (IS_CV != IS_UNUSED) {
30851 		zval *offset = EX_VAR(opline->op2.var);
30852 		zend_string *str;
30853 		zend_ulong hval;
30854 
30855 add_again:
30856 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
30857 			str = Z_STR_P(offset);
30858 			if (IS_CV != IS_CONST) {
30859 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
30860 					goto num_index;
30861 				}
30862 			}
30863 str_index:
30864 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
30865 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
30866 			hval = Z_LVAL_P(offset);
30867 num_index:
30868 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
30869 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
30870 			offset = Z_REFVAL_P(offset);
30871 			goto add_again;
30872 		} else if (Z_TYPE_P(offset) == IS_NULL) {
30873 			str = ZSTR_EMPTY_ALLOC();
30874 			goto str_index;
30875 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
30876 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
30877 			goto num_index;
30878 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
30879 			hval = 0;
30880 			goto num_index;
30881 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
30882 			hval = 1;
30883 			goto num_index;
30884 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
30885 			zend_use_resource_as_offset(offset);
30886 			hval = Z_RES_HANDLE_P(offset);
30887 			goto num_index;
30888 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
30889 			ZVAL_UNDEFINED_OP2();
30890 			str = ZSTR_EMPTY_ALLOC();
30891 			goto str_index;
30892 		} else {
30893 			zend_illegal_offset();
30894 			zval_ptr_dtor_nogc(expr_ptr);
30895 		}
30896 
30897 	} else {
30898 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
30899 			zend_cannot_add_element();
30900 			zval_ptr_dtor_nogc(expr_ptr);
30901 		}
30902 	}
30903 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30904 }
30905 
ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30906 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30907 {
30908 	zval *array;
30909 	uint32_t size;
30910 	USE_OPLINE
30911 
30912 	array = EX_VAR(opline->result.var);
30913 	if (IS_VAR != IS_UNUSED) {
30914 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
30915 		ZVAL_ARR(array, zend_new_array(size));
30916 		/* Explicitly initialize array as not-packed if flag is set */
30917 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
30918 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
30919 		}
30920 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30921 	} else {
30922 		ZVAL_ARR(array, zend_new_array(0));
30923 		ZEND_VM_NEXT_OPCODE();
30924 	}
30925 }
30926 
ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30927 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30928 {
30929 	USE_OPLINE
30930 	zval *container;
30931 	zval *offset;
30932 	zend_ulong hval;
30933 	zend_string *key;
30934 
30935 	SAVE_OPLINE();
30936 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30937 	offset = EX_VAR(opline->op2.var);
30938 
30939 	do {
30940 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
30941 			HashTable *ht;
30942 
30943 unset_dim_array:
30944 			SEPARATE_ARRAY(container);
30945 			ht = Z_ARRVAL_P(container);
30946 offset_again:
30947 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
30948 				key = Z_STR_P(offset);
30949 				if (IS_CV != IS_CONST) {
30950 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
30951 						goto num_index_dim;
30952 					}
30953 				}
30954 str_index_dim:
30955 				if (ht == &EG(symbol_table)) {
30956 					zend_delete_global_variable(key);
30957 				} else {
30958 					zend_hash_del(ht, key);
30959 				}
30960 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
30961 				hval = Z_LVAL_P(offset);
30962 num_index_dim:
30963 				zend_hash_index_del(ht, hval);
30964 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
30965 				offset = Z_REFVAL_P(offset);
30966 				goto offset_again;
30967 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
30968 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
30969 				goto num_index_dim;
30970 			} else if (Z_TYPE_P(offset) == IS_NULL) {
30971 				key = ZSTR_EMPTY_ALLOC();
30972 				goto str_index_dim;
30973 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
30974 				hval = 0;
30975 				goto num_index_dim;
30976 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
30977 				hval = 1;
30978 				goto num_index_dim;
30979 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
30980 				hval = Z_RES_HANDLE_P(offset);
30981 				goto num_index_dim;
30982 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
30983 				ZVAL_UNDEFINED_OP2();
30984 				key = ZSTR_EMPTY_ALLOC();
30985 				goto str_index_dim;
30986 			} else {
30987 				zend_type_error("Illegal offset type in unset");
30988 			}
30989 			break;
30990 		} else if (Z_ISREF_P(container)) {
30991 			container = Z_REFVAL_P(container);
30992 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
30993 				goto unset_dim_array;
30994 			}
30995 		}
30996 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30997 			container = ZVAL_UNDEFINED_OP1();
30998 		}
30999 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
31000 			offset = ZVAL_UNDEFINED_OP2();
31001 		}
31002 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
31003 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
31004 				offset++;
31005 			}
31006 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
31007 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
31008 			zend_throw_error(NULL, "Cannot unset string offsets");
31009 		}
31010 	} while (0);
31011 
31012 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31013 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31014 }
31015 
ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31016 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31017 {
31018 	USE_OPLINE
31019 	zval *container;
31020 	zval *offset;
31021 	zend_string *name, *tmp_name;
31022 
31023 	SAVE_OPLINE();
31024 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31025 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31026 
31027 	do {
31028 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
31029 			if (Z_ISREF_P(container)) {
31030 				container = Z_REFVAL_P(container);
31031 				if (Z_TYPE_P(container) != IS_OBJECT) {
31032 					if (IS_VAR == IS_CV
31033 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31034 						ZVAL_UNDEFINED_OP1();
31035 					}
31036 					break;
31037 				}
31038 			} else {
31039 				break;
31040 			}
31041 		}
31042 		if (IS_CV == IS_CONST) {
31043 			name = Z_STR_P(offset);
31044 		} else {
31045 			name = zval_try_get_tmp_string(offset, &tmp_name);
31046 			if (UNEXPECTED(!name)) {
31047 				break;
31048 			}
31049 		}
31050 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
31051 		if (IS_CV != IS_CONST) {
31052 			zend_tmp_string_release(tmp_name);
31053 		}
31054 	} while (0);
31055 
31056 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31057 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31058 }
31059 
ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31061 {
31062 	USE_OPLINE
31063 
31064 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
31065 
31066 	SAVE_OPLINE();
31067 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
31068 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31069 	}
31070 
31071 	/* Destroy the previously yielded value */
31072 	zval_ptr_dtor(&generator->value);
31073 
31074 	/* Destroy the previously yielded key */
31075 	zval_ptr_dtor(&generator->key);
31076 
31077 	/* Set the new yielded value */
31078 	if (IS_VAR != IS_UNUSED) {
31079 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
31080 			/* Constants and temporary variables aren't yieldable by reference,
31081 			 * but we still allow them with a notice. */
31082 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
31083 				zval *value;
31084 
31085 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
31086 
31087 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31088 				ZVAL_COPY_VALUE(&generator->value, value);
31089 				if (IS_VAR == IS_CONST) {
31090 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
31091 						Z_ADDREF(generator->value);
31092 					}
31093 				}
31094 			} else {
31095 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31096 
31097 				/* If a function call result is yielded and the function did
31098 				 * not return by reference we throw a notice. */
31099 				do {
31100 					if (IS_VAR == IS_VAR) {
31101 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
31102 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
31103 						 && !Z_ISREF_P(value_ptr)) {
31104 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
31105 							ZVAL_COPY(&generator->value, value_ptr);
31106 							break;
31107 						}
31108 					}
31109 					if (Z_ISREF_P(value_ptr)) {
31110 						Z_ADDREF_P(value_ptr);
31111 					} else {
31112 						ZVAL_MAKE_REF_EX(value_ptr, 2);
31113 					}
31114 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
31115 				} while (0);
31116 
31117 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31118 			}
31119 		} else {
31120 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31121 
31122 			/* Consts, temporary variables and references need copying */
31123 			if (IS_VAR == IS_CONST) {
31124 				ZVAL_COPY_VALUE(&generator->value, value);
31125 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
31126 					Z_ADDREF(generator->value);
31127 				}
31128 			} else if (IS_VAR == IS_TMP_VAR) {
31129 				ZVAL_COPY_VALUE(&generator->value, value);
31130             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
31131 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
31132 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31133 			} else {
31134 				ZVAL_COPY_VALUE(&generator->value, value);
31135 				if (IS_VAR == IS_CV) {
31136 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
31137 				}
31138 			}
31139 		}
31140 	} else {
31141 		/* If no value was specified yield null */
31142 		ZVAL_NULL(&generator->value);
31143 	}
31144 
31145 	/* Set the new yielded key */
31146 	if (IS_CV != IS_UNUSED) {
31147 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31148 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
31149 			key = Z_REFVAL_P(key);
31150 		}
31151 		ZVAL_COPY(&generator->key, key);
31152 
31153 		if (Z_TYPE(generator->key) == IS_LONG
31154 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
31155 		) {
31156 			generator->largest_used_integer_key = Z_LVAL(generator->key);
31157 		}
31158 	} else {
31159 		/* If no key was specified we use auto-increment keys */
31160 		generator->largest_used_integer_key++;
31161 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
31162 	}
31163 
31164 	if (RETURN_VALUE_USED(opline)) {
31165 		/* If the return value of yield is used set the send
31166 		 * target and initialize it to NULL */
31167 		generator->send_target = EX_VAR(opline->result.var);
31168 		ZVAL_NULL(generator->send_target);
31169 	} else {
31170 		generator->send_target = NULL;
31171 	}
31172 
31173 	/* We increment to the next op, so we are at the correct position when the
31174 	 * generator is resumed. */
31175 	ZEND_VM_INC_OPCODE();
31176 
31177 	/* The GOTO VM uses a local opline variable. We need to set the opline
31178 	 * variable in execute_data so we don't resume at an old position. */
31179 	SAVE_OPLINE();
31180 
31181 	ZEND_VM_RETURN();
31182 }
31183 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31184 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)
31185 {
31186 	USE_OPLINE
31187 	zval *array;
31188 	zval *value, *variable_ptr;
31189 	uint32_t value_type;
31190 	HashTable *fe_ht;
31191 	HashPosition pos;
31192 	Bucket *p;
31193 
31194 	array = EX_VAR(opline->op1.var);
31195 	SAVE_OPLINE();
31196 	fe_ht = Z_ARRVAL_P(array);
31197 	pos = Z_FE_POS_P(array);
31198 	p = fe_ht->arData + pos;
31199 	while (1) {
31200 		if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
31201 			/* reached end of iteration */
31202 			ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
31203 			ZEND_VM_CONTINUE();
31204 		}
31205 		pos++;
31206 		value = &p->val;
31207 		value_type = Z_TYPE_INFO_P(value);
31208 		if (EXPECTED(value_type != IS_UNDEF)) {
31209 			if (UNEXPECTED(value_type == IS_INDIRECT)) {
31210 				value = Z_INDIRECT_P(value);
31211 				value_type = Z_TYPE_INFO_P(value);
31212 				if (EXPECTED(value_type != IS_UNDEF)) {
31213 					break;
31214 				}
31215 			} else {
31216 				break;
31217 			}
31218 		}
31219 		p++;
31220 	}
31221 	Z_FE_POS_P(array) = pos;
31222 	if (0) {
31223 		if (!p->key) {
31224 			ZVAL_LONG(EX_VAR(opline->result.var), p->h);
31225 		} else {
31226 			ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
31227 		}
31228 	}
31229 
31230 	variable_ptr = EX_VAR(opline->op2.var);
31231 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
31232 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31233 }
31234 
31235 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31236 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)
31237 {
31238 	USE_OPLINE
31239 	zval *array;
31240 	zval *value, *variable_ptr;
31241 	uint32_t value_type;
31242 	HashTable *fe_ht;
31243 	HashPosition pos;
31244 	Bucket *p;
31245 
31246 	array = EX_VAR(opline->op1.var);
31247 	SAVE_OPLINE();
31248 	fe_ht = Z_ARRVAL_P(array);
31249 	pos = Z_FE_POS_P(array);
31250 	p = fe_ht->arData + pos;
31251 	while (1) {
31252 		if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
31253 			/* reached end of iteration */
31254 			ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
31255 			ZEND_VM_CONTINUE();
31256 		}
31257 		pos++;
31258 		value = &p->val;
31259 		value_type = Z_TYPE_INFO_P(value);
31260 		if (EXPECTED(value_type != IS_UNDEF)) {
31261 			if (UNEXPECTED(value_type == IS_INDIRECT)) {
31262 				value = Z_INDIRECT_P(value);
31263 				value_type = Z_TYPE_INFO_P(value);
31264 				if (EXPECTED(value_type != IS_UNDEF)) {
31265 					break;
31266 				}
31267 			} else {
31268 				break;
31269 			}
31270 		}
31271 		p++;
31272 	}
31273 	Z_FE_POS_P(array) = pos;
31274 	if (1) {
31275 		if (!p->key) {
31276 			ZVAL_LONG(EX_VAR(opline->result.var), p->h);
31277 		} else {
31278 			ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
31279 		}
31280 	}
31281 
31282 	variable_ptr = EX_VAR(opline->op2.var);
31283 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
31284 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31285 }
31286 
31287 
ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31288 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31289 {
31290 	USE_OPLINE
31291 	zval *obj;
31292 	zend_object *zobj;
31293 	zend_class_entry *ce, *scope;
31294 	zend_function *clone;
31295 	zend_object_clone_obj_t clone_call;
31296 
31297 	SAVE_OPLINE();
31298 	obj = &EX(This);
31299 
31300 	do {
31301 		if (IS_UNUSED == IS_CONST ||
31302 		    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
31303 		    if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
31304 				obj = Z_REFVAL_P(obj);
31305 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
31306 					break;
31307 				}
31308 			}
31309 			ZVAL_UNDEF(EX_VAR(opline->result.var));
31310 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
31311 				ZVAL_UNDEFINED_OP1();
31312 				if (UNEXPECTED(EG(exception) != NULL)) {
31313 					HANDLE_EXCEPTION();
31314 				}
31315 			}
31316 			zend_throw_error(NULL, "__clone method called on non-object");
31317 
31318 			HANDLE_EXCEPTION();
31319 		}
31320 	} while (0);
31321 
31322 	zobj = Z_OBJ_P(obj);
31323 	ce = zobj->ce;
31324 	clone = ce->clone;
31325 	clone_call = zobj->handlers->clone_obj;
31326 	if (UNEXPECTED(clone_call == NULL)) {
31327 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
31328 
31329 		ZVAL_UNDEF(EX_VAR(opline->result.var));
31330 		HANDLE_EXCEPTION();
31331 	}
31332 
31333 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
31334 		scope = EX(func)->op_array.scope;
31335 		if (clone->common.scope != scope) {
31336 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
31337 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
31338 				zend_wrong_clone_call(clone, scope);
31339 
31340 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31341 				HANDLE_EXCEPTION();
31342 			}
31343 		}
31344 	}
31345 
31346 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
31347 
31348 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31349 }
31350 
ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31351 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31352 {
31353 	uint32_t fetch_type;
31354 	zend_class_entry *called_scope, *scope;
31355 	USE_OPLINE
31356 
31357 	if (IS_UNUSED != IS_UNUSED) {
31358 		SAVE_OPLINE();
31359 		zval *op = NULL;
31360 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
31361 			ZVAL_DEREF(op);
31362 			if (Z_TYPE_P(op) != IS_OBJECT) {
31363 				zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
31364 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31365 
31366 				HANDLE_EXCEPTION();
31367 			}
31368 		}
31369 
31370 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
31371 
31372 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31373 	}
31374 
31375 	fetch_type = opline->op1.num;
31376 	scope = EX(func)->op_array.scope;
31377 	if (UNEXPECTED(scope == NULL)) {
31378 		SAVE_OPLINE();
31379 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
31380 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
31381 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
31382 		ZVAL_UNDEF(EX_VAR(opline->result.var));
31383 		HANDLE_EXCEPTION();
31384 	}
31385 
31386 	switch (fetch_type) {
31387 		case ZEND_FETCH_CLASS_SELF:
31388 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
31389 			break;
31390 		case ZEND_FETCH_CLASS_PARENT:
31391 			if (UNEXPECTED(scope->parent == NULL)) {
31392 				SAVE_OPLINE();
31393 				zend_throw_error(NULL,
31394 					"Cannot use \"parent\" when current class scope has no parent");
31395 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31396 				HANDLE_EXCEPTION();
31397 			}
31398 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
31399 			break;
31400 		case ZEND_FETCH_CLASS_STATIC:
31401 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
31402 				called_scope = Z_OBJCE(EX(This));
31403 			} else {
31404 				called_scope = Z_CE(EX(This));
31405 			}
31406 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
31407 			break;
31408 		EMPTY_SWITCH_DEFAULT_CASE()
31409 	}
31410 	ZEND_VM_NEXT_OPCODE();
31411 }
31412 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31413 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31414 {
31415 	USE_OPLINE
31416 	zval *object;
31417 	zval *property;
31418 	zval *value;
31419 	zval *zptr;
31420 	void **cache_slot;
31421 	zend_property_info *prop_info;
31422 	zend_object *zobj;
31423 	zend_string *name, *tmp_name;
31424 
31425 	SAVE_OPLINE();
31426 	object = &EX(This);
31427 	property = RT_CONSTANT(opline, opline->op2);
31428 
31429 	do {
31430 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
31431 
31432 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31433 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31434 				object = Z_REFVAL_P(object);
31435 				goto assign_op_object;
31436 			}
31437 			if (IS_UNUSED == IS_CV
31438 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31439 				ZVAL_UNDEFINED_OP1();
31440 			}
31441 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
31442 			break;
31443 		}
31444 
31445 assign_op_object:
31446 		/* here we are sure we are dealing with an object */
31447 		zobj = Z_OBJ_P(object);
31448 		if (IS_CONST == IS_CONST) {
31449 			name = Z_STR_P(property);
31450 		} else {
31451 			name = zval_try_get_tmp_string(property, &tmp_name);
31452 			if (UNEXPECTED(!name)) {
31453 				UNDEF_RESULT();
31454 				break;
31455 			}
31456 		}
31457 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
31458 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
31459 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
31460 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31461 					ZVAL_NULL(EX_VAR(opline->result.var));
31462 				}
31463 			} else {
31464 				zval *orig_zptr = zptr;
31465 				zend_reference *ref;
31466 
31467 				do {
31468 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
31469 						ref = Z_REF_P(zptr);
31470 						zptr = Z_REFVAL_P(zptr);
31471 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
31472 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
31473 							break;
31474 						}
31475 					}
31476 
31477 					if (IS_CONST == IS_CONST) {
31478 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
31479 					} else {
31480 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
31481 					}
31482 					if (UNEXPECTED(prop_info)) {
31483 						/* special case for typed properties */
31484 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
31485 					} else {
31486 						zend_binary_op(zptr, zptr, value OPLINE_CC);
31487 					}
31488 				} while (0);
31489 
31490 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31491 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
31492 				}
31493 			}
31494 		} else {
31495 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
31496 		}
31497 		if (IS_CONST != IS_CONST) {
31498 			zend_tmp_string_release(tmp_name);
31499 		}
31500 	} while (0);
31501 
31502 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
31503 
31504 
31505 	/* assign_obj has two opcodes! */
31506 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31507 }
31508 
31509 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31510 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31511 {
31512 	USE_OPLINE
31513 	zval *object;
31514 	zval *property;
31515 	zval *zptr;
31516 	void **cache_slot;
31517 	zend_property_info *prop_info;
31518 	zend_object *zobj;
31519 	zend_string *name, *tmp_name;
31520 
31521 	SAVE_OPLINE();
31522 	object = &EX(This);
31523 	property = RT_CONSTANT(opline, opline->op2);
31524 
31525 	do {
31526 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31527 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31528 				object = Z_REFVAL_P(object);
31529 				goto pre_incdec_object;
31530 			}
31531 			if (IS_UNUSED == IS_CV
31532 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31533 				ZVAL_UNDEFINED_OP1();
31534 			}
31535 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
31536 			break;
31537 		}
31538 
31539 pre_incdec_object:
31540 		/* here we are sure we are dealing with an object */
31541 		zobj = Z_OBJ_P(object);
31542 		if (IS_CONST == IS_CONST) {
31543 			name = Z_STR_P(property);
31544 		} else {
31545 			name = zval_try_get_tmp_string(property, &tmp_name);
31546 			if (UNEXPECTED(!name)) {
31547 				UNDEF_RESULT();
31548 				break;
31549 			}
31550 		}
31551 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
31552 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
31553 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
31554 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31555 					ZVAL_NULL(EX_VAR(opline->result.var));
31556 				}
31557 			} else {
31558 				if (IS_CONST == IS_CONST) {
31559 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
31560 				} else {
31561 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
31562 				}
31563 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
31564 			}
31565 		} else {
31566 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
31567 		}
31568 		if (IS_CONST != IS_CONST) {
31569 			zend_tmp_string_release(tmp_name);
31570 		}
31571 	} while (0);
31572 
31573 
31574 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31575 }
31576 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31577 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31578 {
31579 	USE_OPLINE
31580 	zval *object;
31581 	zval *property;
31582 	zval *zptr;
31583 	void **cache_slot;
31584 	zend_property_info *prop_info;
31585 	zend_object *zobj;
31586 	zend_string *name, *tmp_name;
31587 
31588 	SAVE_OPLINE();
31589 	object = &EX(This);
31590 	property = RT_CONSTANT(opline, opline->op2);
31591 
31592 	do {
31593 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31594 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31595 				object = Z_REFVAL_P(object);
31596 				goto post_incdec_object;
31597 			}
31598 			if (IS_UNUSED == IS_CV
31599 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31600 				ZVAL_UNDEFINED_OP1();
31601 			}
31602 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
31603 			break;
31604 		}
31605 
31606 post_incdec_object:
31607 		/* here we are sure we are dealing with an object */
31608 		zobj = Z_OBJ_P(object);
31609 		if (IS_CONST == IS_CONST) {
31610 			name = Z_STR_P(property);
31611 		} else {
31612 			name = zval_try_get_tmp_string(property, &tmp_name);
31613 			if (UNEXPECTED(!name)) {
31614 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31615 				break;
31616 			}
31617 		}
31618 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
31619 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
31620 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
31621 				ZVAL_NULL(EX_VAR(opline->result.var));
31622 			} else {
31623 				if (IS_CONST == IS_CONST) {
31624 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
31625 				} else {
31626 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
31627 				}
31628 
31629 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
31630 			}
31631 		} else {
31632 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
31633 		}
31634 		if (IS_CONST != IS_CONST) {
31635 			zend_tmp_string_release(tmp_name);
31636 		}
31637 	} while (0);
31638 
31639 
31640 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31641 }
31642 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31643 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31644 {
31645 	USE_OPLINE
31646 	zval *container;
31647 	zval *offset;
31648 	void **cache_slot = NULL;
31649 
31650 	SAVE_OPLINE();
31651 	container = &EX(This);
31652 	offset = RT_CONSTANT(opline, opline->op2);
31653 
31654 	if (IS_UNUSED == IS_CONST ||
31655 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
31656 	    do {
31657 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
31658 				container = Z_REFVAL_P(container);
31659 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
31660 					break;
31661 				}
31662 			}
31663 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31664 				ZVAL_UNDEFINED_OP1();
31665 			}
31666 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
31667 				ZVAL_UNDEFINED_OP2();
31668 			}
31669 			zend_wrong_property_read(container, offset);
31670 			ZVAL_NULL(EX_VAR(opline->result.var));
31671 			goto fetch_obj_r_finish;
31672 		} while (0);
31673 	}
31674 
31675 	/* here we are sure we are dealing with an object */
31676 	do {
31677 		zend_object *zobj = Z_OBJ_P(container);
31678 		zend_string *name, *tmp_name;
31679 		zval *retval;
31680 
31681 		if (IS_CONST == IS_CONST) {
31682 			name = Z_STR_P(offset);
31683 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
31684 
31685 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
31686 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31687 
31688 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31689 					retval = OBJ_PROP(zobj, prop_offset);
31690 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
31691 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
31692 							goto fetch_obj_r_copy;
31693 						} else {
31694 fetch_obj_r_fast_copy:
31695 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
31696 							ZEND_VM_NEXT_OPCODE();
31697 						}
31698 					}
31699 				} else if (EXPECTED(zobj->properties != NULL)) {
31700 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
31701 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
31702 
31703 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
31704 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
31705 
31706 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
31707 						        (EXPECTED(p->key == name) ||
31708 						         (EXPECTED(p->h == ZSTR_H(name)) &&
31709 						          EXPECTED(p->key != NULL) &&
31710 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
31711 								retval = &p->val;
31712 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
31713 									goto fetch_obj_r_copy;
31714 								} else {
31715 									goto fetch_obj_r_fast_copy;
31716 								}
31717 							}
31718 						}
31719 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
31720 					}
31721 					retval = zend_hash_find_ex(zobj->properties, name, 1);
31722 					if (EXPECTED(retval)) {
31723 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
31724 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
31725 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
31726 							goto fetch_obj_r_copy;
31727 						} else {
31728 							goto fetch_obj_r_fast_copy;
31729 						}
31730 					}
31731 				}
31732 			}
31733 		} else {
31734 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
31735 				ZVAL_UNDEFINED_OP2();
31736 			}
31737 			name = zval_try_get_tmp_string(offset, &tmp_name);
31738 			if (UNEXPECTED(!name)) {
31739 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31740 				break;
31741 			}
31742 		}
31743 
31744 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
31745 
31746 		if (IS_CONST != IS_CONST) {
31747 			zend_tmp_string_release(tmp_name);
31748 		}
31749 
31750 		if (retval != EX_VAR(opline->result.var)) {
31751 fetch_obj_r_copy:
31752 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
31753 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
31754 			zend_unwrap_reference(retval);
31755 		}
31756 	} while (0);
31757 
31758 fetch_obj_r_finish:
31759 
31760 
31761 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31762 }
31763 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31764 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31765 {
31766 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31767 }
31768 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31770 {
31771 	USE_OPLINE
31772 	zval *property, *container, *result;
31773 
31774 	SAVE_OPLINE();
31775 
31776 	container = &EX(This);
31777 	property = RT_CONSTANT(opline, opline->op2);
31778 	result = EX_VAR(opline->result.var);
31779 	zend_fetch_property_address(
31780 		result, container, IS_UNUSED, property, IS_CONST,
31781 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
31782 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
31783 
31784 	if (IS_UNUSED == IS_VAR) {
31785 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
31786 	}
31787 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31788 }
31789 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31790 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31791 {
31792 	USE_OPLINE
31793 	zval *property, *container, *result;
31794 
31795 	SAVE_OPLINE();
31796 	container = &EX(This);
31797 	property = RT_CONSTANT(opline, opline->op2);
31798 	result = EX_VAR(opline->result.var);
31799 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
31800 
31801 	if (IS_UNUSED == IS_VAR) {
31802 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
31803 	}
31804 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31805 }
31806 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31807 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31808 {
31809 	USE_OPLINE
31810 	zval *container;
31811 	zval *offset;
31812 	void **cache_slot = NULL;
31813 
31814 	SAVE_OPLINE();
31815 	container = &EX(This);
31816 	offset = RT_CONSTANT(opline, opline->op2);
31817 
31818 	if (IS_UNUSED == IS_CONST ||
31819 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
31820 		do {
31821 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
31822 				container = Z_REFVAL_P(container);
31823 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
31824 					break;
31825 				}
31826 			}
31827 			ZVAL_NULL(EX_VAR(opline->result.var));
31828 			goto fetch_obj_is_finish;
31829 		} while (0);
31830 	}
31831 
31832 	/* here we are sure we are dealing with an object */
31833 	do {
31834 		zend_object *zobj = Z_OBJ_P(container);
31835 		zend_string *name, *tmp_name;
31836 		zval *retval;
31837 
31838 		if (IS_CONST == IS_CONST) {
31839 			name = Z_STR_P(offset);
31840 			cache_slot = CACHE_ADDR(opline->extended_value);
31841 
31842 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
31843 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31844 
31845 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31846 					retval = OBJ_PROP(zobj, prop_offset);
31847 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
31848 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
31849 							goto fetch_obj_is_copy;
31850 						} else {
31851 fetch_obj_is_fast_copy:
31852 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
31853 							ZEND_VM_NEXT_OPCODE();
31854 						}
31855 					}
31856 				} else if (EXPECTED(zobj->properties != NULL)) {
31857 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
31858 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
31859 
31860 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
31861 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
31862 
31863 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
31864 						        (EXPECTED(p->key == name) ||
31865 						         (EXPECTED(p->h == ZSTR_H(name)) &&
31866 						          EXPECTED(p->key != NULL) &&
31867 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
31868 								retval = &p->val;
31869 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
31870 									goto fetch_obj_is_copy;
31871 								} else {
31872 									goto fetch_obj_is_fast_copy;
31873 								}
31874 							}
31875 						}
31876 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
31877 					}
31878 					retval = zend_hash_find_ex(zobj->properties, name, 1);
31879 					if (EXPECTED(retval)) {
31880 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
31881 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
31882 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
31883 							goto fetch_obj_is_copy;
31884 						} else {
31885 							goto fetch_obj_is_fast_copy;
31886 						}
31887 					}
31888 				}
31889 			}
31890 		} else {
31891 			name = zval_try_get_tmp_string(offset, &tmp_name);
31892 			if (UNEXPECTED(!name)) {
31893 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31894 				break;
31895 			}
31896 		}
31897 
31898 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
31899 
31900 		if (IS_CONST != IS_CONST) {
31901 			zend_tmp_string_release(tmp_name);
31902 		}
31903 
31904 		if (retval != EX_VAR(opline->result.var)) {
31905 fetch_obj_is_copy:
31906 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
31907 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
31908 			zend_unwrap_reference(retval);
31909 		}
31910 	} while (0);
31911 
31912 fetch_obj_is_finish:
31913 
31914 
31915 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31916 }
31917 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31918 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31919 {
31920 #if 0
31921 	USE_OPLINE
31922 #endif
31923 
31924 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
31925 		/* Behave like FETCH_OBJ_W */
31926 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
31927 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31928 		}
31929 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31930 	} else {
31931 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31932 	}
31933 }
31934 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31935 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31936 {
31937 	USE_OPLINE
31938 	zval *container, *property, *result;
31939 
31940 	SAVE_OPLINE();
31941 	container = &EX(This);
31942 	property = RT_CONSTANT(opline, opline->op2);
31943 	result = EX_VAR(opline->result.var);
31944 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
31945 
31946 	if (IS_UNUSED == IS_VAR) {
31947 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
31948 	}
31949 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31950 }
31951 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31952 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31953 {
31954 	USE_OPLINE
31955 	zval *object, *property, *value, tmp;
31956 	zend_object *zobj;
31957 	zend_string *name, *tmp_name;
31958 
31959 	SAVE_OPLINE();
31960 	object = &EX(This);
31961 	property = RT_CONSTANT(opline, opline->op2);
31962 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
31963 
31964 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31965 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31966 			object = Z_REFVAL_P(object);
31967 			goto assign_object;
31968 		}
31969 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
31970 		value = &EG(uninitialized_zval);
31971 		goto free_and_exit_assign_obj;
31972 	}
31973 
31974 assign_object:
31975 	zobj = Z_OBJ_P(object);
31976 	if (IS_CONST == IS_CONST &&
31977 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
31978 		void **cache_slot = CACHE_ADDR(opline->extended_value);
31979 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31980 		zend_object *zobj = Z_OBJ_P(object);
31981 		zval *property_val;
31982 
31983 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31984 			property_val = OBJ_PROP(zobj, prop_offset);
31985 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
31986 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
31987 
31988 				if (UNEXPECTED(prop_info != NULL)) {
31989 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
31990 					goto free_and_exit_assign_obj;
31991 				} else {
31992 fast_assign_obj:
31993 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
31994 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31995 						ZVAL_COPY(EX_VAR(opline->result.var), value);
31996 					}
31997 					goto exit_assign_obj;
31998 				}
31999 			}
32000 		} else {
32001 			if (EXPECTED(zobj->properties != NULL)) {
32002 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32003 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32004 						GC_DELREF(zobj->properties);
32005 					}
32006 					zobj->properties = zend_array_dup(zobj->properties);
32007 				}
32008 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
32009 				if (property_val) {
32010 					goto fast_assign_obj;
32011 				}
32012 			}
32013 
32014 			if (!zobj->ce->__set) {
32015 
32016 				if (EXPECTED(zobj->properties == NULL)) {
32017 					rebuild_object_properties(zobj);
32018 				}
32019 				if (IS_CONST == IS_CONST) {
32020 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32021 						Z_ADDREF_P(value);
32022 					}
32023 				} else if (IS_CONST != IS_TMP_VAR) {
32024 					if (Z_ISREF_P(value)) {
32025 						if (IS_CONST == IS_VAR) {
32026 							zend_reference *ref = Z_REF_P(value);
32027 							if (GC_DELREF(ref) == 0) {
32028 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32029 								efree_size(ref, sizeof(zend_reference));
32030 								value = &tmp;
32031 							} else {
32032 								value = Z_REFVAL_P(value);
32033 								Z_TRY_ADDREF_P(value);
32034 							}
32035 						} else {
32036 							value = Z_REFVAL_P(value);
32037 							Z_TRY_ADDREF_P(value);
32038 						}
32039 					} else if (IS_CONST == IS_CV) {
32040 						Z_TRY_ADDREF_P(value);
32041 					}
32042 				}
32043 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
32044 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32045 					ZVAL_COPY(EX_VAR(opline->result.var), value);
32046 				}
32047 				goto exit_assign_obj;
32048 			}
32049 		}
32050 	}
32051 
32052 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
32053 		ZVAL_DEREF(value);
32054 	}
32055 
32056 	if (IS_CONST == IS_CONST) {
32057 		name = Z_STR_P(property);
32058 	} else {
32059 		name = zval_try_get_tmp_string(property, &tmp_name);
32060 		if (UNEXPECTED(!name)) {
32061 
32062 			UNDEF_RESULT();
32063 			goto exit_assign_obj;
32064 		}
32065 	}
32066 
32067 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
32068 
32069 	if (IS_CONST != IS_CONST) {
32070 		zend_tmp_string_release(tmp_name);
32071 	}
32072 
32073 free_and_exit_assign_obj:
32074 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32075 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
32076 	}
32077 
32078 exit_assign_obj:
32079 
32080 
32081 	/* assign_obj has two opcodes! */
32082 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32083 }
32084 
32085 /* 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)32086 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32087 {
32088 	USE_OPLINE
32089 	zval *object, *property, *value, tmp;
32090 	zend_object *zobj;
32091 	zend_string *name, *tmp_name;
32092 
32093 	SAVE_OPLINE();
32094 	object = &EX(This);
32095 	property = RT_CONSTANT(opline, opline->op2);
32096 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
32097 
32098 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32099 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32100 			object = Z_REFVAL_P(object);
32101 			goto assign_object;
32102 		}
32103 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
32104 		value = &EG(uninitialized_zval);
32105 		goto free_and_exit_assign_obj;
32106 	}
32107 
32108 assign_object:
32109 	zobj = Z_OBJ_P(object);
32110 	if (IS_CONST == IS_CONST &&
32111 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
32112 		void **cache_slot = CACHE_ADDR(opline->extended_value);
32113 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32114 		zend_object *zobj = Z_OBJ_P(object);
32115 		zval *property_val;
32116 
32117 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32118 			property_val = OBJ_PROP(zobj, prop_offset);
32119 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
32120 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
32121 
32122 				if (UNEXPECTED(prop_info != NULL)) {
32123 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
32124 					goto free_and_exit_assign_obj;
32125 				} else {
32126 fast_assign_obj:
32127 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
32128 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32129 						ZVAL_COPY(EX_VAR(opline->result.var), value);
32130 					}
32131 					goto exit_assign_obj;
32132 				}
32133 			}
32134 		} else {
32135 			if (EXPECTED(zobj->properties != NULL)) {
32136 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32137 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32138 						GC_DELREF(zobj->properties);
32139 					}
32140 					zobj->properties = zend_array_dup(zobj->properties);
32141 				}
32142 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
32143 				if (property_val) {
32144 					goto fast_assign_obj;
32145 				}
32146 			}
32147 
32148 			if (!zobj->ce->__set) {
32149 
32150 				if (EXPECTED(zobj->properties == NULL)) {
32151 					rebuild_object_properties(zobj);
32152 				}
32153 				if (IS_TMP_VAR == IS_CONST) {
32154 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32155 						Z_ADDREF_P(value);
32156 					}
32157 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
32158 					if (Z_ISREF_P(value)) {
32159 						if (IS_TMP_VAR == IS_VAR) {
32160 							zend_reference *ref = Z_REF_P(value);
32161 							if (GC_DELREF(ref) == 0) {
32162 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32163 								efree_size(ref, sizeof(zend_reference));
32164 								value = &tmp;
32165 							} else {
32166 								value = Z_REFVAL_P(value);
32167 								Z_TRY_ADDREF_P(value);
32168 							}
32169 						} else {
32170 							value = Z_REFVAL_P(value);
32171 							Z_TRY_ADDREF_P(value);
32172 						}
32173 					} else if (IS_TMP_VAR == IS_CV) {
32174 						Z_TRY_ADDREF_P(value);
32175 					}
32176 				}
32177 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
32178 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32179 					ZVAL_COPY(EX_VAR(opline->result.var), value);
32180 				}
32181 				goto exit_assign_obj;
32182 			}
32183 		}
32184 	}
32185 
32186 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
32187 		ZVAL_DEREF(value);
32188 	}
32189 
32190 	if (IS_CONST == IS_CONST) {
32191 		name = Z_STR_P(property);
32192 	} else {
32193 		name = zval_try_get_tmp_string(property, &tmp_name);
32194 		if (UNEXPECTED(!name)) {
32195 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
32196 			UNDEF_RESULT();
32197 			goto exit_assign_obj;
32198 		}
32199 	}
32200 
32201 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
32202 
32203 	if (IS_CONST != IS_CONST) {
32204 		zend_tmp_string_release(tmp_name);
32205 	}
32206 
32207 free_and_exit_assign_obj:
32208 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32209 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
32210 	}
32211 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
32212 exit_assign_obj:
32213 
32214 
32215 	/* assign_obj has two opcodes! */
32216 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32217 }
32218 
32219 /* 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)32220 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32221 {
32222 	USE_OPLINE
32223 	zval *object, *property, *value, tmp;
32224 	zend_object *zobj;
32225 	zend_string *name, *tmp_name;
32226 
32227 	SAVE_OPLINE();
32228 	object = &EX(This);
32229 	property = RT_CONSTANT(opline, opline->op2);
32230 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
32231 
32232 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32233 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32234 			object = Z_REFVAL_P(object);
32235 			goto assign_object;
32236 		}
32237 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
32238 		value = &EG(uninitialized_zval);
32239 		goto free_and_exit_assign_obj;
32240 	}
32241 
32242 assign_object:
32243 	zobj = Z_OBJ_P(object);
32244 	if (IS_CONST == IS_CONST &&
32245 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
32246 		void **cache_slot = CACHE_ADDR(opline->extended_value);
32247 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32248 		zend_object *zobj = Z_OBJ_P(object);
32249 		zval *property_val;
32250 
32251 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32252 			property_val = OBJ_PROP(zobj, prop_offset);
32253 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
32254 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
32255 
32256 				if (UNEXPECTED(prop_info != NULL)) {
32257 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
32258 					goto free_and_exit_assign_obj;
32259 				} else {
32260 fast_assign_obj:
32261 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
32262 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32263 						ZVAL_COPY(EX_VAR(opline->result.var), value);
32264 					}
32265 					goto exit_assign_obj;
32266 				}
32267 			}
32268 		} else {
32269 			if (EXPECTED(zobj->properties != NULL)) {
32270 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32271 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32272 						GC_DELREF(zobj->properties);
32273 					}
32274 					zobj->properties = zend_array_dup(zobj->properties);
32275 				}
32276 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
32277 				if (property_val) {
32278 					goto fast_assign_obj;
32279 				}
32280 			}
32281 
32282 			if (!zobj->ce->__set) {
32283 
32284 				if (EXPECTED(zobj->properties == NULL)) {
32285 					rebuild_object_properties(zobj);
32286 				}
32287 				if (IS_VAR == IS_CONST) {
32288 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32289 						Z_ADDREF_P(value);
32290 					}
32291 				} else if (IS_VAR != IS_TMP_VAR) {
32292 					if (Z_ISREF_P(value)) {
32293 						if (IS_VAR == IS_VAR) {
32294 							zend_reference *ref = Z_REF_P(value);
32295 							if (GC_DELREF(ref) == 0) {
32296 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32297 								efree_size(ref, sizeof(zend_reference));
32298 								value = &tmp;
32299 							} else {
32300 								value = Z_REFVAL_P(value);
32301 								Z_TRY_ADDREF_P(value);
32302 							}
32303 						} else {
32304 							value = Z_REFVAL_P(value);
32305 							Z_TRY_ADDREF_P(value);
32306 						}
32307 					} else if (IS_VAR == IS_CV) {
32308 						Z_TRY_ADDREF_P(value);
32309 					}
32310 				}
32311 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
32312 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32313 					ZVAL_COPY(EX_VAR(opline->result.var), value);
32314 				}
32315 				goto exit_assign_obj;
32316 			}
32317 		}
32318 	}
32319 
32320 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
32321 		ZVAL_DEREF(value);
32322 	}
32323 
32324 	if (IS_CONST == IS_CONST) {
32325 		name = Z_STR_P(property);
32326 	} else {
32327 		name = zval_try_get_tmp_string(property, &tmp_name);
32328 		if (UNEXPECTED(!name)) {
32329 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
32330 			UNDEF_RESULT();
32331 			goto exit_assign_obj;
32332 		}
32333 	}
32334 
32335 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
32336 
32337 	if (IS_CONST != IS_CONST) {
32338 		zend_tmp_string_release(tmp_name);
32339 	}
32340 
32341 free_and_exit_assign_obj:
32342 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32343 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
32344 	}
32345 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
32346 exit_assign_obj:
32347 
32348 
32349 	/* assign_obj has two opcodes! */
32350 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32351 }
32352 
32353 /* 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)32354 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32355 {
32356 	USE_OPLINE
32357 	zval *object, *property, *value, tmp;
32358 	zend_object *zobj;
32359 	zend_string *name, *tmp_name;
32360 
32361 	SAVE_OPLINE();
32362 	object = &EX(This);
32363 	property = RT_CONSTANT(opline, opline->op2);
32364 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
32365 
32366 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32367 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32368 			object = Z_REFVAL_P(object);
32369 			goto assign_object;
32370 		}
32371 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
32372 		value = &EG(uninitialized_zval);
32373 		goto free_and_exit_assign_obj;
32374 	}
32375 
32376 assign_object:
32377 	zobj = Z_OBJ_P(object);
32378 	if (IS_CONST == IS_CONST &&
32379 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
32380 		void **cache_slot = CACHE_ADDR(opline->extended_value);
32381 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32382 		zend_object *zobj = Z_OBJ_P(object);
32383 		zval *property_val;
32384 
32385 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32386 			property_val = OBJ_PROP(zobj, prop_offset);
32387 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
32388 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
32389 
32390 				if (UNEXPECTED(prop_info != NULL)) {
32391 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
32392 					goto free_and_exit_assign_obj;
32393 				} else {
32394 fast_assign_obj:
32395 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
32396 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32397 						ZVAL_COPY(EX_VAR(opline->result.var), value);
32398 					}
32399 					goto exit_assign_obj;
32400 				}
32401 			}
32402 		} else {
32403 			if (EXPECTED(zobj->properties != NULL)) {
32404 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32405 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32406 						GC_DELREF(zobj->properties);
32407 					}
32408 					zobj->properties = zend_array_dup(zobj->properties);
32409 				}
32410 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
32411 				if (property_val) {
32412 					goto fast_assign_obj;
32413 				}
32414 			}
32415 
32416 			if (!zobj->ce->__set) {
32417 
32418 				if (EXPECTED(zobj->properties == NULL)) {
32419 					rebuild_object_properties(zobj);
32420 				}
32421 				if (IS_CV == IS_CONST) {
32422 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32423 						Z_ADDREF_P(value);
32424 					}
32425 				} else if (IS_CV != IS_TMP_VAR) {
32426 					if (Z_ISREF_P(value)) {
32427 						if (IS_CV == IS_VAR) {
32428 							zend_reference *ref = Z_REF_P(value);
32429 							if (GC_DELREF(ref) == 0) {
32430 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32431 								efree_size(ref, sizeof(zend_reference));
32432 								value = &tmp;
32433 							} else {
32434 								value = Z_REFVAL_P(value);
32435 								Z_TRY_ADDREF_P(value);
32436 							}
32437 						} else {
32438 							value = Z_REFVAL_P(value);
32439 							Z_TRY_ADDREF_P(value);
32440 						}
32441 					} else if (IS_CV == IS_CV) {
32442 						Z_TRY_ADDREF_P(value);
32443 					}
32444 				}
32445 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
32446 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32447 					ZVAL_COPY(EX_VAR(opline->result.var), value);
32448 				}
32449 				goto exit_assign_obj;
32450 			}
32451 		}
32452 	}
32453 
32454 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
32455 		ZVAL_DEREF(value);
32456 	}
32457 
32458 	if (IS_CONST == IS_CONST) {
32459 		name = Z_STR_P(property);
32460 	} else {
32461 		name = zval_try_get_tmp_string(property, &tmp_name);
32462 		if (UNEXPECTED(!name)) {
32463 
32464 			UNDEF_RESULT();
32465 			goto exit_assign_obj;
32466 		}
32467 	}
32468 
32469 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
32470 
32471 	if (IS_CONST != IS_CONST) {
32472 		zend_tmp_string_release(tmp_name);
32473 	}
32474 
32475 free_and_exit_assign_obj:
32476 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32477 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
32478 	}
32479 
32480 exit_assign_obj:
32481 
32482 
32483 	/* assign_obj has two opcodes! */
32484 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32485 }
32486 
32487 /* 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)32488 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32489 {
32490 	USE_OPLINE
32491 	zval *property, *container, *value_ptr;
32492 
32493 	SAVE_OPLINE();
32494 
32495 	container = &EX(This);
32496 	property = RT_CONSTANT(opline, opline->op2);
32497 
32498 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
32499 
32500 	if (1) {
32501 		if (IS_UNUSED == IS_UNUSED) {
32502 			if (IS_CONST == IS_CONST) {
32503 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32504 			} else {
32505 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32506 			}
32507 		} else {
32508 			if (IS_CONST == IS_CONST) {
32509 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32510 			} else {
32511 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32512 			}
32513 		}
32514 	} else {
32515 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32516 	}
32517 
32518 
32519 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
32520 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32521 }
32522 
32523 /* 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)32524 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32525 {
32526 	USE_OPLINE
32527 	zval *property, *container, *value_ptr;
32528 
32529 	SAVE_OPLINE();
32530 
32531 	container = &EX(This);
32532 	property = RT_CONSTANT(opline, opline->op2);
32533 
32534 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
32535 
32536 	if (1) {
32537 		if (IS_UNUSED == IS_UNUSED) {
32538 			if (IS_CONST == IS_CONST) {
32539 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32540 			} else {
32541 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32542 			}
32543 		} else {
32544 			if (IS_CONST == IS_CONST) {
32545 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32546 			} else {
32547 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32548 			}
32549 		}
32550 	} else {
32551 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
32552 	}
32553 
32554 
32555 
32556 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32557 }
32558 
32559 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32560 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32561 {
32562 	USE_OPLINE
32563 	zend_string **rope;
32564 	zval *var;
32565 
32566 	/* Compiler allocates the necessary number of zval slots to keep the rope */
32567 	rope = (zend_string**)EX_VAR(opline->result.var);
32568 	if (IS_CONST == IS_CONST) {
32569 		var = RT_CONSTANT(opline, opline->op2);
32570 		rope[0] = Z_STR_P(var);
32571 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
32572 			Z_ADDREF_P(var);
32573 		}
32574 	} else {
32575 		var = RT_CONSTANT(opline, opline->op2);
32576 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
32577 			if (IS_CONST == IS_CV) {
32578 				rope[0] = zend_string_copy(Z_STR_P(var));
32579 			} else {
32580 				rope[0] = Z_STR_P(var);
32581 			}
32582 		} else {
32583 			SAVE_OPLINE();
32584 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
32585 				ZVAL_UNDEFINED_OP2();
32586 			}
32587 			rope[0] = zval_get_string_func(var);
32588 
32589 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32590 		}
32591 	}
32592 	ZEND_VM_NEXT_OPCODE();
32593 }
32594 
ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32596 {
32597 	zval *class_name;
32598 	USE_OPLINE
32599 
32600 	SAVE_OPLINE();
32601 	if (IS_CONST == IS_UNUSED) {
32602 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
32603 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32604 	} else if (IS_CONST == IS_CONST) {
32605 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
32606 
32607 		if (UNEXPECTED(ce == NULL)) {
32608 			class_name = RT_CONSTANT(opline, opline->op2);
32609 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
32610 			CACHE_PTR(opline->extended_value, ce);
32611 		}
32612 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
32613 	} else {
32614 		class_name = RT_CONSTANT(opline, opline->op2);
32615 try_class_name:
32616 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
32617 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
32618 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
32619 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
32620 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
32621 			class_name = Z_REFVAL_P(class_name);
32622 			goto try_class_name;
32623 		} else {
32624 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
32625 				ZVAL_UNDEFINED_OP2();
32626 				if (UNEXPECTED(EG(exception) != NULL)) {
32627 					HANDLE_EXCEPTION();
32628 				}
32629 			}
32630 			zend_throw_error(NULL, "Class name must be a valid object or a string");
32631 		}
32632 	}
32633 
32634 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32635 }
32636 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32637 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32638 {
32639 	USE_OPLINE
32640 	zval *function_name;
32641 	zval *object;
32642 	zend_function *fbc;
32643 	zend_class_entry *called_scope;
32644 	zend_object *obj;
32645 	zend_execute_data *call;
32646 	uint32_t call_info;
32647 
32648 	SAVE_OPLINE();
32649 
32650 	object = &EX(This);
32651 
32652 	if (IS_CONST != IS_CONST) {
32653 		function_name = RT_CONSTANT(opline, opline->op2);
32654 	}
32655 
32656 	if (IS_CONST != IS_CONST &&
32657 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
32658 		do {
32659 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
32660 				function_name = Z_REFVAL_P(function_name);
32661 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
32662 					break;
32663 				}
32664 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
32665 				ZVAL_UNDEFINED_OP2();
32666 				if (UNEXPECTED(EG(exception) != NULL)) {
32667 
32668 					HANDLE_EXCEPTION();
32669 				}
32670 			}
32671 			zend_throw_error(NULL, "Method name must be a string");
32672 
32673 
32674 			HANDLE_EXCEPTION();
32675 		} while (0);
32676 	}
32677 
32678 	if (IS_UNUSED == IS_UNUSED) {
32679 		obj = Z_OBJ_P(object);
32680 	} else {
32681 		do {
32682 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
32683 				obj = Z_OBJ_P(object);
32684 			} else {
32685 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
32686 					zend_reference *ref = Z_REF_P(object);
32687 
32688 					object = &ref->val;
32689 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
32690 						obj = Z_OBJ_P(object);
32691 						if (IS_UNUSED & IS_VAR) {
32692 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
32693 								efree_size(ref, sizeof(zend_reference));
32694 							} else {
32695 								Z_ADDREF_P(object);
32696 							}
32697 						}
32698 						break;
32699 					}
32700 				}
32701 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32702 					object = ZVAL_UNDEFINED_OP1();
32703 					if (UNEXPECTED(EG(exception) != NULL)) {
32704 						if (IS_CONST != IS_CONST) {
32705 
32706 						}
32707 						HANDLE_EXCEPTION();
32708 					}
32709 				}
32710 				if (IS_CONST == IS_CONST) {
32711 					function_name = RT_CONSTANT(opline, opline->op2);
32712 				}
32713 				zend_invalid_method_call(object, function_name);
32714 
32715 
32716 				HANDLE_EXCEPTION();
32717 			}
32718 		} while (0);
32719 	}
32720 
32721 	called_scope = obj->ce;
32722 
32723 	if (IS_CONST == IS_CONST &&
32724 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
32725 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
32726 	} else {
32727 	    zend_object *orig_obj = obj;
32728 
32729 		if (IS_CONST == IS_CONST) {
32730 			function_name = RT_CONSTANT(opline, opline->op2);
32731 		}
32732 
32733 		/* First, locate the function. */
32734 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
32735 		if (UNEXPECTED(fbc == NULL)) {
32736 			if (EXPECTED(!EG(exception))) {
32737 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
32738 			}
32739 
32740 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
32741 				zend_objects_store_del(orig_obj);
32742 			}
32743 			HANDLE_EXCEPTION();
32744 		}
32745 		if (IS_CONST == IS_CONST &&
32746 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
32747 		    EXPECTED(obj == orig_obj)) {
32748 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
32749 		}
32750 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
32751 			GC_ADDREF(obj); /* For $this pointer */
32752 			if (GC_DELREF(orig_obj) == 0) {
32753 				zend_objects_store_del(orig_obj);
32754 			}
32755 		}
32756 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
32757 			init_func_run_time_cache(&fbc->op_array);
32758 		}
32759 	}
32760 
32761 	if (IS_CONST != IS_CONST) {
32762 
32763 	}
32764 
32765 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
32766 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
32767 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
32768 			zend_objects_store_del(obj);
32769 			if (UNEXPECTED(EG(exception))) {
32770 				HANDLE_EXCEPTION();
32771 			}
32772 		}
32773 		/* call static method */
32774 		obj = (zend_object*)called_scope;
32775 		call_info = ZEND_CALL_NESTED_FUNCTION;
32776 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
32777 		if (IS_UNUSED == IS_CV) {
32778 			GC_ADDREF(obj); /* For $this pointer */
32779 		}
32780 		/* CV may be changed indirectly (e.g. when it's a reference) */
32781 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
32782 	}
32783 
32784 	call = zend_vm_stack_push_call_frame(call_info,
32785 		fbc, opline->extended_value, obj);
32786 	call->prev_execute_data = EX(call);
32787 	EX(call) = call;
32788 
32789 	ZEND_VM_NEXT_OPCODE();
32790 }
32791 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32793 {
32794 	USE_OPLINE
32795 	zval *function_name;
32796 	zend_class_entry *ce;
32797 	uint32_t call_info;
32798 	zend_function *fbc;
32799 	zend_execute_data *call;
32800 
32801 	SAVE_OPLINE();
32802 
32803 	if (IS_UNUSED == IS_CONST) {
32804 		/* no function found. try a static method in class */
32805 		ce = CACHED_PTR(opline->result.num);
32806 		if (UNEXPECTED(ce == NULL)) {
32807 			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);
32808 			if (UNEXPECTED(ce == NULL)) {
32809 
32810 				HANDLE_EXCEPTION();
32811 			}
32812 			if (IS_CONST != IS_CONST) {
32813 				CACHE_PTR(opline->result.num, ce);
32814 			}
32815 		}
32816 	} else if (IS_UNUSED == IS_UNUSED) {
32817 		ce = zend_fetch_class(NULL, opline->op1.num);
32818 		if (UNEXPECTED(ce == NULL)) {
32819 
32820 			HANDLE_EXCEPTION();
32821 		}
32822 	} else {
32823 		ce = Z_CE_P(EX_VAR(opline->op1.var));
32824 	}
32825 
32826 	if (IS_UNUSED == IS_CONST &&
32827 	    IS_CONST == IS_CONST &&
32828 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
32829 		/* nothing to do */
32830 	} else if (IS_UNUSED != IS_CONST &&
32831 	           IS_CONST == IS_CONST &&
32832 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
32833 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
32834 	} else if (IS_CONST != IS_UNUSED) {
32835 		function_name = RT_CONSTANT(opline, opline->op2);
32836 		if (IS_CONST != IS_CONST) {
32837 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
32838 				do {
32839 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
32840 						function_name = Z_REFVAL_P(function_name);
32841 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
32842 							break;
32843 						}
32844 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
32845 						ZVAL_UNDEFINED_OP2();
32846 						if (UNEXPECTED(EG(exception) != NULL)) {
32847 							HANDLE_EXCEPTION();
32848 						}
32849 					}
32850 					zend_throw_error(NULL, "Method name must be a string");
32851 
32852 					HANDLE_EXCEPTION();
32853 				} while (0);
32854 			}
32855 		}
32856 
32857 		if (ce->get_static_method) {
32858 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
32859 		} else {
32860 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
32861 		}
32862 		if (UNEXPECTED(fbc == NULL)) {
32863 			if (EXPECTED(!EG(exception))) {
32864 				zend_undefined_method(ce, Z_STR_P(function_name));
32865 			}
32866 
32867 			HANDLE_EXCEPTION();
32868 		}
32869 		if (IS_CONST == IS_CONST &&
32870 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
32871 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
32872 		}
32873 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
32874 			init_func_run_time_cache(&fbc->op_array);
32875 		}
32876 		if (IS_CONST != IS_CONST) {
32877 
32878 		}
32879 	} else {
32880 		if (UNEXPECTED(ce->constructor == NULL)) {
32881 			zend_throw_error(NULL, "Cannot call constructor");
32882 			HANDLE_EXCEPTION();
32883 		}
32884 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
32885 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
32886 			HANDLE_EXCEPTION();
32887 		}
32888 		fbc = ce->constructor;
32889 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
32890 			init_func_run_time_cache(&fbc->op_array);
32891 		}
32892 	}
32893 
32894 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
32895 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
32896 			ce = (zend_class_entry*)Z_OBJ(EX(This));
32897 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
32898 		} else {
32899 			zend_non_static_method_call(fbc);
32900 			HANDLE_EXCEPTION();
32901 		}
32902 	} else {
32903 		/* previous opcode is ZEND_FETCH_CLASS */
32904 		if (IS_UNUSED == IS_UNUSED
32905 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
32906 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
32907 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
32908 				ce = Z_OBJCE(EX(This));
32909 			} else {
32910 				ce = Z_CE(EX(This));
32911 			}
32912 		}
32913 		call_info = ZEND_CALL_NESTED_FUNCTION;
32914 	}
32915 
32916 	call = zend_vm_stack_push_call_frame(call_info,
32917 		fbc, opline->extended_value, ce);
32918 	call->prev_execute_data = EX(call);
32919 	EX(call) = call;
32920 
32921 	ZEND_VM_NEXT_OPCODE();
32922 }
32923 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32924 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32925 {
32926 	USE_OPLINE
32927 	uint32_t arg_num;
32928 
32929 	if (IS_CONST == IS_CONST) {
32930 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32931 		arg_num = zend_get_arg_offset_by_name(
32932 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
32933 		if (UNEXPECTED(arg_num == 0)) {
32934 			/* Treat this as a by-value argument, and throw an error during SEND. */
32935 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
32936 			ZEND_VM_NEXT_OPCODE();
32937 		}
32938 	} else {
32939 		arg_num = opline->op2.num;
32940 	}
32941 
32942 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
32943 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
32944 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
32945 		} else {
32946 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
32947 		}
32948 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
32949 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
32950 	} else {
32951 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
32952 	}
32953 	ZEND_VM_NEXT_OPCODE();
32954 }
32955 
ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32956 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32957 {
32958 	USE_OPLINE
32959 	zend_constant *c;
32960 
32961 	c = CACHED_PTR(opline->extended_value);
32962 	if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
32963 		ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
32964 		ZEND_VM_NEXT_OPCODE();
32965 	}
32966 
32967 	SAVE_OPLINE();
32968 	zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
32969 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32970 }
32971 
ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32972 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32973 {
32974 	zend_class_entry *ce, *scope;
32975 	zend_class_constant *c;
32976 	zval *value, *zv;
32977 	USE_OPLINE
32978 
32979 	SAVE_OPLINE();
32980 
32981 	do {
32982 		if (IS_UNUSED == IS_CONST) {
32983 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
32984 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
32985 				break;
32986 			} else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
32987 				ce = CACHED_PTR(opline->extended_value);
32988 			} else {
32989 				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);
32990 				if (UNEXPECTED(ce == NULL)) {
32991 					ZVAL_UNDEF(EX_VAR(opline->result.var));
32992 					HANDLE_EXCEPTION();
32993 				}
32994 			}
32995 		} else {
32996 			if (IS_UNUSED == IS_UNUSED) {
32997 				ce = zend_fetch_class(NULL, opline->op1.num);
32998 				if (UNEXPECTED(ce == NULL)) {
32999 					ZVAL_UNDEF(EX_VAR(opline->result.var));
33000 					HANDLE_EXCEPTION();
33001 				}
33002 			} else {
33003 				ce = Z_CE_P(EX_VAR(opline->op1.var));
33004 			}
33005 			if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
33006 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
33007 				break;
33008 			}
33009 		}
33010 
33011 		zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1);
33012 		if (EXPECTED(zv != NULL)) {
33013 			c = Z_PTR_P(zv);
33014 			scope = EX(func)->op_array.scope;
33015 			if (!zend_verify_const_access(c, scope)) {
33016 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
33017 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33018 				HANDLE_EXCEPTION();
33019 			}
33020 			value = &c->value;
33021 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
33022 				zval_update_constant_ex(value, c->ce);
33023 				if (UNEXPECTED(EG(exception) != NULL)) {
33024 					ZVAL_UNDEF(EX_VAR(opline->result.var));
33025 					HANDLE_EXCEPTION();
33026 				}
33027 			}
33028 			CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
33029 		} else {
33030 			zend_throw_error(NULL, "Undefined constant %s::%s",
33031 				ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
33032 			ZVAL_UNDEF(EX_VAR(opline->result.var));
33033 			HANDLE_EXCEPTION();
33034 		}
33035 	} while (0);
33036 
33037 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
33038 
33039 	ZEND_VM_NEXT_OPCODE();
33040 }
33041 
ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33042 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33043 {
33044 	zval *array;
33045 	uint32_t size;
33046 	USE_OPLINE
33047 
33048 	array = EX_VAR(opline->result.var);
33049 	if (IS_UNUSED != IS_UNUSED) {
33050 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
33051 		ZVAL_ARR(array, zend_new_array(size));
33052 		/* Explicitly initialize array as not-packed if flag is set */
33053 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
33054 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
33055 		}
33056 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33057 	} else {
33058 		ZVAL_ARR(array, zend_new_array(0));
33059 		ZEND_VM_NEXT_OPCODE();
33060 	}
33061 }
33062 
ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33063 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33064 {
33065 	USE_OPLINE
33066 	zval *container;
33067 	zval *offset;
33068 	zend_string *name, *tmp_name;
33069 
33070 	SAVE_OPLINE();
33071 	container = &EX(This);
33072 	offset = RT_CONSTANT(opline, opline->op2);
33073 
33074 	do {
33075 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
33076 			if (Z_ISREF_P(container)) {
33077 				container = Z_REFVAL_P(container);
33078 				if (Z_TYPE_P(container) != IS_OBJECT) {
33079 					if (IS_UNUSED == IS_CV
33080 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33081 						ZVAL_UNDEFINED_OP1();
33082 					}
33083 					break;
33084 				}
33085 			} else {
33086 				break;
33087 			}
33088 		}
33089 		if (IS_CONST == IS_CONST) {
33090 			name = Z_STR_P(offset);
33091 		} else {
33092 			name = zval_try_get_tmp_string(offset, &tmp_name);
33093 			if (UNEXPECTED(!name)) {
33094 				break;
33095 			}
33096 		}
33097 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
33098 		if (IS_CONST != IS_CONST) {
33099 			zend_tmp_string_release(tmp_name);
33100 		}
33101 	} while (0);
33102 
33103 
33104 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33105 }
33106 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33107 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33108 {
33109 	USE_OPLINE
33110 	zval *container;
33111 	int result;
33112 	zval *offset;
33113 	zend_string *name, *tmp_name;
33114 
33115 	SAVE_OPLINE();
33116 	container = &EX(This);
33117 	offset = RT_CONSTANT(opline, opline->op2);
33118 
33119 	if (IS_UNUSED == IS_CONST ||
33120 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33121 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33122 			container = Z_REFVAL_P(container);
33123 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
33124 				result = (opline->extended_value & ZEND_ISEMPTY);
33125 				goto isset_object_finish;
33126 			}
33127 		} else {
33128 			result = (opline->extended_value & ZEND_ISEMPTY);
33129 			goto isset_object_finish;
33130 		}
33131 	}
33132 
33133 	if (IS_CONST == IS_CONST) {
33134 		name = Z_STR_P(offset);
33135 	} else {
33136 		name = zval_try_get_tmp_string(offset, &tmp_name);
33137 		if (UNEXPECTED(!name)) {
33138 			result = 0;
33139 			goto isset_object_finish;
33140 		}
33141 	}
33142 
33143 	result =
33144 		(opline->extended_value & ZEND_ISEMPTY) ^
33145 		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));
33146 
33147 	if (IS_CONST != IS_CONST) {
33148 		zend_tmp_string_release(tmp_name);
33149 	}
33150 
33151 isset_object_finish:
33152 
33153 
33154 	ZEND_VM_SMART_BRANCH(result, 1);
33155 }
33156 
ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33157 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33158 {
33159 	USE_OPLINE
33160 
33161 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
33162 
33163 	SAVE_OPLINE();
33164 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
33165 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33166 	}
33167 
33168 	/* Destroy the previously yielded value */
33169 	zval_ptr_dtor(&generator->value);
33170 
33171 	/* Destroy the previously yielded key */
33172 	zval_ptr_dtor(&generator->key);
33173 
33174 	/* Set the new yielded value */
33175 	if (IS_UNUSED != IS_UNUSED) {
33176 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
33177 			/* Constants and temporary variables aren't yieldable by reference,
33178 			 * but we still allow them with a notice. */
33179 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
33180 				zval *value;
33181 
33182 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33183 
33184 				value = NULL;
33185 				ZVAL_COPY_VALUE(&generator->value, value);
33186 				if (IS_UNUSED == IS_CONST) {
33187 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
33188 						Z_ADDREF(generator->value);
33189 					}
33190 				}
33191 			} else {
33192 				zval *value_ptr = NULL;
33193 
33194 				/* If a function call result is yielded and the function did
33195 				 * not return by reference we throw a notice. */
33196 				do {
33197 					if (IS_UNUSED == IS_VAR) {
33198 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
33199 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
33200 						 && !Z_ISREF_P(value_ptr)) {
33201 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33202 							ZVAL_COPY(&generator->value, value_ptr);
33203 							break;
33204 						}
33205 					}
33206 					if (Z_ISREF_P(value_ptr)) {
33207 						Z_ADDREF_P(value_ptr);
33208 					} else {
33209 						ZVAL_MAKE_REF_EX(value_ptr, 2);
33210 					}
33211 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
33212 				} while (0);
33213 
33214 			}
33215 		} else {
33216 			zval *value = NULL;
33217 
33218 			/* Consts, temporary variables and references need copying */
33219 			if (IS_UNUSED == IS_CONST) {
33220 				ZVAL_COPY_VALUE(&generator->value, value);
33221 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
33222 					Z_ADDREF(generator->value);
33223 				}
33224 			} else if (IS_UNUSED == IS_TMP_VAR) {
33225 				ZVAL_COPY_VALUE(&generator->value, value);
33226             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
33227 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
33228 
33229 			} else {
33230 				ZVAL_COPY_VALUE(&generator->value, value);
33231 				if (IS_UNUSED == IS_CV) {
33232 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
33233 				}
33234 			}
33235 		}
33236 	} else {
33237 		/* If no value was specified yield null */
33238 		ZVAL_NULL(&generator->value);
33239 	}
33240 
33241 	/* Set the new yielded key */
33242 	if (IS_CONST != IS_UNUSED) {
33243 		zval *key = RT_CONSTANT(opline, opline->op2);
33244 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
33245 			key = Z_REFVAL_P(key);
33246 		}
33247 		ZVAL_COPY(&generator->key, key);
33248 
33249 		if (Z_TYPE(generator->key) == IS_LONG
33250 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
33251 		) {
33252 			generator->largest_used_integer_key = Z_LVAL(generator->key);
33253 		}
33254 	} else {
33255 		/* If no key was specified we use auto-increment keys */
33256 		generator->largest_used_integer_key++;
33257 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
33258 	}
33259 
33260 	if (RETURN_VALUE_USED(opline)) {
33261 		/* If the return value of yield is used set the send
33262 		 * target and initialize it to NULL */
33263 		generator->send_target = EX_VAR(opline->result.var);
33264 		ZVAL_NULL(generator->send_target);
33265 	} else {
33266 		generator->send_target = NULL;
33267 	}
33268 
33269 	/* We increment to the next op, so we are at the correct position when the
33270 	 * generator is resumed. */
33271 	ZEND_VM_INC_OPCODE();
33272 
33273 	/* The GOTO VM uses a local opline variable. We need to set the opline
33274 	 * variable in execute_data so we don't resume at an old position. */
33275 	SAVE_OPLINE();
33276 
33277 	ZEND_VM_RETURN();
33278 }
33279 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33280 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33281 {
33282 	USE_OPLINE
33283 	zval *object;
33284 	zval *property;
33285 	zval *value;
33286 	zval *zptr;
33287 	void **cache_slot;
33288 	zend_property_info *prop_info;
33289 	zend_object *zobj;
33290 	zend_string *name, *tmp_name;
33291 
33292 	SAVE_OPLINE();
33293 	object = &EX(This);
33294 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33295 
33296 	do {
33297 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
33298 
33299 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33300 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33301 				object = Z_REFVAL_P(object);
33302 				goto assign_op_object;
33303 			}
33304 			if (IS_UNUSED == IS_CV
33305 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33306 				ZVAL_UNDEFINED_OP1();
33307 			}
33308 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33309 			break;
33310 		}
33311 
33312 assign_op_object:
33313 		/* here we are sure we are dealing with an object */
33314 		zobj = Z_OBJ_P(object);
33315 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33316 			name = Z_STR_P(property);
33317 		} else {
33318 			name = zval_try_get_tmp_string(property, &tmp_name);
33319 			if (UNEXPECTED(!name)) {
33320 				UNDEF_RESULT();
33321 				break;
33322 			}
33323 		}
33324 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
33325 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
33326 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33327 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33328 					ZVAL_NULL(EX_VAR(opline->result.var));
33329 				}
33330 			} else {
33331 				zval *orig_zptr = zptr;
33332 				zend_reference *ref;
33333 
33334 				do {
33335 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
33336 						ref = Z_REF_P(zptr);
33337 						zptr = Z_REFVAL_P(zptr);
33338 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
33339 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
33340 							break;
33341 						}
33342 					}
33343 
33344 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33345 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
33346 					} else {
33347 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
33348 					}
33349 					if (UNEXPECTED(prop_info)) {
33350 						/* special case for typed properties */
33351 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
33352 					} else {
33353 						zend_binary_op(zptr, zptr, value OPLINE_CC);
33354 					}
33355 				} while (0);
33356 
33357 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33358 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
33359 				}
33360 			}
33361 		} else {
33362 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
33363 		}
33364 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33365 			zend_tmp_string_release(tmp_name);
33366 		}
33367 	} while (0);
33368 
33369 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
33370 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33371 
33372 	/* assign_obj has two opcodes! */
33373 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33374 }
33375 
33376 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33377 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33378 {
33379 	USE_OPLINE
33380 	zval *object;
33381 	zval *property;
33382 	zval *zptr;
33383 	void **cache_slot;
33384 	zend_property_info *prop_info;
33385 	zend_object *zobj;
33386 	zend_string *name, *tmp_name;
33387 
33388 	SAVE_OPLINE();
33389 	object = &EX(This);
33390 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33391 
33392 	do {
33393 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33394 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33395 				object = Z_REFVAL_P(object);
33396 				goto pre_incdec_object;
33397 			}
33398 			if (IS_UNUSED == IS_CV
33399 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33400 				ZVAL_UNDEFINED_OP1();
33401 			}
33402 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33403 			break;
33404 		}
33405 
33406 pre_incdec_object:
33407 		/* here we are sure we are dealing with an object */
33408 		zobj = Z_OBJ_P(object);
33409 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33410 			name = Z_STR_P(property);
33411 		} else {
33412 			name = zval_try_get_tmp_string(property, &tmp_name);
33413 			if (UNEXPECTED(!name)) {
33414 				UNDEF_RESULT();
33415 				break;
33416 			}
33417 		}
33418 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
33419 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
33420 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33421 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33422 					ZVAL_NULL(EX_VAR(opline->result.var));
33423 				}
33424 			} else {
33425 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33426 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
33427 				} else {
33428 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
33429 				}
33430 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
33431 			}
33432 		} else {
33433 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
33434 		}
33435 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33436 			zend_tmp_string_release(tmp_name);
33437 		}
33438 	} while (0);
33439 
33440 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33441 
33442 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33443 }
33444 
ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33445 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33446 {
33447 	USE_OPLINE
33448 	zval *object;
33449 	zval *property;
33450 	zval *zptr;
33451 	void **cache_slot;
33452 	zend_property_info *prop_info;
33453 	zend_object *zobj;
33454 	zend_string *name, *tmp_name;
33455 
33456 	SAVE_OPLINE();
33457 	object = &EX(This);
33458 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33459 
33460 	do {
33461 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33462 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33463 				object = Z_REFVAL_P(object);
33464 				goto post_incdec_object;
33465 			}
33466 			if (IS_UNUSED == IS_CV
33467 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33468 				ZVAL_UNDEFINED_OP1();
33469 			}
33470 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33471 			break;
33472 		}
33473 
33474 post_incdec_object:
33475 		/* here we are sure we are dealing with an object */
33476 		zobj = Z_OBJ_P(object);
33477 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33478 			name = Z_STR_P(property);
33479 		} else {
33480 			name = zval_try_get_tmp_string(property, &tmp_name);
33481 			if (UNEXPECTED(!name)) {
33482 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33483 				break;
33484 			}
33485 		}
33486 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
33487 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
33488 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33489 				ZVAL_NULL(EX_VAR(opline->result.var));
33490 			} else {
33491 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33492 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
33493 				} else {
33494 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
33495 				}
33496 
33497 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
33498 			}
33499 		} else {
33500 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
33501 		}
33502 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33503 			zend_tmp_string_release(tmp_name);
33504 		}
33505 	} while (0);
33506 
33507 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33508 
33509 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33510 }
33511 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33512 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33513 {
33514 	USE_OPLINE
33515 	zval *container;
33516 	zval *offset;
33517 	void **cache_slot = NULL;
33518 
33519 	SAVE_OPLINE();
33520 	container = &EX(This);
33521 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33522 
33523 	if (IS_UNUSED == IS_CONST ||
33524 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33525 	    do {
33526 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33527 				container = Z_REFVAL_P(container);
33528 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
33529 					break;
33530 				}
33531 			}
33532 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33533 				ZVAL_UNDEFINED_OP1();
33534 			}
33535 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
33536 				ZVAL_UNDEFINED_OP2();
33537 			}
33538 			zend_wrong_property_read(container, offset);
33539 			ZVAL_NULL(EX_VAR(opline->result.var));
33540 			goto fetch_obj_r_finish;
33541 		} while (0);
33542 	}
33543 
33544 	/* here we are sure we are dealing with an object */
33545 	do {
33546 		zend_object *zobj = Z_OBJ_P(container);
33547 		zend_string *name, *tmp_name;
33548 		zval *retval;
33549 
33550 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33551 			name = Z_STR_P(offset);
33552 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
33553 
33554 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
33555 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33556 
33557 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33558 					retval = OBJ_PROP(zobj, prop_offset);
33559 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
33560 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33561 							goto fetch_obj_r_copy;
33562 						} else {
33563 fetch_obj_r_fast_copy:
33564 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33565 							ZEND_VM_NEXT_OPCODE();
33566 						}
33567 					}
33568 				} else if (EXPECTED(zobj->properties != NULL)) {
33569 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
33570 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
33571 
33572 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
33573 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
33574 
33575 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
33576 						        (EXPECTED(p->key == name) ||
33577 						         (EXPECTED(p->h == ZSTR_H(name)) &&
33578 						          EXPECTED(p->key != NULL) &&
33579 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
33580 								retval = &p->val;
33581 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33582 									goto fetch_obj_r_copy;
33583 								} else {
33584 									goto fetch_obj_r_fast_copy;
33585 								}
33586 							}
33587 						}
33588 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
33589 					}
33590 					retval = zend_hash_find_ex(zobj->properties, name, 1);
33591 					if (EXPECTED(retval)) {
33592 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
33593 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
33594 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33595 							goto fetch_obj_r_copy;
33596 						} else {
33597 							goto fetch_obj_r_fast_copy;
33598 						}
33599 					}
33600 				}
33601 			}
33602 		} else {
33603 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
33604 				ZVAL_UNDEFINED_OP2();
33605 			}
33606 			name = zval_try_get_tmp_string(offset, &tmp_name);
33607 			if (UNEXPECTED(!name)) {
33608 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33609 				break;
33610 			}
33611 		}
33612 
33613 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
33614 
33615 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33616 			zend_tmp_string_release(tmp_name);
33617 		}
33618 
33619 		if (retval != EX_VAR(opline->result.var)) {
33620 fetch_obj_r_copy:
33621 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33622 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
33623 			zend_unwrap_reference(retval);
33624 		}
33625 	} while (0);
33626 
33627 fetch_obj_r_finish:
33628 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33629 
33630 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33631 }
33632 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33633 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33634 {
33635 	USE_OPLINE
33636 	zval *property, *container, *result;
33637 
33638 	SAVE_OPLINE();
33639 
33640 	container = &EX(This);
33641 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33642 	result = EX_VAR(opline->result.var);
33643 	zend_fetch_property_address(
33644 		result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
33645 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
33646 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
33647 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33648 	if (IS_UNUSED == IS_VAR) {
33649 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
33650 	}
33651 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33652 }
33653 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33654 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33655 {
33656 	USE_OPLINE
33657 	zval *property, *container, *result;
33658 
33659 	SAVE_OPLINE();
33660 	container = &EX(This);
33661 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33662 	result = EX_VAR(opline->result.var);
33663 	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
33664 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33665 	if (IS_UNUSED == IS_VAR) {
33666 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
33667 	}
33668 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33669 }
33670 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33671 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33672 {
33673 	USE_OPLINE
33674 	zval *container;
33675 	zval *offset;
33676 	void **cache_slot = NULL;
33677 
33678 	SAVE_OPLINE();
33679 	container = &EX(This);
33680 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33681 
33682 	if (IS_UNUSED == IS_CONST ||
33683 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33684 		do {
33685 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33686 				container = Z_REFVAL_P(container);
33687 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
33688 					break;
33689 				}
33690 			}
33691 			ZVAL_NULL(EX_VAR(opline->result.var));
33692 			goto fetch_obj_is_finish;
33693 		} while (0);
33694 	}
33695 
33696 	/* here we are sure we are dealing with an object */
33697 	do {
33698 		zend_object *zobj = Z_OBJ_P(container);
33699 		zend_string *name, *tmp_name;
33700 		zval *retval;
33701 
33702 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33703 			name = Z_STR_P(offset);
33704 			cache_slot = CACHE_ADDR(opline->extended_value);
33705 
33706 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
33707 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33708 
33709 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33710 					retval = OBJ_PROP(zobj, prop_offset);
33711 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
33712 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33713 							goto fetch_obj_is_copy;
33714 						} else {
33715 fetch_obj_is_fast_copy:
33716 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33717 							ZEND_VM_NEXT_OPCODE();
33718 						}
33719 					}
33720 				} else if (EXPECTED(zobj->properties != NULL)) {
33721 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
33722 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
33723 
33724 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
33725 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
33726 
33727 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
33728 						        (EXPECTED(p->key == name) ||
33729 						         (EXPECTED(p->h == ZSTR_H(name)) &&
33730 						          EXPECTED(p->key != NULL) &&
33731 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
33732 								retval = &p->val;
33733 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33734 									goto fetch_obj_is_copy;
33735 								} else {
33736 									goto fetch_obj_is_fast_copy;
33737 								}
33738 							}
33739 						}
33740 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
33741 					}
33742 					retval = zend_hash_find_ex(zobj->properties, name, 1);
33743 					if (EXPECTED(retval)) {
33744 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
33745 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
33746 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33747 							goto fetch_obj_is_copy;
33748 						} else {
33749 							goto fetch_obj_is_fast_copy;
33750 						}
33751 					}
33752 				}
33753 			}
33754 		} else {
33755 			name = zval_try_get_tmp_string(offset, &tmp_name);
33756 			if (UNEXPECTED(!name)) {
33757 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33758 				break;
33759 			}
33760 		}
33761 
33762 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
33763 
33764 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33765 			zend_tmp_string_release(tmp_name);
33766 		}
33767 
33768 		if (retval != EX_VAR(opline->result.var)) {
33769 fetch_obj_is_copy:
33770 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33771 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
33772 			zend_unwrap_reference(retval);
33773 		}
33774 	} while (0);
33775 
33776 fetch_obj_is_finish:
33777 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33778 
33779 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33780 }
33781 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33782 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33783 {
33784 #if 0
33785 	USE_OPLINE
33786 #endif
33787 
33788 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
33789 		/* Behave like FETCH_OBJ_W */
33790 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
33791 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33792 		}
33793 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33794 	} else {
33795 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33796 	}
33797 }
33798 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33799 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33800 {
33801 	USE_OPLINE
33802 	zval *container, *property, *result;
33803 
33804 	SAVE_OPLINE();
33805 	container = &EX(This);
33806 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33807 	result = EX_VAR(opline->result.var);
33808 	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
33809 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33810 	if (IS_UNUSED == IS_VAR) {
33811 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
33812 	}
33813 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33814 }
33815 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33817 {
33818 	USE_OPLINE
33819 	zval *object, *property, *value, tmp;
33820 	zend_object *zobj;
33821 	zend_string *name, *tmp_name;
33822 
33823 	SAVE_OPLINE();
33824 	object = &EX(This);
33825 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33826 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
33827 
33828 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33829 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33830 			object = Z_REFVAL_P(object);
33831 			goto assign_object;
33832 		}
33833 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33834 		value = &EG(uninitialized_zval);
33835 		goto free_and_exit_assign_obj;
33836 	}
33837 
33838 assign_object:
33839 	zobj = Z_OBJ_P(object);
33840 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33841 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33842 		void **cache_slot = CACHE_ADDR(opline->extended_value);
33843 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33844 		zend_object *zobj = Z_OBJ_P(object);
33845 		zval *property_val;
33846 
33847 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33848 			property_val = OBJ_PROP(zobj, prop_offset);
33849 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
33850 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33851 
33852 				if (UNEXPECTED(prop_info != NULL)) {
33853 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
33854 					goto free_and_exit_assign_obj;
33855 				} else {
33856 fast_assign_obj:
33857 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
33858 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33859 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33860 					}
33861 					goto exit_assign_obj;
33862 				}
33863 			}
33864 		} else {
33865 			if (EXPECTED(zobj->properties != NULL)) {
33866 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33867 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33868 						GC_DELREF(zobj->properties);
33869 					}
33870 					zobj->properties = zend_array_dup(zobj->properties);
33871 				}
33872 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
33873 				if (property_val) {
33874 					goto fast_assign_obj;
33875 				}
33876 			}
33877 
33878 			if (!zobj->ce->__set) {
33879 
33880 				if (EXPECTED(zobj->properties == NULL)) {
33881 					rebuild_object_properties(zobj);
33882 				}
33883 				if (IS_CONST == IS_CONST) {
33884 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33885 						Z_ADDREF_P(value);
33886 					}
33887 				} else if (IS_CONST != IS_TMP_VAR) {
33888 					if (Z_ISREF_P(value)) {
33889 						if (IS_CONST == IS_VAR) {
33890 							zend_reference *ref = Z_REF_P(value);
33891 							if (GC_DELREF(ref) == 0) {
33892 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33893 								efree_size(ref, sizeof(zend_reference));
33894 								value = &tmp;
33895 							} else {
33896 								value = Z_REFVAL_P(value);
33897 								Z_TRY_ADDREF_P(value);
33898 							}
33899 						} else {
33900 							value = Z_REFVAL_P(value);
33901 							Z_TRY_ADDREF_P(value);
33902 						}
33903 					} else if (IS_CONST == IS_CV) {
33904 						Z_TRY_ADDREF_P(value);
33905 					}
33906 				}
33907 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
33908 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33909 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33910 				}
33911 				goto exit_assign_obj;
33912 			}
33913 		}
33914 	}
33915 
33916 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
33917 		ZVAL_DEREF(value);
33918 	}
33919 
33920 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33921 		name = Z_STR_P(property);
33922 	} else {
33923 		name = zval_try_get_tmp_string(property, &tmp_name);
33924 		if (UNEXPECTED(!name)) {
33925 
33926 			UNDEF_RESULT();
33927 			goto exit_assign_obj;
33928 		}
33929 	}
33930 
33931 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33932 
33933 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33934 		zend_tmp_string_release(tmp_name);
33935 	}
33936 
33937 free_and_exit_assign_obj:
33938 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33939 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
33940 	}
33941 
33942 exit_assign_obj:
33943 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33944 
33945 	/* assign_obj has two opcodes! */
33946 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33947 }
33948 
33949 /* 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)33950 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33951 {
33952 	USE_OPLINE
33953 	zval *object, *property, *value, tmp;
33954 	zend_object *zobj;
33955 	zend_string *name, *tmp_name;
33956 
33957 	SAVE_OPLINE();
33958 	object = &EX(This);
33959 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
33960 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
33961 
33962 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33963 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33964 			object = Z_REFVAL_P(object);
33965 			goto assign_object;
33966 		}
33967 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
33968 		value = &EG(uninitialized_zval);
33969 		goto free_and_exit_assign_obj;
33970 	}
33971 
33972 assign_object:
33973 	zobj = Z_OBJ_P(object);
33974 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33975 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33976 		void **cache_slot = CACHE_ADDR(opline->extended_value);
33977 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33978 		zend_object *zobj = Z_OBJ_P(object);
33979 		zval *property_val;
33980 
33981 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33982 			property_val = OBJ_PROP(zobj, prop_offset);
33983 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
33984 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33985 
33986 				if (UNEXPECTED(prop_info != NULL)) {
33987 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
33988 					goto free_and_exit_assign_obj;
33989 				} else {
33990 fast_assign_obj:
33991 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
33992 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33993 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33994 					}
33995 					goto exit_assign_obj;
33996 				}
33997 			}
33998 		} else {
33999 			if (EXPECTED(zobj->properties != NULL)) {
34000 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
34001 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
34002 						GC_DELREF(zobj->properties);
34003 					}
34004 					zobj->properties = zend_array_dup(zobj->properties);
34005 				}
34006 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
34007 				if (property_val) {
34008 					goto fast_assign_obj;
34009 				}
34010 			}
34011 
34012 			if (!zobj->ce->__set) {
34013 
34014 				if (EXPECTED(zobj->properties == NULL)) {
34015 					rebuild_object_properties(zobj);
34016 				}
34017 				if (IS_TMP_VAR == IS_CONST) {
34018 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
34019 						Z_ADDREF_P(value);
34020 					}
34021 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
34022 					if (Z_ISREF_P(value)) {
34023 						if (IS_TMP_VAR == IS_VAR) {
34024 							zend_reference *ref = Z_REF_P(value);
34025 							if (GC_DELREF(ref) == 0) {
34026 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
34027 								efree_size(ref, sizeof(zend_reference));
34028 								value = &tmp;
34029 							} else {
34030 								value = Z_REFVAL_P(value);
34031 								Z_TRY_ADDREF_P(value);
34032 							}
34033 						} else {
34034 							value = Z_REFVAL_P(value);
34035 							Z_TRY_ADDREF_P(value);
34036 						}
34037 					} else if (IS_TMP_VAR == IS_CV) {
34038 						Z_TRY_ADDREF_P(value);
34039 					}
34040 				}
34041 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
34042 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34043 					ZVAL_COPY(EX_VAR(opline->result.var), value);
34044 				}
34045 				goto exit_assign_obj;
34046 			}
34047 		}
34048 	}
34049 
34050 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
34051 		ZVAL_DEREF(value);
34052 	}
34053 
34054 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34055 		name = Z_STR_P(property);
34056 	} else {
34057 		name = zval_try_get_tmp_string(property, &tmp_name);
34058 		if (UNEXPECTED(!name)) {
34059 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
34060 			UNDEF_RESULT();
34061 			goto exit_assign_obj;
34062 		}
34063 	}
34064 
34065 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
34066 
34067 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34068 		zend_tmp_string_release(tmp_name);
34069 	}
34070 
34071 free_and_exit_assign_obj:
34072 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34073 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
34074 	}
34075 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
34076 exit_assign_obj:
34077 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34078 
34079 	/* assign_obj has two opcodes! */
34080 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34081 }
34082 
34083 /* 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)34084 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34085 {
34086 	USE_OPLINE
34087 	zval *object, *property, *value, tmp;
34088 	zend_object *zobj;
34089 	zend_string *name, *tmp_name;
34090 
34091 	SAVE_OPLINE();
34092 	object = &EX(This);
34093 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34094 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
34095 
34096 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34097 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34098 			object = Z_REFVAL_P(object);
34099 			goto assign_object;
34100 		}
34101 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
34102 		value = &EG(uninitialized_zval);
34103 		goto free_and_exit_assign_obj;
34104 	}
34105 
34106 assign_object:
34107 	zobj = Z_OBJ_P(object);
34108 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
34109 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
34110 		void **cache_slot = CACHE_ADDR(opline->extended_value);
34111 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
34112 		zend_object *zobj = Z_OBJ_P(object);
34113 		zval *property_val;
34114 
34115 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
34116 			property_val = OBJ_PROP(zobj, prop_offset);
34117 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
34118 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
34119 
34120 				if (UNEXPECTED(prop_info != NULL)) {
34121 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
34122 					goto free_and_exit_assign_obj;
34123 				} else {
34124 fast_assign_obj:
34125 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
34126 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34127 						ZVAL_COPY(EX_VAR(opline->result.var), value);
34128 					}
34129 					goto exit_assign_obj;
34130 				}
34131 			}
34132 		} else {
34133 			if (EXPECTED(zobj->properties != NULL)) {
34134 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
34135 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
34136 						GC_DELREF(zobj->properties);
34137 					}
34138 					zobj->properties = zend_array_dup(zobj->properties);
34139 				}
34140 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
34141 				if (property_val) {
34142 					goto fast_assign_obj;
34143 				}
34144 			}
34145 
34146 			if (!zobj->ce->__set) {
34147 
34148 				if (EXPECTED(zobj->properties == NULL)) {
34149 					rebuild_object_properties(zobj);
34150 				}
34151 				if (IS_VAR == IS_CONST) {
34152 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
34153 						Z_ADDREF_P(value);
34154 					}
34155 				} else if (IS_VAR != IS_TMP_VAR) {
34156 					if (Z_ISREF_P(value)) {
34157 						if (IS_VAR == IS_VAR) {
34158 							zend_reference *ref = Z_REF_P(value);
34159 							if (GC_DELREF(ref) == 0) {
34160 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
34161 								efree_size(ref, sizeof(zend_reference));
34162 								value = &tmp;
34163 							} else {
34164 								value = Z_REFVAL_P(value);
34165 								Z_TRY_ADDREF_P(value);
34166 							}
34167 						} else {
34168 							value = Z_REFVAL_P(value);
34169 							Z_TRY_ADDREF_P(value);
34170 						}
34171 					} else if (IS_VAR == IS_CV) {
34172 						Z_TRY_ADDREF_P(value);
34173 					}
34174 				}
34175 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
34176 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34177 					ZVAL_COPY(EX_VAR(opline->result.var), value);
34178 				}
34179 				goto exit_assign_obj;
34180 			}
34181 		}
34182 	}
34183 
34184 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
34185 		ZVAL_DEREF(value);
34186 	}
34187 
34188 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34189 		name = Z_STR_P(property);
34190 	} else {
34191 		name = zval_try_get_tmp_string(property, &tmp_name);
34192 		if (UNEXPECTED(!name)) {
34193 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
34194 			UNDEF_RESULT();
34195 			goto exit_assign_obj;
34196 		}
34197 	}
34198 
34199 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
34200 
34201 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34202 		zend_tmp_string_release(tmp_name);
34203 	}
34204 
34205 free_and_exit_assign_obj:
34206 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34207 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
34208 	}
34209 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
34210 exit_assign_obj:
34211 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34212 
34213 	/* assign_obj has two opcodes! */
34214 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34215 }
34216 
34217 /* 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)34218 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34219 {
34220 	USE_OPLINE
34221 	zval *object, *property, *value, tmp;
34222 	zend_object *zobj;
34223 	zend_string *name, *tmp_name;
34224 
34225 	SAVE_OPLINE();
34226 	object = &EX(This);
34227 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34228 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
34229 
34230 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34231 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34232 			object = Z_REFVAL_P(object);
34233 			goto assign_object;
34234 		}
34235 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
34236 		value = &EG(uninitialized_zval);
34237 		goto free_and_exit_assign_obj;
34238 	}
34239 
34240 assign_object:
34241 	zobj = Z_OBJ_P(object);
34242 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
34243 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
34244 		void **cache_slot = CACHE_ADDR(opline->extended_value);
34245 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
34246 		zend_object *zobj = Z_OBJ_P(object);
34247 		zval *property_val;
34248 
34249 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
34250 			property_val = OBJ_PROP(zobj, prop_offset);
34251 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
34252 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
34253 
34254 				if (UNEXPECTED(prop_info != NULL)) {
34255 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
34256 					goto free_and_exit_assign_obj;
34257 				} else {
34258 fast_assign_obj:
34259 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
34260 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34261 						ZVAL_COPY(EX_VAR(opline->result.var), value);
34262 					}
34263 					goto exit_assign_obj;
34264 				}
34265 			}
34266 		} else {
34267 			if (EXPECTED(zobj->properties != NULL)) {
34268 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
34269 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
34270 						GC_DELREF(zobj->properties);
34271 					}
34272 					zobj->properties = zend_array_dup(zobj->properties);
34273 				}
34274 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
34275 				if (property_val) {
34276 					goto fast_assign_obj;
34277 				}
34278 			}
34279 
34280 			if (!zobj->ce->__set) {
34281 
34282 				if (EXPECTED(zobj->properties == NULL)) {
34283 					rebuild_object_properties(zobj);
34284 				}
34285 				if (IS_CV == IS_CONST) {
34286 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
34287 						Z_ADDREF_P(value);
34288 					}
34289 				} else if (IS_CV != IS_TMP_VAR) {
34290 					if (Z_ISREF_P(value)) {
34291 						if (IS_CV == IS_VAR) {
34292 							zend_reference *ref = Z_REF_P(value);
34293 							if (GC_DELREF(ref) == 0) {
34294 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
34295 								efree_size(ref, sizeof(zend_reference));
34296 								value = &tmp;
34297 							} else {
34298 								value = Z_REFVAL_P(value);
34299 								Z_TRY_ADDREF_P(value);
34300 							}
34301 						} else {
34302 							value = Z_REFVAL_P(value);
34303 							Z_TRY_ADDREF_P(value);
34304 						}
34305 					} else if (IS_CV == IS_CV) {
34306 						Z_TRY_ADDREF_P(value);
34307 					}
34308 				}
34309 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
34310 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34311 					ZVAL_COPY(EX_VAR(opline->result.var), value);
34312 				}
34313 				goto exit_assign_obj;
34314 			}
34315 		}
34316 	}
34317 
34318 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
34319 		ZVAL_DEREF(value);
34320 	}
34321 
34322 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34323 		name = Z_STR_P(property);
34324 	} else {
34325 		name = zval_try_get_tmp_string(property, &tmp_name);
34326 		if (UNEXPECTED(!name)) {
34327 
34328 			UNDEF_RESULT();
34329 			goto exit_assign_obj;
34330 		}
34331 	}
34332 
34333 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
34334 
34335 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34336 		zend_tmp_string_release(tmp_name);
34337 	}
34338 
34339 free_and_exit_assign_obj:
34340 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34341 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
34342 	}
34343 
34344 exit_assign_obj:
34345 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34346 
34347 	/* assign_obj has two opcodes! */
34348 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34349 }
34350 
34351 /* 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)34352 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34353 {
34354 	USE_OPLINE
34355 	zval *property, *container, *value_ptr;
34356 
34357 	SAVE_OPLINE();
34358 
34359 	container = &EX(This);
34360 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34361 
34362 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
34363 
34364 	if (1) {
34365 		if (IS_UNUSED == IS_UNUSED) {
34366 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34367 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34368 			} else {
34369 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34370 			}
34371 		} else {
34372 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34373 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34374 			} else {
34375 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34376 			}
34377 		}
34378 	} else {
34379 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
34380 	}
34381 
34382 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34383 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
34384 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34385 }
34386 
34387 /* 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)34388 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34389 {
34390 	USE_OPLINE
34391 	zval *property, *container, *value_ptr;
34392 
34393 	SAVE_OPLINE();
34394 
34395 	container = &EX(This);
34396 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34397 
34398 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
34399 
34400 	if (1) {
34401 		if (IS_UNUSED == IS_UNUSED) {
34402 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34403 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34404 			} else {
34405 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34406 			}
34407 		} else {
34408 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34409 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34410 			} else {
34411 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
34412 			}
34413 		}
34414 	} else {
34415 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
34416 	}
34417 
34418 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34419 
34420 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34421 }
34422 
34423 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34424 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34425 {
34426 	USE_OPLINE
34427 	zend_string **rope;
34428 	zval *var;
34429 
34430 	/* Compiler allocates the necessary number of zval slots to keep the rope */
34431 	rope = (zend_string**)EX_VAR(opline->result.var);
34432 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34433 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34434 		rope[0] = Z_STR_P(var);
34435 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
34436 			Z_ADDREF_P(var);
34437 		}
34438 	} else {
34439 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34440 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
34441 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
34442 				rope[0] = zend_string_copy(Z_STR_P(var));
34443 			} else {
34444 				rope[0] = Z_STR_P(var);
34445 			}
34446 		} else {
34447 			SAVE_OPLINE();
34448 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
34449 				ZVAL_UNDEFINED_OP2();
34450 			}
34451 			rope[0] = zval_get_string_func(var);
34452 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34453 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34454 		}
34455 	}
34456 	ZEND_VM_NEXT_OPCODE();
34457 }
34458 
ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34460 {
34461 	zval *class_name;
34462 	USE_OPLINE
34463 
34464 	SAVE_OPLINE();
34465 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
34466 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
34467 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34468 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34469 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
34470 
34471 		if (UNEXPECTED(ce == NULL)) {
34472 			class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34473 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
34474 			CACHE_PTR(opline->extended_value, ce);
34475 		}
34476 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
34477 	} else {
34478 		class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34479 try_class_name:
34480 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
34481 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
34482 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
34483 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
34484 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
34485 			class_name = Z_REFVAL_P(class_name);
34486 			goto try_class_name;
34487 		} else {
34488 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
34489 				ZVAL_UNDEFINED_OP2();
34490 				if (UNEXPECTED(EG(exception) != NULL)) {
34491 					HANDLE_EXCEPTION();
34492 				}
34493 			}
34494 			zend_throw_error(NULL, "Class name must be a valid object or a string");
34495 		}
34496 	}
34497 
34498 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34499 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34500 }
34501 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34502 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34503 {
34504 	USE_OPLINE
34505 	zval *function_name;
34506 	zval *object;
34507 	zend_function *fbc;
34508 	zend_class_entry *called_scope;
34509 	zend_object *obj;
34510 	zend_execute_data *call;
34511 	uint32_t call_info;
34512 
34513 	SAVE_OPLINE();
34514 
34515 	object = &EX(This);
34516 
34517 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34518 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34519 	}
34520 
34521 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
34522 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
34523 		do {
34524 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
34525 				function_name = Z_REFVAL_P(function_name);
34526 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
34527 					break;
34528 				}
34529 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
34530 				ZVAL_UNDEFINED_OP2();
34531 				if (UNEXPECTED(EG(exception) != NULL)) {
34532 
34533 					HANDLE_EXCEPTION();
34534 				}
34535 			}
34536 			zend_throw_error(NULL, "Method name must be a string");
34537 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34538 
34539 			HANDLE_EXCEPTION();
34540 		} while (0);
34541 	}
34542 
34543 	if (IS_UNUSED == IS_UNUSED) {
34544 		obj = Z_OBJ_P(object);
34545 	} else {
34546 		do {
34547 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
34548 				obj = Z_OBJ_P(object);
34549 			} else {
34550 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
34551 					zend_reference *ref = Z_REF_P(object);
34552 
34553 					object = &ref->val;
34554 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
34555 						obj = Z_OBJ_P(object);
34556 						if (IS_UNUSED & IS_VAR) {
34557 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
34558 								efree_size(ref, sizeof(zend_reference));
34559 							} else {
34560 								Z_ADDREF_P(object);
34561 							}
34562 						}
34563 						break;
34564 					}
34565 				}
34566 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34567 					object = ZVAL_UNDEFINED_OP1();
34568 					if (UNEXPECTED(EG(exception) != NULL)) {
34569 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34570 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34571 						}
34572 						HANDLE_EXCEPTION();
34573 					}
34574 				}
34575 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34576 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34577 				}
34578 				zend_invalid_method_call(object, function_name);
34579 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34580 
34581 				HANDLE_EXCEPTION();
34582 			}
34583 		} while (0);
34584 	}
34585 
34586 	called_scope = obj->ce;
34587 
34588 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
34589 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
34590 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
34591 	} else {
34592 	    zend_object *orig_obj = obj;
34593 
34594 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34595 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34596 		}
34597 
34598 		/* First, locate the function. */
34599 		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));
34600 		if (UNEXPECTED(fbc == NULL)) {
34601 			if (EXPECTED(!EG(exception))) {
34602 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
34603 			}
34604 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34605 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
34606 				zend_objects_store_del(orig_obj);
34607 			}
34608 			HANDLE_EXCEPTION();
34609 		}
34610 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
34611 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
34612 		    EXPECTED(obj == orig_obj)) {
34613 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
34614 		}
34615 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
34616 			GC_ADDREF(obj); /* For $this pointer */
34617 			if (GC_DELREF(orig_obj) == 0) {
34618 				zend_objects_store_del(orig_obj);
34619 			}
34620 		}
34621 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34622 			init_func_run_time_cache(&fbc->op_array);
34623 		}
34624 	}
34625 
34626 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34627 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34628 	}
34629 
34630 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
34631 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
34632 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
34633 			zend_objects_store_del(obj);
34634 			if (UNEXPECTED(EG(exception))) {
34635 				HANDLE_EXCEPTION();
34636 			}
34637 		}
34638 		/* call static method */
34639 		obj = (zend_object*)called_scope;
34640 		call_info = ZEND_CALL_NESTED_FUNCTION;
34641 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
34642 		if (IS_UNUSED == IS_CV) {
34643 			GC_ADDREF(obj); /* For $this pointer */
34644 		}
34645 		/* CV may be changed indirectly (e.g. when it's a reference) */
34646 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
34647 	}
34648 
34649 	call = zend_vm_stack_push_call_frame(call_info,
34650 		fbc, opline->extended_value, obj);
34651 	call->prev_execute_data = EX(call);
34652 	EX(call) = call;
34653 
34654 	ZEND_VM_NEXT_OPCODE();
34655 }
34656 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34657 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34658 {
34659 	USE_OPLINE
34660 	zval *function_name;
34661 	zend_class_entry *ce;
34662 	uint32_t call_info;
34663 	zend_function *fbc;
34664 	zend_execute_data *call;
34665 
34666 	SAVE_OPLINE();
34667 
34668 	if (IS_UNUSED == IS_CONST) {
34669 		/* no function found. try a static method in class */
34670 		ce = CACHED_PTR(opline->result.num);
34671 		if (UNEXPECTED(ce == NULL)) {
34672 			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);
34673 			if (UNEXPECTED(ce == NULL)) {
34674 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34675 				HANDLE_EXCEPTION();
34676 			}
34677 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34678 				CACHE_PTR(opline->result.num, ce);
34679 			}
34680 		}
34681 	} else if (IS_UNUSED == IS_UNUSED) {
34682 		ce = zend_fetch_class(NULL, opline->op1.num);
34683 		if (UNEXPECTED(ce == NULL)) {
34684 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34685 			HANDLE_EXCEPTION();
34686 		}
34687 	} else {
34688 		ce = Z_CE_P(EX_VAR(opline->op1.var));
34689 	}
34690 
34691 	if (IS_UNUSED == IS_CONST &&
34692 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
34693 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
34694 		/* nothing to do */
34695 	} else if (IS_UNUSED != IS_CONST &&
34696 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
34697 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
34698 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
34699 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
34700 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34701 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34702 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
34703 				do {
34704 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
34705 						function_name = Z_REFVAL_P(function_name);
34706 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
34707 							break;
34708 						}
34709 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
34710 						ZVAL_UNDEFINED_OP2();
34711 						if (UNEXPECTED(EG(exception) != NULL)) {
34712 							HANDLE_EXCEPTION();
34713 						}
34714 					}
34715 					zend_throw_error(NULL, "Method name must be a string");
34716 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34717 					HANDLE_EXCEPTION();
34718 				} while (0);
34719 			}
34720 		}
34721 
34722 		if (ce->get_static_method) {
34723 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
34724 		} else {
34725 			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));
34726 		}
34727 		if (UNEXPECTED(fbc == NULL)) {
34728 			if (EXPECTED(!EG(exception))) {
34729 				zend_undefined_method(ce, Z_STR_P(function_name));
34730 			}
34731 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34732 			HANDLE_EXCEPTION();
34733 		}
34734 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
34735 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
34736 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
34737 		}
34738 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34739 			init_func_run_time_cache(&fbc->op_array);
34740 		}
34741 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34742 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34743 		}
34744 	} else {
34745 		if (UNEXPECTED(ce->constructor == NULL)) {
34746 			zend_throw_error(NULL, "Cannot call constructor");
34747 			HANDLE_EXCEPTION();
34748 		}
34749 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
34750 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
34751 			HANDLE_EXCEPTION();
34752 		}
34753 		fbc = ce->constructor;
34754 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34755 			init_func_run_time_cache(&fbc->op_array);
34756 		}
34757 	}
34758 
34759 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
34760 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
34761 			ce = (zend_class_entry*)Z_OBJ(EX(This));
34762 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
34763 		} else {
34764 			zend_non_static_method_call(fbc);
34765 			HANDLE_EXCEPTION();
34766 		}
34767 	} else {
34768 		/* previous opcode is ZEND_FETCH_CLASS */
34769 		if (IS_UNUSED == IS_UNUSED
34770 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
34771 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
34772 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
34773 				ce = Z_OBJCE(EX(This));
34774 			} else {
34775 				ce = Z_CE(EX(This));
34776 			}
34777 		}
34778 		call_info = ZEND_CALL_NESTED_FUNCTION;
34779 	}
34780 
34781 	call = zend_vm_stack_push_call_frame(call_info,
34782 		fbc, opline->extended_value, ce);
34783 	call->prev_execute_data = EX(call);
34784 	EX(call) = call;
34785 
34786 	ZEND_VM_NEXT_OPCODE();
34787 }
34788 
ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34789 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34790 {
34791 	zval *array;
34792 	uint32_t size;
34793 	USE_OPLINE
34794 
34795 	array = EX_VAR(opline->result.var);
34796 	if (IS_UNUSED != IS_UNUSED) {
34797 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
34798 		ZVAL_ARR(array, zend_new_array(size));
34799 		/* Explicitly initialize array as not-packed if flag is set */
34800 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
34801 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
34802 		}
34803 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34804 	} else {
34805 		ZVAL_ARR(array, zend_new_array(0));
34806 		ZEND_VM_NEXT_OPCODE();
34807 	}
34808 }
34809 
ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34810 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34811 {
34812 	USE_OPLINE
34813 	zval *container;
34814 	zval *offset;
34815 	zend_string *name, *tmp_name;
34816 
34817 	SAVE_OPLINE();
34818 	container = &EX(This);
34819 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34820 
34821 	do {
34822 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
34823 			if (Z_ISREF_P(container)) {
34824 				container = Z_REFVAL_P(container);
34825 				if (Z_TYPE_P(container) != IS_OBJECT) {
34826 					if (IS_UNUSED == IS_CV
34827 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
34828 						ZVAL_UNDEFINED_OP1();
34829 					}
34830 					break;
34831 				}
34832 			} else {
34833 				break;
34834 			}
34835 		}
34836 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34837 			name = Z_STR_P(offset);
34838 		} else {
34839 			name = zval_try_get_tmp_string(offset, &tmp_name);
34840 			if (UNEXPECTED(!name)) {
34841 				break;
34842 			}
34843 		}
34844 		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));
34845 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34846 			zend_tmp_string_release(tmp_name);
34847 		}
34848 	} while (0);
34849 
34850 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34851 
34852 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34853 }
34854 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34855 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34856 {
34857 	USE_OPLINE
34858 	zval *container;
34859 	int result;
34860 	zval *offset;
34861 	zend_string *name, *tmp_name;
34862 
34863 	SAVE_OPLINE();
34864 	container = &EX(This);
34865 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34866 
34867 	if (IS_UNUSED == IS_CONST ||
34868 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
34869 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
34870 			container = Z_REFVAL_P(container);
34871 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
34872 				result = (opline->extended_value & ZEND_ISEMPTY);
34873 				goto isset_object_finish;
34874 			}
34875 		} else {
34876 			result = (opline->extended_value & ZEND_ISEMPTY);
34877 			goto isset_object_finish;
34878 		}
34879 	}
34880 
34881 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34882 		name = Z_STR_P(offset);
34883 	} else {
34884 		name = zval_try_get_tmp_string(offset, &tmp_name);
34885 		if (UNEXPECTED(!name)) {
34886 			result = 0;
34887 			goto isset_object_finish;
34888 		}
34889 	}
34890 
34891 	result =
34892 		(opline->extended_value & ZEND_ISEMPTY) ^
34893 		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));
34894 
34895 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34896 		zend_tmp_string_release(tmp_name);
34897 	}
34898 
34899 isset_object_finish:
34900 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34901 
34902 	ZEND_VM_SMART_BRANCH(result, 1);
34903 }
34904 
ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34905 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34906 {
34907 	USE_OPLINE
34908 
34909 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
34910 
34911 	SAVE_OPLINE();
34912 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
34913 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34914 	}
34915 
34916 	/* Destroy the previously yielded value */
34917 	zval_ptr_dtor(&generator->value);
34918 
34919 	/* Destroy the previously yielded key */
34920 	zval_ptr_dtor(&generator->key);
34921 
34922 	/* Set the new yielded value */
34923 	if (IS_UNUSED != IS_UNUSED) {
34924 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
34925 			/* Constants and temporary variables aren't yieldable by reference,
34926 			 * but we still allow them with a notice. */
34927 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
34928 				zval *value;
34929 
34930 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34931 
34932 				value = NULL;
34933 				ZVAL_COPY_VALUE(&generator->value, value);
34934 				if (IS_UNUSED == IS_CONST) {
34935 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
34936 						Z_ADDREF(generator->value);
34937 					}
34938 				}
34939 			} else {
34940 				zval *value_ptr = NULL;
34941 
34942 				/* If a function call result is yielded and the function did
34943 				 * not return by reference we throw a notice. */
34944 				do {
34945 					if (IS_UNUSED == IS_VAR) {
34946 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
34947 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
34948 						 && !Z_ISREF_P(value_ptr)) {
34949 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34950 							ZVAL_COPY(&generator->value, value_ptr);
34951 							break;
34952 						}
34953 					}
34954 					if (Z_ISREF_P(value_ptr)) {
34955 						Z_ADDREF_P(value_ptr);
34956 					} else {
34957 						ZVAL_MAKE_REF_EX(value_ptr, 2);
34958 					}
34959 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
34960 				} while (0);
34961 
34962 			}
34963 		} else {
34964 			zval *value = NULL;
34965 
34966 			/* Consts, temporary variables and references need copying */
34967 			if (IS_UNUSED == IS_CONST) {
34968 				ZVAL_COPY_VALUE(&generator->value, value);
34969 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
34970 					Z_ADDREF(generator->value);
34971 				}
34972 			} else if (IS_UNUSED == IS_TMP_VAR) {
34973 				ZVAL_COPY_VALUE(&generator->value, value);
34974             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
34975 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
34976 
34977 			} else {
34978 				ZVAL_COPY_VALUE(&generator->value, value);
34979 				if (IS_UNUSED == IS_CV) {
34980 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
34981 				}
34982 			}
34983 		}
34984 	} else {
34985 		/* If no value was specified yield null */
34986 		ZVAL_NULL(&generator->value);
34987 	}
34988 
34989 	/* Set the new yielded key */
34990 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
34991 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34992 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
34993 			key = Z_REFVAL_P(key);
34994 		}
34995 		ZVAL_COPY(&generator->key, key);
34996 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34997 
34998 		if (Z_TYPE(generator->key) == IS_LONG
34999 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
35000 		) {
35001 			generator->largest_used_integer_key = Z_LVAL(generator->key);
35002 		}
35003 	} else {
35004 		/* If no key was specified we use auto-increment keys */
35005 		generator->largest_used_integer_key++;
35006 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
35007 	}
35008 
35009 	if (RETURN_VALUE_USED(opline)) {
35010 		/* If the return value of yield is used set the send
35011 		 * target and initialize it to NULL */
35012 		generator->send_target = EX_VAR(opline->result.var);
35013 		ZVAL_NULL(generator->send_target);
35014 	} else {
35015 		generator->send_target = NULL;
35016 	}
35017 
35018 	/* We increment to the next op, so we are at the correct position when the
35019 	 * generator is resumed. */
35020 	ZEND_VM_INC_OPCODE();
35021 
35022 	/* The GOTO VM uses a local opline variable. We need to set the opline
35023 	 * variable in execute_data so we don't resume at an old position. */
35024 	SAVE_OPLINE();
35025 
35026 	ZEND_VM_RETURN();
35027 }
35028 
ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35029 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35030 {
35031 	zval *class_name;
35032 	USE_OPLINE
35033 
35034 	SAVE_OPLINE();
35035 	if (IS_UNUSED == IS_UNUSED) {
35036 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
35037 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35038 	} else if (IS_UNUSED == IS_CONST) {
35039 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
35040 
35041 		if (UNEXPECTED(ce == NULL)) {
35042 			class_name = NULL;
35043 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
35044 			CACHE_PTR(opline->extended_value, ce);
35045 		}
35046 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
35047 	} else {
35048 		class_name = NULL;
35049 try_class_name:
35050 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
35051 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
35052 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
35053 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
35054 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
35055 			class_name = Z_REFVAL_P(class_name);
35056 			goto try_class_name;
35057 		} else {
35058 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
35059 				ZVAL_UNDEFINED_OP2();
35060 				if (UNEXPECTED(EG(exception) != NULL)) {
35061 					HANDLE_EXCEPTION();
35062 				}
35063 			}
35064 			zend_throw_error(NULL, "Class name must be a valid object or a string");
35065 		}
35066 	}
35067 
35068 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35069 }
35070 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35071 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35072 {
35073 	USE_OPLINE
35074 	zval *function_name;
35075 	zend_class_entry *ce;
35076 	uint32_t call_info;
35077 	zend_function *fbc;
35078 	zend_execute_data *call;
35079 
35080 	SAVE_OPLINE();
35081 
35082 	if (IS_UNUSED == IS_CONST) {
35083 		/* no function found. try a static method in class */
35084 		ce = CACHED_PTR(opline->result.num);
35085 		if (UNEXPECTED(ce == NULL)) {
35086 			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);
35087 			if (UNEXPECTED(ce == NULL)) {
35088 
35089 				HANDLE_EXCEPTION();
35090 			}
35091 			if (IS_UNUSED != IS_CONST) {
35092 				CACHE_PTR(opline->result.num, ce);
35093 			}
35094 		}
35095 	} else if (IS_UNUSED == IS_UNUSED) {
35096 		ce = zend_fetch_class(NULL, opline->op1.num);
35097 		if (UNEXPECTED(ce == NULL)) {
35098 
35099 			HANDLE_EXCEPTION();
35100 		}
35101 	} else {
35102 		ce = Z_CE_P(EX_VAR(opline->op1.var));
35103 	}
35104 
35105 	if (IS_UNUSED == IS_CONST &&
35106 	    IS_UNUSED == IS_CONST &&
35107 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
35108 		/* nothing to do */
35109 	} else if (IS_UNUSED != IS_CONST &&
35110 	           IS_UNUSED == IS_CONST &&
35111 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
35112 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
35113 	} else if (IS_UNUSED != IS_UNUSED) {
35114 		function_name = NULL;
35115 		if (IS_UNUSED != IS_CONST) {
35116 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
35117 				do {
35118 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
35119 						function_name = Z_REFVAL_P(function_name);
35120 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
35121 							break;
35122 						}
35123 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
35124 						ZVAL_UNDEFINED_OP2();
35125 						if (UNEXPECTED(EG(exception) != NULL)) {
35126 							HANDLE_EXCEPTION();
35127 						}
35128 					}
35129 					zend_throw_error(NULL, "Method name must be a string");
35130 
35131 					HANDLE_EXCEPTION();
35132 				} while (0);
35133 			}
35134 		}
35135 
35136 		if (ce->get_static_method) {
35137 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
35138 		} else {
35139 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
35140 		}
35141 		if (UNEXPECTED(fbc == NULL)) {
35142 			if (EXPECTED(!EG(exception))) {
35143 				zend_undefined_method(ce, Z_STR_P(function_name));
35144 			}
35145 
35146 			HANDLE_EXCEPTION();
35147 		}
35148 		if (IS_UNUSED == IS_CONST &&
35149 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
35150 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
35151 		}
35152 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
35153 			init_func_run_time_cache(&fbc->op_array);
35154 		}
35155 		if (IS_UNUSED != IS_CONST) {
35156 
35157 		}
35158 	} else {
35159 		if (UNEXPECTED(ce->constructor == NULL)) {
35160 			zend_throw_error(NULL, "Cannot call constructor");
35161 			HANDLE_EXCEPTION();
35162 		}
35163 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
35164 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
35165 			HANDLE_EXCEPTION();
35166 		}
35167 		fbc = ce->constructor;
35168 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
35169 			init_func_run_time_cache(&fbc->op_array);
35170 		}
35171 	}
35172 
35173 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
35174 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
35175 			ce = (zend_class_entry*)Z_OBJ(EX(This));
35176 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
35177 		} else {
35178 			zend_non_static_method_call(fbc);
35179 			HANDLE_EXCEPTION();
35180 		}
35181 	} else {
35182 		/* previous opcode is ZEND_FETCH_CLASS */
35183 		if (IS_UNUSED == IS_UNUSED
35184 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
35185 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
35186 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
35187 				ce = Z_OBJCE(EX(This));
35188 			} else {
35189 				ce = Z_CE(EX(This));
35190 			}
35191 		}
35192 		call_info = ZEND_CALL_NESTED_FUNCTION;
35193 	}
35194 
35195 	call = zend_vm_stack_push_call_frame(call_info,
35196 		fbc, opline->extended_value, ce);
35197 	call->prev_execute_data = EX(call);
35198 	EX(call) = call;
35199 
35200 	ZEND_VM_NEXT_OPCODE();
35201 }
35202 
ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35203 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35204 {
35205 	if (IS_UNUSED == IS_UNUSED) {
35206 		SAVE_OPLINE();
35207 		zend_verify_missing_return_type(EX(func));
35208 		HANDLE_EXCEPTION();
35209 	} else {
35210 /* prevents "undefined variable opline" errors */
35211 #if 0 || (IS_UNUSED != IS_UNUSED)
35212 		USE_OPLINE
35213 		zval *retval_ref, *retval_ptr;
35214 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
35215 		retval_ref = retval_ptr = NULL;
35216 
35217 		if (IS_UNUSED == IS_CONST) {
35218 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
35219 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
35220 		} else if (IS_UNUSED == IS_VAR) {
35221 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
35222 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
35223 			}
35224 			ZVAL_DEREF(retval_ptr);
35225 		} else if (IS_UNUSED == IS_CV) {
35226 			ZVAL_DEREF(retval_ptr);
35227 		}
35228 
35229 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
35230 			ZEND_VM_NEXT_OPCODE();
35231 		}
35232 
35233 		if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
35234 			SAVE_OPLINE();
35235 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
35236 			if (UNEXPECTED(EG(exception))) {
35237 				HANDLE_EXCEPTION();
35238 			}
35239 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
35240 				ZEND_VM_NEXT_OPCODE();
35241 			}
35242 		}
35243 
35244 		zend_reference *ref = NULL;
35245 		void *cache_slot = CACHE_ADDR(opline->op2.num);
35246 		if (UNEXPECTED(retval_ref != retval_ptr)) {
35247 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
35248 				ref = Z_REF_P(retval_ref);
35249 			} else {
35250 				/* A cast might happen - unwrap the reference if this is a by-value return */
35251 				if (Z_REFCOUNT_P(retval_ref) == 1) {
35252 					ZVAL_UNREF(retval_ref);
35253 				} else {
35254 					Z_DELREF_P(retval_ref);
35255 					ZVAL_COPY(retval_ref, retval_ptr);
35256 				}
35257 				retval_ptr = retval_ref;
35258 			}
35259 		}
35260 
35261 		SAVE_OPLINE();
35262 		if (UNEXPECTED(!zend_check_type_slow(ret_info->type, retval_ptr, ref, cache_slot, NULL, 1, 0))) {
35263 			zend_verify_return_error(EX(func), retval_ptr);
35264 			HANDLE_EXCEPTION();
35265 		}
35266 		ZEND_VM_NEXT_OPCODE();
35267 #endif
35268 	}
35269 }
35270 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35271 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35272 {
35273 	USE_OPLINE
35274 	uint32_t arg_num;
35275 
35276 	if (IS_UNUSED == IS_CONST) {
35277 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
35278 		arg_num = zend_get_arg_offset_by_name(
35279 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
35280 		if (UNEXPECTED(arg_num == 0)) {
35281 			/* Treat this as a by-value argument, and throw an error during SEND. */
35282 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35283 			ZEND_VM_NEXT_OPCODE();
35284 		}
35285 	} else {
35286 		arg_num = opline->op2.num;
35287 	}
35288 
35289 	if (EXPECTED(0)) {
35290 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35291 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35292 		} else {
35293 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35294 		}
35295 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35296 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35297 	} else {
35298 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35299 	}
35300 	ZEND_VM_NEXT_OPCODE();
35301 }
35302 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35303 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35304 {
35305 	USE_OPLINE
35306 	uint32_t arg_num;
35307 
35308 	if (IS_UNUSED == IS_CONST) {
35309 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
35310 		arg_num = zend_get_arg_offset_by_name(
35311 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
35312 		if (UNEXPECTED(arg_num == 0)) {
35313 			/* Treat this as a by-value argument, and throw an error during SEND. */
35314 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35315 			ZEND_VM_NEXT_OPCODE();
35316 		}
35317 	} else {
35318 		arg_num = opline->op2.num;
35319 	}
35320 
35321 	if (EXPECTED(1)) {
35322 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35323 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35324 		} else {
35325 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35326 		}
35327 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35328 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35329 	} else {
35330 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
35331 	}
35332 	ZEND_VM_NEXT_OPCODE();
35333 }
35334 
ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35335 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35336 {
35337 	USE_OPLINE
35338 
35339 	zend_execute_data *call = execute_data->call;
35340 	if (EXPECTED(!(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF))) {
35341 		ZEND_VM_NEXT_OPCODE();
35342 	}
35343 
35344 	SAVE_OPLINE();
35345 	zend_handle_undef_args(call);
35346 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35347 }
35348 
ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35349 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35350 {
35351 	USE_OPLINE
35352 	zval *result;
35353 	zend_function *constructor;
35354 	zend_class_entry *ce;
35355 	zend_execute_data *call;
35356 
35357 	SAVE_OPLINE();
35358 	if (IS_UNUSED == IS_CONST) {
35359 		ce = CACHED_PTR(opline->op2.num);
35360 		if (UNEXPECTED(ce == NULL)) {
35361 			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);
35362 			if (UNEXPECTED(ce == NULL)) {
35363 				ZVAL_UNDEF(EX_VAR(opline->result.var));
35364 				HANDLE_EXCEPTION();
35365 			}
35366 			CACHE_PTR(opline->op2.num, ce);
35367 		}
35368 	} else if (IS_UNUSED == IS_UNUSED) {
35369 		ce = zend_fetch_class(NULL, opline->op1.num);
35370 		if (UNEXPECTED(ce == NULL)) {
35371 			ZVAL_UNDEF(EX_VAR(opline->result.var));
35372 			HANDLE_EXCEPTION();
35373 		}
35374 	} else {
35375 		ce = Z_CE_P(EX_VAR(opline->op1.var));
35376 	}
35377 
35378 	result = EX_VAR(opline->result.var);
35379 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
35380 		ZVAL_UNDEF(result);
35381 		HANDLE_EXCEPTION();
35382 	}
35383 
35384 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
35385 	if (constructor == NULL) {
35386 		if (UNEXPECTED(EG(exception))) {
35387 			HANDLE_EXCEPTION();
35388 		}
35389 
35390 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
35391 		 * opcode is DO_FCALL in case EXT instructions are used. */
35392 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
35393 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
35394 		}
35395 
35396 		/* Perform a dummy function call */
35397 		call = zend_vm_stack_push_call_frame(
35398 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
35399 			opline->extended_value, NULL);
35400 	} else {
35401 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
35402 			init_func_run_time_cache(&constructor->op_array);
35403 		}
35404 		/* We are not handling overloaded classes right now */
35405 		call = zend_vm_stack_push_call_frame(
35406 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
35407 			constructor,
35408 			opline->extended_value,
35409 			Z_OBJ_P(result));
35410 		Z_ADDREF_P(result);
35411 	}
35412 
35413 	call->prev_execute_data = EX(call);
35414 	EX(call) = call;
35415 	ZEND_VM_NEXT_OPCODE();
35416 }
35417 
ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35419 {
35420 	zval *array;
35421 	uint32_t size;
35422 	USE_OPLINE
35423 
35424 	array = EX_VAR(opline->result.var);
35425 	if (IS_UNUSED != IS_UNUSED) {
35426 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
35427 		ZVAL_ARR(array, zend_new_array(size));
35428 		/* Explicitly initialize array as not-packed if flag is set */
35429 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
35430 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
35431 		}
35432 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35433 	} else {
35434 		ZVAL_ARR(array, zend_new_array(0));
35435 		ZEND_VM_NEXT_OPCODE();
35436 	}
35437 }
35438 
ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35439 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35440 {
35441 	USE_OPLINE
35442 
35443 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
35444 
35445 	SAVE_OPLINE();
35446 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
35447 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35448 	}
35449 
35450 	/* Destroy the previously yielded value */
35451 	zval_ptr_dtor(&generator->value);
35452 
35453 	/* Destroy the previously yielded key */
35454 	zval_ptr_dtor(&generator->key);
35455 
35456 	/* Set the new yielded value */
35457 	if (IS_UNUSED != IS_UNUSED) {
35458 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
35459 			/* Constants and temporary variables aren't yieldable by reference,
35460 			 * but we still allow them with a notice. */
35461 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
35462 				zval *value;
35463 
35464 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
35465 
35466 				value = NULL;
35467 				ZVAL_COPY_VALUE(&generator->value, value);
35468 				if (IS_UNUSED == IS_CONST) {
35469 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
35470 						Z_ADDREF(generator->value);
35471 					}
35472 				}
35473 			} else {
35474 				zval *value_ptr = NULL;
35475 
35476 				/* If a function call result is yielded and the function did
35477 				 * not return by reference we throw a notice. */
35478 				do {
35479 					if (IS_UNUSED == IS_VAR) {
35480 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
35481 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
35482 						 && !Z_ISREF_P(value_ptr)) {
35483 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
35484 							ZVAL_COPY(&generator->value, value_ptr);
35485 							break;
35486 						}
35487 					}
35488 					if (Z_ISREF_P(value_ptr)) {
35489 						Z_ADDREF_P(value_ptr);
35490 					} else {
35491 						ZVAL_MAKE_REF_EX(value_ptr, 2);
35492 					}
35493 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
35494 				} while (0);
35495 
35496 			}
35497 		} else {
35498 			zval *value = NULL;
35499 
35500 			/* Consts, temporary variables and references need copying */
35501 			if (IS_UNUSED == IS_CONST) {
35502 				ZVAL_COPY_VALUE(&generator->value, value);
35503 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
35504 					Z_ADDREF(generator->value);
35505 				}
35506 			} else if (IS_UNUSED == IS_TMP_VAR) {
35507 				ZVAL_COPY_VALUE(&generator->value, value);
35508             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
35509 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
35510 
35511 			} else {
35512 				ZVAL_COPY_VALUE(&generator->value, value);
35513 				if (IS_UNUSED == IS_CV) {
35514 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
35515 				}
35516 			}
35517 		}
35518 	} else {
35519 		/* If no value was specified yield null */
35520 		ZVAL_NULL(&generator->value);
35521 	}
35522 
35523 	/* Set the new yielded key */
35524 	if (IS_UNUSED != IS_UNUSED) {
35525 		zval *key = NULL;
35526 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
35527 			key = Z_REFVAL_P(key);
35528 		}
35529 		ZVAL_COPY(&generator->key, key);
35530 
35531 		if (Z_TYPE(generator->key) == IS_LONG
35532 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
35533 		) {
35534 			generator->largest_used_integer_key = Z_LVAL(generator->key);
35535 		}
35536 	} else {
35537 		/* If no key was specified we use auto-increment keys */
35538 		generator->largest_used_integer_key++;
35539 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
35540 	}
35541 
35542 	if (RETURN_VALUE_USED(opline)) {
35543 		/* If the return value of yield is used set the send
35544 		 * target and initialize it to NULL */
35545 		generator->send_target = EX_VAR(opline->result.var);
35546 		ZVAL_NULL(generator->send_target);
35547 	} else {
35548 		generator->send_target = NULL;
35549 	}
35550 
35551 	/* We increment to the next op, so we are at the correct position when the
35552 	 * generator is resumed. */
35553 	ZEND_VM_INC_OPCODE();
35554 
35555 	/* The GOTO VM uses a local opline variable. We need to set the opline
35556 	 * variable in execute_data so we don't resume at an old position. */
35557 	SAVE_OPLINE();
35558 
35559 	ZEND_VM_RETURN();
35560 }
35561 
ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35562 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35563 {
35564 	USE_OPLINE
35565 
35566 	if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
35567 		zval *result = EX_VAR(opline->result.var);
35568 
35569 		ZVAL_OBJ(result, Z_OBJ(EX(This)));
35570 		Z_ADDREF_P(result);
35571 		ZEND_VM_NEXT_OPCODE();
35572 	} else {
35573 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35574 	}
35575 }
35576 
ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35577 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35578 {
35579 	USE_OPLINE
35580 
35581 	ZVAL_BOOL(EX_VAR(opline->result.var),
35582 		(opline->extended_value & ZEND_ISEMPTY) ^
35583 		 (Z_TYPE(EX(This)) == IS_OBJECT));
35584 	ZEND_VM_NEXT_OPCODE();
35585 }
35586 
ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35587 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35588 {
35589 	USE_OPLINE
35590 
35591 	if (IS_UNUSED == IS_UNUSED) {
35592 		if (UNEXPECTED(!EX(func)->common.scope)) {
35593 			SAVE_OPLINE();
35594 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
35595 			ZVAL_UNDEF(EX_VAR(opline->result.var));
35596 			HANDLE_EXCEPTION();
35597 		} else {
35598 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
35599 			ZEND_VM_NEXT_OPCODE();
35600 		}
35601 	} else {
35602 		zval *op1;
35603 
35604 		SAVE_OPLINE();
35605 		op1 = NULL;
35606 		while (1) {
35607 			if (Z_TYPE_P(op1) == IS_OBJECT) {
35608 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
35609 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
35610 				op1 = Z_REFVAL_P(op1);
35611 				continue;
35612 			} else {
35613 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
35614 					ZVAL_UNDEFINED_OP1();
35615 				}
35616 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
35617 				ZVAL_UNDEF(EX_VAR(opline->result.var));
35618 			}
35619 			break;
35620 		}
35621 
35622 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35623 	}
35624 }
35625 
ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35626 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35627 {
35628 	USE_OPLINE
35629 
35630 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
35631 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
35632 	} else if (Z_CE(EX(This))) {
35633 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
35634 	} else {
35635 		ZEND_ASSERT(!EX(func)->common.scope);
35636 		SAVE_OPLINE();
35637 		zend_throw_error(NULL, "get_called_class() must be called from within a class");
35638 		ZVAL_UNDEF(EX_VAR(opline->result.var));
35639 		HANDLE_EXCEPTION();
35640 	}
35641 	ZEND_VM_NEXT_OPCODE();
35642 }
35643 
ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35644 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35645 {
35646 	USE_OPLINE
35647 
35648 	ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
35649 	ZEND_VM_NEXT_OPCODE();
35650 }
35651 
ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35652 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35653 {
35654 	USE_OPLINE
35655 	zend_array *ht;
35656 	uint32_t arg_count, result_size, skip;
35657 
35658 	arg_count = EX_NUM_ARGS();
35659 	if (IS_UNUSED == IS_CONST) {
35660 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
35661 		if (arg_count < skip) {
35662 			result_size = 0;
35663 		} else {
35664 			result_size = arg_count - skip;
35665 		}
35666 	} else {
35667 		skip = 0;
35668 		result_size = arg_count;
35669 	}
35670 
35671 	if (result_size) {
35672 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
35673 
35674 		ht = zend_new_array(result_size);
35675 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
35676 		zend_hash_real_init_packed(ht);
35677 		ZEND_HASH_FILL_PACKED(ht) {
35678 			zval *p, *q;
35679 			uint32_t i = skip;
35680 			p = EX_VAR_NUM(i);
35681 			if (arg_count > first_extra_arg) {
35682 				while (i < first_extra_arg) {
35683 					q = p;
35684 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
35685 						ZVAL_DEREF(q);
35686 						if (Z_OPT_REFCOUNTED_P(q)) {
35687 							Z_ADDREF_P(q);
35688 						}
35689 						ZEND_HASH_FILL_SET(q);
35690 					} else {
35691 						ZEND_HASH_FILL_SET_NULL();
35692 					}
35693 					ZEND_HASH_FILL_NEXT();
35694 					p++;
35695 					i++;
35696 				}
35697 				if (skip < first_extra_arg) {
35698 					skip = 0;
35699 				} else {
35700 					skip -= first_extra_arg;
35701 				}
35702 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
35703 			}
35704 			while (i < arg_count) {
35705 				q = p;
35706 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
35707 					ZVAL_DEREF(q);
35708 					if (Z_OPT_REFCOUNTED_P(q)) {
35709 						Z_ADDREF_P(q);
35710 					}
35711 					ZEND_HASH_FILL_SET(q);
35712 				} else {
35713 					ZEND_HASH_FILL_SET_NULL();
35714 				}
35715 				ZEND_HASH_FILL_NEXT();
35716 				p++;
35717 				i++;
35718 			}
35719 		} ZEND_HASH_FILL_END();
35720 		ht->nNumOfElements = result_size;
35721 	} else {
35722 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
35723 	}
35724 	ZEND_VM_NEXT_OPCODE();
35725 }
35726 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35727 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35728 {
35729 	USE_OPLINE
35730 	zval *object;
35731 	zval *property;
35732 	zval *value;
35733 	zval *zptr;
35734 	void **cache_slot;
35735 	zend_property_info *prop_info;
35736 	zend_object *zobj;
35737 	zend_string *name, *tmp_name;
35738 
35739 	SAVE_OPLINE();
35740 	object = &EX(This);
35741 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35742 
35743 	do {
35744 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
35745 
35746 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35747 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35748 				object = Z_REFVAL_P(object);
35749 				goto assign_op_object;
35750 			}
35751 			if (IS_UNUSED == IS_CV
35752 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35753 				ZVAL_UNDEFINED_OP1();
35754 			}
35755 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
35756 			break;
35757 		}
35758 
35759 assign_op_object:
35760 		/* here we are sure we are dealing with an object */
35761 		zobj = Z_OBJ_P(object);
35762 		if (IS_CV == IS_CONST) {
35763 			name = Z_STR_P(property);
35764 		} else {
35765 			name = zval_try_get_tmp_string(property, &tmp_name);
35766 			if (UNEXPECTED(!name)) {
35767 				UNDEF_RESULT();
35768 				break;
35769 			}
35770 		}
35771 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
35772 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
35773 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
35774 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35775 					ZVAL_NULL(EX_VAR(opline->result.var));
35776 				}
35777 			} else {
35778 				zval *orig_zptr = zptr;
35779 				zend_reference *ref;
35780 
35781 				do {
35782 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
35783 						ref = Z_REF_P(zptr);
35784 						zptr = Z_REFVAL_P(zptr);
35785 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
35786 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
35787 							break;
35788 						}
35789 					}
35790 
35791 					if (IS_CV == IS_CONST) {
35792 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
35793 					} else {
35794 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
35795 					}
35796 					if (UNEXPECTED(prop_info)) {
35797 						/* special case for typed properties */
35798 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
35799 					} else {
35800 						zend_binary_op(zptr, zptr, value OPLINE_CC);
35801 					}
35802 				} while (0);
35803 
35804 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35805 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
35806 				}
35807 			}
35808 		} else {
35809 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
35810 		}
35811 		if (IS_CV != IS_CONST) {
35812 			zend_tmp_string_release(tmp_name);
35813 		}
35814 	} while (0);
35815 
35816 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
35817 
35818 
35819 	/* assign_obj has two opcodes! */
35820 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35821 }
35822 
35823 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35825 {
35826 	USE_OPLINE
35827 	zval *object;
35828 	zval *property;
35829 	zval *zptr;
35830 	void **cache_slot;
35831 	zend_property_info *prop_info;
35832 	zend_object *zobj;
35833 	zend_string *name, *tmp_name;
35834 
35835 	SAVE_OPLINE();
35836 	object = &EX(This);
35837 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35838 
35839 	do {
35840 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35841 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35842 				object = Z_REFVAL_P(object);
35843 				goto pre_incdec_object;
35844 			}
35845 			if (IS_UNUSED == IS_CV
35846 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35847 				ZVAL_UNDEFINED_OP1();
35848 			}
35849 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
35850 			break;
35851 		}
35852 
35853 pre_incdec_object:
35854 		/* here we are sure we are dealing with an object */
35855 		zobj = Z_OBJ_P(object);
35856 		if (IS_CV == IS_CONST) {
35857 			name = Z_STR_P(property);
35858 		} else {
35859 			name = zval_try_get_tmp_string(property, &tmp_name);
35860 			if (UNEXPECTED(!name)) {
35861 				UNDEF_RESULT();
35862 				break;
35863 			}
35864 		}
35865 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
35866 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
35867 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
35868 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35869 					ZVAL_NULL(EX_VAR(opline->result.var));
35870 				}
35871 			} else {
35872 				if (IS_CV == IS_CONST) {
35873 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
35874 				} else {
35875 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
35876 				}
35877 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
35878 			}
35879 		} else {
35880 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
35881 		}
35882 		if (IS_CV != IS_CONST) {
35883 			zend_tmp_string_release(tmp_name);
35884 		}
35885 	} while (0);
35886 
35887 
35888 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35889 }
35890 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35891 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35892 {
35893 	USE_OPLINE
35894 	zval *object;
35895 	zval *property;
35896 	zval *zptr;
35897 	void **cache_slot;
35898 	zend_property_info *prop_info;
35899 	zend_object *zobj;
35900 	zend_string *name, *tmp_name;
35901 
35902 	SAVE_OPLINE();
35903 	object = &EX(This);
35904 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35905 
35906 	do {
35907 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35908 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35909 				object = Z_REFVAL_P(object);
35910 				goto post_incdec_object;
35911 			}
35912 			if (IS_UNUSED == IS_CV
35913 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35914 				ZVAL_UNDEFINED_OP1();
35915 			}
35916 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
35917 			break;
35918 		}
35919 
35920 post_incdec_object:
35921 		/* here we are sure we are dealing with an object */
35922 		zobj = Z_OBJ_P(object);
35923 		if (IS_CV == IS_CONST) {
35924 			name = Z_STR_P(property);
35925 		} else {
35926 			name = zval_try_get_tmp_string(property, &tmp_name);
35927 			if (UNEXPECTED(!name)) {
35928 				ZVAL_UNDEF(EX_VAR(opline->result.var));
35929 				break;
35930 			}
35931 		}
35932 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
35933 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
35934 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
35935 				ZVAL_NULL(EX_VAR(opline->result.var));
35936 			} else {
35937 				if (IS_CV == IS_CONST) {
35938 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
35939 				} else {
35940 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
35941 				}
35942 
35943 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
35944 			}
35945 		} else {
35946 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
35947 		}
35948 		if (IS_CV != IS_CONST) {
35949 			zend_tmp_string_release(tmp_name);
35950 		}
35951 	} while (0);
35952 
35953 
35954 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35955 }
35956 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35957 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35958 {
35959 	USE_OPLINE
35960 	zval *container;
35961 	zval *offset;
35962 	void **cache_slot = NULL;
35963 
35964 	SAVE_OPLINE();
35965 	container = &EX(This);
35966 	offset = EX_VAR(opline->op2.var);
35967 
35968 	if (IS_UNUSED == IS_CONST ||
35969 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
35970 	    do {
35971 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
35972 				container = Z_REFVAL_P(container);
35973 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
35974 					break;
35975 				}
35976 			}
35977 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
35978 				ZVAL_UNDEFINED_OP1();
35979 			}
35980 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
35981 				ZVAL_UNDEFINED_OP2();
35982 			}
35983 			zend_wrong_property_read(container, offset);
35984 			ZVAL_NULL(EX_VAR(opline->result.var));
35985 			goto fetch_obj_r_finish;
35986 		} while (0);
35987 	}
35988 
35989 	/* here we are sure we are dealing with an object */
35990 	do {
35991 		zend_object *zobj = Z_OBJ_P(container);
35992 		zend_string *name, *tmp_name;
35993 		zval *retval;
35994 
35995 		if (IS_CV == IS_CONST) {
35996 			name = Z_STR_P(offset);
35997 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
35998 
35999 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
36000 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36001 
36002 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36003 					retval = OBJ_PROP(zobj, prop_offset);
36004 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
36005 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36006 							goto fetch_obj_r_copy;
36007 						} else {
36008 fetch_obj_r_fast_copy:
36009 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
36010 							ZEND_VM_NEXT_OPCODE();
36011 						}
36012 					}
36013 				} else if (EXPECTED(zobj->properties != NULL)) {
36014 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
36015 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
36016 
36017 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
36018 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
36019 
36020 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
36021 						        (EXPECTED(p->key == name) ||
36022 						         (EXPECTED(p->h == ZSTR_H(name)) &&
36023 						          EXPECTED(p->key != NULL) &&
36024 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
36025 								retval = &p->val;
36026 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36027 									goto fetch_obj_r_copy;
36028 								} else {
36029 									goto fetch_obj_r_fast_copy;
36030 								}
36031 							}
36032 						}
36033 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
36034 					}
36035 					retval = zend_hash_find_ex(zobj->properties, name, 1);
36036 					if (EXPECTED(retval)) {
36037 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
36038 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
36039 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36040 							goto fetch_obj_r_copy;
36041 						} else {
36042 							goto fetch_obj_r_fast_copy;
36043 						}
36044 					}
36045 				}
36046 			}
36047 		} else {
36048 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
36049 				ZVAL_UNDEFINED_OP2();
36050 			}
36051 			name = zval_try_get_tmp_string(offset, &tmp_name);
36052 			if (UNEXPECTED(!name)) {
36053 				ZVAL_UNDEF(EX_VAR(opline->result.var));
36054 				break;
36055 			}
36056 		}
36057 
36058 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
36059 
36060 		if (IS_CV != IS_CONST) {
36061 			zend_tmp_string_release(tmp_name);
36062 		}
36063 
36064 		if (retval != EX_VAR(opline->result.var)) {
36065 fetch_obj_r_copy:
36066 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
36067 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
36068 			zend_unwrap_reference(retval);
36069 		}
36070 	} while (0);
36071 
36072 fetch_obj_r_finish:
36073 
36074 
36075 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36076 }
36077 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36078 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36079 {
36080 	USE_OPLINE
36081 	zval *property, *container, *result;
36082 
36083 	SAVE_OPLINE();
36084 
36085 	container = &EX(This);
36086 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36087 	result = EX_VAR(opline->result.var);
36088 	zend_fetch_property_address(
36089 		result, container, IS_UNUSED, property, IS_CV,
36090 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
36091 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
36092 
36093 	if (IS_UNUSED == IS_VAR) {
36094 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
36095 	}
36096 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36097 }
36098 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36099 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36100 {
36101 	USE_OPLINE
36102 	zval *property, *container, *result;
36103 
36104 	SAVE_OPLINE();
36105 	container = &EX(This);
36106 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36107 	result = EX_VAR(opline->result.var);
36108 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
36109 
36110 	if (IS_UNUSED == IS_VAR) {
36111 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
36112 	}
36113 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36114 }
36115 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36117 {
36118 	USE_OPLINE
36119 	zval *container;
36120 	zval *offset;
36121 	void **cache_slot = NULL;
36122 
36123 	SAVE_OPLINE();
36124 	container = &EX(This);
36125 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36126 
36127 	if (IS_UNUSED == IS_CONST ||
36128 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
36129 		do {
36130 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
36131 				container = Z_REFVAL_P(container);
36132 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
36133 					break;
36134 				}
36135 			}
36136 			ZVAL_NULL(EX_VAR(opline->result.var));
36137 			goto fetch_obj_is_finish;
36138 		} while (0);
36139 	}
36140 
36141 	/* here we are sure we are dealing with an object */
36142 	do {
36143 		zend_object *zobj = Z_OBJ_P(container);
36144 		zend_string *name, *tmp_name;
36145 		zval *retval;
36146 
36147 		if (IS_CV == IS_CONST) {
36148 			name = Z_STR_P(offset);
36149 			cache_slot = CACHE_ADDR(opline->extended_value);
36150 
36151 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
36152 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36153 
36154 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36155 					retval = OBJ_PROP(zobj, prop_offset);
36156 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
36157 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36158 							goto fetch_obj_is_copy;
36159 						} else {
36160 fetch_obj_is_fast_copy:
36161 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
36162 							ZEND_VM_NEXT_OPCODE();
36163 						}
36164 					}
36165 				} else if (EXPECTED(zobj->properties != NULL)) {
36166 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
36167 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
36168 
36169 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
36170 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
36171 
36172 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
36173 						        (EXPECTED(p->key == name) ||
36174 						         (EXPECTED(p->h == ZSTR_H(name)) &&
36175 						          EXPECTED(p->key != NULL) &&
36176 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
36177 								retval = &p->val;
36178 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36179 									goto fetch_obj_is_copy;
36180 								} else {
36181 									goto fetch_obj_is_fast_copy;
36182 								}
36183 							}
36184 						}
36185 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
36186 					}
36187 					retval = zend_hash_find_ex(zobj->properties, name, 1);
36188 					if (EXPECTED(retval)) {
36189 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
36190 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
36191 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
36192 							goto fetch_obj_is_copy;
36193 						} else {
36194 							goto fetch_obj_is_fast_copy;
36195 						}
36196 					}
36197 				}
36198 			}
36199 		} else {
36200 			name = zval_try_get_tmp_string(offset, &tmp_name);
36201 			if (UNEXPECTED(!name)) {
36202 				ZVAL_UNDEF(EX_VAR(opline->result.var));
36203 				break;
36204 			}
36205 		}
36206 
36207 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
36208 
36209 		if (IS_CV != IS_CONST) {
36210 			zend_tmp_string_release(tmp_name);
36211 		}
36212 
36213 		if (retval != EX_VAR(opline->result.var)) {
36214 fetch_obj_is_copy:
36215 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
36216 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
36217 			zend_unwrap_reference(retval);
36218 		}
36219 	} while (0);
36220 
36221 fetch_obj_is_finish:
36222 
36223 
36224 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36225 }
36226 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36227 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36228 {
36229 #if 0
36230 	USE_OPLINE
36231 #endif
36232 
36233 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
36234 		/* Behave like FETCH_OBJ_W */
36235 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
36236 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36237 		}
36238 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36239 	} else {
36240 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36241 	}
36242 }
36243 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36244 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36245 {
36246 	USE_OPLINE
36247 	zval *container, *property, *result;
36248 
36249 	SAVE_OPLINE();
36250 	container = &EX(This);
36251 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36252 	result = EX_VAR(opline->result.var);
36253 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
36254 
36255 	if (IS_UNUSED == IS_VAR) {
36256 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
36257 	}
36258 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36259 }
36260 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36261 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36262 {
36263 	USE_OPLINE
36264 	zval *object, *property, *value, tmp;
36265 	zend_object *zobj;
36266 	zend_string *name, *tmp_name;
36267 
36268 	SAVE_OPLINE();
36269 	object = &EX(This);
36270 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36271 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
36272 
36273 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36274 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36275 			object = Z_REFVAL_P(object);
36276 			goto assign_object;
36277 		}
36278 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
36279 		value = &EG(uninitialized_zval);
36280 		goto free_and_exit_assign_obj;
36281 	}
36282 
36283 assign_object:
36284 	zobj = Z_OBJ_P(object);
36285 	if (IS_CV == IS_CONST &&
36286 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
36287 		void **cache_slot = CACHE_ADDR(opline->extended_value);
36288 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36289 		zend_object *zobj = Z_OBJ_P(object);
36290 		zval *property_val;
36291 
36292 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36293 			property_val = OBJ_PROP(zobj, prop_offset);
36294 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
36295 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
36296 
36297 				if (UNEXPECTED(prop_info != NULL)) {
36298 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
36299 					goto free_and_exit_assign_obj;
36300 				} else {
36301 fast_assign_obj:
36302 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
36303 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36304 						ZVAL_COPY(EX_VAR(opline->result.var), value);
36305 					}
36306 					goto exit_assign_obj;
36307 				}
36308 			}
36309 		} else {
36310 			if (EXPECTED(zobj->properties != NULL)) {
36311 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
36312 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
36313 						GC_DELREF(zobj->properties);
36314 					}
36315 					zobj->properties = zend_array_dup(zobj->properties);
36316 				}
36317 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
36318 				if (property_val) {
36319 					goto fast_assign_obj;
36320 				}
36321 			}
36322 
36323 			if (!zobj->ce->__set) {
36324 
36325 				if (EXPECTED(zobj->properties == NULL)) {
36326 					rebuild_object_properties(zobj);
36327 				}
36328 				if (IS_CONST == IS_CONST) {
36329 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
36330 						Z_ADDREF_P(value);
36331 					}
36332 				} else if (IS_CONST != IS_TMP_VAR) {
36333 					if (Z_ISREF_P(value)) {
36334 						if (IS_CONST == IS_VAR) {
36335 							zend_reference *ref = Z_REF_P(value);
36336 							if (GC_DELREF(ref) == 0) {
36337 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
36338 								efree_size(ref, sizeof(zend_reference));
36339 								value = &tmp;
36340 							} else {
36341 								value = Z_REFVAL_P(value);
36342 								Z_TRY_ADDREF_P(value);
36343 							}
36344 						} else {
36345 							value = Z_REFVAL_P(value);
36346 							Z_TRY_ADDREF_P(value);
36347 						}
36348 					} else if (IS_CONST == IS_CV) {
36349 						Z_TRY_ADDREF_P(value);
36350 					}
36351 				}
36352 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
36353 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36354 					ZVAL_COPY(EX_VAR(opline->result.var), value);
36355 				}
36356 				goto exit_assign_obj;
36357 			}
36358 		}
36359 	}
36360 
36361 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
36362 		ZVAL_DEREF(value);
36363 	}
36364 
36365 	if (IS_CV == IS_CONST) {
36366 		name = Z_STR_P(property);
36367 	} else {
36368 		name = zval_try_get_tmp_string(property, &tmp_name);
36369 		if (UNEXPECTED(!name)) {
36370 
36371 			UNDEF_RESULT();
36372 			goto exit_assign_obj;
36373 		}
36374 	}
36375 
36376 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
36377 
36378 	if (IS_CV != IS_CONST) {
36379 		zend_tmp_string_release(tmp_name);
36380 	}
36381 
36382 free_and_exit_assign_obj:
36383 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36384 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
36385 	}
36386 
36387 exit_assign_obj:
36388 
36389 
36390 	/* assign_obj has two opcodes! */
36391 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36392 }
36393 
36394 /* 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)36395 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36396 {
36397 	USE_OPLINE
36398 	zval *object, *property, *value, tmp;
36399 	zend_object *zobj;
36400 	zend_string *name, *tmp_name;
36401 
36402 	SAVE_OPLINE();
36403 	object = &EX(This);
36404 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36405 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
36406 
36407 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36408 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36409 			object = Z_REFVAL_P(object);
36410 			goto assign_object;
36411 		}
36412 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
36413 		value = &EG(uninitialized_zval);
36414 		goto free_and_exit_assign_obj;
36415 	}
36416 
36417 assign_object:
36418 	zobj = Z_OBJ_P(object);
36419 	if (IS_CV == IS_CONST &&
36420 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
36421 		void **cache_slot = CACHE_ADDR(opline->extended_value);
36422 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36423 		zend_object *zobj = Z_OBJ_P(object);
36424 		zval *property_val;
36425 
36426 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36427 			property_val = OBJ_PROP(zobj, prop_offset);
36428 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
36429 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
36430 
36431 				if (UNEXPECTED(prop_info != NULL)) {
36432 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
36433 					goto free_and_exit_assign_obj;
36434 				} else {
36435 fast_assign_obj:
36436 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
36437 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36438 						ZVAL_COPY(EX_VAR(opline->result.var), value);
36439 					}
36440 					goto exit_assign_obj;
36441 				}
36442 			}
36443 		} else {
36444 			if (EXPECTED(zobj->properties != NULL)) {
36445 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
36446 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
36447 						GC_DELREF(zobj->properties);
36448 					}
36449 					zobj->properties = zend_array_dup(zobj->properties);
36450 				}
36451 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
36452 				if (property_val) {
36453 					goto fast_assign_obj;
36454 				}
36455 			}
36456 
36457 			if (!zobj->ce->__set) {
36458 
36459 				if (EXPECTED(zobj->properties == NULL)) {
36460 					rebuild_object_properties(zobj);
36461 				}
36462 				if (IS_TMP_VAR == IS_CONST) {
36463 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
36464 						Z_ADDREF_P(value);
36465 					}
36466 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
36467 					if (Z_ISREF_P(value)) {
36468 						if (IS_TMP_VAR == IS_VAR) {
36469 							zend_reference *ref = Z_REF_P(value);
36470 							if (GC_DELREF(ref) == 0) {
36471 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
36472 								efree_size(ref, sizeof(zend_reference));
36473 								value = &tmp;
36474 							} else {
36475 								value = Z_REFVAL_P(value);
36476 								Z_TRY_ADDREF_P(value);
36477 							}
36478 						} else {
36479 							value = Z_REFVAL_P(value);
36480 							Z_TRY_ADDREF_P(value);
36481 						}
36482 					} else if (IS_TMP_VAR == IS_CV) {
36483 						Z_TRY_ADDREF_P(value);
36484 					}
36485 				}
36486 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
36487 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36488 					ZVAL_COPY(EX_VAR(opline->result.var), value);
36489 				}
36490 				goto exit_assign_obj;
36491 			}
36492 		}
36493 	}
36494 
36495 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
36496 		ZVAL_DEREF(value);
36497 	}
36498 
36499 	if (IS_CV == IS_CONST) {
36500 		name = Z_STR_P(property);
36501 	} else {
36502 		name = zval_try_get_tmp_string(property, &tmp_name);
36503 		if (UNEXPECTED(!name)) {
36504 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
36505 			UNDEF_RESULT();
36506 			goto exit_assign_obj;
36507 		}
36508 	}
36509 
36510 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
36511 
36512 	if (IS_CV != IS_CONST) {
36513 		zend_tmp_string_release(tmp_name);
36514 	}
36515 
36516 free_and_exit_assign_obj:
36517 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36518 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
36519 	}
36520 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
36521 exit_assign_obj:
36522 
36523 
36524 	/* assign_obj has two opcodes! */
36525 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36526 }
36527 
36528 /* 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)36529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36530 {
36531 	USE_OPLINE
36532 	zval *object, *property, *value, tmp;
36533 	zend_object *zobj;
36534 	zend_string *name, *tmp_name;
36535 
36536 	SAVE_OPLINE();
36537 	object = &EX(This);
36538 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36539 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
36540 
36541 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36542 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36543 			object = Z_REFVAL_P(object);
36544 			goto assign_object;
36545 		}
36546 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
36547 		value = &EG(uninitialized_zval);
36548 		goto free_and_exit_assign_obj;
36549 	}
36550 
36551 assign_object:
36552 	zobj = Z_OBJ_P(object);
36553 	if (IS_CV == IS_CONST &&
36554 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
36555 		void **cache_slot = CACHE_ADDR(opline->extended_value);
36556 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36557 		zend_object *zobj = Z_OBJ_P(object);
36558 		zval *property_val;
36559 
36560 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36561 			property_val = OBJ_PROP(zobj, prop_offset);
36562 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
36563 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
36564 
36565 				if (UNEXPECTED(prop_info != NULL)) {
36566 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
36567 					goto free_and_exit_assign_obj;
36568 				} else {
36569 fast_assign_obj:
36570 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
36571 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36572 						ZVAL_COPY(EX_VAR(opline->result.var), value);
36573 					}
36574 					goto exit_assign_obj;
36575 				}
36576 			}
36577 		} else {
36578 			if (EXPECTED(zobj->properties != NULL)) {
36579 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
36580 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
36581 						GC_DELREF(zobj->properties);
36582 					}
36583 					zobj->properties = zend_array_dup(zobj->properties);
36584 				}
36585 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
36586 				if (property_val) {
36587 					goto fast_assign_obj;
36588 				}
36589 			}
36590 
36591 			if (!zobj->ce->__set) {
36592 
36593 				if (EXPECTED(zobj->properties == NULL)) {
36594 					rebuild_object_properties(zobj);
36595 				}
36596 				if (IS_VAR == IS_CONST) {
36597 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
36598 						Z_ADDREF_P(value);
36599 					}
36600 				} else if (IS_VAR != IS_TMP_VAR) {
36601 					if (Z_ISREF_P(value)) {
36602 						if (IS_VAR == IS_VAR) {
36603 							zend_reference *ref = Z_REF_P(value);
36604 							if (GC_DELREF(ref) == 0) {
36605 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
36606 								efree_size(ref, sizeof(zend_reference));
36607 								value = &tmp;
36608 							} else {
36609 								value = Z_REFVAL_P(value);
36610 								Z_TRY_ADDREF_P(value);
36611 							}
36612 						} else {
36613 							value = Z_REFVAL_P(value);
36614 							Z_TRY_ADDREF_P(value);
36615 						}
36616 					} else if (IS_VAR == IS_CV) {
36617 						Z_TRY_ADDREF_P(value);
36618 					}
36619 				}
36620 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
36621 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36622 					ZVAL_COPY(EX_VAR(opline->result.var), value);
36623 				}
36624 				goto exit_assign_obj;
36625 			}
36626 		}
36627 	}
36628 
36629 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
36630 		ZVAL_DEREF(value);
36631 	}
36632 
36633 	if (IS_CV == IS_CONST) {
36634 		name = Z_STR_P(property);
36635 	} else {
36636 		name = zval_try_get_tmp_string(property, &tmp_name);
36637 		if (UNEXPECTED(!name)) {
36638 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
36639 			UNDEF_RESULT();
36640 			goto exit_assign_obj;
36641 		}
36642 	}
36643 
36644 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
36645 
36646 	if (IS_CV != IS_CONST) {
36647 		zend_tmp_string_release(tmp_name);
36648 	}
36649 
36650 free_and_exit_assign_obj:
36651 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36652 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
36653 	}
36654 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
36655 exit_assign_obj:
36656 
36657 
36658 	/* assign_obj has two opcodes! */
36659 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36660 }
36661 
36662 /* 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)36663 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36664 {
36665 	USE_OPLINE
36666 	zval *object, *property, *value, tmp;
36667 	zend_object *zobj;
36668 	zend_string *name, *tmp_name;
36669 
36670 	SAVE_OPLINE();
36671 	object = &EX(This);
36672 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36673 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
36674 
36675 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36676 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
36677 			object = Z_REFVAL_P(object);
36678 			goto assign_object;
36679 		}
36680 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
36681 		value = &EG(uninitialized_zval);
36682 		goto free_and_exit_assign_obj;
36683 	}
36684 
36685 assign_object:
36686 	zobj = Z_OBJ_P(object);
36687 	if (IS_CV == IS_CONST &&
36688 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
36689 		void **cache_slot = CACHE_ADDR(opline->extended_value);
36690 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
36691 		zend_object *zobj = Z_OBJ_P(object);
36692 		zval *property_val;
36693 
36694 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
36695 			property_val = OBJ_PROP(zobj, prop_offset);
36696 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
36697 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
36698 
36699 				if (UNEXPECTED(prop_info != NULL)) {
36700 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
36701 					goto free_and_exit_assign_obj;
36702 				} else {
36703 fast_assign_obj:
36704 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
36705 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36706 						ZVAL_COPY(EX_VAR(opline->result.var), value);
36707 					}
36708 					goto exit_assign_obj;
36709 				}
36710 			}
36711 		} else {
36712 			if (EXPECTED(zobj->properties != NULL)) {
36713 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
36714 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
36715 						GC_DELREF(zobj->properties);
36716 					}
36717 					zobj->properties = zend_array_dup(zobj->properties);
36718 				}
36719 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
36720 				if (property_val) {
36721 					goto fast_assign_obj;
36722 				}
36723 			}
36724 
36725 			if (!zobj->ce->__set) {
36726 
36727 				if (EXPECTED(zobj->properties == NULL)) {
36728 					rebuild_object_properties(zobj);
36729 				}
36730 				if (IS_CV == IS_CONST) {
36731 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
36732 						Z_ADDREF_P(value);
36733 					}
36734 				} else if (IS_CV != IS_TMP_VAR) {
36735 					if (Z_ISREF_P(value)) {
36736 						if (IS_CV == IS_VAR) {
36737 							zend_reference *ref = Z_REF_P(value);
36738 							if (GC_DELREF(ref) == 0) {
36739 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
36740 								efree_size(ref, sizeof(zend_reference));
36741 								value = &tmp;
36742 							} else {
36743 								value = Z_REFVAL_P(value);
36744 								Z_TRY_ADDREF_P(value);
36745 							}
36746 						} else {
36747 							value = Z_REFVAL_P(value);
36748 							Z_TRY_ADDREF_P(value);
36749 						}
36750 					} else if (IS_CV == IS_CV) {
36751 						Z_TRY_ADDREF_P(value);
36752 					}
36753 				}
36754 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
36755 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36756 					ZVAL_COPY(EX_VAR(opline->result.var), value);
36757 				}
36758 				goto exit_assign_obj;
36759 			}
36760 		}
36761 	}
36762 
36763 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
36764 		ZVAL_DEREF(value);
36765 	}
36766 
36767 	if (IS_CV == IS_CONST) {
36768 		name = Z_STR_P(property);
36769 	} else {
36770 		name = zval_try_get_tmp_string(property, &tmp_name);
36771 		if (UNEXPECTED(!name)) {
36772 
36773 			UNDEF_RESULT();
36774 			goto exit_assign_obj;
36775 		}
36776 	}
36777 
36778 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
36779 
36780 	if (IS_CV != IS_CONST) {
36781 		zend_tmp_string_release(tmp_name);
36782 	}
36783 
36784 free_and_exit_assign_obj:
36785 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36786 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
36787 	}
36788 
36789 exit_assign_obj:
36790 
36791 
36792 	/* assign_obj has two opcodes! */
36793 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36794 }
36795 
36796 /* 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)36797 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36798 {
36799 	USE_OPLINE
36800 	zval *property, *container, *value_ptr;
36801 
36802 	SAVE_OPLINE();
36803 
36804 	container = &EX(This);
36805 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36806 
36807 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
36808 
36809 	if (1) {
36810 		if (IS_UNUSED == IS_UNUSED) {
36811 			if (IS_CV == IS_CONST) {
36812 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36813 			} else {
36814 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36815 			}
36816 		} else {
36817 			if (IS_CV == IS_CONST) {
36818 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36819 			} else {
36820 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36821 			}
36822 		}
36823 	} else {
36824 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36825 	}
36826 
36827 
36828 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
36829 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36830 }
36831 
36832 /* 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)36833 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36834 {
36835 	USE_OPLINE
36836 	zval *property, *container, *value_ptr;
36837 
36838 	SAVE_OPLINE();
36839 
36840 	container = &EX(This);
36841 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36842 
36843 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
36844 
36845 	if (1) {
36846 		if (IS_UNUSED == IS_UNUSED) {
36847 			if (IS_CV == IS_CONST) {
36848 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36849 			} else {
36850 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36851 			}
36852 		} else {
36853 			if (IS_CV == IS_CONST) {
36854 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36855 			} else {
36856 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36857 			}
36858 		}
36859 	} else {
36860 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
36861 	}
36862 
36863 
36864 
36865 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36866 }
36867 
36868 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36869 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36870 {
36871 	USE_OPLINE
36872 	zend_string **rope;
36873 	zval *var;
36874 
36875 	/* Compiler allocates the necessary number of zval slots to keep the rope */
36876 	rope = (zend_string**)EX_VAR(opline->result.var);
36877 	if (IS_CV == IS_CONST) {
36878 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36879 		rope[0] = Z_STR_P(var);
36880 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
36881 			Z_ADDREF_P(var);
36882 		}
36883 	} else {
36884 		var = EX_VAR(opline->op2.var);
36885 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
36886 			if (IS_CV == IS_CV) {
36887 				rope[0] = zend_string_copy(Z_STR_P(var));
36888 			} else {
36889 				rope[0] = Z_STR_P(var);
36890 			}
36891 		} else {
36892 			SAVE_OPLINE();
36893 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
36894 				ZVAL_UNDEFINED_OP2();
36895 			}
36896 			rope[0] = zval_get_string_func(var);
36897 
36898 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36899 		}
36900 	}
36901 	ZEND_VM_NEXT_OPCODE();
36902 }
36903 
ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36904 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36905 {
36906 	zval *class_name;
36907 	USE_OPLINE
36908 
36909 	SAVE_OPLINE();
36910 	if (IS_CV == IS_UNUSED) {
36911 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
36912 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36913 	} else if (IS_CV == IS_CONST) {
36914 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
36915 
36916 		if (UNEXPECTED(ce == NULL)) {
36917 			class_name = EX_VAR(opline->op2.var);
36918 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
36919 			CACHE_PTR(opline->extended_value, ce);
36920 		}
36921 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
36922 	} else {
36923 		class_name = EX_VAR(opline->op2.var);
36924 try_class_name:
36925 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
36926 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
36927 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
36928 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
36929 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
36930 			class_name = Z_REFVAL_P(class_name);
36931 			goto try_class_name;
36932 		} else {
36933 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
36934 				ZVAL_UNDEFINED_OP2();
36935 				if (UNEXPECTED(EG(exception) != NULL)) {
36936 					HANDLE_EXCEPTION();
36937 				}
36938 			}
36939 			zend_throw_error(NULL, "Class name must be a valid object or a string");
36940 		}
36941 	}
36942 
36943 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36944 }
36945 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36946 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36947 {
36948 	USE_OPLINE
36949 	zval *function_name;
36950 	zval *object;
36951 	zend_function *fbc;
36952 	zend_class_entry *called_scope;
36953 	zend_object *obj;
36954 	zend_execute_data *call;
36955 	uint32_t call_info;
36956 
36957 	SAVE_OPLINE();
36958 
36959 	object = &EX(This);
36960 
36961 	if (IS_CV != IS_CONST) {
36962 		function_name = EX_VAR(opline->op2.var);
36963 	}
36964 
36965 	if (IS_CV != IS_CONST &&
36966 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
36967 		do {
36968 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
36969 				function_name = Z_REFVAL_P(function_name);
36970 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
36971 					break;
36972 				}
36973 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
36974 				ZVAL_UNDEFINED_OP2();
36975 				if (UNEXPECTED(EG(exception) != NULL)) {
36976 
36977 					HANDLE_EXCEPTION();
36978 				}
36979 			}
36980 			zend_throw_error(NULL, "Method name must be a string");
36981 
36982 
36983 			HANDLE_EXCEPTION();
36984 		} while (0);
36985 	}
36986 
36987 	if (IS_UNUSED == IS_UNUSED) {
36988 		obj = Z_OBJ_P(object);
36989 	} else {
36990 		do {
36991 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
36992 				obj = Z_OBJ_P(object);
36993 			} else {
36994 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
36995 					zend_reference *ref = Z_REF_P(object);
36996 
36997 					object = &ref->val;
36998 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
36999 						obj = Z_OBJ_P(object);
37000 						if (IS_UNUSED & IS_VAR) {
37001 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
37002 								efree_size(ref, sizeof(zend_reference));
37003 							} else {
37004 								Z_ADDREF_P(object);
37005 							}
37006 						}
37007 						break;
37008 					}
37009 				}
37010 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37011 					object = ZVAL_UNDEFINED_OP1();
37012 					if (UNEXPECTED(EG(exception) != NULL)) {
37013 						if (IS_CV != IS_CONST) {
37014 
37015 						}
37016 						HANDLE_EXCEPTION();
37017 					}
37018 				}
37019 				if (IS_CV == IS_CONST) {
37020 					function_name = EX_VAR(opline->op2.var);
37021 				}
37022 				zend_invalid_method_call(object, function_name);
37023 
37024 
37025 				HANDLE_EXCEPTION();
37026 			}
37027 		} while (0);
37028 	}
37029 
37030 	called_scope = obj->ce;
37031 
37032 	if (IS_CV == IS_CONST &&
37033 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
37034 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
37035 	} else {
37036 	    zend_object *orig_obj = obj;
37037 
37038 		if (IS_CV == IS_CONST) {
37039 			function_name = EX_VAR(opline->op2.var);
37040 		}
37041 
37042 		/* First, locate the function. */
37043 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
37044 		if (UNEXPECTED(fbc == NULL)) {
37045 			if (EXPECTED(!EG(exception))) {
37046 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
37047 			}
37048 
37049 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
37050 				zend_objects_store_del(orig_obj);
37051 			}
37052 			HANDLE_EXCEPTION();
37053 		}
37054 		if (IS_CV == IS_CONST &&
37055 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
37056 		    EXPECTED(obj == orig_obj)) {
37057 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
37058 		}
37059 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
37060 			GC_ADDREF(obj); /* For $this pointer */
37061 			if (GC_DELREF(orig_obj) == 0) {
37062 				zend_objects_store_del(orig_obj);
37063 			}
37064 		}
37065 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
37066 			init_func_run_time_cache(&fbc->op_array);
37067 		}
37068 	}
37069 
37070 	if (IS_CV != IS_CONST) {
37071 
37072 	}
37073 
37074 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
37075 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
37076 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
37077 			zend_objects_store_del(obj);
37078 			if (UNEXPECTED(EG(exception))) {
37079 				HANDLE_EXCEPTION();
37080 			}
37081 		}
37082 		/* call static method */
37083 		obj = (zend_object*)called_scope;
37084 		call_info = ZEND_CALL_NESTED_FUNCTION;
37085 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
37086 		if (IS_UNUSED == IS_CV) {
37087 			GC_ADDREF(obj); /* For $this pointer */
37088 		}
37089 		/* CV may be changed indirectly (e.g. when it's a reference) */
37090 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
37091 	}
37092 
37093 	call = zend_vm_stack_push_call_frame(call_info,
37094 		fbc, opline->extended_value, obj);
37095 	call->prev_execute_data = EX(call);
37096 	EX(call) = call;
37097 
37098 	ZEND_VM_NEXT_OPCODE();
37099 }
37100 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37101 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37102 {
37103 	USE_OPLINE
37104 	zval *function_name;
37105 	zend_class_entry *ce;
37106 	uint32_t call_info;
37107 	zend_function *fbc;
37108 	zend_execute_data *call;
37109 
37110 	SAVE_OPLINE();
37111 
37112 	if (IS_UNUSED == IS_CONST) {
37113 		/* no function found. try a static method in class */
37114 		ce = CACHED_PTR(opline->result.num);
37115 		if (UNEXPECTED(ce == NULL)) {
37116 			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);
37117 			if (UNEXPECTED(ce == NULL)) {
37118 
37119 				HANDLE_EXCEPTION();
37120 			}
37121 			if (IS_CV != IS_CONST) {
37122 				CACHE_PTR(opline->result.num, ce);
37123 			}
37124 		}
37125 	} else if (IS_UNUSED == IS_UNUSED) {
37126 		ce = zend_fetch_class(NULL, opline->op1.num);
37127 		if (UNEXPECTED(ce == NULL)) {
37128 
37129 			HANDLE_EXCEPTION();
37130 		}
37131 	} else {
37132 		ce = Z_CE_P(EX_VAR(opline->op1.var));
37133 	}
37134 
37135 	if (IS_UNUSED == IS_CONST &&
37136 	    IS_CV == IS_CONST &&
37137 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
37138 		/* nothing to do */
37139 	} else if (IS_UNUSED != IS_CONST &&
37140 	           IS_CV == IS_CONST &&
37141 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
37142 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
37143 	} else if (IS_CV != IS_UNUSED) {
37144 		function_name = EX_VAR(opline->op2.var);
37145 		if (IS_CV != IS_CONST) {
37146 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
37147 				do {
37148 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
37149 						function_name = Z_REFVAL_P(function_name);
37150 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
37151 							break;
37152 						}
37153 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
37154 						ZVAL_UNDEFINED_OP2();
37155 						if (UNEXPECTED(EG(exception) != NULL)) {
37156 							HANDLE_EXCEPTION();
37157 						}
37158 					}
37159 					zend_throw_error(NULL, "Method name must be a string");
37160 
37161 					HANDLE_EXCEPTION();
37162 				} while (0);
37163 			}
37164 		}
37165 
37166 		if (ce->get_static_method) {
37167 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
37168 		} else {
37169 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
37170 		}
37171 		if (UNEXPECTED(fbc == NULL)) {
37172 			if (EXPECTED(!EG(exception))) {
37173 				zend_undefined_method(ce, Z_STR_P(function_name));
37174 			}
37175 
37176 			HANDLE_EXCEPTION();
37177 		}
37178 		if (IS_CV == IS_CONST &&
37179 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
37180 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
37181 		}
37182 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
37183 			init_func_run_time_cache(&fbc->op_array);
37184 		}
37185 		if (IS_CV != IS_CONST) {
37186 
37187 		}
37188 	} else {
37189 		if (UNEXPECTED(ce->constructor == NULL)) {
37190 			zend_throw_error(NULL, "Cannot call constructor");
37191 			HANDLE_EXCEPTION();
37192 		}
37193 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
37194 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
37195 			HANDLE_EXCEPTION();
37196 		}
37197 		fbc = ce->constructor;
37198 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
37199 			init_func_run_time_cache(&fbc->op_array);
37200 		}
37201 	}
37202 
37203 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
37204 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
37205 			ce = (zend_class_entry*)Z_OBJ(EX(This));
37206 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
37207 		} else {
37208 			zend_non_static_method_call(fbc);
37209 			HANDLE_EXCEPTION();
37210 		}
37211 	} else {
37212 		/* previous opcode is ZEND_FETCH_CLASS */
37213 		if (IS_UNUSED == IS_UNUSED
37214 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
37215 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
37216 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
37217 				ce = Z_OBJCE(EX(This));
37218 			} else {
37219 				ce = Z_CE(EX(This));
37220 			}
37221 		}
37222 		call_info = ZEND_CALL_NESTED_FUNCTION;
37223 	}
37224 
37225 	call = zend_vm_stack_push_call_frame(call_info,
37226 		fbc, opline->extended_value, ce);
37227 	call->prev_execute_data = EX(call);
37228 	EX(call) = call;
37229 
37230 	ZEND_VM_NEXT_OPCODE();
37231 }
37232 
ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37234 {
37235 	zval *array;
37236 	uint32_t size;
37237 	USE_OPLINE
37238 
37239 	array = EX_VAR(opline->result.var);
37240 	if (IS_UNUSED != IS_UNUSED) {
37241 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
37242 		ZVAL_ARR(array, zend_new_array(size));
37243 		/* Explicitly initialize array as not-packed if flag is set */
37244 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
37245 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
37246 		}
37247 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37248 	} else {
37249 		ZVAL_ARR(array, zend_new_array(0));
37250 		ZEND_VM_NEXT_OPCODE();
37251 	}
37252 }
37253 
ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37254 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37255 {
37256 	USE_OPLINE
37257 	zval *container;
37258 	zval *offset;
37259 	zend_string *name, *tmp_name;
37260 
37261 	SAVE_OPLINE();
37262 	container = &EX(This);
37263 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37264 
37265 	do {
37266 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
37267 			if (Z_ISREF_P(container)) {
37268 				container = Z_REFVAL_P(container);
37269 				if (Z_TYPE_P(container) != IS_OBJECT) {
37270 					if (IS_UNUSED == IS_CV
37271 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
37272 						ZVAL_UNDEFINED_OP1();
37273 					}
37274 					break;
37275 				}
37276 			} else {
37277 				break;
37278 			}
37279 		}
37280 		if (IS_CV == IS_CONST) {
37281 			name = Z_STR_P(offset);
37282 		} else {
37283 			name = zval_try_get_tmp_string(offset, &tmp_name);
37284 			if (UNEXPECTED(!name)) {
37285 				break;
37286 			}
37287 		}
37288 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
37289 		if (IS_CV != IS_CONST) {
37290 			zend_tmp_string_release(tmp_name);
37291 		}
37292 	} while (0);
37293 
37294 
37295 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37296 }
37297 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37298 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37299 {
37300 	USE_OPLINE
37301 	zval *container;
37302 	int result;
37303 	zval *offset;
37304 	zend_string *name, *tmp_name;
37305 
37306 	SAVE_OPLINE();
37307 	container = &EX(This);
37308 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37309 
37310 	if (IS_UNUSED == IS_CONST ||
37311 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
37312 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
37313 			container = Z_REFVAL_P(container);
37314 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
37315 				result = (opline->extended_value & ZEND_ISEMPTY);
37316 				goto isset_object_finish;
37317 			}
37318 		} else {
37319 			result = (opline->extended_value & ZEND_ISEMPTY);
37320 			goto isset_object_finish;
37321 		}
37322 	}
37323 
37324 	if (IS_CV == IS_CONST) {
37325 		name = Z_STR_P(offset);
37326 	} else {
37327 		name = zval_try_get_tmp_string(offset, &tmp_name);
37328 		if (UNEXPECTED(!name)) {
37329 			result = 0;
37330 			goto isset_object_finish;
37331 		}
37332 	}
37333 
37334 	result =
37335 		(opline->extended_value & ZEND_ISEMPTY) ^
37336 		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));
37337 
37338 	if (IS_CV != IS_CONST) {
37339 		zend_tmp_string_release(tmp_name);
37340 	}
37341 
37342 isset_object_finish:
37343 
37344 
37345 	ZEND_VM_SMART_BRANCH(result, 1);
37346 }
37347 
ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37349 {
37350 	USE_OPLINE
37351 
37352 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
37353 
37354 	SAVE_OPLINE();
37355 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
37356 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37357 	}
37358 
37359 	/* Destroy the previously yielded value */
37360 	zval_ptr_dtor(&generator->value);
37361 
37362 	/* Destroy the previously yielded key */
37363 	zval_ptr_dtor(&generator->key);
37364 
37365 	/* Set the new yielded value */
37366 	if (IS_UNUSED != IS_UNUSED) {
37367 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
37368 			/* Constants and temporary variables aren't yieldable by reference,
37369 			 * but we still allow them with a notice. */
37370 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
37371 				zval *value;
37372 
37373 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
37374 
37375 				value = NULL;
37376 				ZVAL_COPY_VALUE(&generator->value, value);
37377 				if (IS_UNUSED == IS_CONST) {
37378 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
37379 						Z_ADDREF(generator->value);
37380 					}
37381 				}
37382 			} else {
37383 				zval *value_ptr = NULL;
37384 
37385 				/* If a function call result is yielded and the function did
37386 				 * not return by reference we throw a notice. */
37387 				do {
37388 					if (IS_UNUSED == IS_VAR) {
37389 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
37390 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
37391 						 && !Z_ISREF_P(value_ptr)) {
37392 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
37393 							ZVAL_COPY(&generator->value, value_ptr);
37394 							break;
37395 						}
37396 					}
37397 					if (Z_ISREF_P(value_ptr)) {
37398 						Z_ADDREF_P(value_ptr);
37399 					} else {
37400 						ZVAL_MAKE_REF_EX(value_ptr, 2);
37401 					}
37402 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
37403 				} while (0);
37404 
37405 			}
37406 		} else {
37407 			zval *value = NULL;
37408 
37409 			/* Consts, temporary variables and references need copying */
37410 			if (IS_UNUSED == IS_CONST) {
37411 				ZVAL_COPY_VALUE(&generator->value, value);
37412 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
37413 					Z_ADDREF(generator->value);
37414 				}
37415 			} else if (IS_UNUSED == IS_TMP_VAR) {
37416 				ZVAL_COPY_VALUE(&generator->value, value);
37417             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
37418 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
37419 
37420 			} else {
37421 				ZVAL_COPY_VALUE(&generator->value, value);
37422 				if (IS_UNUSED == IS_CV) {
37423 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
37424 				}
37425 			}
37426 		}
37427 	} else {
37428 		/* If no value was specified yield null */
37429 		ZVAL_NULL(&generator->value);
37430 	}
37431 
37432 	/* Set the new yielded key */
37433 	if (IS_CV != IS_UNUSED) {
37434 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37435 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
37436 			key = Z_REFVAL_P(key);
37437 		}
37438 		ZVAL_COPY(&generator->key, key);
37439 
37440 		if (Z_TYPE(generator->key) == IS_LONG
37441 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
37442 		) {
37443 			generator->largest_used_integer_key = Z_LVAL(generator->key);
37444 		}
37445 	} else {
37446 		/* If no key was specified we use auto-increment keys */
37447 		generator->largest_used_integer_key++;
37448 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
37449 	}
37450 
37451 	if (RETURN_VALUE_USED(opline)) {
37452 		/* If the return value of yield is used set the send
37453 		 * target and initialize it to NULL */
37454 		generator->send_target = EX_VAR(opline->result.var);
37455 		ZVAL_NULL(generator->send_target);
37456 	} else {
37457 		generator->send_target = NULL;
37458 	}
37459 
37460 	/* We increment to the next op, so we are at the correct position when the
37461 	 * generator is resumed. */
37462 	ZEND_VM_INC_OPCODE();
37463 
37464 	/* The GOTO VM uses a local opline variable. We need to set the opline
37465 	 * variable in execute_data so we don't resume at an old position. */
37466 	SAVE_OPLINE();
37467 
37468 	ZEND_VM_RETURN();
37469 }
37470 
ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37471 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37472 {
37473 	USE_OPLINE
37474 	zval *val;
37475 
37476 	val = EX_VAR(opline->op1.var);
37477 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
37478 		ZVAL_FALSE(EX_VAR(opline->result.var));
37479 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
37480 		/* The result and op1 can be the same cv zval */
37481 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
37482 		ZVAL_TRUE(EX_VAR(opline->result.var));
37483 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
37484 			SAVE_OPLINE();
37485 			ZVAL_UNDEFINED_OP1();
37486 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37487 		}
37488 	} else {
37489 		SAVE_OPLINE();
37490 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
37491 
37492 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37493 	}
37494 	ZEND_VM_NEXT_OPCODE();
37495 }
37496 
zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)37497 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
37498 {
37499 	USE_OPLINE
37500 	zval *var_ptr;
37501 
37502 	var_ptr = EX_VAR(opline->op1.var);
37503 
37504 	SAVE_OPLINE();
37505 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
37506 		ZVAL_NULL(var_ptr);
37507 		ZVAL_UNDEFINED_OP1();
37508 	}
37509 
37510 	do {
37511 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
37512 			zend_reference *ref = Z_REF_P(var_ptr);
37513 			var_ptr = Z_REFVAL_P(var_ptr);
37514 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
37515 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
37516 				break;
37517 			}
37518 		}
37519 		increment_function(var_ptr);
37520 	} while (0);
37521 
37522 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37523 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
37524 	}
37525 
37526 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37527 }
37528 
ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37529 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37530 {
37531 	USE_OPLINE
37532 	zval *var_ptr;
37533 
37534 	var_ptr = EX_VAR(opline->op1.var);
37535 
37536 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
37537 		fast_long_increment_function(var_ptr);
37538 		if (UNEXPECTED(0)) {
37539 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
37540 		}
37541 		ZEND_VM_NEXT_OPCODE();
37542 	}
37543 
37544 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37545 }
37546 
ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37547 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37548 {
37549 	USE_OPLINE
37550 	zval *var_ptr;
37551 
37552 	var_ptr = EX_VAR(opline->op1.var);
37553 
37554 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
37555 		fast_long_increment_function(var_ptr);
37556 		if (UNEXPECTED(1)) {
37557 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
37558 		}
37559 		ZEND_VM_NEXT_OPCODE();
37560 	}
37561 
37562 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37563 }
37564 
zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)37565 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
37566 {
37567 	USE_OPLINE
37568 	zval *var_ptr;
37569 
37570 	var_ptr = EX_VAR(opline->op1.var);
37571 
37572 	SAVE_OPLINE();
37573 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
37574 		ZVAL_NULL(var_ptr);
37575 		ZVAL_UNDEFINED_OP1();
37576 	}
37577 
37578 	do {
37579 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
37580 			zend_reference *ref = Z_REF_P(var_ptr);
37581 			var_ptr = Z_REFVAL_P(var_ptr);
37582 
37583 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
37584 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
37585 				break;
37586 			}
37587 		}
37588 		decrement_function(var_ptr);
37589 	} while (0);
37590 
37591 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37592 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
37593 	}
37594 
37595 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37596 }
37597 
ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37598 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37599 {
37600 	USE_OPLINE
37601 	zval *var_ptr;
37602 
37603 	var_ptr = EX_VAR(opline->op1.var);
37604 
37605 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
37606 		fast_long_decrement_function(var_ptr);
37607 		if (UNEXPECTED(0)) {
37608 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
37609 		}
37610 		ZEND_VM_NEXT_OPCODE();
37611 	}
37612 
37613 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37614 }
37615 
ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37616 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37617 {
37618 	USE_OPLINE
37619 	zval *var_ptr;
37620 
37621 	var_ptr = EX_VAR(opline->op1.var);
37622 
37623 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
37624 		fast_long_decrement_function(var_ptr);
37625 		if (UNEXPECTED(1)) {
37626 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
37627 		}
37628 		ZEND_VM_NEXT_OPCODE();
37629 	}
37630 
37631 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37632 }
37633 
zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)37634 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
37635 {
37636 	USE_OPLINE
37637 	zval *var_ptr;
37638 
37639 	var_ptr = EX_VAR(opline->op1.var);
37640 
37641 	SAVE_OPLINE();
37642 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
37643 		ZVAL_NULL(var_ptr);
37644 		ZVAL_UNDEFINED_OP1();
37645 	}
37646 
37647 	do {
37648 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
37649 			zend_reference *ref = Z_REF_P(var_ptr);
37650 			var_ptr = Z_REFVAL_P(var_ptr);
37651 
37652 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
37653 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
37654 				break;
37655 			}
37656 		}
37657 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
37658 
37659 		increment_function(var_ptr);
37660 	} while (0);
37661 
37662 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37663 }
37664 
ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37665 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37666 {
37667 	USE_OPLINE
37668 	zval *var_ptr;
37669 
37670 	var_ptr = EX_VAR(opline->op1.var);
37671 
37672 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
37673 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
37674 		fast_long_increment_function(var_ptr);
37675 		ZEND_VM_NEXT_OPCODE();
37676 	}
37677 
37678 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37679 }
37680 
zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)37681 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
37682 {
37683 	USE_OPLINE
37684 	zval *var_ptr;
37685 
37686 	var_ptr = EX_VAR(opline->op1.var);
37687 
37688 	SAVE_OPLINE();
37689 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
37690 		ZVAL_NULL(var_ptr);
37691 		ZVAL_UNDEFINED_OP1();
37692 	}
37693 
37694 	do {
37695 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
37696 			zend_reference *ref = Z_REF_P(var_ptr);
37697 			var_ptr = Z_REFVAL_P(var_ptr);
37698 
37699 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
37700 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
37701 				break;
37702 			}
37703 		}
37704 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
37705 
37706 		decrement_function(var_ptr);
37707 	} while (0);
37708 
37709 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37710 }
37711 
ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37712 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37713 {
37714 	USE_OPLINE
37715 	zval *var_ptr;
37716 
37717 	var_ptr = EX_VAR(opline->op1.var);
37718 
37719 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
37720 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
37721 		fast_long_decrement_function(var_ptr);
37722 		ZEND_VM_NEXT_OPCODE();
37723 	}
37724 
37725 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37726 }
37727 
ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37728 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37729 {
37730 	USE_OPLINE
37731 	zval *z;
37732 
37733 	SAVE_OPLINE();
37734 	z = EX_VAR(opline->op1.var);
37735 
37736 	if (Z_TYPE_P(z) == IS_STRING) {
37737 		zend_string *str = Z_STR_P(z);
37738 
37739 		if (ZSTR_LEN(str) != 0) {
37740 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
37741 		}
37742 	} else {
37743 		zend_string *str = zval_get_string_func(z);
37744 
37745 		if (ZSTR_LEN(str) != 0) {
37746 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
37747 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
37748 			ZVAL_UNDEFINED_OP1();
37749 		}
37750 		zend_string_release_ex(str, 0);
37751 	}
37752 
37753 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37754 }
37755 
ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37756 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37757 {
37758 	USE_OPLINE
37759 	zval *val;
37760 	zend_uchar op1_type;
37761 
37762 	val = EX_VAR(opline->op1.var);
37763 
37764 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
37765 		ZEND_VM_NEXT_OPCODE();
37766 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
37767 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
37768 			SAVE_OPLINE();
37769 			ZVAL_UNDEFINED_OP1();
37770 			if (UNEXPECTED(EG(exception))) {
37771 				HANDLE_EXCEPTION();
37772 			}
37773 		}
37774 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
37775 	}
37776 
37777 	SAVE_OPLINE();
37778 	op1_type = IS_CV;
37779 	if (i_zend_is_true(val)) {
37780 		opline++;
37781 	} else {
37782 		opline = OP_JMP_ADDR(opline, opline->op2);
37783 	}
37784 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
37785 		zval_ptr_dtor_nogc(val);
37786 	}
37787 	ZEND_VM_JMP(opline);
37788 }
37789 
ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37790 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37791 {
37792 	USE_OPLINE
37793 	zval *val;
37794 	zend_uchar op1_type;
37795 
37796 	val = EX_VAR(opline->op1.var);
37797 
37798 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
37799 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
37800 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
37801 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
37802 			SAVE_OPLINE();
37803 			ZVAL_UNDEFINED_OP1();
37804 			if (UNEXPECTED(EG(exception))) {
37805 				HANDLE_EXCEPTION();
37806 			}
37807 		}
37808 		ZEND_VM_NEXT_OPCODE();
37809 	}
37810 
37811 	SAVE_OPLINE();
37812 	op1_type = IS_CV;
37813 	if (i_zend_is_true(val)) {
37814 		opline = OP_JMP_ADDR(opline, opline->op2);
37815 	} else {
37816 		opline++;
37817 	}
37818 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
37819 		zval_ptr_dtor_nogc(val);
37820 	}
37821 	ZEND_VM_JMP(opline);
37822 }
37823 
ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37825 {
37826 	USE_OPLINE
37827 	zval *val;
37828 	zend_uchar op1_type;
37829 
37830 	val = EX_VAR(opline->op1.var);
37831 
37832 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
37833 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
37834 		ZEND_VM_CONTINUE();
37835 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
37836 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
37837 			SAVE_OPLINE();
37838 			ZVAL_UNDEFINED_OP1();
37839 			if (UNEXPECTED(EG(exception))) {
37840 				HANDLE_EXCEPTION();
37841 			}
37842 		}
37843 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
37844 	}
37845 
37846 	SAVE_OPLINE();
37847 	op1_type = IS_CV;
37848 	if (i_zend_is_true(val)) {
37849 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
37850 	} else {
37851 		opline = OP_JMP_ADDR(opline, opline->op2);
37852 	}
37853 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
37854 		zval_ptr_dtor_nogc(val);
37855 	}
37856 	ZEND_VM_JMP(opline);
37857 }
37858 
ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37859 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37860 {
37861 	USE_OPLINE
37862 	zval *val;
37863 	bool ret;
37864 
37865 	val = EX_VAR(opline->op1.var);
37866 
37867 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
37868 		ZVAL_TRUE(EX_VAR(opline->result.var));
37869 		ZEND_VM_NEXT_OPCODE();
37870 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
37871 		ZVAL_FALSE(EX_VAR(opline->result.var));
37872 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
37873 			SAVE_OPLINE();
37874 			ZVAL_UNDEFINED_OP1();
37875 			if (UNEXPECTED(EG(exception))) {
37876 				HANDLE_EXCEPTION();
37877 			}
37878 		}
37879 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
37880 	}
37881 
37882 	SAVE_OPLINE();
37883 	ret = i_zend_is_true(val);
37884 
37885 	if (ret) {
37886 		ZVAL_TRUE(EX_VAR(opline->result.var));
37887 		opline++;
37888 	} else {
37889 		ZVAL_FALSE(EX_VAR(opline->result.var));
37890 		opline = OP_JMP_ADDR(opline, opline->op2);
37891 	}
37892 	ZEND_VM_JMP(opline);
37893 }
37894 
ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37895 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37896 {
37897 	USE_OPLINE
37898 	zval *val;
37899 	bool ret;
37900 
37901 	val = EX_VAR(opline->op1.var);
37902 
37903 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
37904 		ZVAL_TRUE(EX_VAR(opline->result.var));
37905 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
37906 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
37907 		ZVAL_FALSE(EX_VAR(opline->result.var));
37908 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
37909 			SAVE_OPLINE();
37910 			ZVAL_UNDEFINED_OP1();
37911 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37912 		} else {
37913 			ZEND_VM_NEXT_OPCODE();
37914 		}
37915 	}
37916 
37917 	SAVE_OPLINE();
37918 	ret = i_zend_is_true(val);
37919 
37920 	if (ret) {
37921 		ZVAL_TRUE(EX_VAR(opline->result.var));
37922 		opline = OP_JMP_ADDR(opline, opline->op2);
37923 	} else {
37924 		ZVAL_FALSE(EX_VAR(opline->result.var));
37925 		opline++;
37926 	}
37927 	ZEND_VM_JMP(opline);
37928 }
37929 
ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37930 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37931 {
37932 	USE_OPLINE
37933 	zval *retval_ptr;
37934 	zval *return_value;
37935 
37936 	retval_ptr = EX_VAR(opline->op1.var);
37937 	return_value = EX(return_value);
37938 
37939 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
37940 		SAVE_OPLINE();
37941 		retval_ptr = ZVAL_UNDEFINED_OP1();
37942 		if (return_value) {
37943 			ZVAL_NULL(return_value);
37944 		}
37945 	} else if (!return_value) {
37946 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
37947 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
37948 				SAVE_OPLINE();
37949 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
37950 			}
37951 		}
37952 	} else {
37953 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
37954 			ZVAL_COPY_VALUE(return_value, retval_ptr);
37955 			if (IS_CV == IS_CONST) {
37956 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
37957 					Z_ADDREF_P(return_value);
37958 				}
37959 			}
37960 		} else if (IS_CV == IS_CV) {
37961 			do {
37962 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
37963 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
37964 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
37965 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
37966 							ZVAL_COPY_VALUE(return_value, retval_ptr);
37967 							if (GC_MAY_LEAK(ref)) {
37968 								SAVE_OPLINE();
37969 								gc_possible_root(ref);
37970 							}
37971 							ZVAL_NULL(retval_ptr);
37972 							break;
37973 						} else {
37974 							Z_ADDREF_P(retval_ptr);
37975 						}
37976 					} else {
37977 						retval_ptr = Z_REFVAL_P(retval_ptr);
37978 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
37979 							Z_ADDREF_P(retval_ptr);
37980 						}
37981 					}
37982 				}
37983 				ZVAL_COPY_VALUE(return_value, retval_ptr);
37984 			} while (0);
37985 		} else /* if (IS_CV == IS_VAR) */ {
37986 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
37987 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
37988 
37989 				retval_ptr = Z_REFVAL_P(retval_ptr);
37990 				ZVAL_COPY_VALUE(return_value, retval_ptr);
37991 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
37992 					efree_size(ref, sizeof(zend_reference));
37993 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
37994 					Z_ADDREF_P(retval_ptr);
37995 				}
37996 			} else {
37997 				ZVAL_COPY_VALUE(return_value, retval_ptr);
37998 			}
37999 		}
38000 	}
38001 
38002 
38003 
38004 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38005 }
38006 
ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38008 {
38009 	USE_OPLINE
38010 	zval *retval_ptr;
38011 	zval *return_value;
38012 
38013 	SAVE_OPLINE();
38014 
38015 	return_value = EX(return_value);
38016 
38017 	do {
38018 		if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
38019 		    (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
38020 			/* Not supposed to happen, but we'll allow it */
38021 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
38022 
38023 			retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38024 			if (!return_value) {
38025 
38026 			} else {
38027 				if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
38028 					ZVAL_COPY_VALUE(return_value, retval_ptr);
38029 					break;
38030 				}
38031 
38032 				ZVAL_NEW_REF(return_value, retval_ptr);
38033 				if (IS_CV == IS_CONST) {
38034 					Z_TRY_ADDREF_P(retval_ptr);
38035 				}
38036 			}
38037 			break;
38038 		}
38039 
38040 		retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
38041 
38042 		if (IS_CV == IS_VAR) {
38043 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
38044 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
38045 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
38046 				if (return_value) {
38047 					ZVAL_NEW_REF(return_value, retval_ptr);
38048 				} else {
38049 
38050 				}
38051 				break;
38052 			}
38053 		}
38054 
38055 		if (return_value) {
38056 			if (Z_ISREF_P(retval_ptr)) {
38057 				Z_ADDREF_P(retval_ptr);
38058 			} else {
38059 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
38060 			}
38061 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
38062 		}
38063 
38064 	} while (0);
38065 
38066 
38067 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38068 }
38069 
ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38070 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38071 {
38072 	USE_OPLINE
38073 	zval *retval;
38074 
38075 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
38076 
38077 	SAVE_OPLINE();
38078 	retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38079 
38080 	/* Copy return value into generator->retval */
38081 	if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
38082 		ZVAL_COPY_VALUE(&generator->retval, retval);
38083 		if (IS_CV == IS_CONST) {
38084 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
38085 				Z_ADDREF(generator->retval);
38086 			}
38087 		}
38088 	} else if (IS_CV == IS_CV) {
38089 		ZVAL_COPY_DEREF(&generator->retval, retval);
38090 	} else /* if (IS_CV == IS_VAR) */ {
38091 		if (UNEXPECTED(Z_ISREF_P(retval))) {
38092 			zend_refcounted *ref = Z_COUNTED_P(retval);
38093 
38094 			retval = Z_REFVAL_P(retval);
38095 			ZVAL_COPY_VALUE(&generator->retval, retval);
38096 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
38097 				efree_size(ref, sizeof(zend_reference));
38098 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
38099 				Z_ADDREF_P(retval);
38100 			}
38101 		} else {
38102 			ZVAL_COPY_VALUE(&generator->retval, retval);
38103 		}
38104 	}
38105 
38106 	/* Close the generator to free up resources */
38107 	zend_generator_close(generator, 1);
38108 
38109 	/* Pass execution back to handling code */
38110 	ZEND_VM_RETURN();
38111 }
38112 
ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38114 {
38115 	USE_OPLINE
38116 	zval *value;
38117 
38118 	SAVE_OPLINE();
38119 	value = EX_VAR(opline->op1.var);
38120 
38121 	do {
38122 		if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
38123 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
38124 				value = Z_REFVAL_P(value);
38125 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
38126 					break;
38127 				}
38128 			}
38129 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
38130 				ZVAL_UNDEFINED_OP1();
38131 				if (UNEXPECTED(EG(exception) != NULL)) {
38132 					HANDLE_EXCEPTION();
38133 				}
38134 			}
38135 			zend_throw_error(NULL, "Can only throw objects");
38136 
38137 			HANDLE_EXCEPTION();
38138 		}
38139 	} while (0);
38140 
38141 	zend_exception_save();
38142 	Z_TRY_ADDREF_P(value);
38143 	zend_throw_exception_object(value);
38144 	zend_exception_restore();
38145 
38146 	HANDLE_EXCEPTION();
38147 }
38148 
ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38149 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38150 {
38151 	USE_OPLINE
38152 	zval *arg, *param;
38153 
38154 	SAVE_OPLINE();
38155 
38156 	arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38157 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
38158 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
38159 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
38160 		Z_TRY_ADDREF_P(arg);
38161 		ZVAL_NEW_REF(param, arg);
38162 	} else {
38163 		ZVAL_COPY(param, arg);
38164 	}
38165 
38166 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38167 }
38168 
ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38169 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38170 {
38171 	USE_OPLINE
38172 	zval *val;
38173 
38174 	val = EX_VAR(opline->op1.var);
38175 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
38176 		ZVAL_TRUE(EX_VAR(opline->result.var));
38177 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
38178 		/* The result and op1 can be the same cv zval */
38179 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
38180 		ZVAL_FALSE(EX_VAR(opline->result.var));
38181 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
38182 			SAVE_OPLINE();
38183 			ZVAL_UNDEFINED_OP1();
38184 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38185 		}
38186 	} else {
38187 		SAVE_OPLINE();
38188 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
38189 
38190 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38191 	}
38192 	ZEND_VM_NEXT_OPCODE();
38193 }
38194 
ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38195 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38196 {
38197 	USE_OPLINE
38198 	zval *obj;
38199 	zend_object *zobj;
38200 	zend_class_entry *ce, *scope;
38201 	zend_function *clone;
38202 	zend_object_clone_obj_t clone_call;
38203 
38204 	SAVE_OPLINE();
38205 	obj = EX_VAR(opline->op1.var);
38206 
38207 	do {
38208 		if (IS_CV == IS_CONST ||
38209 		    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
38210 		    if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
38211 				obj = Z_REFVAL_P(obj);
38212 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
38213 					break;
38214 				}
38215 			}
38216 			ZVAL_UNDEF(EX_VAR(opline->result.var));
38217 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
38218 				ZVAL_UNDEFINED_OP1();
38219 				if (UNEXPECTED(EG(exception) != NULL)) {
38220 					HANDLE_EXCEPTION();
38221 				}
38222 			}
38223 			zend_throw_error(NULL, "__clone method called on non-object");
38224 
38225 			HANDLE_EXCEPTION();
38226 		}
38227 	} while (0);
38228 
38229 	zobj = Z_OBJ_P(obj);
38230 	ce = zobj->ce;
38231 	clone = ce->clone;
38232 	clone_call = zobj->handlers->clone_obj;
38233 	if (UNEXPECTED(clone_call == NULL)) {
38234 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
38235 
38236 		ZVAL_UNDEF(EX_VAR(opline->result.var));
38237 		HANDLE_EXCEPTION();
38238 	}
38239 
38240 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
38241 		scope = EX(func)->op_array.scope;
38242 		if (clone->common.scope != scope) {
38243 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
38244 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
38245 				zend_wrong_clone_call(clone, scope);
38246 
38247 				ZVAL_UNDEF(EX_VAR(opline->result.var));
38248 				HANDLE_EXCEPTION();
38249 			}
38250 		}
38251 	}
38252 
38253 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
38254 
38255 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38256 }
38257 
ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38258 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38259 {
38260 	USE_OPLINE
38261 	zval *expr;
38262 	zval *result = EX_VAR(opline->result.var);
38263 	HashTable *ht;
38264 
38265 	SAVE_OPLINE();
38266 	expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38267 
38268 	switch (opline->extended_value) {
38269 		case IS_LONG:
38270 			ZVAL_LONG(result, zval_get_long(expr));
38271 			break;
38272 		case IS_DOUBLE:
38273 			ZVAL_DOUBLE(result, zval_get_double(expr));
38274 			break;
38275 		case IS_STRING:
38276 			ZVAL_STR(result, zval_get_string(expr));
38277 			break;
38278 		default:
38279 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
38280 			if (IS_CV & (IS_VAR|IS_CV)) {
38281 				ZVAL_DEREF(expr);
38282 			}
38283 			/* If value is already of correct type, return it directly */
38284 			if (Z_TYPE_P(expr) == opline->extended_value) {
38285 				ZVAL_COPY_VALUE(result, expr);
38286 				if (IS_CV == IS_CONST) {
38287 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
38288 				} else if (IS_CV != IS_TMP_VAR) {
38289 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
38290 				}
38291 
38292 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38293 			}
38294 
38295 			if (opline->extended_value == IS_ARRAY) {
38296 				if (IS_CV == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
38297 					if (Z_TYPE_P(expr) != IS_NULL) {
38298 						ZVAL_ARR(result, zend_new_array(1));
38299 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
38300 						if (IS_CV == IS_CONST) {
38301 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
38302 						} else {
38303 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
38304 						}
38305 					} else {
38306 						ZVAL_EMPTY_ARRAY(result);
38307 					}
38308 				} else {
38309 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
38310 					if (obj_ht) {
38311 						/* fast copy */
38312 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
38313 							(Z_OBJCE_P(expr)->default_properties_count ||
38314 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
38315 							 GC_IS_RECURSIVE(obj_ht))));
38316 						zend_release_properties(obj_ht);
38317 					} else {
38318 						ZVAL_EMPTY_ARRAY(result);
38319 					}
38320 				}
38321 			} else {
38322 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
38323 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
38324 				if (Z_TYPE_P(expr) == IS_ARRAY) {
38325 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
38326 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
38327 						/* TODO: try not to duplicate immutable arrays as well ??? */
38328 						ht = zend_array_dup(ht);
38329 					}
38330 					Z_OBJ_P(result)->properties = ht;
38331 				} else if (Z_TYPE_P(expr) != IS_NULL) {
38332 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
38333 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
38334 					if (IS_CV == IS_CONST) {
38335 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
38336 					} else {
38337 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
38338 					}
38339 				}
38340 			}
38341 	}
38342 
38343 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38344 }
38345 
ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38346 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38347 {
38348 	USE_OPLINE
38349 	zend_op_array *new_op_array;
38350 	zval *inc_filename;
38351 
38352 	SAVE_OPLINE();
38353 	inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38354 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
38355 	if (UNEXPECTED(EG(exception) != NULL)) {
38356 
38357 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
38358 			destroy_op_array(new_op_array);
38359 			efree_size(new_op_array, sizeof(zend_op_array));
38360 		}
38361 		UNDEF_RESULT();
38362 		HANDLE_EXCEPTION();
38363 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
38364 		if (RETURN_VALUE_USED(opline)) {
38365 			ZVAL_TRUE(EX_VAR(opline->result.var));
38366 		}
38367 	} else if (EXPECTED(new_op_array != NULL)) {
38368 		zval *return_value = NULL;
38369 		zend_execute_data *call;
38370 
38371 		if (RETURN_VALUE_USED(opline)) {
38372 			return_value = EX_VAR(opline->result.var);
38373 		}
38374 
38375 		new_op_array->scope = EX(func)->op_array.scope;
38376 
38377 		call = zend_vm_stack_push_call_frame(
38378 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
38379 			(zend_function*)new_op_array, 0,
38380 			Z_PTR(EX(This)));
38381 
38382 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
38383 			call->symbol_table = EX(symbol_table);
38384 		} else {
38385 			call->symbol_table = zend_rebuild_symbol_table();
38386 		}
38387 
38388 		call->prev_execute_data = execute_data;
38389 		i_init_code_execute_data(call, new_op_array, return_value);
38390 
38391 		if (EXPECTED(zend_execute_ex == execute_ex)) {
38392 
38393 			ZEND_VM_ENTER();
38394 		} else {
38395 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
38396 			zend_execute_ex(call);
38397 			zend_vm_stack_free_call_frame(call);
38398 		}
38399 
38400 		destroy_op_array(new_op_array);
38401 		efree_size(new_op_array, sizeof(zend_op_array));
38402 		if (UNEXPECTED(EG(exception) != NULL)) {
38403 			zend_rethrow_exception(execute_data);
38404 
38405 			UNDEF_RESULT();
38406 			HANDLE_EXCEPTION();
38407 		}
38408 	} else if (RETURN_VALUE_USED(opline)) {
38409 		ZVAL_FALSE(EX_VAR(opline->result.var));
38410 	}
38411 
38412 	ZEND_VM_NEXT_OPCODE();
38413 }
38414 
ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38415 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38416 {
38417 	USE_OPLINE
38418 	zval *array_ptr, *result;
38419 
38420 	SAVE_OPLINE();
38421 
38422 	array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38423 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
38424 		result = EX_VAR(opline->result.var);
38425 		ZVAL_COPY_VALUE(result, array_ptr);
38426 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
38427 			Z_ADDREF_P(array_ptr);
38428 		}
38429 		Z_FE_POS_P(result) = 0;
38430 
38431 		ZEND_VM_NEXT_OPCODE();
38432 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
38433 		zend_object *zobj = Z_OBJ_P(array_ptr);
38434 		if (!zobj->ce->get_iterator) {
38435 			HashTable *properties = zobj->properties;
38436 			if (properties) {
38437 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
38438 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
38439 						GC_DELREF(properties);
38440 					}
38441 					properties = zobj->properties = zend_array_dup(properties);
38442 				}
38443 			} else {
38444 				properties = zobj->handlers->get_properties(zobj);
38445 			}
38446 
38447 			result = EX_VAR(opline->result.var);
38448 			ZVAL_COPY_VALUE(result, array_ptr);
38449 			if (IS_CV != IS_TMP_VAR) {
38450 				Z_ADDREF_P(array_ptr);
38451 			}
38452 
38453 			if (zend_hash_num_elements(properties) == 0) {
38454 				Z_FE_ITER_P(result) = (uint32_t) -1;
38455 
38456 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38457 			}
38458 
38459 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
38460 
38461 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38462 		} else {
38463 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
38464 
38465 			if (UNEXPECTED(EG(exception))) {
38466 				HANDLE_EXCEPTION();
38467 			} else if (is_empty) {
38468 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38469 			} else {
38470 				ZEND_VM_NEXT_OPCODE();
38471 			}
38472 		}
38473 	} else {
38474 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
38475 		ZVAL_UNDEF(EX_VAR(opline->result.var));
38476 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
38477 
38478 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38479 	}
38480 }
38481 
ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38482 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38483 {
38484 	USE_OPLINE
38485 	zval *array_ptr, *array_ref;
38486 
38487 	SAVE_OPLINE();
38488 
38489 	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
38490 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38491 		if (Z_ISREF_P(array_ref)) {
38492 			array_ptr = Z_REFVAL_P(array_ref);
38493 		}
38494 	} else {
38495 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38496 	}
38497 
38498 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
38499 		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
38500 			if (array_ptr == array_ref) {
38501 				ZVAL_NEW_REF(array_ref, array_ref);
38502 				array_ptr = Z_REFVAL_P(array_ref);
38503 			}
38504 			Z_ADDREF_P(array_ref);
38505 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
38506 		} else {
38507 			array_ref = EX_VAR(opline->result.var);
38508 			ZVAL_NEW_REF(array_ref, array_ptr);
38509 			array_ptr = Z_REFVAL_P(array_ref);
38510 		}
38511 		if (IS_CV == IS_CONST) {
38512 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
38513 		} else {
38514 			SEPARATE_ARRAY(array_ptr);
38515 		}
38516 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
38517 
38518 		if (IS_CV == IS_VAR) {
38519 
38520 		}
38521 		ZEND_VM_NEXT_OPCODE();
38522 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
38523 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
38524 			HashTable *properties;
38525 			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
38526 				if (array_ptr == array_ref) {
38527 					ZVAL_NEW_REF(array_ref, array_ref);
38528 					array_ptr = Z_REFVAL_P(array_ref);
38529 				}
38530 				Z_ADDREF_P(array_ref);
38531 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
38532 			} else {
38533 				array_ptr = EX_VAR(opline->result.var);
38534 				ZVAL_COPY_VALUE(array_ptr, array_ref);
38535 			}
38536 			if (Z_OBJ_P(array_ptr)->properties
38537 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
38538 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
38539 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
38540 				}
38541 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
38542 			}
38543 
38544 			properties = Z_OBJPROP_P(array_ptr);
38545 			if (zend_hash_num_elements(properties) == 0) {
38546 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
38547 
38548 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38549 			}
38550 
38551 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
38552 
38553 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38554 		} else {
38555 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
38556 
38557 			if (IS_CV == IS_VAR) {
38558 
38559 			} else {
38560 
38561 			}
38562 			if (UNEXPECTED(EG(exception))) {
38563 				HANDLE_EXCEPTION();
38564 			} else if (is_empty) {
38565 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38566 			} else {
38567 				ZEND_VM_NEXT_OPCODE();
38568 			}
38569 		}
38570 	} else {
38571 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
38572 		ZVAL_UNDEF(EX_VAR(opline->result.var));
38573 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
38574 		if (IS_CV == IS_VAR) {
38575 
38576 		} else {
38577 
38578 		}
38579 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38580 	}
38581 }
38582 
ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38584 {
38585 	USE_OPLINE
38586 	zval *value;
38587 	zval *ref = NULL;
38588 	bool ret;
38589 
38590 	SAVE_OPLINE();
38591 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38592 
38593 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
38594 		if (IS_CV == IS_VAR) {
38595 			ref = value;
38596 		}
38597 		value = Z_REFVAL_P(value);
38598 	}
38599 
38600 	ret = i_zend_is_true(value);
38601 
38602 	if (UNEXPECTED(EG(exception))) {
38603 
38604 		ZVAL_UNDEF(EX_VAR(opline->result.var));
38605 		HANDLE_EXCEPTION();
38606 	}
38607 
38608 	if (ret) {
38609 		zval *result = EX_VAR(opline->result.var);
38610 
38611 		ZVAL_COPY_VALUE(result, value);
38612 		if (IS_CV == IS_CONST) {
38613 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
38614 		} else if (IS_CV == IS_CV) {
38615 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
38616 		} else if (IS_CV == IS_VAR && ref) {
38617 			zend_reference *r = Z_REF_P(ref);
38618 
38619 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
38620 				efree_size(r, sizeof(zend_reference));
38621 			} else if (Z_OPT_REFCOUNTED_P(result)) {
38622 				Z_ADDREF_P(result);
38623 			}
38624 		}
38625 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38626 	}
38627 
38628 	ZEND_VM_NEXT_OPCODE();
38629 }
38630 
ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38631 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38632 {
38633 	USE_OPLINE
38634 	zval *value;
38635 	zval *ref = NULL;
38636 
38637 	SAVE_OPLINE();
38638 	value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
38639 
38640 	if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
38641 		if (IS_CV & IS_VAR) {
38642 			ref = value;
38643 		}
38644 		value = Z_REFVAL_P(value);
38645 	}
38646 
38647 	if (Z_TYPE_P(value) > IS_NULL) {
38648 		zval *result = EX_VAR(opline->result.var);
38649 		ZVAL_COPY_VALUE(result, value);
38650 		if (IS_CV == IS_CONST) {
38651 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
38652 		} else if (IS_CV == IS_CV) {
38653 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
38654 		} else if ((IS_CV & IS_VAR) && ref) {
38655 			zend_reference *r = Z_REF_P(ref);
38656 
38657 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
38658 				efree_size(r, sizeof(zend_reference));
38659 			} else if (Z_OPT_REFCOUNTED_P(result)) {
38660 				Z_ADDREF_P(result);
38661 			}
38662 		}
38663 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38664 	}
38665 
38666 	ZEND_VM_NEXT_OPCODE();
38667 }
38668 
ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38669 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38670 {
38671 	USE_OPLINE
38672 	zval *val, *result;
38673 
38674 	val = EX_VAR(opline->op1.var);
38675 
38676 	if (Z_TYPE_P(val) > IS_NULL) {
38677 		do {
38678 			if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
38679 				val = Z_REFVAL_P(val);
38680 				if (Z_TYPE_P(val) <= IS_NULL) {
38681 
38682 					break;
38683 				}
38684 			}
38685 			ZEND_VM_NEXT_OPCODE();
38686 		} while (0);
38687 	}
38688 
38689 	result = EX_VAR(opline->result.var);
38690 	if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
38691 		ZVAL_NULL(result);
38692 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
38693 			SAVE_OPLINE();
38694 			ZVAL_UNDEFINED_OP1();
38695 			if (UNEXPECTED(EG(exception) != NULL)) {
38696 				HANDLE_EXCEPTION();
38697 			}
38698 		}
38699 	} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
38700 		ZVAL_FALSE(result);
38701 	} else {
38702 		ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
38703 		ZVAL_TRUE(result);
38704 	}
38705 
38706 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
38707 }
38708 
ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38709 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38710 {
38711 	USE_OPLINE
38712 	zval *value;
38713 	zval *result = EX_VAR(opline->result.var);
38714 
38715 	value = EX_VAR(opline->op1.var);
38716 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
38717 		SAVE_OPLINE();
38718 		ZVAL_UNDEFINED_OP1();
38719 		ZVAL_NULL(result);
38720 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38721 	}
38722 
38723 	if (IS_CV == IS_CV) {
38724 		ZVAL_COPY_DEREF(result, value);
38725 	} else if (IS_CV == IS_VAR) {
38726 		if (UNEXPECTED(Z_ISREF_P(value))) {
38727 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
38728 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
38729 				efree_size(Z_REF_P(value), sizeof(zend_reference));
38730 			} else if (Z_OPT_REFCOUNTED_P(result)) {
38731 				Z_ADDREF_P(result);
38732 			}
38733 		} else {
38734 			ZVAL_COPY_VALUE(result, value);
38735 		}
38736 	} else {
38737 		ZVAL_COPY_VALUE(result, value);
38738 		if (IS_CV == IS_CONST) {
38739 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
38740 				Z_ADDREF_P(result);
38741 			}
38742 		}
38743 	}
38744 	ZEND_VM_NEXT_OPCODE();
38745 }
38746 
ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38747 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38748 {
38749 	USE_OPLINE
38750 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
38751 	zval *val;
38752 
38753 	SAVE_OPLINE();
38754 	val = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38755 
38756 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
38757 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
38758 
38759 		UNDEF_RESULT();
38760 		HANDLE_EXCEPTION();
38761 	}
38762 
38763 yield_from_try_again:
38764 	if (Z_TYPE_P(val) == IS_ARRAY) {
38765 		ZVAL_COPY_VALUE(&generator->values, val);
38766 		if (Z_OPT_REFCOUNTED_P(val)) {
38767 			Z_ADDREF_P(val);
38768 		}
38769 		Z_FE_POS(generator->values) = 0;
38770 
38771 	} else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
38772 		zend_class_entry *ce = Z_OBJCE_P(val);
38773 		if (ce == zend_ce_generator) {
38774 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
38775 
38776 			Z_ADDREF_P(val);
38777 
38778 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
38779 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
38780 				zval_ptr_dtor(val);
38781 				UNDEF_RESULT();
38782 				HANDLE_EXCEPTION();
38783 			} else if (Z_ISUNDEF(new_gen->retval)) {
38784 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
38785 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
38786 					zval_ptr_dtor(val);
38787 					UNDEF_RESULT();
38788 					HANDLE_EXCEPTION();
38789 				} else {
38790 					zend_generator_yield_from(generator, new_gen);
38791 				}
38792 			} else {
38793 				if (RETURN_VALUE_USED(opline)) {
38794 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
38795 				}
38796 				ZEND_VM_NEXT_OPCODE();
38797 			}
38798 		} else {
38799 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
38800 
38801 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
38802 				if (!EG(exception)) {
38803 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
38804 				}
38805 				UNDEF_RESULT();
38806 				HANDLE_EXCEPTION();
38807 			}
38808 
38809 			iter->index = 0;
38810 			if (iter->funcs->rewind) {
38811 				iter->funcs->rewind(iter);
38812 				if (UNEXPECTED(EG(exception) != NULL)) {
38813 					OBJ_RELEASE(&iter->std);
38814 					UNDEF_RESULT();
38815 					HANDLE_EXCEPTION();
38816 				}
38817 			}
38818 
38819 			ZVAL_OBJ(&generator->values, &iter->std);
38820 		}
38821 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
38822 		val = Z_REFVAL_P(val);
38823 		goto yield_from_try_again;
38824 	} else {
38825 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
38826 
38827 		UNDEF_RESULT();
38828 		HANDLE_EXCEPTION();
38829 	}
38830 
38831 	/* This is the default return value
38832 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
38833 	if (RETURN_VALUE_USED(opline)) {
38834 		ZVAL_NULL(EX_VAR(opline->result.var));
38835 	}
38836 
38837 	/* This generator has no send target (though the generator we delegate to might have one) */
38838 	generator->send_target = NULL;
38839 
38840 	/* We increment to the next op, so we are at the correct position when the
38841 	 * generator is resumed. */
38842 	ZEND_VM_INC_OPCODE();
38843 
38844 	/* The GOTO VM uses a local opline variable. We need to set the opline
38845 	 * variable in execute_data so we don't resume at an old position. */
38846 	SAVE_OPLINE();
38847 
38848 	ZEND_VM_RETURN();
38849 }
38850 
ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38851 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38852 {
38853 	USE_OPLINE
38854 	zval *value;
38855 
38856 	value = EX_VAR(opline->op1.var);
38857 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
38858 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
38859 
38860 		ZEND_VM_NEXT_OPCODE();
38861 	} else {
38862 		zend_bool strict;
38863 
38864 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
38865 			value = Z_REFVAL_P(value);
38866 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
38867 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
38868 
38869 				ZEND_VM_NEXT_OPCODE();
38870 			}
38871 		}
38872 
38873 		SAVE_OPLINE();
38874 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
38875 			value = ZVAL_UNDEFINED_OP1();
38876 		}
38877 		strict = EX_USES_STRICT_TYPES();
38878 		do {
38879 			if (EXPECTED(!strict)) {
38880 				zend_string *str;
38881 				zval tmp;
38882 
38883 				ZVAL_COPY(&tmp, value);
38884 				if (zend_parse_arg_str_weak(&tmp, &str)) {
38885 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
38886 					zval_ptr_dtor(&tmp);
38887 					break;
38888 				}
38889 				zval_ptr_dtor(&tmp);
38890 			}
38891 			if (!EG(exception)) {
38892 				zend_type_error("strlen(): Argument #1 ($str) must be of type string, %s given", zend_zval_type_name(value));
38893 			}
38894 			ZVAL_UNDEF(EX_VAR(opline->result.var));
38895 		} while (0);
38896 	}
38897 
38898 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38899 }
38900 
ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38901 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38902 {
38903 	USE_OPLINE
38904 	zval *value;
38905 	int result = 0;
38906 
38907 	value = EX_VAR(opline->op1.var);
38908 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
38909 type_check_resource:
38910 		if (opline->extended_value != MAY_BE_RESOURCE
38911 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
38912 			result = 1;
38913 		}
38914 	} else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
38915 		value = Z_REFVAL_P(value);
38916 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
38917 			goto type_check_resource;
38918 		}
38919 	} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
38920 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
38921 		SAVE_OPLINE();
38922 		ZVAL_UNDEFINED_OP1();
38923 		if (UNEXPECTED(EG(exception))) {
38924 			ZVAL_UNDEF(EX_VAR(opline->result.var));
38925 			HANDLE_EXCEPTION();
38926 		}
38927 	}
38928 	if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38929 		SAVE_OPLINE();
38930 
38931 		ZEND_VM_SMART_BRANCH(result, 1);
38932 	} else {
38933 		ZEND_VM_SMART_BRANCH(result, 0);
38934 	}
38935 }
38936 
ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38937 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38938 {
38939 	uint32_t fetch_type;
38940 	zend_class_entry *called_scope, *scope;
38941 	USE_OPLINE
38942 
38943 	if (IS_CV != IS_UNUSED) {
38944 		SAVE_OPLINE();
38945 		zval *op = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38946 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
38947 			ZVAL_DEREF(op);
38948 			if (Z_TYPE_P(op) != IS_OBJECT) {
38949 				zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
38950 				ZVAL_UNDEF(EX_VAR(opline->result.var));
38951 
38952 				HANDLE_EXCEPTION();
38953 			}
38954 		}
38955 
38956 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
38957 
38958 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38959 	}
38960 
38961 	fetch_type = opline->op1.num;
38962 	scope = EX(func)->op_array.scope;
38963 	if (UNEXPECTED(scope == NULL)) {
38964 		SAVE_OPLINE();
38965 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
38966 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
38967 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
38968 		ZVAL_UNDEF(EX_VAR(opline->result.var));
38969 		HANDLE_EXCEPTION();
38970 	}
38971 
38972 	switch (fetch_type) {
38973 		case ZEND_FETCH_CLASS_SELF:
38974 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
38975 			break;
38976 		case ZEND_FETCH_CLASS_PARENT:
38977 			if (UNEXPECTED(scope->parent == NULL)) {
38978 				SAVE_OPLINE();
38979 				zend_throw_error(NULL,
38980 					"Cannot use \"parent\" when current class scope has no parent");
38981 				ZVAL_UNDEF(EX_VAR(opline->result.var));
38982 				HANDLE_EXCEPTION();
38983 			}
38984 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
38985 			break;
38986 		case ZEND_FETCH_CLASS_STATIC:
38987 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
38988 				called_scope = Z_OBJCE(EX(This));
38989 			} else {
38990 				called_scope = Z_CE(EX(This));
38991 			}
38992 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
38993 			break;
38994 		EMPTY_SWITCH_DEFAULT_CASE()
38995 	}
38996 	ZEND_VM_NEXT_OPCODE();
38997 }
38998 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38999 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)
39000 {
39001 	USE_OPLINE
39002 	zval *var_ptr;
39003 
39004 	var_ptr = EX_VAR(opline->op1.var);
39005 	Z_LVAL_P(var_ptr)++;
39006 	if (UNEXPECTED(0)) {
39007 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39008 	}
39009 	ZEND_VM_NEXT_OPCODE();
39010 }
39011 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39012 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)
39013 {
39014 	USE_OPLINE
39015 	zval *var_ptr;
39016 
39017 	var_ptr = EX_VAR(opline->op1.var);
39018 	Z_LVAL_P(var_ptr)++;
39019 	if (UNEXPECTED(1)) {
39020 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39021 	}
39022 	ZEND_VM_NEXT_OPCODE();
39023 }
39024 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39025 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39026 {
39027 	USE_OPLINE
39028 	zval *var_ptr;
39029 
39030 	var_ptr = EX_VAR(opline->op1.var);
39031 	fast_long_increment_function(var_ptr);
39032 	if (UNEXPECTED(0)) {
39033 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39034 	}
39035 	ZEND_VM_NEXT_OPCODE();
39036 }
39037 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39038 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39039 {
39040 	USE_OPLINE
39041 	zval *var_ptr;
39042 
39043 	var_ptr = EX_VAR(opline->op1.var);
39044 	fast_long_increment_function(var_ptr);
39045 	if (UNEXPECTED(1)) {
39046 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39047 	}
39048 	ZEND_VM_NEXT_OPCODE();
39049 }
39050 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39051 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)
39052 {
39053 	USE_OPLINE
39054 	zval *var_ptr;
39055 
39056 	var_ptr = EX_VAR(opline->op1.var);
39057 	Z_LVAL_P(var_ptr)--;
39058 	if (UNEXPECTED(0)) {
39059 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39060 	}
39061 	ZEND_VM_NEXT_OPCODE();
39062 }
39063 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39064 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)
39065 {
39066 	USE_OPLINE
39067 	zval *var_ptr;
39068 
39069 	var_ptr = EX_VAR(opline->op1.var);
39070 	Z_LVAL_P(var_ptr)--;
39071 	if (UNEXPECTED(1)) {
39072 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39073 	}
39074 	ZEND_VM_NEXT_OPCODE();
39075 }
39076 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39077 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39078 {
39079 	USE_OPLINE
39080 	zval *var_ptr;
39081 
39082 	var_ptr = EX_VAR(opline->op1.var);
39083 	fast_long_decrement_function(var_ptr);
39084 	if (UNEXPECTED(0)) {
39085 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39086 	}
39087 	ZEND_VM_NEXT_OPCODE();
39088 }
39089 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39090 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39091 {
39092 	USE_OPLINE
39093 	zval *var_ptr;
39094 
39095 	var_ptr = EX_VAR(opline->op1.var);
39096 	fast_long_decrement_function(var_ptr);
39097 	if (UNEXPECTED(1)) {
39098 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39099 	}
39100 	ZEND_VM_NEXT_OPCODE();
39101 }
39102 
ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39103 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39104 {
39105 	USE_OPLINE
39106 	zval *var_ptr;
39107 
39108 	var_ptr = EX_VAR(opline->op1.var);
39109 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39110 	Z_LVAL_P(var_ptr)++;
39111 	ZEND_VM_NEXT_OPCODE();
39112 }
39113 
ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39114 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39115 {
39116 	USE_OPLINE
39117 	zval *var_ptr;
39118 
39119 	var_ptr = EX_VAR(opline->op1.var);
39120 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39121 	fast_long_increment_function(var_ptr);
39122 	ZEND_VM_NEXT_OPCODE();
39123 }
39124 
ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39125 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39126 {
39127 	USE_OPLINE
39128 	zval *var_ptr;
39129 
39130 	var_ptr = EX_VAR(opline->op1.var);
39131 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39132 	Z_LVAL_P(var_ptr)--;
39133 	ZEND_VM_NEXT_OPCODE();
39134 }
39135 
ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39136 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39137 {
39138 	USE_OPLINE
39139 	zval *var_ptr;
39140 
39141 	var_ptr = EX_VAR(opline->op1.var);
39142 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39143 	fast_long_decrement_function(var_ptr);
39144 	ZEND_VM_NEXT_OPCODE();
39145 }
39146 
ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39147 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39148 {
39149 	USE_OPLINE
39150 	zval *varptr, *arg;
39151 
39152 	varptr = EX_VAR(opline->op1.var);
39153 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
39154 
39155 	if (IS_CV == IS_CV) {
39156 		ZVAL_COPY(arg, varptr);
39157 	} else /* if (IS_CV == IS_VAR) */ {
39158 		ZVAL_COPY_VALUE(arg, varptr);
39159 	}
39160 
39161 	ZEND_VM_NEXT_OPCODE();
39162 }
39163 
ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39164 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39165 {
39166 	USE_OPLINE
39167 	zval *op1, *op2;
39168 
39169 	SAVE_OPLINE();
39170 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39171 	op2 = RT_CONSTANT(opline, opline->op2);
39172 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
39173 
39174 
39175 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39176 }
39177 
ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39178 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39179 {
39180 	USE_OPLINE
39181 	zval *op1, *op2;
39182 
39183 	SAVE_OPLINE();
39184 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39185 	op2 = RT_CONSTANT(opline, opline->op2);
39186 	pow_function(EX_VAR(opline->result.var), op1, op2);
39187 
39188 
39189 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39190 }
39191 
ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39193 {
39194 	USE_OPLINE
39195 	zval *op1, *op2;
39196 
39197 	op1 = EX_VAR(opline->op1.var);
39198 	op2 = RT_CONSTANT(opline, opline->op2);
39199 
39200 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
39201 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
39202 		zend_string *op1_str = Z_STR_P(op1);
39203 		zend_string *op2_str = Z_STR_P(op2);
39204 		zend_string *str;
39205 
39206 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
39207 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
39208 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
39209 			} else {
39210 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
39211 			}
39212 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39213 				zend_string_release_ex(op1_str, 0);
39214 			}
39215 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
39216 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
39217 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
39218 			} else {
39219 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
39220 			}
39221 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39222 				zend_string_release_ex(op2_str, 0);
39223 			}
39224 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
39225 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
39226 		    size_t len = ZSTR_LEN(op1_str);
39227 
39228 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
39229 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
39230 			}
39231 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
39232 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
39233 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
39234 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39235 				zend_string_release_ex(op2_str, 0);
39236 			}
39237 		} else {
39238 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
39239 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
39240 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
39241 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
39242 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39243 				zend_string_release_ex(op1_str, 0);
39244 			}
39245 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39246 				zend_string_release_ex(op2_str, 0);
39247 			}
39248 		}
39249 		ZEND_VM_NEXT_OPCODE();
39250 	} else {
39251 		SAVE_OPLINE();
39252 
39253 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
39254 			op1 = ZVAL_UNDEFINED_OP1();
39255 		}
39256 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
39257 			op2 = ZVAL_UNDEFINED_OP2();
39258 		}
39259 		concat_function(EX_VAR(opline->result.var), op1, op2);
39260 
39261 
39262 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39263 	}
39264 }
39265 
ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39267 {
39268 	USE_OPLINE
39269 	zval *op1, *op2;
39270 	zend_bool result;
39271 
39272 	SAVE_OPLINE();
39273 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39274 	op2 = RT_CONSTANT(opline, opline->op2);
39275 	result = fast_is_identical_function(op1, op2);
39276 
39277 
39278 	ZEND_VM_SMART_BRANCH(result, 1);
39279 }
39280 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39282 {
39283 	USE_OPLINE
39284 	zval *op1, *op2;
39285 	zend_bool result;
39286 
39287 	SAVE_OPLINE();
39288 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39289 	op2 = RT_CONSTANT(opline, opline->op2);
39290 	result = fast_is_not_identical_function(op1, op2);
39291 
39292 
39293 	ZEND_VM_SMART_BRANCH(result, 1);
39294 }
39295 
ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39296 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39297 {
39298 	USE_OPLINE
39299 	zval *op1, *op2;
39300 	double d1, d2;
39301 
39302 	op1 = EX_VAR(opline->op1.var);
39303 	op2 = RT_CONSTANT(opline, opline->op2);
39304 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39305 		/* pass */
39306 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39307 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39308 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
39309 is_equal_true:
39310 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
39311 			} else {
39312 is_equal_false:
39313 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
39314 			}
39315 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39316 			d1 = (double)Z_LVAL_P(op1);
39317 			d2 = Z_DVAL_P(op2);
39318 			goto is_equal_double;
39319 		}
39320 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39321 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39322 			d1 = Z_DVAL_P(op1);
39323 			d2 = Z_DVAL_P(op2);
39324 is_equal_double:
39325 			if (d1 == d2) {
39326 				goto is_equal_true;
39327 			} else {
39328 				goto is_equal_false;
39329 			}
39330 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39331 			d1 = Z_DVAL_P(op1);
39332 			d2 = (double)Z_LVAL_P(op2);
39333 			goto is_equal_double;
39334 		}
39335 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39336 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39337 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39338 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39339 				zval_ptr_dtor_str(op1);
39340 			}
39341 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39342 				zval_ptr_dtor_str(op2);
39343 			}
39344 			if (result) {
39345 				goto is_equal_true;
39346 			} else {
39347 				goto is_equal_false;
39348 			}
39349 		}
39350 	}
39351 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39352 }
39353 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39354 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39355 {
39356 	USE_OPLINE
39357 	zval *op1, *op2;
39358 	double d1, d2;
39359 
39360 	op1 = EX_VAR(opline->op1.var);
39361 	op2 = RT_CONSTANT(opline, opline->op2);
39362 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39363 		/* pass */
39364 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39365 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39366 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
39367 is_equal_true:
39368 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
39369 			} else {
39370 is_equal_false:
39371 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
39372 			}
39373 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39374 			d1 = (double)Z_LVAL_P(op1);
39375 			d2 = Z_DVAL_P(op2);
39376 			goto is_equal_double;
39377 		}
39378 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39379 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39380 			d1 = Z_DVAL_P(op1);
39381 			d2 = Z_DVAL_P(op2);
39382 is_equal_double:
39383 			if (d1 == d2) {
39384 				goto is_equal_true;
39385 			} else {
39386 				goto is_equal_false;
39387 			}
39388 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39389 			d1 = Z_DVAL_P(op1);
39390 			d2 = (double)Z_LVAL_P(op2);
39391 			goto is_equal_double;
39392 		}
39393 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39394 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39395 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39396 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39397 				zval_ptr_dtor_str(op1);
39398 			}
39399 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39400 				zval_ptr_dtor_str(op2);
39401 			}
39402 			if (result) {
39403 				goto is_equal_true;
39404 			} else {
39405 				goto is_equal_false;
39406 			}
39407 		}
39408 	}
39409 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39410 }
39411 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39412 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39413 {
39414 	USE_OPLINE
39415 	zval *op1, *op2;
39416 	double d1, d2;
39417 
39418 	op1 = EX_VAR(opline->op1.var);
39419 	op2 = RT_CONSTANT(opline, opline->op2);
39420 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39421 		/* pass */
39422 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39423 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39424 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
39425 is_equal_true:
39426 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
39427 			} else {
39428 is_equal_false:
39429 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
39430 			}
39431 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39432 			d1 = (double)Z_LVAL_P(op1);
39433 			d2 = Z_DVAL_P(op2);
39434 			goto is_equal_double;
39435 		}
39436 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39437 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39438 			d1 = Z_DVAL_P(op1);
39439 			d2 = Z_DVAL_P(op2);
39440 is_equal_double:
39441 			if (d1 == d2) {
39442 				goto is_equal_true;
39443 			} else {
39444 				goto is_equal_false;
39445 			}
39446 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39447 			d1 = Z_DVAL_P(op1);
39448 			d2 = (double)Z_LVAL_P(op2);
39449 			goto is_equal_double;
39450 		}
39451 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39452 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39453 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39454 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39455 				zval_ptr_dtor_str(op1);
39456 			}
39457 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39458 				zval_ptr_dtor_str(op2);
39459 			}
39460 			if (result) {
39461 				goto is_equal_true;
39462 			} else {
39463 				goto is_equal_false;
39464 			}
39465 		}
39466 	}
39467 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39468 }
39469 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39470 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39471 {
39472 	USE_OPLINE
39473 	zval *op1, *op2;
39474 	double d1, d2;
39475 
39476 	op1 = EX_VAR(opline->op1.var);
39477 	op2 = RT_CONSTANT(opline, opline->op2);
39478 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39479 		/* pass */
39480 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39481 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39482 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
39483 is_not_equal_true:
39484 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
39485 			} else {
39486 is_not_equal_false:
39487 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
39488 			}
39489 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39490 			d1 = (double)Z_LVAL_P(op1);
39491 			d2 = Z_DVAL_P(op2);
39492 			goto is_not_equal_double;
39493 		}
39494 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39495 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39496 			d1 = Z_DVAL_P(op1);
39497 			d2 = Z_DVAL_P(op2);
39498 is_not_equal_double:
39499 			if (d1 != d2) {
39500 				goto is_not_equal_true;
39501 			} else {
39502 				goto is_not_equal_false;
39503 			}
39504 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39505 			d1 = Z_DVAL_P(op1);
39506 			d2 = (double)Z_LVAL_P(op2);
39507 			goto is_not_equal_double;
39508 		}
39509 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39510 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39511 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39512 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39513 				zval_ptr_dtor_str(op1);
39514 			}
39515 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39516 				zval_ptr_dtor_str(op2);
39517 			}
39518 			if (!result) {
39519 				goto is_not_equal_true;
39520 			} else {
39521 				goto is_not_equal_false;
39522 			}
39523 		}
39524 	}
39525 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39526 }
39527 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39528 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39529 {
39530 	USE_OPLINE
39531 	zval *op1, *op2;
39532 	double d1, d2;
39533 
39534 	op1 = EX_VAR(opline->op1.var);
39535 	op2 = RT_CONSTANT(opline, opline->op2);
39536 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39537 		/* pass */
39538 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39539 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39540 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
39541 is_not_equal_true:
39542 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
39543 			} else {
39544 is_not_equal_false:
39545 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
39546 			}
39547 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39548 			d1 = (double)Z_LVAL_P(op1);
39549 			d2 = Z_DVAL_P(op2);
39550 			goto is_not_equal_double;
39551 		}
39552 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39553 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39554 			d1 = Z_DVAL_P(op1);
39555 			d2 = Z_DVAL_P(op2);
39556 is_not_equal_double:
39557 			if (d1 != d2) {
39558 				goto is_not_equal_true;
39559 			} else {
39560 				goto is_not_equal_false;
39561 			}
39562 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39563 			d1 = Z_DVAL_P(op1);
39564 			d2 = (double)Z_LVAL_P(op2);
39565 			goto is_not_equal_double;
39566 		}
39567 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39568 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39569 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39570 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39571 				zval_ptr_dtor_str(op1);
39572 			}
39573 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39574 				zval_ptr_dtor_str(op2);
39575 			}
39576 			if (!result) {
39577 				goto is_not_equal_true;
39578 			} else {
39579 				goto is_not_equal_false;
39580 			}
39581 		}
39582 	}
39583 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39584 }
39585 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39586 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39587 {
39588 	USE_OPLINE
39589 	zval *op1, *op2;
39590 	double d1, d2;
39591 
39592 	op1 = EX_VAR(opline->op1.var);
39593 	op2 = RT_CONSTANT(opline, opline->op2);
39594 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
39595 		/* pass */
39596 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39597 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39598 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
39599 is_not_equal_true:
39600 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
39601 			} else {
39602 is_not_equal_false:
39603 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
39604 			}
39605 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39606 			d1 = (double)Z_LVAL_P(op1);
39607 			d2 = Z_DVAL_P(op2);
39608 			goto is_not_equal_double;
39609 		}
39610 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39611 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39612 			d1 = Z_DVAL_P(op1);
39613 			d2 = Z_DVAL_P(op2);
39614 is_not_equal_double:
39615 			if (d1 != d2) {
39616 				goto is_not_equal_true;
39617 			} else {
39618 				goto is_not_equal_false;
39619 			}
39620 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39621 			d1 = Z_DVAL_P(op1);
39622 			d2 = (double)Z_LVAL_P(op2);
39623 			goto is_not_equal_double;
39624 		}
39625 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39626 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39627 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
39628 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
39629 				zval_ptr_dtor_str(op1);
39630 			}
39631 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
39632 				zval_ptr_dtor_str(op2);
39633 			}
39634 			if (!result) {
39635 				goto is_not_equal_true;
39636 			} else {
39637 				goto is_not_equal_false;
39638 			}
39639 		}
39640 	}
39641 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39642 }
39643 
ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39644 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39645 {
39646 	USE_OPLINE
39647 	zval *op1, *op2;
39648 
39649 	SAVE_OPLINE();
39650 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39651 	op2 = RT_CONSTANT(opline, opline->op2);
39652 	compare_function(EX_VAR(opline->result.var), op1, op2);
39653 
39654 
39655 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39656 }
39657 
ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39658 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39659 {
39660 	USE_OPLINE
39661 	zval *op1, *op2;
39662 
39663 	SAVE_OPLINE();
39664 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39665 	op2 = RT_CONSTANT(opline, opline->op2);
39666 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
39667 
39668 
39669 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39670 }
39671 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39673 {
39674 	USE_OPLINE
39675 	zval *object;
39676 	zval *property;
39677 	zval *value;
39678 	zval *zptr;
39679 	void **cache_slot;
39680 	zend_property_info *prop_info;
39681 	zend_object *zobj;
39682 	zend_string *name, *tmp_name;
39683 
39684 	SAVE_OPLINE();
39685 	object = EX_VAR(opline->op1.var);
39686 	property = RT_CONSTANT(opline, opline->op2);
39687 
39688 	do {
39689 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
39690 
39691 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39692 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
39693 				object = Z_REFVAL_P(object);
39694 				goto assign_op_object;
39695 			}
39696 			if (IS_CV == IS_CV
39697 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39698 				ZVAL_UNDEFINED_OP1();
39699 			}
39700 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
39701 			break;
39702 		}
39703 
39704 assign_op_object:
39705 		/* here we are sure we are dealing with an object */
39706 		zobj = Z_OBJ_P(object);
39707 		if (IS_CONST == IS_CONST) {
39708 			name = Z_STR_P(property);
39709 		} else {
39710 			name = zval_try_get_tmp_string(property, &tmp_name);
39711 			if (UNEXPECTED(!name)) {
39712 				UNDEF_RESULT();
39713 				break;
39714 			}
39715 		}
39716 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
39717 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
39718 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
39719 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39720 					ZVAL_NULL(EX_VAR(opline->result.var));
39721 				}
39722 			} else {
39723 				zval *orig_zptr = zptr;
39724 				zend_reference *ref;
39725 
39726 				do {
39727 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
39728 						ref = Z_REF_P(zptr);
39729 						zptr = Z_REFVAL_P(zptr);
39730 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39731 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
39732 							break;
39733 						}
39734 					}
39735 
39736 					if (IS_CONST == IS_CONST) {
39737 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
39738 					} else {
39739 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
39740 					}
39741 					if (UNEXPECTED(prop_info)) {
39742 						/* special case for typed properties */
39743 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
39744 					} else {
39745 						zend_binary_op(zptr, zptr, value OPLINE_CC);
39746 					}
39747 				} while (0);
39748 
39749 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39750 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
39751 				}
39752 			}
39753 		} else {
39754 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
39755 		}
39756 		if (IS_CONST != IS_CONST) {
39757 			zend_tmp_string_release(tmp_name);
39758 		}
39759 	} while (0);
39760 
39761 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
39762 
39763 
39764 	/* assign_obj has two opcodes! */
39765 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39766 }
39767 
39768 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39770 {
39771 	USE_OPLINE
39772 	zval *var_ptr;
39773 	zval *value, *container, *dim;
39774 
39775 	SAVE_OPLINE();
39776 	container = EX_VAR(opline->op1.var);
39777 
39778 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
39779 assign_dim_op_array:
39780 		SEPARATE_ARRAY(container);
39781 assign_dim_op_new_array:
39782 		dim = RT_CONSTANT(opline, opline->op2);
39783 		if (IS_CONST == IS_UNUSED) {
39784 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
39785 			if (UNEXPECTED(!var_ptr)) {
39786 				zend_cannot_add_element();
39787 				goto assign_dim_op_ret_null;
39788 			}
39789 		} else {
39790 			if (IS_CONST == IS_CONST) {
39791 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
39792 			} else {
39793 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
39794 			}
39795 			if (UNEXPECTED(!var_ptr)) {
39796 				goto assign_dim_op_ret_null;
39797 			}
39798 		}
39799 
39800 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
39801 
39802 		do {
39803 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
39804 				zend_reference *ref = Z_REF_P(var_ptr);
39805 				var_ptr = Z_REFVAL_P(var_ptr);
39806 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39807 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
39808 					break;
39809 				}
39810 			}
39811 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
39812 		} while (0);
39813 
39814 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39815 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39816 		}
39817 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
39818 	} else {
39819 		if (EXPECTED(Z_ISREF_P(container))) {
39820 			container = Z_REFVAL_P(container);
39821 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
39822 				goto assign_dim_op_array;
39823 			}
39824 		}
39825 
39826 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
39827 			zend_object *obj = Z_OBJ_P(container);
39828 
39829 			GC_ADDREF(obj);
39830 			dim = RT_CONSTANT(opline, opline->op2);
39831 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
39832 				dim = ZVAL_UNDEFINED_OP2();
39833 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
39834 				dim++;
39835 			}
39836 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
39837 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
39838 				zend_objects_store_del(obj);
39839 			}
39840 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
39841 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
39842 				ZVAL_UNDEFINED_OP1();
39843 			}
39844 			ZVAL_ARR(container, zend_new_array(8));
39845 			goto assign_dim_op_new_array;
39846 		} else {
39847 			dim = RT_CONSTANT(opline, opline->op2);
39848 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
39849 assign_dim_op_ret_null:
39850 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
39851 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39852 				ZVAL_NULL(EX_VAR(opline->result.var));
39853 			}
39854 		}
39855 	}
39856 
39857 
39858 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39859 }
39860 
ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39861 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39862 {
39863 	USE_OPLINE
39864 	zval *var_ptr;
39865 	zval *value;
39866 
39867 	SAVE_OPLINE();
39868 	value = RT_CONSTANT(opline, opline->op2);
39869 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
39870 
39871 	do {
39872 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39873 			zend_reference *ref = Z_REF_P(var_ptr);
39874 			var_ptr = Z_REFVAL_P(var_ptr);
39875 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39876 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
39877 				break;
39878 			}
39879 		}
39880 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
39881 	} while (0);
39882 
39883 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39884 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39885 	}
39886 
39887 
39888 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39889 }
39890 
ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39891 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39892 {
39893 	USE_OPLINE
39894 	zval *object;
39895 	zval *property;
39896 	zval *zptr;
39897 	void **cache_slot;
39898 	zend_property_info *prop_info;
39899 	zend_object *zobj;
39900 	zend_string *name, *tmp_name;
39901 
39902 	SAVE_OPLINE();
39903 	object = EX_VAR(opline->op1.var);
39904 	property = RT_CONSTANT(opline, opline->op2);
39905 
39906 	do {
39907 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39908 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
39909 				object = Z_REFVAL_P(object);
39910 				goto pre_incdec_object;
39911 			}
39912 			if (IS_CV == IS_CV
39913 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39914 				ZVAL_UNDEFINED_OP1();
39915 			}
39916 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
39917 			break;
39918 		}
39919 
39920 pre_incdec_object:
39921 		/* here we are sure we are dealing with an object */
39922 		zobj = Z_OBJ_P(object);
39923 		if (IS_CONST == IS_CONST) {
39924 			name = Z_STR_P(property);
39925 		} else {
39926 			name = zval_try_get_tmp_string(property, &tmp_name);
39927 			if (UNEXPECTED(!name)) {
39928 				UNDEF_RESULT();
39929 				break;
39930 			}
39931 		}
39932 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
39933 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
39934 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
39935 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39936 					ZVAL_NULL(EX_VAR(opline->result.var));
39937 				}
39938 			} else {
39939 				if (IS_CONST == IS_CONST) {
39940 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
39941 				} else {
39942 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
39943 				}
39944 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
39945 			}
39946 		} else {
39947 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
39948 		}
39949 		if (IS_CONST != IS_CONST) {
39950 			zend_tmp_string_release(tmp_name);
39951 		}
39952 	} while (0);
39953 
39954 
39955 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39956 }
39957 
ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39958 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39959 {
39960 	USE_OPLINE
39961 	zval *object;
39962 	zval *property;
39963 	zval *zptr;
39964 	void **cache_slot;
39965 	zend_property_info *prop_info;
39966 	zend_object *zobj;
39967 	zend_string *name, *tmp_name;
39968 
39969 	SAVE_OPLINE();
39970 	object = EX_VAR(opline->op1.var);
39971 	property = RT_CONSTANT(opline, opline->op2);
39972 
39973 	do {
39974 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39975 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
39976 				object = Z_REFVAL_P(object);
39977 				goto post_incdec_object;
39978 			}
39979 			if (IS_CV == IS_CV
39980 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39981 				ZVAL_UNDEFINED_OP1();
39982 			}
39983 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
39984 			break;
39985 		}
39986 
39987 post_incdec_object:
39988 		/* here we are sure we are dealing with an object */
39989 		zobj = Z_OBJ_P(object);
39990 		if (IS_CONST == IS_CONST) {
39991 			name = Z_STR_P(property);
39992 		} else {
39993 			name = zval_try_get_tmp_string(property, &tmp_name);
39994 			if (UNEXPECTED(!name)) {
39995 				ZVAL_UNDEF(EX_VAR(opline->result.var));
39996 				break;
39997 			}
39998 		}
39999 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
40000 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
40001 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
40002 				ZVAL_NULL(EX_VAR(opline->result.var));
40003 			} else {
40004 				if (IS_CONST == IS_CONST) {
40005 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
40006 				} else {
40007 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
40008 				}
40009 
40010 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
40011 			}
40012 		} else {
40013 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
40014 		}
40015 		if (IS_CONST != IS_CONST) {
40016 			zend_tmp_string_release(tmp_name);
40017 		}
40018 	} while (0);
40019 
40020 
40021 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40022 }
40023 
ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40024 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40025 {
40026 	USE_OPLINE
40027 	zval *container, *dim, *value;
40028 
40029 	SAVE_OPLINE();
40030 	container = EX_VAR(opline->op1.var);
40031 	dim = RT_CONSTANT(opline, opline->op2);
40032 	if (IS_CV != IS_CONST) {
40033 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40034 fetch_dim_r_array:
40035 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
40036 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
40037 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
40038 			container = Z_REFVAL_P(container);
40039 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40040 				goto fetch_dim_r_array;
40041 			} else {
40042 				goto fetch_dim_r_slow;
40043 			}
40044 		} else {
40045 fetch_dim_r_slow:
40046 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
40047 				dim++;
40048 			}
40049 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
40050 		}
40051 	} else {
40052 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40053 	}
40054 
40055 
40056 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40057 }
40058 
ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40060 {
40061 	USE_OPLINE
40062 	zval *container;
40063 
40064 	SAVE_OPLINE();
40065 	container = EX_VAR(opline->op1.var);
40066 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40067 
40068 	if (IS_CV == IS_VAR) {
40069 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40070 	}
40071 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40072 }
40073 
ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40075 {
40076 	USE_OPLINE
40077 	zval *container;
40078 
40079 	SAVE_OPLINE();
40080 	container = EX_VAR(opline->op1.var);
40081 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40082 
40083 	if (IS_CV == IS_VAR) {
40084 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40085 	}
40086 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40087 }
40088 
ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40089 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40090 {
40091 	USE_OPLINE
40092 	zval *container;
40093 
40094 	SAVE_OPLINE();
40095 	container = EX_VAR(opline->op1.var);
40096 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40097 
40098 
40099 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40100 }
40101 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40102 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40103 {
40104 #if 0
40105 	USE_OPLINE
40106 #endif
40107 
40108 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
40109         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
40110 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40111         }
40112 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40113 	} else {
40114 		if (IS_CONST == IS_UNUSED) {
40115 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40116 		}
40117 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40118 	}
40119 }
40120 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40121 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40122 {
40123 	USE_OPLINE
40124 	zval *container;
40125 
40126 	SAVE_OPLINE();
40127 	container = EX_VAR(opline->op1.var);
40128 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
40129 
40130 	if (IS_CV == IS_VAR) {
40131 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40132 	}
40133 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40134 }
40135 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40136 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40137 {
40138 	USE_OPLINE
40139 	zval *container;
40140 	zval *offset;
40141 	void **cache_slot = NULL;
40142 
40143 	SAVE_OPLINE();
40144 	container = EX_VAR(opline->op1.var);
40145 	offset = RT_CONSTANT(opline, opline->op2);
40146 
40147 	if (IS_CV == IS_CONST ||
40148 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
40149 	    do {
40150 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
40151 				container = Z_REFVAL_P(container);
40152 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
40153 					break;
40154 				}
40155 			}
40156 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
40157 				ZVAL_UNDEFINED_OP1();
40158 			}
40159 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
40160 				ZVAL_UNDEFINED_OP2();
40161 			}
40162 			zend_wrong_property_read(container, offset);
40163 			ZVAL_NULL(EX_VAR(opline->result.var));
40164 			goto fetch_obj_r_finish;
40165 		} while (0);
40166 	}
40167 
40168 	/* here we are sure we are dealing with an object */
40169 	do {
40170 		zend_object *zobj = Z_OBJ_P(container);
40171 		zend_string *name, *tmp_name;
40172 		zval *retval;
40173 
40174 		if (IS_CONST == IS_CONST) {
40175 			name = Z_STR_P(offset);
40176 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
40177 
40178 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
40179 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40180 
40181 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40182 					retval = OBJ_PROP(zobj, prop_offset);
40183 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
40184 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40185 							goto fetch_obj_r_copy;
40186 						} else {
40187 fetch_obj_r_fast_copy:
40188 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
40189 							ZEND_VM_NEXT_OPCODE();
40190 						}
40191 					}
40192 				} else if (EXPECTED(zobj->properties != NULL)) {
40193 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
40194 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
40195 
40196 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
40197 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
40198 
40199 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
40200 						        (EXPECTED(p->key == name) ||
40201 						         (EXPECTED(p->h == ZSTR_H(name)) &&
40202 						          EXPECTED(p->key != NULL) &&
40203 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
40204 								retval = &p->val;
40205 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40206 									goto fetch_obj_r_copy;
40207 								} else {
40208 									goto fetch_obj_r_fast_copy;
40209 								}
40210 							}
40211 						}
40212 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
40213 					}
40214 					retval = zend_hash_find_ex(zobj->properties, name, 1);
40215 					if (EXPECTED(retval)) {
40216 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
40217 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
40218 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40219 							goto fetch_obj_r_copy;
40220 						} else {
40221 							goto fetch_obj_r_fast_copy;
40222 						}
40223 					}
40224 				}
40225 			}
40226 		} else {
40227 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
40228 				ZVAL_UNDEFINED_OP2();
40229 			}
40230 			name = zval_try_get_tmp_string(offset, &tmp_name);
40231 			if (UNEXPECTED(!name)) {
40232 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40233 				break;
40234 			}
40235 		}
40236 
40237 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
40238 
40239 		if (IS_CONST != IS_CONST) {
40240 			zend_tmp_string_release(tmp_name);
40241 		}
40242 
40243 		if (retval != EX_VAR(opline->result.var)) {
40244 fetch_obj_r_copy:
40245 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
40246 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
40247 			zend_unwrap_reference(retval);
40248 		}
40249 	} while (0);
40250 
40251 fetch_obj_r_finish:
40252 
40253 
40254 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40255 }
40256 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40257 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40258 {
40259 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40260 }
40261 
ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40262 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40263 {
40264 	USE_OPLINE
40265 	zval *property, *container, *result;
40266 
40267 	SAVE_OPLINE();
40268 
40269 	container = EX_VAR(opline->op1.var);
40270 	property = RT_CONSTANT(opline, opline->op2);
40271 	result = EX_VAR(opline->result.var);
40272 	zend_fetch_property_address(
40273 		result, container, IS_CV, property, IS_CONST,
40274 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
40275 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
40276 
40277 	if (IS_CV == IS_VAR) {
40278 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40279 	}
40280 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40281 }
40282 
ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40283 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40284 {
40285 	USE_OPLINE
40286 	zval *property, *container, *result;
40287 
40288 	SAVE_OPLINE();
40289 	container = EX_VAR(opline->op1.var);
40290 	property = RT_CONSTANT(opline, opline->op2);
40291 	result = EX_VAR(opline->result.var);
40292 	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
40293 
40294 	if (IS_CV == IS_VAR) {
40295 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40296 	}
40297 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40298 }
40299 
ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40300 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40301 {
40302 	USE_OPLINE
40303 	zval *container;
40304 	zval *offset;
40305 	void **cache_slot = NULL;
40306 
40307 	SAVE_OPLINE();
40308 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
40309 	offset = RT_CONSTANT(opline, opline->op2);
40310 
40311 	if (IS_CV == IS_CONST ||
40312 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
40313 		do {
40314 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
40315 				container = Z_REFVAL_P(container);
40316 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
40317 					break;
40318 				}
40319 			}
40320 			ZVAL_NULL(EX_VAR(opline->result.var));
40321 			goto fetch_obj_is_finish;
40322 		} while (0);
40323 	}
40324 
40325 	/* here we are sure we are dealing with an object */
40326 	do {
40327 		zend_object *zobj = Z_OBJ_P(container);
40328 		zend_string *name, *tmp_name;
40329 		zval *retval;
40330 
40331 		if (IS_CONST == IS_CONST) {
40332 			name = Z_STR_P(offset);
40333 			cache_slot = CACHE_ADDR(opline->extended_value);
40334 
40335 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
40336 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40337 
40338 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40339 					retval = OBJ_PROP(zobj, prop_offset);
40340 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
40341 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40342 							goto fetch_obj_is_copy;
40343 						} else {
40344 fetch_obj_is_fast_copy:
40345 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
40346 							ZEND_VM_NEXT_OPCODE();
40347 						}
40348 					}
40349 				} else if (EXPECTED(zobj->properties != NULL)) {
40350 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
40351 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
40352 
40353 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
40354 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
40355 
40356 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
40357 						        (EXPECTED(p->key == name) ||
40358 						         (EXPECTED(p->h == ZSTR_H(name)) &&
40359 						          EXPECTED(p->key != NULL) &&
40360 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
40361 								retval = &p->val;
40362 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40363 									goto fetch_obj_is_copy;
40364 								} else {
40365 									goto fetch_obj_is_fast_copy;
40366 								}
40367 							}
40368 						}
40369 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
40370 					}
40371 					retval = zend_hash_find_ex(zobj->properties, name, 1);
40372 					if (EXPECTED(retval)) {
40373 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
40374 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
40375 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
40376 							goto fetch_obj_is_copy;
40377 						} else {
40378 							goto fetch_obj_is_fast_copy;
40379 						}
40380 					}
40381 				}
40382 			}
40383 		} else {
40384 			name = zval_try_get_tmp_string(offset, &tmp_name);
40385 			if (UNEXPECTED(!name)) {
40386 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40387 				break;
40388 			}
40389 		}
40390 
40391 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
40392 
40393 		if (IS_CONST != IS_CONST) {
40394 			zend_tmp_string_release(tmp_name);
40395 		}
40396 
40397 		if (retval != EX_VAR(opline->result.var)) {
40398 fetch_obj_is_copy:
40399 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
40400 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
40401 			zend_unwrap_reference(retval);
40402 		}
40403 	} while (0);
40404 
40405 fetch_obj_is_finish:
40406 
40407 
40408 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40409 }
40410 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40412 {
40413 #if 0
40414 	USE_OPLINE
40415 #endif
40416 
40417 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
40418 		/* Behave like FETCH_OBJ_W */
40419 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
40420 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40421 		}
40422 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40423 	} else {
40424 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40425 	}
40426 }
40427 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40429 {
40430 	USE_OPLINE
40431 	zval *container, *property, *result;
40432 
40433 	SAVE_OPLINE();
40434 	container = EX_VAR(opline->op1.var);
40435 	property = RT_CONSTANT(opline, opline->op2);
40436 	result = EX_VAR(opline->result.var);
40437 	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
40438 
40439 	if (IS_CV == IS_VAR) {
40440 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
40441 	}
40442 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40443 }
40444 
ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40445 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40446 {
40447 	USE_OPLINE
40448 	zval *object, *property, *value, tmp;
40449 	zend_object *zobj;
40450 	zend_string *name, *tmp_name;
40451 
40452 	SAVE_OPLINE();
40453 	object = EX_VAR(opline->op1.var);
40454 	property = RT_CONSTANT(opline, opline->op2);
40455 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
40456 
40457 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40458 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
40459 			object = Z_REFVAL_P(object);
40460 			goto assign_object;
40461 		}
40462 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
40463 		value = &EG(uninitialized_zval);
40464 		goto free_and_exit_assign_obj;
40465 	}
40466 
40467 assign_object:
40468 	zobj = Z_OBJ_P(object);
40469 	if (IS_CONST == IS_CONST &&
40470 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
40471 		void **cache_slot = CACHE_ADDR(opline->extended_value);
40472 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40473 		zend_object *zobj = Z_OBJ_P(object);
40474 		zval *property_val;
40475 
40476 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40477 			property_val = OBJ_PROP(zobj, prop_offset);
40478 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
40479 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
40480 
40481 				if (UNEXPECTED(prop_info != NULL)) {
40482 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
40483 					goto free_and_exit_assign_obj;
40484 				} else {
40485 fast_assign_obj:
40486 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
40487 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40488 						ZVAL_COPY(EX_VAR(opline->result.var), value);
40489 					}
40490 					goto exit_assign_obj;
40491 				}
40492 			}
40493 		} else {
40494 			if (EXPECTED(zobj->properties != NULL)) {
40495 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
40496 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
40497 						GC_DELREF(zobj->properties);
40498 					}
40499 					zobj->properties = zend_array_dup(zobj->properties);
40500 				}
40501 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
40502 				if (property_val) {
40503 					goto fast_assign_obj;
40504 				}
40505 			}
40506 
40507 			if (!zobj->ce->__set) {
40508 
40509 				if (EXPECTED(zobj->properties == NULL)) {
40510 					rebuild_object_properties(zobj);
40511 				}
40512 				if (IS_CONST == IS_CONST) {
40513 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
40514 						Z_ADDREF_P(value);
40515 					}
40516 				} else if (IS_CONST != IS_TMP_VAR) {
40517 					if (Z_ISREF_P(value)) {
40518 						if (IS_CONST == IS_VAR) {
40519 							zend_reference *ref = Z_REF_P(value);
40520 							if (GC_DELREF(ref) == 0) {
40521 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
40522 								efree_size(ref, sizeof(zend_reference));
40523 								value = &tmp;
40524 							} else {
40525 								value = Z_REFVAL_P(value);
40526 								Z_TRY_ADDREF_P(value);
40527 							}
40528 						} else {
40529 							value = Z_REFVAL_P(value);
40530 							Z_TRY_ADDREF_P(value);
40531 						}
40532 					} else if (IS_CONST == IS_CV) {
40533 						Z_TRY_ADDREF_P(value);
40534 					}
40535 				}
40536 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
40537 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40538 					ZVAL_COPY(EX_VAR(opline->result.var), value);
40539 				}
40540 				goto exit_assign_obj;
40541 			}
40542 		}
40543 	}
40544 
40545 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
40546 		ZVAL_DEREF(value);
40547 	}
40548 
40549 	if (IS_CONST == IS_CONST) {
40550 		name = Z_STR_P(property);
40551 	} else {
40552 		name = zval_try_get_tmp_string(property, &tmp_name);
40553 		if (UNEXPECTED(!name)) {
40554 
40555 			UNDEF_RESULT();
40556 			goto exit_assign_obj;
40557 		}
40558 	}
40559 
40560 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
40561 
40562 	if (IS_CONST != IS_CONST) {
40563 		zend_tmp_string_release(tmp_name);
40564 	}
40565 
40566 free_and_exit_assign_obj:
40567 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40568 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
40569 	}
40570 
40571 exit_assign_obj:
40572 
40573 
40574 	/* assign_obj has two opcodes! */
40575 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40576 }
40577 
40578 /* 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)40579 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40580 {
40581 	USE_OPLINE
40582 	zval *object, *property, *value, tmp;
40583 	zend_object *zobj;
40584 	zend_string *name, *tmp_name;
40585 
40586 	SAVE_OPLINE();
40587 	object = EX_VAR(opline->op1.var);
40588 	property = RT_CONSTANT(opline, opline->op2);
40589 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
40590 
40591 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40592 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
40593 			object = Z_REFVAL_P(object);
40594 			goto assign_object;
40595 		}
40596 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
40597 		value = &EG(uninitialized_zval);
40598 		goto free_and_exit_assign_obj;
40599 	}
40600 
40601 assign_object:
40602 	zobj = Z_OBJ_P(object);
40603 	if (IS_CONST == IS_CONST &&
40604 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
40605 		void **cache_slot = CACHE_ADDR(opline->extended_value);
40606 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40607 		zend_object *zobj = Z_OBJ_P(object);
40608 		zval *property_val;
40609 
40610 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40611 			property_val = OBJ_PROP(zobj, prop_offset);
40612 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
40613 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
40614 
40615 				if (UNEXPECTED(prop_info != NULL)) {
40616 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
40617 					goto free_and_exit_assign_obj;
40618 				} else {
40619 fast_assign_obj:
40620 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
40621 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40622 						ZVAL_COPY(EX_VAR(opline->result.var), value);
40623 					}
40624 					goto exit_assign_obj;
40625 				}
40626 			}
40627 		} else {
40628 			if (EXPECTED(zobj->properties != NULL)) {
40629 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
40630 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
40631 						GC_DELREF(zobj->properties);
40632 					}
40633 					zobj->properties = zend_array_dup(zobj->properties);
40634 				}
40635 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
40636 				if (property_val) {
40637 					goto fast_assign_obj;
40638 				}
40639 			}
40640 
40641 			if (!zobj->ce->__set) {
40642 
40643 				if (EXPECTED(zobj->properties == NULL)) {
40644 					rebuild_object_properties(zobj);
40645 				}
40646 				if (IS_TMP_VAR == IS_CONST) {
40647 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
40648 						Z_ADDREF_P(value);
40649 					}
40650 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
40651 					if (Z_ISREF_P(value)) {
40652 						if (IS_TMP_VAR == IS_VAR) {
40653 							zend_reference *ref = Z_REF_P(value);
40654 							if (GC_DELREF(ref) == 0) {
40655 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
40656 								efree_size(ref, sizeof(zend_reference));
40657 								value = &tmp;
40658 							} else {
40659 								value = Z_REFVAL_P(value);
40660 								Z_TRY_ADDREF_P(value);
40661 							}
40662 						} else {
40663 							value = Z_REFVAL_P(value);
40664 							Z_TRY_ADDREF_P(value);
40665 						}
40666 					} else if (IS_TMP_VAR == IS_CV) {
40667 						Z_TRY_ADDREF_P(value);
40668 					}
40669 				}
40670 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
40671 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40672 					ZVAL_COPY(EX_VAR(opline->result.var), value);
40673 				}
40674 				goto exit_assign_obj;
40675 			}
40676 		}
40677 	}
40678 
40679 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
40680 		ZVAL_DEREF(value);
40681 	}
40682 
40683 	if (IS_CONST == IS_CONST) {
40684 		name = Z_STR_P(property);
40685 	} else {
40686 		name = zval_try_get_tmp_string(property, &tmp_name);
40687 		if (UNEXPECTED(!name)) {
40688 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40689 			UNDEF_RESULT();
40690 			goto exit_assign_obj;
40691 		}
40692 	}
40693 
40694 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
40695 
40696 	if (IS_CONST != IS_CONST) {
40697 		zend_tmp_string_release(tmp_name);
40698 	}
40699 
40700 free_and_exit_assign_obj:
40701 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40702 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
40703 	}
40704 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40705 exit_assign_obj:
40706 
40707 
40708 	/* assign_obj has two opcodes! */
40709 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40710 }
40711 
40712 /* 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)40713 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40714 {
40715 	USE_OPLINE
40716 	zval *object, *property, *value, tmp;
40717 	zend_object *zobj;
40718 	zend_string *name, *tmp_name;
40719 
40720 	SAVE_OPLINE();
40721 	object = EX_VAR(opline->op1.var);
40722 	property = RT_CONSTANT(opline, opline->op2);
40723 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
40724 
40725 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40726 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
40727 			object = Z_REFVAL_P(object);
40728 			goto assign_object;
40729 		}
40730 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
40731 		value = &EG(uninitialized_zval);
40732 		goto free_and_exit_assign_obj;
40733 	}
40734 
40735 assign_object:
40736 	zobj = Z_OBJ_P(object);
40737 	if (IS_CONST == IS_CONST &&
40738 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
40739 		void **cache_slot = CACHE_ADDR(opline->extended_value);
40740 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40741 		zend_object *zobj = Z_OBJ_P(object);
40742 		zval *property_val;
40743 
40744 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40745 			property_val = OBJ_PROP(zobj, prop_offset);
40746 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
40747 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
40748 
40749 				if (UNEXPECTED(prop_info != NULL)) {
40750 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
40751 					goto free_and_exit_assign_obj;
40752 				} else {
40753 fast_assign_obj:
40754 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
40755 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40756 						ZVAL_COPY(EX_VAR(opline->result.var), value);
40757 					}
40758 					goto exit_assign_obj;
40759 				}
40760 			}
40761 		} else {
40762 			if (EXPECTED(zobj->properties != NULL)) {
40763 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
40764 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
40765 						GC_DELREF(zobj->properties);
40766 					}
40767 					zobj->properties = zend_array_dup(zobj->properties);
40768 				}
40769 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
40770 				if (property_val) {
40771 					goto fast_assign_obj;
40772 				}
40773 			}
40774 
40775 			if (!zobj->ce->__set) {
40776 
40777 				if (EXPECTED(zobj->properties == NULL)) {
40778 					rebuild_object_properties(zobj);
40779 				}
40780 				if (IS_VAR == IS_CONST) {
40781 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
40782 						Z_ADDREF_P(value);
40783 					}
40784 				} else if (IS_VAR != IS_TMP_VAR) {
40785 					if (Z_ISREF_P(value)) {
40786 						if (IS_VAR == IS_VAR) {
40787 							zend_reference *ref = Z_REF_P(value);
40788 							if (GC_DELREF(ref) == 0) {
40789 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
40790 								efree_size(ref, sizeof(zend_reference));
40791 								value = &tmp;
40792 							} else {
40793 								value = Z_REFVAL_P(value);
40794 								Z_TRY_ADDREF_P(value);
40795 							}
40796 						} else {
40797 							value = Z_REFVAL_P(value);
40798 							Z_TRY_ADDREF_P(value);
40799 						}
40800 					} else if (IS_VAR == IS_CV) {
40801 						Z_TRY_ADDREF_P(value);
40802 					}
40803 				}
40804 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
40805 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40806 					ZVAL_COPY(EX_VAR(opline->result.var), value);
40807 				}
40808 				goto exit_assign_obj;
40809 			}
40810 		}
40811 	}
40812 
40813 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
40814 		ZVAL_DEREF(value);
40815 	}
40816 
40817 	if (IS_CONST == IS_CONST) {
40818 		name = Z_STR_P(property);
40819 	} else {
40820 		name = zval_try_get_tmp_string(property, &tmp_name);
40821 		if (UNEXPECTED(!name)) {
40822 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40823 			UNDEF_RESULT();
40824 			goto exit_assign_obj;
40825 		}
40826 	}
40827 
40828 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
40829 
40830 	if (IS_CONST != IS_CONST) {
40831 		zend_tmp_string_release(tmp_name);
40832 	}
40833 
40834 free_and_exit_assign_obj:
40835 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40836 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
40837 	}
40838 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40839 exit_assign_obj:
40840 
40841 
40842 	/* assign_obj has two opcodes! */
40843 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40844 }
40845 
40846 /* 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)40847 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40848 {
40849 	USE_OPLINE
40850 	zval *object, *property, *value, tmp;
40851 	zend_object *zobj;
40852 	zend_string *name, *tmp_name;
40853 
40854 	SAVE_OPLINE();
40855 	object = EX_VAR(opline->op1.var);
40856 	property = RT_CONSTANT(opline, opline->op2);
40857 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
40858 
40859 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40860 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
40861 			object = Z_REFVAL_P(object);
40862 			goto assign_object;
40863 		}
40864 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
40865 		value = &EG(uninitialized_zval);
40866 		goto free_and_exit_assign_obj;
40867 	}
40868 
40869 assign_object:
40870 	zobj = Z_OBJ_P(object);
40871 	if (IS_CONST == IS_CONST &&
40872 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
40873 		void **cache_slot = CACHE_ADDR(opline->extended_value);
40874 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40875 		zend_object *zobj = Z_OBJ_P(object);
40876 		zval *property_val;
40877 
40878 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40879 			property_val = OBJ_PROP(zobj, prop_offset);
40880 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
40881 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
40882 
40883 				if (UNEXPECTED(prop_info != NULL)) {
40884 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
40885 					goto free_and_exit_assign_obj;
40886 				} else {
40887 fast_assign_obj:
40888 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
40889 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40890 						ZVAL_COPY(EX_VAR(opline->result.var), value);
40891 					}
40892 					goto exit_assign_obj;
40893 				}
40894 			}
40895 		} else {
40896 			if (EXPECTED(zobj->properties != NULL)) {
40897 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
40898 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
40899 						GC_DELREF(zobj->properties);
40900 					}
40901 					zobj->properties = zend_array_dup(zobj->properties);
40902 				}
40903 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
40904 				if (property_val) {
40905 					goto fast_assign_obj;
40906 				}
40907 			}
40908 
40909 			if (!zobj->ce->__set) {
40910 
40911 				if (EXPECTED(zobj->properties == NULL)) {
40912 					rebuild_object_properties(zobj);
40913 				}
40914 				if (IS_CV == IS_CONST) {
40915 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
40916 						Z_ADDREF_P(value);
40917 					}
40918 				} else if (IS_CV != IS_TMP_VAR) {
40919 					if (Z_ISREF_P(value)) {
40920 						if (IS_CV == IS_VAR) {
40921 							zend_reference *ref = Z_REF_P(value);
40922 							if (GC_DELREF(ref) == 0) {
40923 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
40924 								efree_size(ref, sizeof(zend_reference));
40925 								value = &tmp;
40926 							} else {
40927 								value = Z_REFVAL_P(value);
40928 								Z_TRY_ADDREF_P(value);
40929 							}
40930 						} else {
40931 							value = Z_REFVAL_P(value);
40932 							Z_TRY_ADDREF_P(value);
40933 						}
40934 					} else if (IS_CV == IS_CV) {
40935 						Z_TRY_ADDREF_P(value);
40936 					}
40937 				}
40938 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
40939 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40940 					ZVAL_COPY(EX_VAR(opline->result.var), value);
40941 				}
40942 				goto exit_assign_obj;
40943 			}
40944 		}
40945 	}
40946 
40947 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
40948 		ZVAL_DEREF(value);
40949 	}
40950 
40951 	if (IS_CONST == IS_CONST) {
40952 		name = Z_STR_P(property);
40953 	} else {
40954 		name = zval_try_get_tmp_string(property, &tmp_name);
40955 		if (UNEXPECTED(!name)) {
40956 
40957 			UNDEF_RESULT();
40958 			goto exit_assign_obj;
40959 		}
40960 	}
40961 
40962 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
40963 
40964 	if (IS_CONST != IS_CONST) {
40965 		zend_tmp_string_release(tmp_name);
40966 	}
40967 
40968 free_and_exit_assign_obj:
40969 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40970 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
40971 	}
40972 
40973 exit_assign_obj:
40974 
40975 
40976 	/* assign_obj has two opcodes! */
40977 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40978 }
40979 
40980 /* 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)40981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40982 {
40983 	USE_OPLINE
40984 	zval *object_ptr, *orig_object_ptr;
40985 	zval *value;
40986 	zval *variable_ptr;
40987 	zval *dim;
40988 
40989 	SAVE_OPLINE();
40990 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
40991 
40992 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
40993 try_assign_dim_array:
40994 		SEPARATE_ARRAY(object_ptr);
40995 		if (IS_CONST == IS_UNUSED) {
40996 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
40997 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
40998 				HashTable *ht = Z_ARRVAL_P(object_ptr);
40999 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
41000 					GC_ADDREF(ht);
41001 				}
41002 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41003 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
41004 					zend_array_destroy(ht);
41005 					goto assign_dim_error;
41006 				}
41007 			}
41008 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
41009 				ZVAL_DEREF(value);
41010 			}
41011 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
41012 			if (UNEXPECTED(variable_ptr == NULL)) {
41013 				zend_cannot_add_element();
41014 				goto assign_dim_error;
41015 			} else if (IS_CONST == IS_CV) {
41016 				if (Z_REFCOUNTED_P(value)) {
41017 					Z_ADDREF_P(value);
41018 				}
41019 			} else if (IS_CONST == IS_VAR) {
41020 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
41021 				if (value != free_op_data) {
41022 					if (Z_REFCOUNTED_P(value)) {
41023 						Z_ADDREF_P(value);
41024 					}
41025 					zval_ptr_dtor_nogc(free_op_data);
41026 				}
41027 			} else if (IS_CONST == IS_CONST) {
41028 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
41029 					Z_ADDREF_P(value);
41030 				}
41031 			}
41032 		} else {
41033 			dim = RT_CONSTANT(opline, opline->op2);
41034 			if (IS_CONST == IS_CONST) {
41035 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41036 			} else {
41037 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41038 			}
41039 			if (UNEXPECTED(variable_ptr == NULL)) {
41040 				goto assign_dim_error;
41041 			}
41042 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
41043 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
41044 		}
41045 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41046 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41047 		}
41048 	} else {
41049 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
41050 			object_ptr = Z_REFVAL_P(object_ptr);
41051 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41052 				goto try_assign_dim_array;
41053 			}
41054 		}
41055 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
41056 			zend_object *obj = Z_OBJ_P(object_ptr);
41057 
41058 			GC_ADDREF(obj);
41059 			dim = RT_CONSTANT(opline, opline->op2);
41060 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
41061 				dim = ZVAL_UNDEFINED_OP2();
41062 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41063 				dim++;
41064 			}
41065 
41066 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
41067 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
41068 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41069 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
41070 				ZVAL_DEREF(value);
41071 			}
41072 
41073 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
41074 
41075 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
41076 				zend_objects_store_del(obj);
41077 			}
41078 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
41079 			if (IS_CONST == IS_UNUSED) {
41080 				zend_use_new_element_for_string();
41081 
41082 				UNDEF_RESULT();
41083 			} else {
41084 				dim = RT_CONSTANT(opline, opline->op2);
41085 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
41086 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
41087 
41088 			}
41089 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
41090 			if (Z_ISREF_P(orig_object_ptr)
41091 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
41092 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
41093 				dim = RT_CONSTANT(opline, opline->op2);
41094 
41095 				UNDEF_RESULT();
41096 			} else {
41097 				ZVAL_ARR(object_ptr, zend_new_array(8));
41098 				goto try_assign_dim_array;
41099 			}
41100 		} else {
41101 			zend_use_scalar_as_array();
41102 			dim = RT_CONSTANT(opline, opline->op2);
41103 assign_dim_error:
41104 
41105 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41106 				ZVAL_NULL(EX_VAR(opline->result.var));
41107 			}
41108 		}
41109 	}
41110 	if (IS_CONST != IS_UNUSED) {
41111 
41112 	}
41113 
41114 	/* assign_dim has two opcodes! */
41115 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41116 }
41117 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41119 {
41120 	USE_OPLINE
41121 	zval *object_ptr, *orig_object_ptr;
41122 	zval *value;
41123 	zval *variable_ptr;
41124 	zval *dim;
41125 
41126 	SAVE_OPLINE();
41127 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
41128 
41129 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41130 try_assign_dim_array:
41131 		SEPARATE_ARRAY(object_ptr);
41132 		if (IS_CONST == IS_UNUSED) {
41133 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
41134 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
41135 				HashTable *ht = Z_ARRVAL_P(object_ptr);
41136 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
41137 					GC_ADDREF(ht);
41138 				}
41139 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41140 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
41141 					zend_array_destroy(ht);
41142 					goto assign_dim_error;
41143 				}
41144 			}
41145 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
41146 				ZVAL_DEREF(value);
41147 			}
41148 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
41149 			if (UNEXPECTED(variable_ptr == NULL)) {
41150 				zend_cannot_add_element();
41151 				goto assign_dim_error;
41152 			} else if (IS_TMP_VAR == IS_CV) {
41153 				if (Z_REFCOUNTED_P(value)) {
41154 					Z_ADDREF_P(value);
41155 				}
41156 			} else if (IS_TMP_VAR == IS_VAR) {
41157 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
41158 				if (value != free_op_data) {
41159 					if (Z_REFCOUNTED_P(value)) {
41160 						Z_ADDREF_P(value);
41161 					}
41162 					zval_ptr_dtor_nogc(free_op_data);
41163 				}
41164 			} else if (IS_TMP_VAR == IS_CONST) {
41165 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
41166 					Z_ADDREF_P(value);
41167 				}
41168 			}
41169 		} else {
41170 			dim = RT_CONSTANT(opline, opline->op2);
41171 			if (IS_CONST == IS_CONST) {
41172 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41173 			} else {
41174 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41175 			}
41176 			if (UNEXPECTED(variable_ptr == NULL)) {
41177 				goto assign_dim_error;
41178 			}
41179 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
41180 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
41181 		}
41182 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41183 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41184 		}
41185 	} else {
41186 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
41187 			object_ptr = Z_REFVAL_P(object_ptr);
41188 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41189 				goto try_assign_dim_array;
41190 			}
41191 		}
41192 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
41193 			zend_object *obj = Z_OBJ_P(object_ptr);
41194 
41195 			GC_ADDREF(obj);
41196 			dim = RT_CONSTANT(opline, opline->op2);
41197 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
41198 				dim = ZVAL_UNDEFINED_OP2();
41199 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41200 				dim++;
41201 			}
41202 
41203 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
41204 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
41205 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41206 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
41207 				ZVAL_DEREF(value);
41208 			}
41209 
41210 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
41211 
41212 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41213 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
41214 				zend_objects_store_del(obj);
41215 			}
41216 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
41217 			if (IS_CONST == IS_UNUSED) {
41218 				zend_use_new_element_for_string();
41219 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41220 				UNDEF_RESULT();
41221 			} else {
41222 				dim = RT_CONSTANT(opline, opline->op2);
41223 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
41224 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
41225 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41226 			}
41227 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
41228 			if (Z_ISREF_P(orig_object_ptr)
41229 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
41230 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
41231 				dim = RT_CONSTANT(opline, opline->op2);
41232 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41233 				UNDEF_RESULT();
41234 			} else {
41235 				ZVAL_ARR(object_ptr, zend_new_array(8));
41236 				goto try_assign_dim_array;
41237 			}
41238 		} else {
41239 			zend_use_scalar_as_array();
41240 			dim = RT_CONSTANT(opline, opline->op2);
41241 assign_dim_error:
41242 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41243 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41244 				ZVAL_NULL(EX_VAR(opline->result.var));
41245 			}
41246 		}
41247 	}
41248 	if (IS_CONST != IS_UNUSED) {
41249 
41250 	}
41251 
41252 	/* assign_dim has two opcodes! */
41253 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41254 }
41255 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41257 {
41258 	USE_OPLINE
41259 	zval *object_ptr, *orig_object_ptr;
41260 	zval *value;
41261 	zval *variable_ptr;
41262 	zval *dim;
41263 
41264 	SAVE_OPLINE();
41265 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
41266 
41267 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41268 try_assign_dim_array:
41269 		SEPARATE_ARRAY(object_ptr);
41270 		if (IS_CONST == IS_UNUSED) {
41271 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41272 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
41273 				HashTable *ht = Z_ARRVAL_P(object_ptr);
41274 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
41275 					GC_ADDREF(ht);
41276 				}
41277 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41278 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
41279 					zend_array_destroy(ht);
41280 					goto assign_dim_error;
41281 				}
41282 			}
41283 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
41284 				ZVAL_DEREF(value);
41285 			}
41286 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
41287 			if (UNEXPECTED(variable_ptr == NULL)) {
41288 				zend_cannot_add_element();
41289 				goto assign_dim_error;
41290 			} else if (IS_VAR == IS_CV) {
41291 				if (Z_REFCOUNTED_P(value)) {
41292 					Z_ADDREF_P(value);
41293 				}
41294 			} else if (IS_VAR == IS_VAR) {
41295 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
41296 				if (value != free_op_data) {
41297 					if (Z_REFCOUNTED_P(value)) {
41298 						Z_ADDREF_P(value);
41299 					}
41300 					zval_ptr_dtor_nogc(free_op_data);
41301 				}
41302 			} else if (IS_VAR == IS_CONST) {
41303 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
41304 					Z_ADDREF_P(value);
41305 				}
41306 			}
41307 		} else {
41308 			dim = RT_CONSTANT(opline, opline->op2);
41309 			if (IS_CONST == IS_CONST) {
41310 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41311 			} else {
41312 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41313 			}
41314 			if (UNEXPECTED(variable_ptr == NULL)) {
41315 				goto assign_dim_error;
41316 			}
41317 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41318 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
41319 		}
41320 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41321 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41322 		}
41323 	} else {
41324 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
41325 			object_ptr = Z_REFVAL_P(object_ptr);
41326 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41327 				goto try_assign_dim_array;
41328 			}
41329 		}
41330 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
41331 			zend_object *obj = Z_OBJ_P(object_ptr);
41332 
41333 			GC_ADDREF(obj);
41334 			dim = RT_CONSTANT(opline, opline->op2);
41335 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
41336 				dim = ZVAL_UNDEFINED_OP2();
41337 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41338 				dim++;
41339 			}
41340 
41341 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41342 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
41343 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41344 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
41345 				ZVAL_DEREF(value);
41346 			}
41347 
41348 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
41349 
41350 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41351 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
41352 				zend_objects_store_del(obj);
41353 			}
41354 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
41355 			if (IS_CONST == IS_UNUSED) {
41356 				zend_use_new_element_for_string();
41357 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41358 				UNDEF_RESULT();
41359 			} else {
41360 				dim = RT_CONSTANT(opline, opline->op2);
41361 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41362 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
41363 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41364 			}
41365 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
41366 			if (Z_ISREF_P(orig_object_ptr)
41367 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
41368 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
41369 				dim = RT_CONSTANT(opline, opline->op2);
41370 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41371 				UNDEF_RESULT();
41372 			} else {
41373 				ZVAL_ARR(object_ptr, zend_new_array(8));
41374 				goto try_assign_dim_array;
41375 			}
41376 		} else {
41377 			zend_use_scalar_as_array();
41378 			dim = RT_CONSTANT(opline, opline->op2);
41379 assign_dim_error:
41380 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
41381 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41382 				ZVAL_NULL(EX_VAR(opline->result.var));
41383 			}
41384 		}
41385 	}
41386 	if (IS_CONST != IS_UNUSED) {
41387 
41388 	}
41389 
41390 	/* assign_dim has two opcodes! */
41391 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41392 }
41393 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41395 {
41396 	USE_OPLINE
41397 	zval *object_ptr, *orig_object_ptr;
41398 	zval *value;
41399 	zval *variable_ptr;
41400 	zval *dim;
41401 
41402 	SAVE_OPLINE();
41403 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
41404 
41405 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41406 try_assign_dim_array:
41407 		SEPARATE_ARRAY(object_ptr);
41408 		if (IS_CONST == IS_UNUSED) {
41409 			value = EX_VAR((opline+1)->op1.var);
41410 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
41411 				HashTable *ht = Z_ARRVAL_P(object_ptr);
41412 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
41413 					GC_ADDREF(ht);
41414 				}
41415 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41416 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
41417 					zend_array_destroy(ht);
41418 					goto assign_dim_error;
41419 				}
41420 			}
41421 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
41422 				ZVAL_DEREF(value);
41423 			}
41424 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
41425 			if (UNEXPECTED(variable_ptr == NULL)) {
41426 				zend_cannot_add_element();
41427 				goto assign_dim_error;
41428 			} else if (IS_CV == IS_CV) {
41429 				if (Z_REFCOUNTED_P(value)) {
41430 					Z_ADDREF_P(value);
41431 				}
41432 			} else if (IS_CV == IS_VAR) {
41433 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
41434 				if (value != free_op_data) {
41435 					if (Z_REFCOUNTED_P(value)) {
41436 						Z_ADDREF_P(value);
41437 					}
41438 					zval_ptr_dtor_nogc(free_op_data);
41439 				}
41440 			} else if (IS_CV == IS_CONST) {
41441 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
41442 					Z_ADDREF_P(value);
41443 				}
41444 			}
41445 		} else {
41446 			dim = RT_CONSTANT(opline, opline->op2);
41447 			if (IS_CONST == IS_CONST) {
41448 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41449 			} else {
41450 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
41451 			}
41452 			if (UNEXPECTED(variable_ptr == NULL)) {
41453 				goto assign_dim_error;
41454 			}
41455 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
41456 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
41457 		}
41458 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41459 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41460 		}
41461 	} else {
41462 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
41463 			object_ptr = Z_REFVAL_P(object_ptr);
41464 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
41465 				goto try_assign_dim_array;
41466 			}
41467 		}
41468 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
41469 			zend_object *obj = Z_OBJ_P(object_ptr);
41470 
41471 			GC_ADDREF(obj);
41472 			dim = RT_CONSTANT(opline, opline->op2);
41473 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
41474 				dim = ZVAL_UNDEFINED_OP2();
41475 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41476 				dim++;
41477 			}
41478 
41479 			value = EX_VAR((opline+1)->op1.var);
41480 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
41481 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
41482 			} else if (IS_CV & (IS_CV|IS_VAR)) {
41483 				ZVAL_DEREF(value);
41484 			}
41485 
41486 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
41487 
41488 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
41489 				zend_objects_store_del(obj);
41490 			}
41491 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
41492 			if (IS_CONST == IS_UNUSED) {
41493 				zend_use_new_element_for_string();
41494 
41495 				UNDEF_RESULT();
41496 			} else {
41497 				dim = RT_CONSTANT(opline, opline->op2);
41498 				value = EX_VAR((opline+1)->op1.var);
41499 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
41500 
41501 			}
41502 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
41503 			if (Z_ISREF_P(orig_object_ptr)
41504 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
41505 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
41506 				dim = RT_CONSTANT(opline, opline->op2);
41507 
41508 				UNDEF_RESULT();
41509 			} else {
41510 				ZVAL_ARR(object_ptr, zend_new_array(8));
41511 				goto try_assign_dim_array;
41512 			}
41513 		} else {
41514 			zend_use_scalar_as_array();
41515 			dim = RT_CONSTANT(opline, opline->op2);
41516 assign_dim_error:
41517 
41518 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41519 				ZVAL_NULL(EX_VAR(opline->result.var));
41520 			}
41521 		}
41522 	}
41523 	if (IS_CONST != IS_UNUSED) {
41524 
41525 	}
41526 
41527 	/* assign_dim has two opcodes! */
41528 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41529 }
41530 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41531 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41532 {
41533 	USE_OPLINE
41534 	zval *value;
41535 	zval *variable_ptr;
41536 
41537 	SAVE_OPLINE();
41538 	value = RT_CONSTANT(opline, opline->op2);
41539 	variable_ptr = EX_VAR(opline->op1.var);
41540 
41541 	value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
41542 	if (UNEXPECTED(0)) {
41543 		ZVAL_COPY(EX_VAR(opline->result.var), value);
41544 	}
41545 
41546 	/* zend_assign_to_variable() always takes care of op2, never free it! */
41547 
41548 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41549 }
41550 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41551 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41552 {
41553 	USE_OPLINE
41554 	zval *value;
41555 	zval *variable_ptr;
41556 
41557 	SAVE_OPLINE();
41558 	value = RT_CONSTANT(opline, opline->op2);
41559 	variable_ptr = EX_VAR(opline->op1.var);
41560 
41561 	value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
41562 	if (UNEXPECTED(1)) {
41563 		ZVAL_COPY(EX_VAR(opline->result.var), value);
41564 	}
41565 
41566 	/* zend_assign_to_variable() always takes care of op2, never free it! */
41567 
41568 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41569 }
41570 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41572 {
41573 	USE_OPLINE
41574 	zval *property, *container, *value_ptr;
41575 
41576 	SAVE_OPLINE();
41577 
41578 	container = EX_VAR(opline->op1.var);
41579 	property = RT_CONSTANT(opline, opline->op2);
41580 
41581 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
41582 
41583 	if (1) {
41584 		if (IS_CV == IS_UNUSED) {
41585 			if (IS_CONST == IS_CONST) {
41586 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41587 			} else {
41588 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41589 			}
41590 		} else {
41591 			if (IS_CONST == IS_CONST) {
41592 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41593 			} else {
41594 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41595 			}
41596 		}
41597 	} else {
41598 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41599 	}
41600 
41601 
41602 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
41603 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41604 }
41605 
41606 /* 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)41607 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41608 {
41609 	USE_OPLINE
41610 	zval *property, *container, *value_ptr;
41611 
41612 	SAVE_OPLINE();
41613 
41614 	container = EX_VAR(opline->op1.var);
41615 	property = RT_CONSTANT(opline, opline->op2);
41616 
41617 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
41618 
41619 	if (1) {
41620 		if (IS_CV == IS_UNUSED) {
41621 			if (IS_CONST == IS_CONST) {
41622 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41623 			} else {
41624 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41625 			}
41626 		} else {
41627 			if (IS_CONST == IS_CONST) {
41628 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41629 			} else {
41630 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41631 			}
41632 		}
41633 	} else {
41634 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
41635 	}
41636 
41637 
41638 
41639 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41640 }
41641 
41642 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41643 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41644 {
41645 	USE_OPLINE
41646 	zval *op1, *op2;
41647 	zend_string *op1_str, *op2_str, *str;
41648 
41649 
41650 	op1 = EX_VAR(opline->op1.var);
41651 	op2 = RT_CONSTANT(opline, opline->op2);
41652 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
41653 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
41654 		zend_string *op1_str = Z_STR_P(op1);
41655 		zend_string *op2_str = Z_STR_P(op2);
41656 		zend_string *str;
41657 
41658 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
41659 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
41660 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
41661 			} else {
41662 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
41663 			}
41664 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41665 				zend_string_release_ex(op1_str, 0);
41666 			}
41667 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
41668 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
41669 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
41670 			} else {
41671 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
41672 			}
41673 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41674 				zend_string_release_ex(op2_str, 0);
41675 			}
41676 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
41677 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
41678 		    size_t len = ZSTR_LEN(op1_str);
41679 
41680 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
41681 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
41682 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
41683 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41684 				zend_string_release_ex(op2_str, 0);
41685 			}
41686 		} else {
41687 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
41688 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
41689 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
41690 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
41691 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41692 				zend_string_release_ex(op1_str, 0);
41693 			}
41694 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41695 				zend_string_release_ex(op2_str, 0);
41696 			}
41697 		}
41698 		ZEND_VM_NEXT_OPCODE();
41699 	}
41700 
41701 	SAVE_OPLINE();
41702 	if (IS_CV == IS_CONST) {
41703 		op1_str = Z_STR_P(op1);
41704 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41705 		op1_str = zend_string_copy(Z_STR_P(op1));
41706 	} else {
41707 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
41708 			ZVAL_UNDEFINED_OP1();
41709 		}
41710 		op1_str = zval_get_string_func(op1);
41711 	}
41712 	if (IS_CONST == IS_CONST) {
41713 		op2_str = Z_STR_P(op2);
41714 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41715 		op2_str = zend_string_copy(Z_STR_P(op2));
41716 	} else {
41717 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
41718 			ZVAL_UNDEFINED_OP2();
41719 		}
41720 		op2_str = zval_get_string_func(op2);
41721 	}
41722 	do {
41723 		if (IS_CV != IS_CONST) {
41724 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
41725 				if (IS_CONST == IS_CONST) {
41726 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
41727 						GC_ADDREF(op2_str);
41728 					}
41729 				}
41730 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
41731 				zend_string_release_ex(op1_str, 0);
41732 				break;
41733 			}
41734 		}
41735 		if (IS_CONST != IS_CONST) {
41736 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
41737 				if (IS_CV == IS_CONST) {
41738 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
41739 						GC_ADDREF(op1_str);
41740 					}
41741 				}
41742 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
41743 				zend_string_release_ex(op2_str, 0);
41744 				break;
41745 			}
41746 		}
41747 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
41748 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
41749 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
41750 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
41751 		if (IS_CV != IS_CONST) {
41752 			zend_string_release_ex(op1_str, 0);
41753 		}
41754 		if (IS_CONST != IS_CONST) {
41755 			zend_string_release_ex(op2_str, 0);
41756 		}
41757 	} while (0);
41758 
41759 
41760 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41761 }
41762 
ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41763 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41764 {
41765 	USE_OPLINE
41766 	zval *function_name;
41767 	zval *object;
41768 	zend_function *fbc;
41769 	zend_class_entry *called_scope;
41770 	zend_object *obj;
41771 	zend_execute_data *call;
41772 	uint32_t call_info;
41773 
41774 	SAVE_OPLINE();
41775 
41776 	object = EX_VAR(opline->op1.var);
41777 
41778 	if (IS_CONST != IS_CONST) {
41779 		function_name = RT_CONSTANT(opline, opline->op2);
41780 	}
41781 
41782 	if (IS_CONST != IS_CONST &&
41783 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
41784 		do {
41785 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
41786 				function_name = Z_REFVAL_P(function_name);
41787 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
41788 					break;
41789 				}
41790 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
41791 				ZVAL_UNDEFINED_OP2();
41792 				if (UNEXPECTED(EG(exception) != NULL)) {
41793 
41794 					HANDLE_EXCEPTION();
41795 				}
41796 			}
41797 			zend_throw_error(NULL, "Method name must be a string");
41798 
41799 
41800 			HANDLE_EXCEPTION();
41801 		} while (0);
41802 	}
41803 
41804 	if (IS_CV == IS_UNUSED) {
41805 		obj = Z_OBJ_P(object);
41806 	} else {
41807 		do {
41808 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
41809 				obj = Z_OBJ_P(object);
41810 			} else {
41811 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
41812 					zend_reference *ref = Z_REF_P(object);
41813 
41814 					object = &ref->val;
41815 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
41816 						obj = Z_OBJ_P(object);
41817 						if (IS_CV & IS_VAR) {
41818 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
41819 								efree_size(ref, sizeof(zend_reference));
41820 							} else {
41821 								Z_ADDREF_P(object);
41822 							}
41823 						}
41824 						break;
41825 					}
41826 				}
41827 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
41828 					object = ZVAL_UNDEFINED_OP1();
41829 					if (UNEXPECTED(EG(exception) != NULL)) {
41830 						if (IS_CONST != IS_CONST) {
41831 
41832 						}
41833 						HANDLE_EXCEPTION();
41834 					}
41835 				}
41836 				if (IS_CONST == IS_CONST) {
41837 					function_name = RT_CONSTANT(opline, opline->op2);
41838 				}
41839 				zend_invalid_method_call(object, function_name);
41840 
41841 
41842 				HANDLE_EXCEPTION();
41843 			}
41844 		} while (0);
41845 	}
41846 
41847 	called_scope = obj->ce;
41848 
41849 	if (IS_CONST == IS_CONST &&
41850 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
41851 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
41852 	} else {
41853 	    zend_object *orig_obj = obj;
41854 
41855 		if (IS_CONST == IS_CONST) {
41856 			function_name = RT_CONSTANT(opline, opline->op2);
41857 		}
41858 
41859 		/* First, locate the function. */
41860 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
41861 		if (UNEXPECTED(fbc == NULL)) {
41862 			if (EXPECTED(!EG(exception))) {
41863 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
41864 			}
41865 
41866 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
41867 				zend_objects_store_del(orig_obj);
41868 			}
41869 			HANDLE_EXCEPTION();
41870 		}
41871 		if (IS_CONST == IS_CONST &&
41872 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
41873 		    EXPECTED(obj == orig_obj)) {
41874 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
41875 		}
41876 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
41877 			GC_ADDREF(obj); /* For $this pointer */
41878 			if (GC_DELREF(orig_obj) == 0) {
41879 				zend_objects_store_del(orig_obj);
41880 			}
41881 		}
41882 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
41883 			init_func_run_time_cache(&fbc->op_array);
41884 		}
41885 	}
41886 
41887 	if (IS_CONST != IS_CONST) {
41888 
41889 	}
41890 
41891 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
41892 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
41893 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
41894 			zend_objects_store_del(obj);
41895 			if (UNEXPECTED(EG(exception))) {
41896 				HANDLE_EXCEPTION();
41897 			}
41898 		}
41899 		/* call static method */
41900 		obj = (zend_object*)called_scope;
41901 		call_info = ZEND_CALL_NESTED_FUNCTION;
41902 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
41903 		if (IS_CV == IS_CV) {
41904 			GC_ADDREF(obj); /* For $this pointer */
41905 		}
41906 		/* CV may be changed indirectly (e.g. when it's a reference) */
41907 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
41908 	}
41909 
41910 	call = zend_vm_stack_push_call_frame(call_info,
41911 		fbc, opline->extended_value, obj);
41912 	call->prev_execute_data = EX(call);
41913 	EX(call) = call;
41914 
41915 	ZEND_VM_NEXT_OPCODE();
41916 }
41917 
ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41918 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41919 {
41920 	USE_OPLINE
41921 	zval *varptr, *arg;
41922 
41923 	if (IS_CONST == IS_CONST) {
41924 		SAVE_OPLINE();
41925 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41926 		uint32_t arg_num;
41927 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
41928 		if (UNEXPECTED(!arg)) {
41929 
41930 			HANDLE_EXCEPTION();
41931 		}
41932 	} else {
41933 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
41934 	}
41935 
41936 	varptr = EX_VAR(opline->op1.var);
41937 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
41938 		SAVE_OPLINE();
41939 		ZVAL_UNDEFINED_OP1();
41940 		ZVAL_NULL(arg);
41941 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41942 	}
41943 
41944 	if (IS_CV == IS_CV) {
41945 		ZVAL_COPY_DEREF(arg, varptr);
41946 	} else /* if (IS_CV == IS_VAR) */ {
41947 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
41948 			zend_refcounted *ref = Z_COUNTED_P(varptr);
41949 
41950 			varptr = Z_REFVAL_P(varptr);
41951 			ZVAL_COPY_VALUE(arg, varptr);
41952 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
41953 				efree_size(ref, sizeof(zend_reference));
41954 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
41955 				Z_ADDREF_P(arg);
41956 			}
41957 		} else {
41958 			ZVAL_COPY_VALUE(arg, varptr);
41959 		}
41960 	}
41961 
41962 	ZEND_VM_NEXT_OPCODE();
41963 }
41964 
ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41965 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41966 {
41967 	USE_OPLINE
41968 	zval *varptr, *arg;
41969 
41970 	SAVE_OPLINE();
41971 	if (IS_CONST == IS_CONST) {
41972 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41973 		uint32_t arg_num;
41974 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
41975 		if (UNEXPECTED(!arg)) {
41976 
41977 			HANDLE_EXCEPTION();
41978 		}
41979 	} else {
41980 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
41981 	}
41982 
41983 	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
41984 	if (Z_ISREF_P(varptr)) {
41985 		Z_ADDREF_P(varptr);
41986 	} else {
41987 		ZVAL_MAKE_REF_EX(varptr, 2);
41988 	}
41989 	ZVAL_REF(arg, Z_REF_P(varptr));
41990 
41991 	ZEND_VM_NEXT_OPCODE();
41992 }
41993 
ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41994 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41995 {
41996 	USE_OPLINE
41997 	zval *varptr, *arg;
41998 	uint32_t arg_num;
41999 
42000 	if (IS_CONST == IS_CONST) {
42001 		SAVE_OPLINE();
42002 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42003 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
42004 		if (UNEXPECTED(!arg)) {
42005 
42006 			HANDLE_EXCEPTION();
42007 		}
42008 	} else {
42009 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
42010 		arg_num = opline->op2.num;
42011 	}
42012 
42013 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
42014 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
42015 			goto send_var_by_ref;
42016 		}
42017 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
42018 send_var_by_ref:
42019 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
42020 		if (Z_ISREF_P(varptr)) {
42021 			Z_ADDREF_P(varptr);
42022 		} else {
42023 			ZVAL_MAKE_REF_EX(varptr, 2);
42024 		}
42025 		ZVAL_REF(arg, Z_REF_P(varptr));
42026 
42027 		ZEND_VM_NEXT_OPCODE();
42028 	}
42029 
42030 	varptr = EX_VAR(opline->op1.var);
42031 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
42032 		SAVE_OPLINE();
42033 		ZVAL_UNDEFINED_OP1();
42034 		ZVAL_NULL(arg);
42035 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42036 	}
42037 
42038 	if (IS_CV == IS_CV) {
42039 		ZVAL_COPY_DEREF(arg, varptr);
42040 	} else /* if (IS_CV == IS_VAR) */ {
42041 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
42042 			zend_refcounted *ref = Z_COUNTED_P(varptr);
42043 
42044 			varptr = Z_REFVAL_P(varptr);
42045 			ZVAL_COPY_VALUE(arg, varptr);
42046 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
42047 				efree_size(ref, sizeof(zend_reference));
42048 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
42049 				Z_ADDREF_P(arg);
42050 			}
42051 		} else {
42052 			ZVAL_COPY_VALUE(arg, varptr);
42053 		}
42054 	}
42055 
42056 	ZEND_VM_NEXT_OPCODE();
42057 }
42058 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42060 {
42061 	USE_OPLINE
42062 	zval *expr_ptr, new_expr;
42063 
42064 	SAVE_OPLINE();
42065 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
42066 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
42067 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
42068 		if (Z_ISREF_P(expr_ptr)) {
42069 			Z_ADDREF_P(expr_ptr);
42070 		} else {
42071 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
42072 		}
42073 
42074 	} else {
42075 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
42076 		if (IS_CV == IS_TMP_VAR) {
42077 			/* pass */
42078 		} else if (IS_CV == IS_CONST) {
42079 			Z_TRY_ADDREF_P(expr_ptr);
42080 		} else if (IS_CV == IS_CV) {
42081 			ZVAL_DEREF(expr_ptr);
42082 			Z_TRY_ADDREF_P(expr_ptr);
42083 		} else /* if (IS_CV == IS_VAR) */ {
42084 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
42085 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
42086 
42087 				expr_ptr = Z_REFVAL_P(expr_ptr);
42088 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
42089 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
42090 					expr_ptr = &new_expr;
42091 					efree_size(ref, sizeof(zend_reference));
42092 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
42093 					Z_ADDREF_P(expr_ptr);
42094 				}
42095 			}
42096 		}
42097 	}
42098 
42099 	if (IS_CONST != IS_UNUSED) {
42100 		zval *offset = RT_CONSTANT(opline, opline->op2);
42101 		zend_string *str;
42102 		zend_ulong hval;
42103 
42104 add_again:
42105 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
42106 			str = Z_STR_P(offset);
42107 			if (IS_CONST != IS_CONST) {
42108 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
42109 					goto num_index;
42110 				}
42111 			}
42112 str_index:
42113 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
42114 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
42115 			hval = Z_LVAL_P(offset);
42116 num_index:
42117 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
42118 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
42119 			offset = Z_REFVAL_P(offset);
42120 			goto add_again;
42121 		} else if (Z_TYPE_P(offset) == IS_NULL) {
42122 			str = ZSTR_EMPTY_ALLOC();
42123 			goto str_index;
42124 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
42125 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
42126 			goto num_index;
42127 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
42128 			hval = 0;
42129 			goto num_index;
42130 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
42131 			hval = 1;
42132 			goto num_index;
42133 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
42134 			zend_use_resource_as_offset(offset);
42135 			hval = Z_RES_HANDLE_P(offset);
42136 			goto num_index;
42137 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
42138 			ZVAL_UNDEFINED_OP2();
42139 			str = ZSTR_EMPTY_ALLOC();
42140 			goto str_index;
42141 		} else {
42142 			zend_illegal_offset();
42143 			zval_ptr_dtor_nogc(expr_ptr);
42144 		}
42145 
42146 	} else {
42147 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
42148 			zend_cannot_add_element();
42149 			zval_ptr_dtor_nogc(expr_ptr);
42150 		}
42151 	}
42152 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42153 }
42154 
ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42155 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42156 {
42157 	zval *array;
42158 	uint32_t size;
42159 	USE_OPLINE
42160 
42161 	array = EX_VAR(opline->result.var);
42162 	if (IS_CV != IS_UNUSED) {
42163 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
42164 		ZVAL_ARR(array, zend_new_array(size));
42165 		/* Explicitly initialize array as not-packed if flag is set */
42166 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
42167 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
42168 		}
42169 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42170 	} else {
42171 		ZVAL_ARR(array, zend_new_array(0));
42172 		ZEND_VM_NEXT_OPCODE();
42173 	}
42174 }
42175 
ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42176 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42177 {
42178 	USE_OPLINE
42179 	zval *container;
42180 	zval *offset;
42181 	zend_ulong hval;
42182 	zend_string *key;
42183 
42184 	SAVE_OPLINE();
42185 	container = EX_VAR(opline->op1.var);
42186 	offset = RT_CONSTANT(opline, opline->op2);
42187 
42188 	do {
42189 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42190 			HashTable *ht;
42191 
42192 unset_dim_array:
42193 			SEPARATE_ARRAY(container);
42194 			ht = Z_ARRVAL_P(container);
42195 offset_again:
42196 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
42197 				key = Z_STR_P(offset);
42198 				if (IS_CONST != IS_CONST) {
42199 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
42200 						goto num_index_dim;
42201 					}
42202 				}
42203 str_index_dim:
42204 				if (ht == &EG(symbol_table)) {
42205 					zend_delete_global_variable(key);
42206 				} else {
42207 					zend_hash_del(ht, key);
42208 				}
42209 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
42210 				hval = Z_LVAL_P(offset);
42211 num_index_dim:
42212 				zend_hash_index_del(ht, hval);
42213 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
42214 				offset = Z_REFVAL_P(offset);
42215 				goto offset_again;
42216 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
42217 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
42218 				goto num_index_dim;
42219 			} else if (Z_TYPE_P(offset) == IS_NULL) {
42220 				key = ZSTR_EMPTY_ALLOC();
42221 				goto str_index_dim;
42222 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
42223 				hval = 0;
42224 				goto num_index_dim;
42225 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
42226 				hval = 1;
42227 				goto num_index_dim;
42228 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
42229 				hval = Z_RES_HANDLE_P(offset);
42230 				goto num_index_dim;
42231 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
42232 				ZVAL_UNDEFINED_OP2();
42233 				key = ZSTR_EMPTY_ALLOC();
42234 				goto str_index_dim;
42235 			} else {
42236 				zend_type_error("Illegal offset type in unset");
42237 			}
42238 			break;
42239 		} else if (Z_ISREF_P(container)) {
42240 			container = Z_REFVAL_P(container);
42241 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42242 				goto unset_dim_array;
42243 			}
42244 		}
42245 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42246 			container = ZVAL_UNDEFINED_OP1();
42247 		}
42248 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
42249 			offset = ZVAL_UNDEFINED_OP2();
42250 		}
42251 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
42252 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
42253 				offset++;
42254 			}
42255 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
42256 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
42257 			zend_throw_error(NULL, "Cannot unset string offsets");
42258 		}
42259 	} while (0);
42260 
42261 
42262 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42263 }
42264 
ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42265 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42266 {
42267 	USE_OPLINE
42268 	zval *container;
42269 	zval *offset;
42270 	zend_string *name, *tmp_name;
42271 
42272 	SAVE_OPLINE();
42273 	container = EX_VAR(opline->op1.var);
42274 	offset = RT_CONSTANT(opline, opline->op2);
42275 
42276 	do {
42277 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
42278 			if (Z_ISREF_P(container)) {
42279 				container = Z_REFVAL_P(container);
42280 				if (Z_TYPE_P(container) != IS_OBJECT) {
42281 					if (IS_CV == IS_CV
42282 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42283 						ZVAL_UNDEFINED_OP1();
42284 					}
42285 					break;
42286 				}
42287 			} else {
42288 				break;
42289 			}
42290 		}
42291 		if (IS_CONST == IS_CONST) {
42292 			name = Z_STR_P(offset);
42293 		} else {
42294 			name = zval_try_get_tmp_string(offset, &tmp_name);
42295 			if (UNEXPECTED(!name)) {
42296 				break;
42297 			}
42298 		}
42299 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
42300 		if (IS_CONST != IS_CONST) {
42301 			zend_tmp_string_release(tmp_name);
42302 		}
42303 	} while (0);
42304 
42305 
42306 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42307 }
42308 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42309 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42310 {
42311 	USE_OPLINE
42312 	zval *container;
42313 	bool result;
42314 	zend_ulong hval;
42315 	zval *offset;
42316 
42317 	SAVE_OPLINE();
42318 	container = EX_VAR(opline->op1.var);
42319 	offset = RT_CONSTANT(opline, opline->op2);
42320 
42321 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42322 		HashTable *ht;
42323 		zval *value;
42324 		zend_string *str;
42325 
42326 isset_dim_obj_array:
42327 		ht = Z_ARRVAL_P(container);
42328 isset_again:
42329 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
42330 			str = Z_STR_P(offset);
42331 			if (IS_CONST != IS_CONST) {
42332 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
42333 					goto num_index_prop;
42334 				}
42335 			}
42336 			value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST);
42337 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
42338 			hval = Z_LVAL_P(offset);
42339 num_index_prop:
42340 			value = zend_hash_index_find(ht, hval);
42341 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
42342 			offset = Z_REFVAL_P(offset);
42343 			goto isset_again;
42344 		} else {
42345 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
42346 			if (UNEXPECTED(EG(exception))) {
42347 				result = 0;
42348 				goto isset_dim_obj_exit;
42349 			}
42350 		}
42351 
42352 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
42353 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
42354 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
42355 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
42356 
42357 			if (IS_CV & (IS_CONST|IS_CV)) {
42358 				/* avoid exception check */
42359 
42360 				ZEND_VM_SMART_BRANCH(result, 0);
42361 			}
42362 		} else {
42363 			result = (value == NULL || !i_zend_is_true(value));
42364 		}
42365 		goto isset_dim_obj_exit;
42366 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
42367 		container = Z_REFVAL_P(container);
42368 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42369 			goto isset_dim_obj_array;
42370 		}
42371 	}
42372 
42373 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
42374 		offset++;
42375 	}
42376 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
42377 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
42378 	} else {
42379 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
42380 	}
42381 
42382 isset_dim_obj_exit:
42383 
42384 
42385 	ZEND_VM_SMART_BRANCH(result, 1);
42386 }
42387 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42388 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42389 {
42390 	USE_OPLINE
42391 	zval *container;
42392 	int result;
42393 	zval *offset;
42394 	zend_string *name, *tmp_name;
42395 
42396 	SAVE_OPLINE();
42397 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
42398 	offset = RT_CONSTANT(opline, opline->op2);
42399 
42400 	if (IS_CV == IS_CONST ||
42401 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
42402 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
42403 			container = Z_REFVAL_P(container);
42404 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
42405 				result = (opline->extended_value & ZEND_ISEMPTY);
42406 				goto isset_object_finish;
42407 			}
42408 		} else {
42409 			result = (opline->extended_value & ZEND_ISEMPTY);
42410 			goto isset_object_finish;
42411 		}
42412 	}
42413 
42414 	if (IS_CONST == IS_CONST) {
42415 		name = Z_STR_P(offset);
42416 	} else {
42417 		name = zval_try_get_tmp_string(offset, &tmp_name);
42418 		if (UNEXPECTED(!name)) {
42419 			result = 0;
42420 			goto isset_object_finish;
42421 		}
42422 	}
42423 
42424 	result =
42425 		(opline->extended_value & ZEND_ISEMPTY) ^
42426 		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));
42427 
42428 	if (IS_CONST != IS_CONST) {
42429 		zend_tmp_string_release(tmp_name);
42430 	}
42431 
42432 isset_object_finish:
42433 
42434 
42435 	ZEND_VM_SMART_BRANCH(result, 1);
42436 }
42437 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42438 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42439 {
42440 	USE_OPLINE
42441 
42442 	zval *key, *subject;
42443 	HashTable *ht;
42444 	zend_bool result;
42445 
42446 	SAVE_OPLINE();
42447 
42448 	key = EX_VAR(opline->op1.var);
42449 	subject = RT_CONSTANT(opline, opline->op2);
42450 
42451 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
42452 array_key_exists_array:
42453 		ht = Z_ARRVAL_P(subject);
42454 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
42455 	} else {
42456 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
42457 			subject = Z_REFVAL_P(subject);
42458 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
42459 				goto array_key_exists_array;
42460 			}
42461 		}
42462 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
42463 		result = 0;
42464 	}
42465 
42466 
42467 	ZEND_VM_SMART_BRANCH(result, 1);
42468 }
42469 
42470 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42471 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42472 {
42473 	USE_OPLINE
42474 	zval *expr;
42475 	zend_bool result;
42476 
42477 	SAVE_OPLINE();
42478 	expr = EX_VAR(opline->op1.var);
42479 
42480 try_instanceof:
42481 	if (Z_TYPE_P(expr) == IS_OBJECT) {
42482 		zend_class_entry *ce;
42483 
42484 		if (IS_CONST == IS_CONST) {
42485 			ce = CACHED_PTR(opline->extended_value);
42486 			if (UNEXPECTED(ce == NULL)) {
42487 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
42488 				if (EXPECTED(ce)) {
42489 					CACHE_PTR(opline->extended_value, ce);
42490 				}
42491 			}
42492 		} else if (IS_CONST == IS_UNUSED) {
42493 			ce = zend_fetch_class(NULL, opline->op2.num);
42494 			if (UNEXPECTED(ce == NULL)) {
42495 
42496 				ZVAL_UNDEF(EX_VAR(opline->result.var));
42497 				HANDLE_EXCEPTION();
42498 			}
42499 		} else {
42500 			ce = Z_CE_P(EX_VAR(opline->op2.var));
42501 		}
42502 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
42503 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
42504 		expr = Z_REFVAL_P(expr);
42505 		goto try_instanceof;
42506 	} else {
42507 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
42508 			ZVAL_UNDEFINED_OP1();
42509 		}
42510 		result = 0;
42511 	}
42512 
42513 	ZEND_VM_SMART_BRANCH(result, 1);
42514 }
42515 
ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42516 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42517 {
42518 	USE_OPLINE
42519 
42520 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
42521 
42522 	SAVE_OPLINE();
42523 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
42524 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42525 	}
42526 
42527 	/* Destroy the previously yielded value */
42528 	zval_ptr_dtor(&generator->value);
42529 
42530 	/* Destroy the previously yielded key */
42531 	zval_ptr_dtor(&generator->key);
42532 
42533 	/* Set the new yielded value */
42534 	if (IS_CV != IS_UNUSED) {
42535 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
42536 			/* Constants and temporary variables aren't yieldable by reference,
42537 			 * but we still allow them with a notice. */
42538 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
42539 				zval *value;
42540 
42541 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
42542 
42543 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
42544 				ZVAL_COPY_VALUE(&generator->value, value);
42545 				if (IS_CV == IS_CONST) {
42546 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
42547 						Z_ADDREF(generator->value);
42548 					}
42549 				}
42550 			} else {
42551 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
42552 
42553 				/* If a function call result is yielded and the function did
42554 				 * not return by reference we throw a notice. */
42555 				do {
42556 					if (IS_CV == IS_VAR) {
42557 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
42558 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
42559 						 && !Z_ISREF_P(value_ptr)) {
42560 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
42561 							ZVAL_COPY(&generator->value, value_ptr);
42562 							break;
42563 						}
42564 					}
42565 					if (Z_ISREF_P(value_ptr)) {
42566 						Z_ADDREF_P(value_ptr);
42567 					} else {
42568 						ZVAL_MAKE_REF_EX(value_ptr, 2);
42569 					}
42570 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
42571 				} while (0);
42572 
42573 			}
42574 		} else {
42575 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
42576 
42577 			/* Consts, temporary variables and references need copying */
42578 			if (IS_CV == IS_CONST) {
42579 				ZVAL_COPY_VALUE(&generator->value, value);
42580 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
42581 					Z_ADDREF(generator->value);
42582 				}
42583 			} else if (IS_CV == IS_TMP_VAR) {
42584 				ZVAL_COPY_VALUE(&generator->value, value);
42585             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
42586 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
42587 
42588 			} else {
42589 				ZVAL_COPY_VALUE(&generator->value, value);
42590 				if (IS_CV == IS_CV) {
42591 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
42592 				}
42593 			}
42594 		}
42595 	} else {
42596 		/* If no value was specified yield null */
42597 		ZVAL_NULL(&generator->value);
42598 	}
42599 
42600 	/* Set the new yielded key */
42601 	if (IS_CONST != IS_UNUSED) {
42602 		zval *key = RT_CONSTANT(opline, opline->op2);
42603 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
42604 			key = Z_REFVAL_P(key);
42605 		}
42606 		ZVAL_COPY(&generator->key, key);
42607 
42608 		if (Z_TYPE(generator->key) == IS_LONG
42609 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
42610 		) {
42611 			generator->largest_used_integer_key = Z_LVAL(generator->key);
42612 		}
42613 	} else {
42614 		/* If no key was specified we use auto-increment keys */
42615 		generator->largest_used_integer_key++;
42616 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
42617 	}
42618 
42619 	if (RETURN_VALUE_USED(opline)) {
42620 		/* If the return value of yield is used set the send
42621 		 * target and initialize it to NULL */
42622 		generator->send_target = EX_VAR(opline->result.var);
42623 		ZVAL_NULL(generator->send_target);
42624 	} else {
42625 		generator->send_target = NULL;
42626 	}
42627 
42628 	/* We increment to the next op, so we are at the correct position when the
42629 	 * generator is resumed. */
42630 	ZEND_VM_INC_OPCODE();
42631 
42632 	/* The GOTO VM uses a local opline variable. We need to set the opline
42633 	 * variable in execute_data so we don't resume at an old position. */
42634 	SAVE_OPLINE();
42635 
42636 	ZEND_VM_RETURN();
42637 }
42638 
ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42639 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42640 {
42641 	USE_OPLINE
42642 	zend_string *varname;
42643 	zval *value;
42644 	zval *variable_ptr;
42645 	uintptr_t idx;
42646 	zend_reference *ref;
42647 
42648 	ZEND_VM_REPEATABLE_OPCODE
42649 
42650 	varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42651 
42652 	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
42653 	idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
42654 	if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
42655 		Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
42656 
42657 		if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
42658 	        (EXPECTED(p->key == varname) ||
42659 	         (EXPECTED(p->h == ZSTR_H(varname)) &&
42660 	          EXPECTED(p->key != NULL) &&
42661 	          EXPECTED(zend_string_equal_content(p->key, varname))))) {
42662 
42663 			value = (zval*)p; /* value = &p->val; */
42664 			goto check_indirect;
42665 		}
42666 	}
42667 
42668 	value = zend_hash_find_ex(&EG(symbol_table), varname, 1);
42669 	if (UNEXPECTED(value == NULL)) {
42670 		value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
42671 		idx = (char*)value - (char*)EG(symbol_table).arData;
42672 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
42673 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
42674 	} else {
42675 		idx = (char*)value - (char*)EG(symbol_table).arData;
42676 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
42677 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
42678 check_indirect:
42679 		/* GLOBAL variable may be an INDIRECT pointer to CV */
42680 		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
42681 			value = Z_INDIRECT_P(value);
42682 			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
42683 				ZVAL_NULL(value);
42684 			}
42685 		}
42686 	}
42687 
42688 	if (UNEXPECTED(!Z_ISREF_P(value))) {
42689 		ZVAL_MAKE_REF_EX(value, 2);
42690 		ref = Z_REF_P(value);
42691 	} else {
42692 		ref = Z_REF_P(value);
42693 		GC_ADDREF(ref);
42694 	}
42695 
42696 	variable_ptr = EX_VAR(opline->op1.var);
42697 
42698 	if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
42699 		zend_refcounted *garbage = Z_COUNTED_P(variable_ptr);
42700 
42701 		ZVAL_REF(variable_ptr, ref);
42702 		SAVE_OPLINE();
42703 		if (GC_DELREF(garbage) == 0) {
42704 			rc_dtor_func(garbage);
42705 			if (UNEXPECTED(EG(exception))) {
42706 				ZVAL_NULL(variable_ptr);
42707 				HANDLE_EXCEPTION();
42708 			}
42709 		} else {
42710 			gc_check_possible_root(garbage);
42711 		}
42712 	} else {
42713 		ZVAL_REF(variable_ptr, ref);
42714 	}
42715 
42716 	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
42717 	ZEND_VM_NEXT_OPCODE();
42718 }
42719 
ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42720 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42721 {
42722 	USE_OPLINE
42723 	zval *op1;
42724 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
42725 	zval *result;
42726 
42727 	SAVE_OPLINE();
42728 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
42729 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
42730 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CV == IS_CONST);
42731 	} else if (opline->extended_value) {
42732 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
42733 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
42734 		} else {
42735 			result = NULL;
42736 		}
42737 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
42738 		result = zend_hash_find_ex(ht, ZSTR_EMPTY_ALLOC(), 1);
42739 	} else {
42740 		zend_string *key;
42741 		zval key_tmp, *val;
42742 
42743 		result = NULL;
42744 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
42745 			ZVAL_STR(&key_tmp, key);
42746 			if (zend_compare(op1, &key_tmp) == 0) {
42747 				result = val;
42748 				break;
42749 			}
42750 		} ZEND_HASH_FOREACH_END();
42751 	}
42752 
42753 	ZEND_VM_SMART_BRANCH(result, 1);
42754 }
42755 
ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42756 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42757 {
42758 	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
42759 	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
42760 	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
42761 	USE_OPLINE
42762 	zval *op1, *op2;
42763 	zend_bool result;
42764 
42765 	op1 = EX_VAR(opline->op1.var);
42766 	op2 = RT_CONSTANT(opline, opline->op2);
42767 	result = fast_is_identical_function(op1, op2);
42768 	/* Free is a no-op for const/cv */
42769 	ZEND_VM_SMART_BRANCH(result, 0);
42770 }
42771 
ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42772 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42773 {
42774 	USE_OPLINE
42775 	zval *op1, *op2;
42776 	zend_bool result;
42777 
42778 	op1 = EX_VAR(opline->op1.var);
42779 	op2 = RT_CONSTANT(opline, opline->op2);
42780 	result = fast_is_identical_function(op1, op2);
42781 	/* Free is a no-op for const/cv */
42782 	ZEND_VM_SMART_BRANCH(!result, 0);
42783 }
42784 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42785 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42786 {
42787 	USE_OPLINE
42788 	zval *container, *dim, *value;
42789 	zend_long offset;
42790 	HashTable *ht;
42791 
42792 	container = EX_VAR(opline->op1.var);
42793 	dim = RT_CONSTANT(opline, opline->op2);
42794 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42795 fetch_dim_r_index_array:
42796 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
42797 			offset = Z_LVAL_P(dim);
42798 		} else {
42799 			offset = zval_get_long(dim);
42800 		}
42801 		ht = Z_ARRVAL_P(container);
42802 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
42803 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42804 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42805 			SAVE_OPLINE();
42806 
42807 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42808 		} else {
42809 			ZEND_VM_NEXT_OPCODE();
42810 		}
42811 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
42812 		container = Z_REFVAL_P(container);
42813 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42814 			goto fetch_dim_r_index_array;
42815 		} else {
42816 			goto fetch_dim_r_index_slow;
42817 		}
42818 	} else {
42819 fetch_dim_r_index_slow:
42820 		SAVE_OPLINE();
42821 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
42822 			dim++;
42823 		}
42824 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
42825 
42826 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42827 	}
42828 
42829 fetch_dim_r_index_undef:
42830 	ZVAL_NULL(EX_VAR(opline->result.var));
42831 	SAVE_OPLINE();
42832 	zend_undefined_offset(offset);
42833 
42834 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42835 }
42836 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42837 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42838 {
42839 	USE_OPLINE
42840 	zval *container, *dim, *value;
42841 	zend_long offset;
42842 	HashTable *ht;
42843 
42844 	container = EX_VAR(opline->op1.var);
42845 	dim = EX_VAR(opline->op2.var);
42846 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42847 fetch_dim_r_index_array:
42848 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
42849 			offset = Z_LVAL_P(dim);
42850 		} else {
42851 			offset = zval_get_long(dim);
42852 		}
42853 		ht = Z_ARRVAL_P(container);
42854 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
42855 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42856 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42857 			SAVE_OPLINE();
42858 
42859 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42860 		} else {
42861 			ZEND_VM_NEXT_OPCODE();
42862 		}
42863 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
42864 		container = Z_REFVAL_P(container);
42865 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42866 			goto fetch_dim_r_index_array;
42867 		} else {
42868 			goto fetch_dim_r_index_slow;
42869 		}
42870 	} else {
42871 fetch_dim_r_index_slow:
42872 		SAVE_OPLINE();
42873 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
42874 			dim++;
42875 		}
42876 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
42877 
42878 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42879 	}
42880 
42881 fetch_dim_r_index_undef:
42882 	ZVAL_NULL(EX_VAR(opline->result.var));
42883 	SAVE_OPLINE();
42884 	zend_undefined_offset(offset);
42885 
42886 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42887 }
42888 
ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42889 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42890 {
42891 	USE_OPLINE
42892 	zval *op1, *op2;
42893 
42894 	SAVE_OPLINE();
42895 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
42896 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
42897 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
42898 
42899 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
42900 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42901 }
42902 
ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42903 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42904 {
42905 	USE_OPLINE
42906 	zval *op1, *op2;
42907 
42908 	SAVE_OPLINE();
42909 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
42910 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
42911 	pow_function(EX_VAR(opline->result.var), op1, op2);
42912 
42913 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
42914 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42915 }
42916 
ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42917 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42918 {
42919 	USE_OPLINE
42920 	zval *op1, *op2;
42921 
42922 	op1 = EX_VAR(opline->op1.var);
42923 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
42924 
42925 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
42926 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
42927 		zend_string *op1_str = Z_STR_P(op1);
42928 		zend_string *op2_str = Z_STR_P(op2);
42929 		zend_string *str;
42930 
42931 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
42932 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
42933 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
42934 			} else {
42935 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
42936 			}
42937 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42938 				zend_string_release_ex(op1_str, 0);
42939 			}
42940 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
42941 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
42942 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
42943 			} else {
42944 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
42945 			}
42946 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
42947 				zend_string_release_ex(op2_str, 0);
42948 			}
42949 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
42950 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
42951 		    size_t len = ZSTR_LEN(op1_str);
42952 
42953 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
42954 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
42955 			}
42956 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
42957 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
42958 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
42959 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
42960 				zend_string_release_ex(op2_str, 0);
42961 			}
42962 		} else {
42963 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
42964 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
42965 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
42966 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
42967 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42968 				zend_string_release_ex(op1_str, 0);
42969 			}
42970 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
42971 				zend_string_release_ex(op2_str, 0);
42972 			}
42973 		}
42974 		ZEND_VM_NEXT_OPCODE();
42975 	} else {
42976 		SAVE_OPLINE();
42977 
42978 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
42979 			op1 = ZVAL_UNDEFINED_OP1();
42980 		}
42981 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
42982 			op2 = ZVAL_UNDEFINED_OP2();
42983 		}
42984 		concat_function(EX_VAR(opline->result.var), op1, op2);
42985 
42986 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
42987 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42988 	}
42989 }
42990 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42991 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42992 {
42993 	USE_OPLINE
42994 	zval *op1, *op2;
42995 	double d1, d2;
42996 
42997 	op1 = EX_VAR(opline->op1.var);
42998 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
42999 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43000 		/* pass */
43001 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43002 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43003 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
43004 is_equal_true:
43005 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
43006 			} else {
43007 is_equal_false:
43008 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
43009 			}
43010 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43011 			d1 = (double)Z_LVAL_P(op1);
43012 			d2 = Z_DVAL_P(op2);
43013 			goto is_equal_double;
43014 		}
43015 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43016 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43017 			d1 = Z_DVAL_P(op1);
43018 			d2 = Z_DVAL_P(op2);
43019 is_equal_double:
43020 			if (d1 == d2) {
43021 				goto is_equal_true;
43022 			} else {
43023 				goto is_equal_false;
43024 			}
43025 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43026 			d1 = Z_DVAL_P(op1);
43027 			d2 = (double)Z_LVAL_P(op2);
43028 			goto is_equal_double;
43029 		}
43030 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43031 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43032 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43033 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43034 				zval_ptr_dtor_str(op1);
43035 			}
43036 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43037 				zval_ptr_dtor_str(op2);
43038 			}
43039 			if (result) {
43040 				goto is_equal_true;
43041 			} else {
43042 				goto is_equal_false;
43043 			}
43044 		}
43045 	}
43046 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43047 }
43048 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43049 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43050 {
43051 	USE_OPLINE
43052 	zval *op1, *op2;
43053 	double d1, d2;
43054 
43055 	op1 = EX_VAR(opline->op1.var);
43056 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43057 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43058 		/* pass */
43059 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43060 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43061 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
43062 is_equal_true:
43063 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
43064 			} else {
43065 is_equal_false:
43066 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
43067 			}
43068 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43069 			d1 = (double)Z_LVAL_P(op1);
43070 			d2 = Z_DVAL_P(op2);
43071 			goto is_equal_double;
43072 		}
43073 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43074 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43075 			d1 = Z_DVAL_P(op1);
43076 			d2 = Z_DVAL_P(op2);
43077 is_equal_double:
43078 			if (d1 == d2) {
43079 				goto is_equal_true;
43080 			} else {
43081 				goto is_equal_false;
43082 			}
43083 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43084 			d1 = Z_DVAL_P(op1);
43085 			d2 = (double)Z_LVAL_P(op2);
43086 			goto is_equal_double;
43087 		}
43088 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43089 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43090 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43091 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43092 				zval_ptr_dtor_str(op1);
43093 			}
43094 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43095 				zval_ptr_dtor_str(op2);
43096 			}
43097 			if (result) {
43098 				goto is_equal_true;
43099 			} else {
43100 				goto is_equal_false;
43101 			}
43102 		}
43103 	}
43104 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43105 }
43106 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43107 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43108 {
43109 	USE_OPLINE
43110 	zval *op1, *op2;
43111 	double d1, d2;
43112 
43113 	op1 = EX_VAR(opline->op1.var);
43114 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43115 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43116 		/* pass */
43117 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43118 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43119 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
43120 is_equal_true:
43121 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
43122 			} else {
43123 is_equal_false:
43124 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
43125 			}
43126 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43127 			d1 = (double)Z_LVAL_P(op1);
43128 			d2 = Z_DVAL_P(op2);
43129 			goto is_equal_double;
43130 		}
43131 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43132 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43133 			d1 = Z_DVAL_P(op1);
43134 			d2 = Z_DVAL_P(op2);
43135 is_equal_double:
43136 			if (d1 == d2) {
43137 				goto is_equal_true;
43138 			} else {
43139 				goto is_equal_false;
43140 			}
43141 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43142 			d1 = Z_DVAL_P(op1);
43143 			d2 = (double)Z_LVAL_P(op2);
43144 			goto is_equal_double;
43145 		}
43146 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43147 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43148 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43149 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43150 				zval_ptr_dtor_str(op1);
43151 			}
43152 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43153 				zval_ptr_dtor_str(op2);
43154 			}
43155 			if (result) {
43156 				goto is_equal_true;
43157 			} else {
43158 				goto is_equal_false;
43159 			}
43160 		}
43161 	}
43162 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43163 }
43164 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43165 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43166 {
43167 	USE_OPLINE
43168 	zval *op1, *op2;
43169 	double d1, d2;
43170 
43171 	op1 = EX_VAR(opline->op1.var);
43172 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43173 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43174 		/* pass */
43175 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43176 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43177 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
43178 is_not_equal_true:
43179 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
43180 			} else {
43181 is_not_equal_false:
43182 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
43183 			}
43184 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43185 			d1 = (double)Z_LVAL_P(op1);
43186 			d2 = Z_DVAL_P(op2);
43187 			goto is_not_equal_double;
43188 		}
43189 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43190 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43191 			d1 = Z_DVAL_P(op1);
43192 			d2 = Z_DVAL_P(op2);
43193 is_not_equal_double:
43194 			if (d1 != d2) {
43195 				goto is_not_equal_true;
43196 			} else {
43197 				goto is_not_equal_false;
43198 			}
43199 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43200 			d1 = Z_DVAL_P(op1);
43201 			d2 = (double)Z_LVAL_P(op2);
43202 			goto is_not_equal_double;
43203 		}
43204 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43205 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43206 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43207 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43208 				zval_ptr_dtor_str(op1);
43209 			}
43210 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43211 				zval_ptr_dtor_str(op2);
43212 			}
43213 			if (!result) {
43214 				goto is_not_equal_true;
43215 			} else {
43216 				goto is_not_equal_false;
43217 			}
43218 		}
43219 	}
43220 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43221 }
43222 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43223 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43224 {
43225 	USE_OPLINE
43226 	zval *op1, *op2;
43227 	double d1, d2;
43228 
43229 	op1 = EX_VAR(opline->op1.var);
43230 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43231 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43232 		/* pass */
43233 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43234 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43235 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
43236 is_not_equal_true:
43237 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
43238 			} else {
43239 is_not_equal_false:
43240 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
43241 			}
43242 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43243 			d1 = (double)Z_LVAL_P(op1);
43244 			d2 = Z_DVAL_P(op2);
43245 			goto is_not_equal_double;
43246 		}
43247 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43248 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43249 			d1 = Z_DVAL_P(op1);
43250 			d2 = Z_DVAL_P(op2);
43251 is_not_equal_double:
43252 			if (d1 != d2) {
43253 				goto is_not_equal_true;
43254 			} else {
43255 				goto is_not_equal_false;
43256 			}
43257 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43258 			d1 = Z_DVAL_P(op1);
43259 			d2 = (double)Z_LVAL_P(op2);
43260 			goto is_not_equal_double;
43261 		}
43262 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43263 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43264 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43265 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43266 				zval_ptr_dtor_str(op1);
43267 			}
43268 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43269 				zval_ptr_dtor_str(op2);
43270 			}
43271 			if (!result) {
43272 				goto is_not_equal_true;
43273 			} else {
43274 				goto is_not_equal_false;
43275 			}
43276 		}
43277 	}
43278 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43279 }
43280 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43282 {
43283 	USE_OPLINE
43284 	zval *op1, *op2;
43285 	double d1, d2;
43286 
43287 	op1 = EX_VAR(opline->op1.var);
43288 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43289 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
43290 		/* pass */
43291 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43292 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43293 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
43294 is_not_equal_true:
43295 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
43296 			} else {
43297 is_not_equal_false:
43298 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
43299 			}
43300 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43301 			d1 = (double)Z_LVAL_P(op1);
43302 			d2 = Z_DVAL_P(op2);
43303 			goto is_not_equal_double;
43304 		}
43305 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43306 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43307 			d1 = Z_DVAL_P(op1);
43308 			d2 = Z_DVAL_P(op2);
43309 is_not_equal_double:
43310 			if (d1 != d2) {
43311 				goto is_not_equal_true;
43312 			} else {
43313 				goto is_not_equal_false;
43314 			}
43315 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43316 			d1 = Z_DVAL_P(op1);
43317 			d2 = (double)Z_LVAL_P(op2);
43318 			goto is_not_equal_double;
43319 		}
43320 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43321 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43322 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
43323 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43324 				zval_ptr_dtor_str(op1);
43325 			}
43326 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
43327 				zval_ptr_dtor_str(op2);
43328 			}
43329 			if (!result) {
43330 				goto is_not_equal_true;
43331 			} else {
43332 				goto is_not_equal_false;
43333 			}
43334 		}
43335 	}
43336 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43337 }
43338 
ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43339 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43340 {
43341 	USE_OPLINE
43342 	zval *op1, *op2;
43343 
43344 	SAVE_OPLINE();
43345 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
43346 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43347 	compare_function(EX_VAR(opline->result.var), op1, op2);
43348 
43349 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43350 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43351 }
43352 
ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43353 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43354 {
43355 	USE_OPLINE
43356 	zval *op1, *op2;
43357 
43358 	SAVE_OPLINE();
43359 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
43360 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43361 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
43362 
43363 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43364 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43365 }
43366 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43367 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43368 {
43369 	USE_OPLINE
43370 	zval *object;
43371 	zval *property;
43372 	zval *value;
43373 	zval *zptr;
43374 	void **cache_slot;
43375 	zend_property_info *prop_info;
43376 	zend_object *zobj;
43377 	zend_string *name, *tmp_name;
43378 
43379 	SAVE_OPLINE();
43380 	object = EX_VAR(opline->op1.var);
43381 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43382 
43383 	do {
43384 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
43385 
43386 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
43387 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
43388 				object = Z_REFVAL_P(object);
43389 				goto assign_op_object;
43390 			}
43391 			if (IS_CV == IS_CV
43392 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43393 				ZVAL_UNDEFINED_OP1();
43394 			}
43395 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
43396 			break;
43397 		}
43398 
43399 assign_op_object:
43400 		/* here we are sure we are dealing with an object */
43401 		zobj = Z_OBJ_P(object);
43402 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43403 			name = Z_STR_P(property);
43404 		} else {
43405 			name = zval_try_get_tmp_string(property, &tmp_name);
43406 			if (UNEXPECTED(!name)) {
43407 				UNDEF_RESULT();
43408 				break;
43409 			}
43410 		}
43411 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
43412 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
43413 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
43414 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43415 					ZVAL_NULL(EX_VAR(opline->result.var));
43416 				}
43417 			} else {
43418 				zval *orig_zptr = zptr;
43419 				zend_reference *ref;
43420 
43421 				do {
43422 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
43423 						ref = Z_REF_P(zptr);
43424 						zptr = Z_REFVAL_P(zptr);
43425 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
43426 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
43427 							break;
43428 						}
43429 					}
43430 
43431 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43432 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
43433 					} else {
43434 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
43435 					}
43436 					if (UNEXPECTED(prop_info)) {
43437 						/* special case for typed properties */
43438 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
43439 					} else {
43440 						zend_binary_op(zptr, zptr, value OPLINE_CC);
43441 					}
43442 				} while (0);
43443 
43444 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43445 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
43446 				}
43447 			}
43448 		} else {
43449 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
43450 		}
43451 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43452 			zend_tmp_string_release(tmp_name);
43453 		}
43454 	} while (0);
43455 
43456 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
43457 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43458 
43459 	/* assign_obj has two opcodes! */
43460 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43461 }
43462 
43463 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43464 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43465 {
43466 	USE_OPLINE
43467 	zval *var_ptr;
43468 	zval *value, *container, *dim;
43469 
43470 	SAVE_OPLINE();
43471 	container = EX_VAR(opline->op1.var);
43472 
43473 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43474 assign_dim_op_array:
43475 		SEPARATE_ARRAY(container);
43476 assign_dim_op_new_array:
43477 		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43478 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43479 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
43480 			if (UNEXPECTED(!var_ptr)) {
43481 				zend_cannot_add_element();
43482 				goto assign_dim_op_ret_null;
43483 			}
43484 		} else {
43485 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43486 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
43487 			} else {
43488 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
43489 			}
43490 			if (UNEXPECTED(!var_ptr)) {
43491 				goto assign_dim_op_ret_null;
43492 			}
43493 		}
43494 
43495 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
43496 
43497 		do {
43498 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
43499 				zend_reference *ref = Z_REF_P(var_ptr);
43500 				var_ptr = Z_REFVAL_P(var_ptr);
43501 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
43502 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
43503 					break;
43504 				}
43505 			}
43506 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
43507 		} while (0);
43508 
43509 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43510 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
43511 		}
43512 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
43513 	} else {
43514 		if (EXPECTED(Z_ISREF_P(container))) {
43515 			container = Z_REFVAL_P(container);
43516 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43517 				goto assign_dim_op_array;
43518 			}
43519 		}
43520 
43521 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
43522 			zend_object *obj = Z_OBJ_P(container);
43523 
43524 			GC_ADDREF(obj);
43525 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43526 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
43527 				dim = ZVAL_UNDEFINED_OP2();
43528 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43529 				dim++;
43530 			}
43531 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
43532 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
43533 				zend_objects_store_del(obj);
43534 			}
43535 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
43536 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
43537 				ZVAL_UNDEFINED_OP1();
43538 			}
43539 			ZVAL_ARR(container, zend_new_array(8));
43540 			goto assign_dim_op_new_array;
43541 		} else {
43542 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43543 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
43544 assign_dim_op_ret_null:
43545 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
43546 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43547 				ZVAL_NULL(EX_VAR(opline->result.var));
43548 			}
43549 		}
43550 	}
43551 
43552 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43553 
43554 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43555 }
43556 
ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43557 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43558 {
43559 	USE_OPLINE
43560 	zval *var_ptr;
43561 	zval *value;
43562 
43563 	SAVE_OPLINE();
43564 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43565 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
43566 
43567 	do {
43568 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
43569 			zend_reference *ref = Z_REF_P(var_ptr);
43570 			var_ptr = Z_REFVAL_P(var_ptr);
43571 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
43572 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
43573 				break;
43574 			}
43575 		}
43576 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
43577 	} while (0);
43578 
43579 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43580 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
43581 	}
43582 
43583 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43584 
43585 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43586 }
43587 
ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43588 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43589 {
43590 	USE_OPLINE
43591 	zval *object;
43592 	zval *property;
43593 	zval *zptr;
43594 	void **cache_slot;
43595 	zend_property_info *prop_info;
43596 	zend_object *zobj;
43597 	zend_string *name, *tmp_name;
43598 
43599 	SAVE_OPLINE();
43600 	object = EX_VAR(opline->op1.var);
43601 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43602 
43603 	do {
43604 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
43605 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
43606 				object = Z_REFVAL_P(object);
43607 				goto pre_incdec_object;
43608 			}
43609 			if (IS_CV == IS_CV
43610 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43611 				ZVAL_UNDEFINED_OP1();
43612 			}
43613 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
43614 			break;
43615 		}
43616 
43617 pre_incdec_object:
43618 		/* here we are sure we are dealing with an object */
43619 		zobj = Z_OBJ_P(object);
43620 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43621 			name = Z_STR_P(property);
43622 		} else {
43623 			name = zval_try_get_tmp_string(property, &tmp_name);
43624 			if (UNEXPECTED(!name)) {
43625 				UNDEF_RESULT();
43626 				break;
43627 			}
43628 		}
43629 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
43630 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
43631 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
43632 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43633 					ZVAL_NULL(EX_VAR(opline->result.var));
43634 				}
43635 			} else {
43636 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43637 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
43638 				} else {
43639 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
43640 				}
43641 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
43642 			}
43643 		} else {
43644 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
43645 		}
43646 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43647 			zend_tmp_string_release(tmp_name);
43648 		}
43649 	} while (0);
43650 
43651 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43652 
43653 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43654 }
43655 
ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43656 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43657 {
43658 	USE_OPLINE
43659 	zval *object;
43660 	zval *property;
43661 	zval *zptr;
43662 	void **cache_slot;
43663 	zend_property_info *prop_info;
43664 	zend_object *zobj;
43665 	zend_string *name, *tmp_name;
43666 
43667 	SAVE_OPLINE();
43668 	object = EX_VAR(opline->op1.var);
43669 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43670 
43671 	do {
43672 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
43673 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
43674 				object = Z_REFVAL_P(object);
43675 				goto post_incdec_object;
43676 			}
43677 			if (IS_CV == IS_CV
43678 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43679 				ZVAL_UNDEFINED_OP1();
43680 			}
43681 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
43682 			break;
43683 		}
43684 
43685 post_incdec_object:
43686 		/* here we are sure we are dealing with an object */
43687 		zobj = Z_OBJ_P(object);
43688 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43689 			name = Z_STR_P(property);
43690 		} else {
43691 			name = zval_try_get_tmp_string(property, &tmp_name);
43692 			if (UNEXPECTED(!name)) {
43693 				ZVAL_UNDEF(EX_VAR(opline->result.var));
43694 				break;
43695 			}
43696 		}
43697 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
43698 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
43699 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
43700 				ZVAL_NULL(EX_VAR(opline->result.var));
43701 			} else {
43702 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43703 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
43704 				} else {
43705 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
43706 				}
43707 
43708 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
43709 			}
43710 		} else {
43711 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
43712 		}
43713 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43714 			zend_tmp_string_release(tmp_name);
43715 		}
43716 	} while (0);
43717 
43718 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43719 
43720 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43721 }
43722 
ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43723 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43724 {
43725 	USE_OPLINE
43726 	zval *container, *dim, *value;
43727 
43728 	SAVE_OPLINE();
43729 	container = EX_VAR(opline->op1.var);
43730 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43731 	if (IS_CV != IS_CONST) {
43732 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43733 fetch_dim_r_array:
43734 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
43735 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
43736 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
43737 			container = Z_REFVAL_P(container);
43738 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43739 				goto fetch_dim_r_array;
43740 			} else {
43741 				goto fetch_dim_r_slow;
43742 			}
43743 		} else {
43744 fetch_dim_r_slow:
43745 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43746 				dim++;
43747 			}
43748 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
43749 		}
43750 	} else {
43751 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
43752 	}
43753 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43754 
43755 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43756 }
43757 
ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43758 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43759 {
43760 	USE_OPLINE
43761 	zval *container;
43762 
43763 	SAVE_OPLINE();
43764 	container = EX_VAR(opline->op1.var);
43765 	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);
43766 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43767 	if (IS_CV == IS_VAR) {
43768 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
43769 	}
43770 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43771 }
43772 
ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43773 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43774 {
43775 	USE_OPLINE
43776 	zval *container;
43777 
43778 	SAVE_OPLINE();
43779 	container = EX_VAR(opline->op1.var);
43780 	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);
43781 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43782 	if (IS_CV == IS_VAR) {
43783 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
43784 	}
43785 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43786 }
43787 
ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43788 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43789 {
43790 	USE_OPLINE
43791 	zval *container;
43792 
43793 	SAVE_OPLINE();
43794 	container = EX_VAR(opline->op1.var);
43795 	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);
43796 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43797 
43798 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43799 }
43800 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43802 {
43803 #if 0
43804 	USE_OPLINE
43805 #endif
43806 
43807 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
43808         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
43809 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43810         }
43811 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43812 	} else {
43813 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43814 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43815 		}
43816 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43817 	}
43818 }
43819 
ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43820 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43821 {
43822 	USE_OPLINE
43823 	zval *container;
43824 
43825 	SAVE_OPLINE();
43826 	container = EX_VAR(opline->op1.var);
43827 	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);
43828 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43829 	if (IS_CV == IS_VAR) {
43830 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
43831 	}
43832 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43833 }
43834 
ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43835 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43836 {
43837 	USE_OPLINE
43838 	zval *container;
43839 	zval *offset;
43840 	void **cache_slot = NULL;
43841 
43842 	SAVE_OPLINE();
43843 	container = EX_VAR(opline->op1.var);
43844 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43845 
43846 	if (IS_CV == IS_CONST ||
43847 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
43848 	    do {
43849 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
43850 				container = Z_REFVAL_P(container);
43851 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
43852 					break;
43853 				}
43854 			}
43855 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
43856 				ZVAL_UNDEFINED_OP1();
43857 			}
43858 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
43859 				ZVAL_UNDEFINED_OP2();
43860 			}
43861 			zend_wrong_property_read(container, offset);
43862 			ZVAL_NULL(EX_VAR(opline->result.var));
43863 			goto fetch_obj_r_finish;
43864 		} while (0);
43865 	}
43866 
43867 	/* here we are sure we are dealing with an object */
43868 	do {
43869 		zend_object *zobj = Z_OBJ_P(container);
43870 		zend_string *name, *tmp_name;
43871 		zval *retval;
43872 
43873 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43874 			name = Z_STR_P(offset);
43875 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
43876 
43877 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
43878 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
43879 
43880 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
43881 					retval = OBJ_PROP(zobj, prop_offset);
43882 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
43883 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
43884 							goto fetch_obj_r_copy;
43885 						} else {
43886 fetch_obj_r_fast_copy:
43887 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
43888 							ZEND_VM_NEXT_OPCODE();
43889 						}
43890 					}
43891 				} else if (EXPECTED(zobj->properties != NULL)) {
43892 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
43893 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
43894 
43895 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
43896 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
43897 
43898 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
43899 						        (EXPECTED(p->key == name) ||
43900 						         (EXPECTED(p->h == ZSTR_H(name)) &&
43901 						          EXPECTED(p->key != NULL) &&
43902 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
43903 								retval = &p->val;
43904 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
43905 									goto fetch_obj_r_copy;
43906 								} else {
43907 									goto fetch_obj_r_fast_copy;
43908 								}
43909 							}
43910 						}
43911 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
43912 					}
43913 					retval = zend_hash_find_ex(zobj->properties, name, 1);
43914 					if (EXPECTED(retval)) {
43915 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
43916 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
43917 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
43918 							goto fetch_obj_r_copy;
43919 						} else {
43920 							goto fetch_obj_r_fast_copy;
43921 						}
43922 					}
43923 				}
43924 			}
43925 		} else {
43926 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
43927 				ZVAL_UNDEFINED_OP2();
43928 			}
43929 			name = zval_try_get_tmp_string(offset, &tmp_name);
43930 			if (UNEXPECTED(!name)) {
43931 				ZVAL_UNDEF(EX_VAR(opline->result.var));
43932 				break;
43933 			}
43934 		}
43935 
43936 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
43937 
43938 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43939 			zend_tmp_string_release(tmp_name);
43940 		}
43941 
43942 		if (retval != EX_VAR(opline->result.var)) {
43943 fetch_obj_r_copy:
43944 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
43945 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
43946 			zend_unwrap_reference(retval);
43947 		}
43948 	} while (0);
43949 
43950 fetch_obj_r_finish:
43951 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43952 
43953 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43954 }
43955 
ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43956 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43957 {
43958 	USE_OPLINE
43959 	zval *property, *container, *result;
43960 
43961 	SAVE_OPLINE();
43962 
43963 	container = EX_VAR(opline->op1.var);
43964 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43965 	result = EX_VAR(opline->result.var);
43966 	zend_fetch_property_address(
43967 		result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
43968 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
43969 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
43970 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43971 	if (IS_CV == IS_VAR) {
43972 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
43973 	}
43974 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43975 }
43976 
ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43977 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43978 {
43979 	USE_OPLINE
43980 	zval *property, *container, *result;
43981 
43982 	SAVE_OPLINE();
43983 	container = EX_VAR(opline->op1.var);
43984 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
43985 	result = EX_VAR(opline->result.var);
43986 	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
43987 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
43988 	if (IS_CV == IS_VAR) {
43989 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
43990 	}
43991 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43992 }
43993 
ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43994 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43995 {
43996 	USE_OPLINE
43997 	zval *container;
43998 	zval *offset;
43999 	void **cache_slot = NULL;
44000 
44001 	SAVE_OPLINE();
44002 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
44003 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44004 
44005 	if (IS_CV == IS_CONST ||
44006 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
44007 		do {
44008 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
44009 				container = Z_REFVAL_P(container);
44010 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
44011 					break;
44012 				}
44013 			}
44014 			ZVAL_NULL(EX_VAR(opline->result.var));
44015 			goto fetch_obj_is_finish;
44016 		} while (0);
44017 	}
44018 
44019 	/* here we are sure we are dealing with an object */
44020 	do {
44021 		zend_object *zobj = Z_OBJ_P(container);
44022 		zend_string *name, *tmp_name;
44023 		zval *retval;
44024 
44025 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44026 			name = Z_STR_P(offset);
44027 			cache_slot = CACHE_ADDR(opline->extended_value);
44028 
44029 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
44030 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44031 
44032 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44033 					retval = OBJ_PROP(zobj, prop_offset);
44034 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
44035 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
44036 							goto fetch_obj_is_copy;
44037 						} else {
44038 fetch_obj_is_fast_copy:
44039 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
44040 							ZEND_VM_NEXT_OPCODE();
44041 						}
44042 					}
44043 				} else if (EXPECTED(zobj->properties != NULL)) {
44044 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
44045 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
44046 
44047 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
44048 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
44049 
44050 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
44051 						        (EXPECTED(p->key == name) ||
44052 						         (EXPECTED(p->h == ZSTR_H(name)) &&
44053 						          EXPECTED(p->key != NULL) &&
44054 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
44055 								retval = &p->val;
44056 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
44057 									goto fetch_obj_is_copy;
44058 								} else {
44059 									goto fetch_obj_is_fast_copy;
44060 								}
44061 							}
44062 						}
44063 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
44064 					}
44065 					retval = zend_hash_find_ex(zobj->properties, name, 1);
44066 					if (EXPECTED(retval)) {
44067 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
44068 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
44069 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
44070 							goto fetch_obj_is_copy;
44071 						} else {
44072 							goto fetch_obj_is_fast_copy;
44073 						}
44074 					}
44075 				}
44076 			}
44077 		} else {
44078 			name = zval_try_get_tmp_string(offset, &tmp_name);
44079 			if (UNEXPECTED(!name)) {
44080 				ZVAL_UNDEF(EX_VAR(opline->result.var));
44081 				break;
44082 			}
44083 		}
44084 
44085 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
44086 
44087 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44088 			zend_tmp_string_release(tmp_name);
44089 		}
44090 
44091 		if (retval != EX_VAR(opline->result.var)) {
44092 fetch_obj_is_copy:
44093 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
44094 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
44095 			zend_unwrap_reference(retval);
44096 		}
44097 	} while (0);
44098 
44099 fetch_obj_is_finish:
44100 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44101 
44102 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44103 }
44104 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44105 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44106 {
44107 #if 0
44108 	USE_OPLINE
44109 #endif
44110 
44111 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
44112 		/* Behave like FETCH_OBJ_W */
44113 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
44114 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44115 		}
44116 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44117 	} else {
44118 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44119 	}
44120 }
44121 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44122 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44123 {
44124 	USE_OPLINE
44125 	zval *container, *property, *result;
44126 
44127 	SAVE_OPLINE();
44128 	container = EX_VAR(opline->op1.var);
44129 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44130 	result = EX_VAR(opline->result.var);
44131 	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
44132 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44133 	if (IS_CV == IS_VAR) {
44134 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
44135 	}
44136 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44137 }
44138 
ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44139 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44140 {
44141 	USE_OPLINE
44142 	zval *object, *property, *value, tmp;
44143 	zend_object *zobj;
44144 	zend_string *name, *tmp_name;
44145 
44146 	SAVE_OPLINE();
44147 	object = EX_VAR(opline->op1.var);
44148 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44149 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
44150 
44151 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44152 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
44153 			object = Z_REFVAL_P(object);
44154 			goto assign_object;
44155 		}
44156 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
44157 		value = &EG(uninitialized_zval);
44158 		goto free_and_exit_assign_obj;
44159 	}
44160 
44161 assign_object:
44162 	zobj = Z_OBJ_P(object);
44163 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
44164 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
44165 		void **cache_slot = CACHE_ADDR(opline->extended_value);
44166 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44167 		zend_object *zobj = Z_OBJ_P(object);
44168 		zval *property_val;
44169 
44170 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44171 			property_val = OBJ_PROP(zobj, prop_offset);
44172 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
44173 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
44174 
44175 				if (UNEXPECTED(prop_info != NULL)) {
44176 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
44177 					goto free_and_exit_assign_obj;
44178 				} else {
44179 fast_assign_obj:
44180 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
44181 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44182 						ZVAL_COPY(EX_VAR(opline->result.var), value);
44183 					}
44184 					goto exit_assign_obj;
44185 				}
44186 			}
44187 		} else {
44188 			if (EXPECTED(zobj->properties != NULL)) {
44189 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
44190 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
44191 						GC_DELREF(zobj->properties);
44192 					}
44193 					zobj->properties = zend_array_dup(zobj->properties);
44194 				}
44195 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
44196 				if (property_val) {
44197 					goto fast_assign_obj;
44198 				}
44199 			}
44200 
44201 			if (!zobj->ce->__set) {
44202 
44203 				if (EXPECTED(zobj->properties == NULL)) {
44204 					rebuild_object_properties(zobj);
44205 				}
44206 				if (IS_CONST == IS_CONST) {
44207 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
44208 						Z_ADDREF_P(value);
44209 					}
44210 				} else if (IS_CONST != IS_TMP_VAR) {
44211 					if (Z_ISREF_P(value)) {
44212 						if (IS_CONST == IS_VAR) {
44213 							zend_reference *ref = Z_REF_P(value);
44214 							if (GC_DELREF(ref) == 0) {
44215 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
44216 								efree_size(ref, sizeof(zend_reference));
44217 								value = &tmp;
44218 							} else {
44219 								value = Z_REFVAL_P(value);
44220 								Z_TRY_ADDREF_P(value);
44221 							}
44222 						} else {
44223 							value = Z_REFVAL_P(value);
44224 							Z_TRY_ADDREF_P(value);
44225 						}
44226 					} else if (IS_CONST == IS_CV) {
44227 						Z_TRY_ADDREF_P(value);
44228 					}
44229 				}
44230 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
44231 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44232 					ZVAL_COPY(EX_VAR(opline->result.var), value);
44233 				}
44234 				goto exit_assign_obj;
44235 			}
44236 		}
44237 	}
44238 
44239 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
44240 		ZVAL_DEREF(value);
44241 	}
44242 
44243 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44244 		name = Z_STR_P(property);
44245 	} else {
44246 		name = zval_try_get_tmp_string(property, &tmp_name);
44247 		if (UNEXPECTED(!name)) {
44248 
44249 			UNDEF_RESULT();
44250 			goto exit_assign_obj;
44251 		}
44252 	}
44253 
44254 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
44255 
44256 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44257 		zend_tmp_string_release(tmp_name);
44258 	}
44259 
44260 free_and_exit_assign_obj:
44261 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44262 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44263 	}
44264 
44265 exit_assign_obj:
44266 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44267 
44268 	/* assign_obj has two opcodes! */
44269 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44270 }
44271 
44272 /* 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)44273 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44274 {
44275 	USE_OPLINE
44276 	zval *object, *property, *value, tmp;
44277 	zend_object *zobj;
44278 	zend_string *name, *tmp_name;
44279 
44280 	SAVE_OPLINE();
44281 	object = EX_VAR(opline->op1.var);
44282 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44283 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
44284 
44285 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44286 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
44287 			object = Z_REFVAL_P(object);
44288 			goto assign_object;
44289 		}
44290 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
44291 		value = &EG(uninitialized_zval);
44292 		goto free_and_exit_assign_obj;
44293 	}
44294 
44295 assign_object:
44296 	zobj = Z_OBJ_P(object);
44297 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
44298 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
44299 		void **cache_slot = CACHE_ADDR(opline->extended_value);
44300 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44301 		zend_object *zobj = Z_OBJ_P(object);
44302 		zval *property_val;
44303 
44304 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44305 			property_val = OBJ_PROP(zobj, prop_offset);
44306 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
44307 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
44308 
44309 				if (UNEXPECTED(prop_info != NULL)) {
44310 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
44311 					goto free_and_exit_assign_obj;
44312 				} else {
44313 fast_assign_obj:
44314 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
44315 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44316 						ZVAL_COPY(EX_VAR(opline->result.var), value);
44317 					}
44318 					goto exit_assign_obj;
44319 				}
44320 			}
44321 		} else {
44322 			if (EXPECTED(zobj->properties != NULL)) {
44323 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
44324 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
44325 						GC_DELREF(zobj->properties);
44326 					}
44327 					zobj->properties = zend_array_dup(zobj->properties);
44328 				}
44329 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
44330 				if (property_val) {
44331 					goto fast_assign_obj;
44332 				}
44333 			}
44334 
44335 			if (!zobj->ce->__set) {
44336 
44337 				if (EXPECTED(zobj->properties == NULL)) {
44338 					rebuild_object_properties(zobj);
44339 				}
44340 				if (IS_TMP_VAR == IS_CONST) {
44341 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
44342 						Z_ADDREF_P(value);
44343 					}
44344 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
44345 					if (Z_ISREF_P(value)) {
44346 						if (IS_TMP_VAR == IS_VAR) {
44347 							zend_reference *ref = Z_REF_P(value);
44348 							if (GC_DELREF(ref) == 0) {
44349 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
44350 								efree_size(ref, sizeof(zend_reference));
44351 								value = &tmp;
44352 							} else {
44353 								value = Z_REFVAL_P(value);
44354 								Z_TRY_ADDREF_P(value);
44355 							}
44356 						} else {
44357 							value = Z_REFVAL_P(value);
44358 							Z_TRY_ADDREF_P(value);
44359 						}
44360 					} else if (IS_TMP_VAR == IS_CV) {
44361 						Z_TRY_ADDREF_P(value);
44362 					}
44363 				}
44364 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
44365 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44366 					ZVAL_COPY(EX_VAR(opline->result.var), value);
44367 				}
44368 				goto exit_assign_obj;
44369 			}
44370 		}
44371 	}
44372 
44373 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
44374 		ZVAL_DEREF(value);
44375 	}
44376 
44377 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44378 		name = Z_STR_P(property);
44379 	} else {
44380 		name = zval_try_get_tmp_string(property, &tmp_name);
44381 		if (UNEXPECTED(!name)) {
44382 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44383 			UNDEF_RESULT();
44384 			goto exit_assign_obj;
44385 		}
44386 	}
44387 
44388 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
44389 
44390 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44391 		zend_tmp_string_release(tmp_name);
44392 	}
44393 
44394 free_and_exit_assign_obj:
44395 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44396 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44397 	}
44398 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44399 exit_assign_obj:
44400 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44401 
44402 	/* assign_obj has two opcodes! */
44403 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44404 }
44405 
44406 /* 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)44407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44408 {
44409 	USE_OPLINE
44410 	zval *object, *property, *value, tmp;
44411 	zend_object *zobj;
44412 	zend_string *name, *tmp_name;
44413 
44414 	SAVE_OPLINE();
44415 	object = EX_VAR(opline->op1.var);
44416 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44417 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
44418 
44419 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44420 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
44421 			object = Z_REFVAL_P(object);
44422 			goto assign_object;
44423 		}
44424 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
44425 		value = &EG(uninitialized_zval);
44426 		goto free_and_exit_assign_obj;
44427 	}
44428 
44429 assign_object:
44430 	zobj = Z_OBJ_P(object);
44431 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
44432 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
44433 		void **cache_slot = CACHE_ADDR(opline->extended_value);
44434 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44435 		zend_object *zobj = Z_OBJ_P(object);
44436 		zval *property_val;
44437 
44438 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44439 			property_val = OBJ_PROP(zobj, prop_offset);
44440 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
44441 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
44442 
44443 				if (UNEXPECTED(prop_info != NULL)) {
44444 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
44445 					goto free_and_exit_assign_obj;
44446 				} else {
44447 fast_assign_obj:
44448 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
44449 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44450 						ZVAL_COPY(EX_VAR(opline->result.var), value);
44451 					}
44452 					goto exit_assign_obj;
44453 				}
44454 			}
44455 		} else {
44456 			if (EXPECTED(zobj->properties != NULL)) {
44457 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
44458 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
44459 						GC_DELREF(zobj->properties);
44460 					}
44461 					zobj->properties = zend_array_dup(zobj->properties);
44462 				}
44463 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
44464 				if (property_val) {
44465 					goto fast_assign_obj;
44466 				}
44467 			}
44468 
44469 			if (!zobj->ce->__set) {
44470 
44471 				if (EXPECTED(zobj->properties == NULL)) {
44472 					rebuild_object_properties(zobj);
44473 				}
44474 				if (IS_VAR == IS_CONST) {
44475 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
44476 						Z_ADDREF_P(value);
44477 					}
44478 				} else if (IS_VAR != IS_TMP_VAR) {
44479 					if (Z_ISREF_P(value)) {
44480 						if (IS_VAR == IS_VAR) {
44481 							zend_reference *ref = Z_REF_P(value);
44482 							if (GC_DELREF(ref) == 0) {
44483 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
44484 								efree_size(ref, sizeof(zend_reference));
44485 								value = &tmp;
44486 							} else {
44487 								value = Z_REFVAL_P(value);
44488 								Z_TRY_ADDREF_P(value);
44489 							}
44490 						} else {
44491 							value = Z_REFVAL_P(value);
44492 							Z_TRY_ADDREF_P(value);
44493 						}
44494 					} else if (IS_VAR == IS_CV) {
44495 						Z_TRY_ADDREF_P(value);
44496 					}
44497 				}
44498 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
44499 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44500 					ZVAL_COPY(EX_VAR(opline->result.var), value);
44501 				}
44502 				goto exit_assign_obj;
44503 			}
44504 		}
44505 	}
44506 
44507 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
44508 		ZVAL_DEREF(value);
44509 	}
44510 
44511 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44512 		name = Z_STR_P(property);
44513 	} else {
44514 		name = zval_try_get_tmp_string(property, &tmp_name);
44515 		if (UNEXPECTED(!name)) {
44516 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44517 			UNDEF_RESULT();
44518 			goto exit_assign_obj;
44519 		}
44520 	}
44521 
44522 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
44523 
44524 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44525 		zend_tmp_string_release(tmp_name);
44526 	}
44527 
44528 free_and_exit_assign_obj:
44529 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44530 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44531 	}
44532 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44533 exit_assign_obj:
44534 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44535 
44536 	/* assign_obj has two opcodes! */
44537 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44538 }
44539 
44540 /* 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)44541 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44542 {
44543 	USE_OPLINE
44544 	zval *object, *property, *value, tmp;
44545 	zend_object *zobj;
44546 	zend_string *name, *tmp_name;
44547 
44548 	SAVE_OPLINE();
44549 	object = EX_VAR(opline->op1.var);
44550 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44551 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
44552 
44553 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44554 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
44555 			object = Z_REFVAL_P(object);
44556 			goto assign_object;
44557 		}
44558 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
44559 		value = &EG(uninitialized_zval);
44560 		goto free_and_exit_assign_obj;
44561 	}
44562 
44563 assign_object:
44564 	zobj = Z_OBJ_P(object);
44565 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
44566 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
44567 		void **cache_slot = CACHE_ADDR(opline->extended_value);
44568 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
44569 		zend_object *zobj = Z_OBJ_P(object);
44570 		zval *property_val;
44571 
44572 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
44573 			property_val = OBJ_PROP(zobj, prop_offset);
44574 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
44575 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
44576 
44577 				if (UNEXPECTED(prop_info != NULL)) {
44578 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
44579 					goto free_and_exit_assign_obj;
44580 				} else {
44581 fast_assign_obj:
44582 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
44583 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44584 						ZVAL_COPY(EX_VAR(opline->result.var), value);
44585 					}
44586 					goto exit_assign_obj;
44587 				}
44588 			}
44589 		} else {
44590 			if (EXPECTED(zobj->properties != NULL)) {
44591 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
44592 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
44593 						GC_DELREF(zobj->properties);
44594 					}
44595 					zobj->properties = zend_array_dup(zobj->properties);
44596 				}
44597 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
44598 				if (property_val) {
44599 					goto fast_assign_obj;
44600 				}
44601 			}
44602 
44603 			if (!zobj->ce->__set) {
44604 
44605 				if (EXPECTED(zobj->properties == NULL)) {
44606 					rebuild_object_properties(zobj);
44607 				}
44608 				if (IS_CV == IS_CONST) {
44609 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
44610 						Z_ADDREF_P(value);
44611 					}
44612 				} else if (IS_CV != IS_TMP_VAR) {
44613 					if (Z_ISREF_P(value)) {
44614 						if (IS_CV == IS_VAR) {
44615 							zend_reference *ref = Z_REF_P(value);
44616 							if (GC_DELREF(ref) == 0) {
44617 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
44618 								efree_size(ref, sizeof(zend_reference));
44619 								value = &tmp;
44620 							} else {
44621 								value = Z_REFVAL_P(value);
44622 								Z_TRY_ADDREF_P(value);
44623 							}
44624 						} else {
44625 							value = Z_REFVAL_P(value);
44626 							Z_TRY_ADDREF_P(value);
44627 						}
44628 					} else if (IS_CV == IS_CV) {
44629 						Z_TRY_ADDREF_P(value);
44630 					}
44631 				}
44632 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
44633 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44634 					ZVAL_COPY(EX_VAR(opline->result.var), value);
44635 				}
44636 				goto exit_assign_obj;
44637 			}
44638 		}
44639 	}
44640 
44641 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
44642 		ZVAL_DEREF(value);
44643 	}
44644 
44645 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44646 		name = Z_STR_P(property);
44647 	} else {
44648 		name = zval_try_get_tmp_string(property, &tmp_name);
44649 		if (UNEXPECTED(!name)) {
44650 
44651 			UNDEF_RESULT();
44652 			goto exit_assign_obj;
44653 		}
44654 	}
44655 
44656 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
44657 
44658 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44659 		zend_tmp_string_release(tmp_name);
44660 	}
44661 
44662 free_and_exit_assign_obj:
44663 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44664 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44665 	}
44666 
44667 exit_assign_obj:
44668 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44669 
44670 	/* assign_obj has two opcodes! */
44671 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44672 }
44673 
44674 /* 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)44675 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44676 {
44677 	USE_OPLINE
44678 	zval *object_ptr, *orig_object_ptr;
44679 	zval *value;
44680 	zval *variable_ptr;
44681 	zval *dim;
44682 
44683 	SAVE_OPLINE();
44684 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
44685 
44686 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
44687 try_assign_dim_array:
44688 		SEPARATE_ARRAY(object_ptr);
44689 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
44690 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
44691 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
44692 				HashTable *ht = Z_ARRVAL_P(object_ptr);
44693 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
44694 					GC_ADDREF(ht);
44695 				}
44696 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
44697 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
44698 					zend_array_destroy(ht);
44699 					goto assign_dim_error;
44700 				}
44701 			}
44702 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
44703 				ZVAL_DEREF(value);
44704 			}
44705 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
44706 			if (UNEXPECTED(variable_ptr == NULL)) {
44707 				zend_cannot_add_element();
44708 				goto assign_dim_error;
44709 			} else if (IS_CONST == IS_CV) {
44710 				if (Z_REFCOUNTED_P(value)) {
44711 					Z_ADDREF_P(value);
44712 				}
44713 			} else if (IS_CONST == IS_VAR) {
44714 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
44715 				if (value != free_op_data) {
44716 					if (Z_REFCOUNTED_P(value)) {
44717 						Z_ADDREF_P(value);
44718 					}
44719 					zval_ptr_dtor_nogc(free_op_data);
44720 				}
44721 			} else if (IS_CONST == IS_CONST) {
44722 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
44723 					Z_ADDREF_P(value);
44724 				}
44725 			}
44726 		} else {
44727 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44728 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44729 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
44730 			} else {
44731 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
44732 			}
44733 			if (UNEXPECTED(variable_ptr == NULL)) {
44734 				goto assign_dim_error;
44735 			}
44736 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
44737 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
44738 		}
44739 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44740 			ZVAL_COPY(EX_VAR(opline->result.var), value);
44741 		}
44742 	} else {
44743 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
44744 			object_ptr = Z_REFVAL_P(object_ptr);
44745 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
44746 				goto try_assign_dim_array;
44747 			}
44748 		}
44749 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
44750 			zend_object *obj = Z_OBJ_P(object_ptr);
44751 
44752 			GC_ADDREF(obj);
44753 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44754 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
44755 				dim = ZVAL_UNDEFINED_OP2();
44756 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
44757 				dim++;
44758 			}
44759 
44760 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
44761 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
44762 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
44763 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
44764 				ZVAL_DEREF(value);
44765 			}
44766 
44767 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
44768 
44769 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
44770 				zend_objects_store_del(obj);
44771 			}
44772 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
44773 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
44774 				zend_use_new_element_for_string();
44775 
44776 				UNDEF_RESULT();
44777 			} else {
44778 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44779 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
44780 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
44781 
44782 			}
44783 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
44784 			if (Z_ISREF_P(orig_object_ptr)
44785 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
44786 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
44787 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44788 
44789 				UNDEF_RESULT();
44790 			} else {
44791 				ZVAL_ARR(object_ptr, zend_new_array(8));
44792 				goto try_assign_dim_array;
44793 			}
44794 		} else {
44795 			zend_use_scalar_as_array();
44796 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44797 assign_dim_error:
44798 
44799 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44800 				ZVAL_NULL(EX_VAR(opline->result.var));
44801 			}
44802 		}
44803 	}
44804 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
44805 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44806 	}
44807 
44808 	/* assign_dim has two opcodes! */
44809 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44810 }
44811 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44812 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44813 {
44814 	USE_OPLINE
44815 	zval *object_ptr, *orig_object_ptr;
44816 	zval *value;
44817 	zval *variable_ptr;
44818 	zval *dim;
44819 
44820 	SAVE_OPLINE();
44821 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
44822 
44823 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
44824 try_assign_dim_array:
44825 		SEPARATE_ARRAY(object_ptr);
44826 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
44827 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
44828 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
44829 				HashTable *ht = Z_ARRVAL_P(object_ptr);
44830 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
44831 					GC_ADDREF(ht);
44832 				}
44833 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
44834 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
44835 					zend_array_destroy(ht);
44836 					goto assign_dim_error;
44837 				}
44838 			}
44839 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
44840 				ZVAL_DEREF(value);
44841 			}
44842 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
44843 			if (UNEXPECTED(variable_ptr == NULL)) {
44844 				zend_cannot_add_element();
44845 				goto assign_dim_error;
44846 			} else if (IS_TMP_VAR == IS_CV) {
44847 				if (Z_REFCOUNTED_P(value)) {
44848 					Z_ADDREF_P(value);
44849 				}
44850 			} else if (IS_TMP_VAR == IS_VAR) {
44851 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
44852 				if (value != free_op_data) {
44853 					if (Z_REFCOUNTED_P(value)) {
44854 						Z_ADDREF_P(value);
44855 					}
44856 					zval_ptr_dtor_nogc(free_op_data);
44857 				}
44858 			} else if (IS_TMP_VAR == IS_CONST) {
44859 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
44860 					Z_ADDREF_P(value);
44861 				}
44862 			}
44863 		} else {
44864 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44865 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44866 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
44867 			} else {
44868 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
44869 			}
44870 			if (UNEXPECTED(variable_ptr == NULL)) {
44871 				goto assign_dim_error;
44872 			}
44873 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
44874 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
44875 		}
44876 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44877 			ZVAL_COPY(EX_VAR(opline->result.var), value);
44878 		}
44879 	} else {
44880 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
44881 			object_ptr = Z_REFVAL_P(object_ptr);
44882 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
44883 				goto try_assign_dim_array;
44884 			}
44885 		}
44886 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
44887 			zend_object *obj = Z_OBJ_P(object_ptr);
44888 
44889 			GC_ADDREF(obj);
44890 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44891 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
44892 				dim = ZVAL_UNDEFINED_OP2();
44893 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
44894 				dim++;
44895 			}
44896 
44897 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
44898 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
44899 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
44900 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
44901 				ZVAL_DEREF(value);
44902 			}
44903 
44904 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
44905 
44906 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44907 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
44908 				zend_objects_store_del(obj);
44909 			}
44910 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
44911 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
44912 				zend_use_new_element_for_string();
44913 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44914 				UNDEF_RESULT();
44915 			} else {
44916 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44917 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
44918 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
44919 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44920 			}
44921 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
44922 			if (Z_ISREF_P(orig_object_ptr)
44923 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
44924 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
44925 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44926 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44927 				UNDEF_RESULT();
44928 			} else {
44929 				ZVAL_ARR(object_ptr, zend_new_array(8));
44930 				goto try_assign_dim_array;
44931 			}
44932 		} else {
44933 			zend_use_scalar_as_array();
44934 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44935 assign_dim_error:
44936 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
44937 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44938 				ZVAL_NULL(EX_VAR(opline->result.var));
44939 			}
44940 		}
44941 	}
44942 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
44943 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44944 	}
44945 
44946 	/* assign_dim has two opcodes! */
44947 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44948 }
44949 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44950 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44951 {
44952 	USE_OPLINE
44953 	zval *object_ptr, *orig_object_ptr;
44954 	zval *value;
44955 	zval *variable_ptr;
44956 	zval *dim;
44957 
44958 	SAVE_OPLINE();
44959 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
44960 
44961 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
44962 try_assign_dim_array:
44963 		SEPARATE_ARRAY(object_ptr);
44964 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
44965 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
44966 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
44967 				HashTable *ht = Z_ARRVAL_P(object_ptr);
44968 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
44969 					GC_ADDREF(ht);
44970 				}
44971 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
44972 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
44973 					zend_array_destroy(ht);
44974 					goto assign_dim_error;
44975 				}
44976 			}
44977 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
44978 				ZVAL_DEREF(value);
44979 			}
44980 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
44981 			if (UNEXPECTED(variable_ptr == NULL)) {
44982 				zend_cannot_add_element();
44983 				goto assign_dim_error;
44984 			} else if (IS_VAR == IS_CV) {
44985 				if (Z_REFCOUNTED_P(value)) {
44986 					Z_ADDREF_P(value);
44987 				}
44988 			} else if (IS_VAR == IS_VAR) {
44989 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
44990 				if (value != free_op_data) {
44991 					if (Z_REFCOUNTED_P(value)) {
44992 						Z_ADDREF_P(value);
44993 					}
44994 					zval_ptr_dtor_nogc(free_op_data);
44995 				}
44996 			} else if (IS_VAR == IS_CONST) {
44997 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
44998 					Z_ADDREF_P(value);
44999 				}
45000 			}
45001 		} else {
45002 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45003 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45004 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45005 			} else {
45006 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45007 			}
45008 			if (UNEXPECTED(variable_ptr == NULL)) {
45009 				goto assign_dim_error;
45010 			}
45011 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
45012 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
45013 		}
45014 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45015 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45016 		}
45017 	} else {
45018 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45019 			object_ptr = Z_REFVAL_P(object_ptr);
45020 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45021 				goto try_assign_dim_array;
45022 			}
45023 		}
45024 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45025 			zend_object *obj = Z_OBJ_P(object_ptr);
45026 
45027 			GC_ADDREF(obj);
45028 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45029 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
45030 				dim = ZVAL_UNDEFINED_OP2();
45031 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45032 				dim++;
45033 			}
45034 
45035 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
45036 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
45037 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45038 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
45039 				ZVAL_DEREF(value);
45040 			}
45041 
45042 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
45043 
45044 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45045 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
45046 				zend_objects_store_del(obj);
45047 			}
45048 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
45049 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45050 				zend_use_new_element_for_string();
45051 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45052 				UNDEF_RESULT();
45053 			} else {
45054 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45055 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
45056 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45057 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45058 			}
45059 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
45060 			if (Z_ISREF_P(orig_object_ptr)
45061 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
45062 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
45063 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45064 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45065 				UNDEF_RESULT();
45066 			} else {
45067 				ZVAL_ARR(object_ptr, zend_new_array(8));
45068 				goto try_assign_dim_array;
45069 			}
45070 		} else {
45071 			zend_use_scalar_as_array();
45072 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45073 assign_dim_error:
45074 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45075 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45076 				ZVAL_NULL(EX_VAR(opline->result.var));
45077 			}
45078 		}
45079 	}
45080 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
45081 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45082 	}
45083 
45084 	/* assign_dim has two opcodes! */
45085 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45086 }
45087 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45088 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45089 {
45090 	USE_OPLINE
45091 	zval *object_ptr, *orig_object_ptr;
45092 	zval *value;
45093 	zval *variable_ptr;
45094 	zval *dim;
45095 
45096 	SAVE_OPLINE();
45097 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
45098 
45099 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45100 try_assign_dim_array:
45101 		SEPARATE_ARRAY(object_ptr);
45102 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45103 			value = EX_VAR((opline+1)->op1.var);
45104 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
45105 				HashTable *ht = Z_ARRVAL_P(object_ptr);
45106 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
45107 					GC_ADDREF(ht);
45108 				}
45109 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45110 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
45111 					zend_array_destroy(ht);
45112 					goto assign_dim_error;
45113 				}
45114 			}
45115 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
45116 				ZVAL_DEREF(value);
45117 			}
45118 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
45119 			if (UNEXPECTED(variable_ptr == NULL)) {
45120 				zend_cannot_add_element();
45121 				goto assign_dim_error;
45122 			} else if (IS_CV == IS_CV) {
45123 				if (Z_REFCOUNTED_P(value)) {
45124 					Z_ADDREF_P(value);
45125 				}
45126 			} else if (IS_CV == IS_VAR) {
45127 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
45128 				if (value != free_op_data) {
45129 					if (Z_REFCOUNTED_P(value)) {
45130 						Z_ADDREF_P(value);
45131 					}
45132 					zval_ptr_dtor_nogc(free_op_data);
45133 				}
45134 			} else if (IS_CV == IS_CONST) {
45135 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
45136 					Z_ADDREF_P(value);
45137 				}
45138 			}
45139 		} else {
45140 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45141 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45142 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45143 			} else {
45144 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45145 			}
45146 			if (UNEXPECTED(variable_ptr == NULL)) {
45147 				goto assign_dim_error;
45148 			}
45149 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
45150 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
45151 		}
45152 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45153 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45154 		}
45155 	} else {
45156 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45157 			object_ptr = Z_REFVAL_P(object_ptr);
45158 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45159 				goto try_assign_dim_array;
45160 			}
45161 		}
45162 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45163 			zend_object *obj = Z_OBJ_P(object_ptr);
45164 
45165 			GC_ADDREF(obj);
45166 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45167 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
45168 				dim = ZVAL_UNDEFINED_OP2();
45169 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45170 				dim++;
45171 			}
45172 
45173 			value = EX_VAR((opline+1)->op1.var);
45174 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
45175 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
45176 			} else if (IS_CV & (IS_CV|IS_VAR)) {
45177 				ZVAL_DEREF(value);
45178 			}
45179 
45180 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
45181 
45182 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
45183 				zend_objects_store_del(obj);
45184 			}
45185 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
45186 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45187 				zend_use_new_element_for_string();
45188 
45189 				UNDEF_RESULT();
45190 			} else {
45191 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45192 				value = EX_VAR((opline+1)->op1.var);
45193 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45194 
45195 			}
45196 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
45197 			if (Z_ISREF_P(orig_object_ptr)
45198 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
45199 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
45200 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45201 
45202 				UNDEF_RESULT();
45203 			} else {
45204 				ZVAL_ARR(object_ptr, zend_new_array(8));
45205 				goto try_assign_dim_array;
45206 			}
45207 		} else {
45208 			zend_use_scalar_as_array();
45209 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45210 assign_dim_error:
45211 
45212 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45213 				ZVAL_NULL(EX_VAR(opline->result.var));
45214 			}
45215 		}
45216 	}
45217 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
45218 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45219 	}
45220 
45221 	/* assign_dim has two opcodes! */
45222 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45223 }
45224 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45225 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45226 {
45227 	USE_OPLINE
45228 	zval *property, *container, *value_ptr;
45229 
45230 	SAVE_OPLINE();
45231 
45232 	container = EX_VAR(opline->op1.var);
45233 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45234 
45235 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
45236 
45237 	if (1) {
45238 		if (IS_CV == IS_UNUSED) {
45239 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45240 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45241 			} else {
45242 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45243 			}
45244 		} else {
45245 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45246 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45247 			} else {
45248 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45249 			}
45250 		}
45251 	} else {
45252 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
45253 	}
45254 
45255 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45256 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
45257 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45258 }
45259 
45260 /* 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)45261 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45262 {
45263 	USE_OPLINE
45264 	zval *property, *container, *value_ptr;
45265 
45266 	SAVE_OPLINE();
45267 
45268 	container = EX_VAR(opline->op1.var);
45269 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45270 
45271 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
45272 
45273 	if (1) {
45274 		if (IS_CV == IS_UNUSED) {
45275 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45276 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45277 			} else {
45278 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45279 			}
45280 		} else {
45281 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45282 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45283 			} else {
45284 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45285 			}
45286 		}
45287 	} else {
45288 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
45289 	}
45290 
45291 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45292 
45293 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45294 }
45295 
45296 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45297 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45298 {
45299 	USE_OPLINE
45300 	zval *op1, *op2;
45301 	zend_string *op1_str, *op2_str, *str;
45302 
45303 
45304 	op1 = EX_VAR(opline->op1.var);
45305 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45306 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
45307 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
45308 		zend_string *op1_str = Z_STR_P(op1);
45309 		zend_string *op2_str = Z_STR_P(op2);
45310 		zend_string *str;
45311 
45312 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
45313 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
45314 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
45315 			} else {
45316 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
45317 			}
45318 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45319 				zend_string_release_ex(op1_str, 0);
45320 			}
45321 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
45322 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
45323 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
45324 			} else {
45325 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
45326 			}
45327 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45328 				zend_string_release_ex(op2_str, 0);
45329 			}
45330 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
45331 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
45332 		    size_t len = ZSTR_LEN(op1_str);
45333 
45334 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
45335 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
45336 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
45337 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45338 				zend_string_release_ex(op2_str, 0);
45339 			}
45340 		} else {
45341 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
45342 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
45343 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
45344 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
45345 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45346 				zend_string_release_ex(op1_str, 0);
45347 			}
45348 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45349 				zend_string_release_ex(op2_str, 0);
45350 			}
45351 		}
45352 		ZEND_VM_NEXT_OPCODE();
45353 	}
45354 
45355 	SAVE_OPLINE();
45356 	if (IS_CV == IS_CONST) {
45357 		op1_str = Z_STR_P(op1);
45358 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45359 		op1_str = zend_string_copy(Z_STR_P(op1));
45360 	} else {
45361 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45362 			ZVAL_UNDEFINED_OP1();
45363 		}
45364 		op1_str = zval_get_string_func(op1);
45365 	}
45366 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45367 		op2_str = Z_STR_P(op2);
45368 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45369 		op2_str = zend_string_copy(Z_STR_P(op2));
45370 	} else {
45371 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
45372 			ZVAL_UNDEFINED_OP2();
45373 		}
45374 		op2_str = zval_get_string_func(op2);
45375 	}
45376 	do {
45377 		if (IS_CV != IS_CONST) {
45378 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
45379 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45380 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
45381 						GC_ADDREF(op2_str);
45382 					}
45383 				}
45384 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
45385 				zend_string_release_ex(op1_str, 0);
45386 				break;
45387 			}
45388 		}
45389 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45390 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
45391 				if (IS_CV == IS_CONST) {
45392 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
45393 						GC_ADDREF(op1_str);
45394 					}
45395 				}
45396 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
45397 				zend_string_release_ex(op2_str, 0);
45398 				break;
45399 			}
45400 		}
45401 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
45402 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
45403 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
45404 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
45405 		if (IS_CV != IS_CONST) {
45406 			zend_string_release_ex(op1_str, 0);
45407 		}
45408 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45409 			zend_string_release_ex(op2_str, 0);
45410 		}
45411 	} while (0);
45412 
45413 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45414 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45415 }
45416 
ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45417 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45418 {
45419 	USE_OPLINE
45420 	zval *function_name;
45421 	zval *object;
45422 	zend_function *fbc;
45423 	zend_class_entry *called_scope;
45424 	zend_object *obj;
45425 	zend_execute_data *call;
45426 	uint32_t call_info;
45427 
45428 	SAVE_OPLINE();
45429 
45430 	object = EX_VAR(opline->op1.var);
45431 
45432 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45433 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45434 	}
45435 
45436 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
45437 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
45438 		do {
45439 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
45440 				function_name = Z_REFVAL_P(function_name);
45441 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
45442 					break;
45443 				}
45444 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
45445 				ZVAL_UNDEFINED_OP2();
45446 				if (UNEXPECTED(EG(exception) != NULL)) {
45447 
45448 					HANDLE_EXCEPTION();
45449 				}
45450 			}
45451 			zend_throw_error(NULL, "Method name must be a string");
45452 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45453 
45454 			HANDLE_EXCEPTION();
45455 		} while (0);
45456 	}
45457 
45458 	if (IS_CV == IS_UNUSED) {
45459 		obj = Z_OBJ_P(object);
45460 	} else {
45461 		do {
45462 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
45463 				obj = Z_OBJ_P(object);
45464 			} else {
45465 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
45466 					zend_reference *ref = Z_REF_P(object);
45467 
45468 					object = &ref->val;
45469 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
45470 						obj = Z_OBJ_P(object);
45471 						if (IS_CV & IS_VAR) {
45472 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
45473 								efree_size(ref, sizeof(zend_reference));
45474 							} else {
45475 								Z_ADDREF_P(object);
45476 							}
45477 						}
45478 						break;
45479 					}
45480 				}
45481 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45482 					object = ZVAL_UNDEFINED_OP1();
45483 					if (UNEXPECTED(EG(exception) != NULL)) {
45484 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45485 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45486 						}
45487 						HANDLE_EXCEPTION();
45488 					}
45489 				}
45490 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45491 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45492 				}
45493 				zend_invalid_method_call(object, function_name);
45494 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45495 
45496 				HANDLE_EXCEPTION();
45497 			}
45498 		} while (0);
45499 	}
45500 
45501 	called_scope = obj->ce;
45502 
45503 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
45504 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
45505 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
45506 	} else {
45507 	    zend_object *orig_obj = obj;
45508 
45509 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45510 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45511 		}
45512 
45513 		/* First, locate the function. */
45514 		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));
45515 		if (UNEXPECTED(fbc == NULL)) {
45516 			if (EXPECTED(!EG(exception))) {
45517 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
45518 			}
45519 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45520 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
45521 				zend_objects_store_del(orig_obj);
45522 			}
45523 			HANDLE_EXCEPTION();
45524 		}
45525 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
45526 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
45527 		    EXPECTED(obj == orig_obj)) {
45528 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
45529 		}
45530 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
45531 			GC_ADDREF(obj); /* For $this pointer */
45532 			if (GC_DELREF(orig_obj) == 0) {
45533 				zend_objects_store_del(orig_obj);
45534 			}
45535 		}
45536 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
45537 			init_func_run_time_cache(&fbc->op_array);
45538 		}
45539 	}
45540 
45541 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45542 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45543 	}
45544 
45545 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
45546 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
45547 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
45548 			zend_objects_store_del(obj);
45549 			if (UNEXPECTED(EG(exception))) {
45550 				HANDLE_EXCEPTION();
45551 			}
45552 		}
45553 		/* call static method */
45554 		obj = (zend_object*)called_scope;
45555 		call_info = ZEND_CALL_NESTED_FUNCTION;
45556 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
45557 		if (IS_CV == IS_CV) {
45558 			GC_ADDREF(obj); /* For $this pointer */
45559 		}
45560 		/* CV may be changed indirectly (e.g. when it's a reference) */
45561 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
45562 	}
45563 
45564 	call = zend_vm_stack_push_call_frame(call_info,
45565 		fbc, opline->extended_value, obj);
45566 	call->prev_execute_data = EX(call);
45567 	EX(call) = call;
45568 
45569 	ZEND_VM_NEXT_OPCODE();
45570 }
45571 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45572 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45573 {
45574 	USE_OPLINE
45575 	zval *expr_ptr, new_expr;
45576 
45577 	SAVE_OPLINE();
45578 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
45579 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
45580 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
45581 		if (Z_ISREF_P(expr_ptr)) {
45582 			Z_ADDREF_P(expr_ptr);
45583 		} else {
45584 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
45585 		}
45586 
45587 	} else {
45588 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
45589 		if (IS_CV == IS_TMP_VAR) {
45590 			/* pass */
45591 		} else if (IS_CV == IS_CONST) {
45592 			Z_TRY_ADDREF_P(expr_ptr);
45593 		} else if (IS_CV == IS_CV) {
45594 			ZVAL_DEREF(expr_ptr);
45595 			Z_TRY_ADDREF_P(expr_ptr);
45596 		} else /* if (IS_CV == IS_VAR) */ {
45597 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
45598 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
45599 
45600 				expr_ptr = Z_REFVAL_P(expr_ptr);
45601 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
45602 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
45603 					expr_ptr = &new_expr;
45604 					efree_size(ref, sizeof(zend_reference));
45605 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
45606 					Z_ADDREF_P(expr_ptr);
45607 				}
45608 			}
45609 		}
45610 	}
45611 
45612 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
45613 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45614 		zend_string *str;
45615 		zend_ulong hval;
45616 
45617 add_again:
45618 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
45619 			str = Z_STR_P(offset);
45620 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45621 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
45622 					goto num_index;
45623 				}
45624 			}
45625 str_index:
45626 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
45627 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
45628 			hval = Z_LVAL_P(offset);
45629 num_index:
45630 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
45631 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
45632 			offset = Z_REFVAL_P(offset);
45633 			goto add_again;
45634 		} else if (Z_TYPE_P(offset) == IS_NULL) {
45635 			str = ZSTR_EMPTY_ALLOC();
45636 			goto str_index;
45637 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
45638 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
45639 			goto num_index;
45640 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
45641 			hval = 0;
45642 			goto num_index;
45643 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
45644 			hval = 1;
45645 			goto num_index;
45646 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
45647 			zend_use_resource_as_offset(offset);
45648 			hval = Z_RES_HANDLE_P(offset);
45649 			goto num_index;
45650 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
45651 			ZVAL_UNDEFINED_OP2();
45652 			str = ZSTR_EMPTY_ALLOC();
45653 			goto str_index;
45654 		} else {
45655 			zend_illegal_offset();
45656 			zval_ptr_dtor_nogc(expr_ptr);
45657 		}
45658 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45659 	} else {
45660 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
45661 			zend_cannot_add_element();
45662 			zval_ptr_dtor_nogc(expr_ptr);
45663 		}
45664 	}
45665 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45666 }
45667 
ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45668 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45669 {
45670 	zval *array;
45671 	uint32_t size;
45672 	USE_OPLINE
45673 
45674 	array = EX_VAR(opline->result.var);
45675 	if (IS_CV != IS_UNUSED) {
45676 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
45677 		ZVAL_ARR(array, zend_new_array(size));
45678 		/* Explicitly initialize array as not-packed if flag is set */
45679 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
45680 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
45681 		}
45682 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45683 	} else {
45684 		ZVAL_ARR(array, zend_new_array(0));
45685 		ZEND_VM_NEXT_OPCODE();
45686 	}
45687 }
45688 
ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45689 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45690 {
45691 	USE_OPLINE
45692 	zval *container;
45693 	zval *offset;
45694 	zend_ulong hval;
45695 	zend_string *key;
45696 
45697 	SAVE_OPLINE();
45698 	container = EX_VAR(opline->op1.var);
45699 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45700 
45701 	do {
45702 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45703 			HashTable *ht;
45704 
45705 unset_dim_array:
45706 			SEPARATE_ARRAY(container);
45707 			ht = Z_ARRVAL_P(container);
45708 offset_again:
45709 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
45710 				key = Z_STR_P(offset);
45711 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45712 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
45713 						goto num_index_dim;
45714 					}
45715 				}
45716 str_index_dim:
45717 				if (ht == &EG(symbol_table)) {
45718 					zend_delete_global_variable(key);
45719 				} else {
45720 					zend_hash_del(ht, key);
45721 				}
45722 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
45723 				hval = Z_LVAL_P(offset);
45724 num_index_dim:
45725 				zend_hash_index_del(ht, hval);
45726 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
45727 				offset = Z_REFVAL_P(offset);
45728 				goto offset_again;
45729 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
45730 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
45731 				goto num_index_dim;
45732 			} else if (Z_TYPE_P(offset) == IS_NULL) {
45733 				key = ZSTR_EMPTY_ALLOC();
45734 				goto str_index_dim;
45735 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
45736 				hval = 0;
45737 				goto num_index_dim;
45738 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
45739 				hval = 1;
45740 				goto num_index_dim;
45741 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
45742 				hval = Z_RES_HANDLE_P(offset);
45743 				goto num_index_dim;
45744 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
45745 				ZVAL_UNDEFINED_OP2();
45746 				key = ZSTR_EMPTY_ALLOC();
45747 				goto str_index_dim;
45748 			} else {
45749 				zend_type_error("Illegal offset type in unset");
45750 			}
45751 			break;
45752 		} else if (Z_ISREF_P(container)) {
45753 			container = Z_REFVAL_P(container);
45754 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45755 				goto unset_dim_array;
45756 			}
45757 		}
45758 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45759 			container = ZVAL_UNDEFINED_OP1();
45760 		}
45761 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
45762 			offset = ZVAL_UNDEFINED_OP2();
45763 		}
45764 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
45765 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
45766 				offset++;
45767 			}
45768 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
45769 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
45770 			zend_throw_error(NULL, "Cannot unset string offsets");
45771 		}
45772 	} while (0);
45773 
45774 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45775 
45776 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45777 }
45778 
ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45779 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45780 {
45781 	USE_OPLINE
45782 	zval *container;
45783 	zval *offset;
45784 	zend_string *name, *tmp_name;
45785 
45786 	SAVE_OPLINE();
45787 	container = EX_VAR(opline->op1.var);
45788 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45789 
45790 	do {
45791 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
45792 			if (Z_ISREF_P(container)) {
45793 				container = Z_REFVAL_P(container);
45794 				if (Z_TYPE_P(container) != IS_OBJECT) {
45795 					if (IS_CV == IS_CV
45796 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45797 						ZVAL_UNDEFINED_OP1();
45798 					}
45799 					break;
45800 				}
45801 			} else {
45802 				break;
45803 			}
45804 		}
45805 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45806 			name = Z_STR_P(offset);
45807 		} else {
45808 			name = zval_try_get_tmp_string(offset, &tmp_name);
45809 			if (UNEXPECTED(!name)) {
45810 				break;
45811 			}
45812 		}
45813 		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));
45814 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45815 			zend_tmp_string_release(tmp_name);
45816 		}
45817 	} while (0);
45818 
45819 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45820 
45821 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45822 }
45823 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45825 {
45826 	USE_OPLINE
45827 	zval *container;
45828 	bool result;
45829 	zend_ulong hval;
45830 	zval *offset;
45831 
45832 	SAVE_OPLINE();
45833 	container = EX_VAR(opline->op1.var);
45834 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45835 
45836 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45837 		HashTable *ht;
45838 		zval *value;
45839 		zend_string *str;
45840 
45841 isset_dim_obj_array:
45842 		ht = Z_ARRVAL_P(container);
45843 isset_again:
45844 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
45845 			str = Z_STR_P(offset);
45846 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45847 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
45848 					goto num_index_prop;
45849 				}
45850 			}
45851 			value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
45852 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
45853 			hval = Z_LVAL_P(offset);
45854 num_index_prop:
45855 			value = zend_hash_index_find(ht, hval);
45856 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
45857 			offset = Z_REFVAL_P(offset);
45858 			goto isset_again;
45859 		} else {
45860 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
45861 			if (UNEXPECTED(EG(exception))) {
45862 				result = 0;
45863 				goto isset_dim_obj_exit;
45864 			}
45865 		}
45866 
45867 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
45868 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
45869 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
45870 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
45871 
45872 			if (IS_CV & (IS_CONST|IS_CV)) {
45873 				/* avoid exception check */
45874 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45875 				ZEND_VM_SMART_BRANCH(result, 0);
45876 			}
45877 		} else {
45878 			result = (value == NULL || !i_zend_is_true(value));
45879 		}
45880 		goto isset_dim_obj_exit;
45881 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
45882 		container = Z_REFVAL_P(container);
45883 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45884 			goto isset_dim_obj_array;
45885 		}
45886 	}
45887 
45888 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
45889 		offset++;
45890 	}
45891 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
45892 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
45893 	} else {
45894 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
45895 	}
45896 
45897 isset_dim_obj_exit:
45898 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45899 
45900 	ZEND_VM_SMART_BRANCH(result, 1);
45901 }
45902 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45903 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45904 {
45905 	USE_OPLINE
45906 	zval *container;
45907 	int result;
45908 	zval *offset;
45909 	zend_string *name, *tmp_name;
45910 
45911 	SAVE_OPLINE();
45912 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
45913 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45914 
45915 	if (IS_CV == IS_CONST ||
45916 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
45917 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
45918 			container = Z_REFVAL_P(container);
45919 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
45920 				result = (opline->extended_value & ZEND_ISEMPTY);
45921 				goto isset_object_finish;
45922 			}
45923 		} else {
45924 			result = (opline->extended_value & ZEND_ISEMPTY);
45925 			goto isset_object_finish;
45926 		}
45927 	}
45928 
45929 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45930 		name = Z_STR_P(offset);
45931 	} else {
45932 		name = zval_try_get_tmp_string(offset, &tmp_name);
45933 		if (UNEXPECTED(!name)) {
45934 			result = 0;
45935 			goto isset_object_finish;
45936 		}
45937 	}
45938 
45939 	result =
45940 		(opline->extended_value & ZEND_ISEMPTY) ^
45941 		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));
45942 
45943 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45944 		zend_tmp_string_release(tmp_name);
45945 	}
45946 
45947 isset_object_finish:
45948 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45949 
45950 	ZEND_VM_SMART_BRANCH(result, 1);
45951 }
45952 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45953 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45954 {
45955 	USE_OPLINE
45956 
45957 	zval *key, *subject;
45958 	HashTable *ht;
45959 	zend_bool result;
45960 
45961 	SAVE_OPLINE();
45962 
45963 	key = EX_VAR(opline->op1.var);
45964 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45965 
45966 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
45967 array_key_exists_array:
45968 		ht = Z_ARRVAL_P(subject);
45969 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
45970 	} else {
45971 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
45972 			subject = Z_REFVAL_P(subject);
45973 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
45974 				goto array_key_exists_array;
45975 			}
45976 		}
45977 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
45978 		result = 0;
45979 	}
45980 
45981 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45982 
45983 	ZEND_VM_SMART_BRANCH(result, 1);
45984 }
45985 
45986 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45987 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45988 {
45989 	USE_OPLINE
45990 
45991 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
45992 
45993 	SAVE_OPLINE();
45994 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
45995 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45996 	}
45997 
45998 	/* Destroy the previously yielded value */
45999 	zval_ptr_dtor(&generator->value);
46000 
46001 	/* Destroy the previously yielded key */
46002 	zval_ptr_dtor(&generator->key);
46003 
46004 	/* Set the new yielded value */
46005 	if (IS_CV != IS_UNUSED) {
46006 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
46007 			/* Constants and temporary variables aren't yieldable by reference,
46008 			 * but we still allow them with a notice. */
46009 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
46010 				zval *value;
46011 
46012 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
46013 
46014 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46015 				ZVAL_COPY_VALUE(&generator->value, value);
46016 				if (IS_CV == IS_CONST) {
46017 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
46018 						Z_ADDREF(generator->value);
46019 					}
46020 				}
46021 			} else {
46022 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
46023 
46024 				/* If a function call result is yielded and the function did
46025 				 * not return by reference we throw a notice. */
46026 				do {
46027 					if (IS_CV == IS_VAR) {
46028 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
46029 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
46030 						 && !Z_ISREF_P(value_ptr)) {
46031 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
46032 							ZVAL_COPY(&generator->value, value_ptr);
46033 							break;
46034 						}
46035 					}
46036 					if (Z_ISREF_P(value_ptr)) {
46037 						Z_ADDREF_P(value_ptr);
46038 					} else {
46039 						ZVAL_MAKE_REF_EX(value_ptr, 2);
46040 					}
46041 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
46042 				} while (0);
46043 
46044 			}
46045 		} else {
46046 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46047 
46048 			/* Consts, temporary variables and references need copying */
46049 			if (IS_CV == IS_CONST) {
46050 				ZVAL_COPY_VALUE(&generator->value, value);
46051 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
46052 					Z_ADDREF(generator->value);
46053 				}
46054 			} else if (IS_CV == IS_TMP_VAR) {
46055 				ZVAL_COPY_VALUE(&generator->value, value);
46056             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
46057 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
46058 
46059 			} else {
46060 				ZVAL_COPY_VALUE(&generator->value, value);
46061 				if (IS_CV == IS_CV) {
46062 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
46063 				}
46064 			}
46065 		}
46066 	} else {
46067 		/* If no value was specified yield null */
46068 		ZVAL_NULL(&generator->value);
46069 	}
46070 
46071 	/* Set the new yielded key */
46072 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
46073 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46074 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
46075 			key = Z_REFVAL_P(key);
46076 		}
46077 		ZVAL_COPY(&generator->key, key);
46078 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46079 
46080 		if (Z_TYPE(generator->key) == IS_LONG
46081 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
46082 		) {
46083 			generator->largest_used_integer_key = Z_LVAL(generator->key);
46084 		}
46085 	} else {
46086 		/* If no key was specified we use auto-increment keys */
46087 		generator->largest_used_integer_key++;
46088 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
46089 	}
46090 
46091 	if (RETURN_VALUE_USED(opline)) {
46092 		/* If the return value of yield is used set the send
46093 		 * target and initialize it to NULL */
46094 		generator->send_target = EX_VAR(opline->result.var);
46095 		ZVAL_NULL(generator->send_target);
46096 	} else {
46097 		generator->send_target = NULL;
46098 	}
46099 
46100 	/* We increment to the next op, so we are at the correct position when the
46101 	 * generator is resumed. */
46102 	ZEND_VM_INC_OPCODE();
46103 
46104 	/* The GOTO VM uses a local opline variable. We need to set the opline
46105 	 * variable in execute_data so we don't resume at an old position. */
46106 	SAVE_OPLINE();
46107 
46108 	ZEND_VM_RETURN();
46109 }
46110 
ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46112 {
46113 	USE_OPLINE
46114 	zval *op1, *op2;
46115 	zend_bool result;
46116 
46117 	SAVE_OPLINE();
46118 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46119 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
46120 	result = fast_is_identical_function(op1, op2);
46121 
46122 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46123 	ZEND_VM_SMART_BRANCH(result, 1);
46124 }
46125 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46126 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46127 {
46128 	USE_OPLINE
46129 	zval *op1, *op2;
46130 	zend_bool result;
46131 
46132 	SAVE_OPLINE();
46133 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46134 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
46135 	result = fast_is_not_identical_function(op1, op2);
46136 
46137 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46138 	ZEND_VM_SMART_BRANCH(result, 1);
46139 }
46140 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46141 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46142 {
46143 	USE_OPLINE
46144 	zval *value;
46145 	zval *variable_ptr;
46146 
46147 	SAVE_OPLINE();
46148 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
46149 	variable_ptr = EX_VAR(opline->op1.var);
46150 
46151 	value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
46152 	if (UNEXPECTED(0)) {
46153 		ZVAL_COPY(EX_VAR(opline->result.var), value);
46154 	}
46155 
46156 	/* zend_assign_to_variable() always takes care of op2, never free it! */
46157 
46158 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46159 }
46160 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46162 {
46163 	USE_OPLINE
46164 	zval *value;
46165 	zval *variable_ptr;
46166 
46167 	SAVE_OPLINE();
46168 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
46169 	variable_ptr = EX_VAR(opline->op1.var);
46170 
46171 	value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
46172 	if (UNEXPECTED(1)) {
46173 		ZVAL_COPY(EX_VAR(opline->result.var), value);
46174 	}
46175 
46176 	/* zend_assign_to_variable() always takes care of op2, never free it! */
46177 
46178 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46179 }
46180 
ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46181 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46182 {
46183 	USE_OPLINE
46184 	zval *op1, *op2;
46185 	zend_bool result;
46186 
46187 	SAVE_OPLINE();
46188 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46189 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
46190 	result = fast_is_identical_function(op1, op2);
46191 
46192 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46193 	ZEND_VM_SMART_BRANCH(result, 1);
46194 }
46195 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46196 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46197 {
46198 	USE_OPLINE
46199 	zval *op1, *op2;
46200 	zend_bool result;
46201 
46202 	SAVE_OPLINE();
46203 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46204 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
46205 	result = fast_is_not_identical_function(op1, op2);
46206 
46207 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46208 	ZEND_VM_SMART_BRANCH(result, 1);
46209 }
46210 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46211 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46212 {
46213 	USE_OPLINE
46214 	zval *value;
46215 	zval *variable_ptr;
46216 
46217 	SAVE_OPLINE();
46218 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46219 	variable_ptr = EX_VAR(opline->op1.var);
46220 
46221 	value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
46222 	if (UNEXPECTED(0)) {
46223 		ZVAL_COPY(EX_VAR(opline->result.var), value);
46224 	}
46225 
46226 	/* zend_assign_to_variable() always takes care of op2, never free it! */
46227 
46228 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46229 }
46230 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46231 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46232 {
46233 	USE_OPLINE
46234 	zval *value;
46235 	zval *variable_ptr;
46236 
46237 	SAVE_OPLINE();
46238 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46239 	variable_ptr = EX_VAR(opline->op1.var);
46240 
46241 	value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
46242 	if (UNEXPECTED(1)) {
46243 		ZVAL_COPY(EX_VAR(opline->result.var), value);
46244 	}
46245 
46246 	/* zend_assign_to_variable() always takes care of op2, never free it! */
46247 
46248 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46249 }
46250 
ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46251 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46252 {
46253 	USE_OPLINE
46254 	zval *variable_ptr;
46255 	zval *value_ptr;
46256 
46257 	SAVE_OPLINE();
46258 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46259 	variable_ptr = EX_VAR(opline->op1.var);
46260 
46261 	if (IS_CV == IS_VAR &&
46262 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
46263 
46264 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
46265 		variable_ptr = &EG(uninitialized_zval);
46266 	} else if (IS_VAR == IS_VAR &&
46267 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
46268 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
46269 
46270 		variable_ptr = zend_wrong_assign_to_variable_reference(
46271 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
46272 	} else {
46273 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
46274 	}
46275 
46276 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46277 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
46278 	}
46279 
46280 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46281 
46282 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46283 }
46284 
ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46285 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46286 {
46287 	USE_OPLINE
46288 	zval *expr;
46289 	zend_bool result;
46290 
46291 	SAVE_OPLINE();
46292 	expr = EX_VAR(opline->op1.var);
46293 
46294 try_instanceof:
46295 	if (Z_TYPE_P(expr) == IS_OBJECT) {
46296 		zend_class_entry *ce;
46297 
46298 		if (IS_VAR == IS_CONST) {
46299 			ce = CACHED_PTR(opline->extended_value);
46300 			if (UNEXPECTED(ce == NULL)) {
46301 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
46302 				if (EXPECTED(ce)) {
46303 					CACHE_PTR(opline->extended_value, ce);
46304 				}
46305 			}
46306 		} else if (IS_VAR == IS_UNUSED) {
46307 			ce = zend_fetch_class(NULL, opline->op2.num);
46308 			if (UNEXPECTED(ce == NULL)) {
46309 
46310 				ZVAL_UNDEF(EX_VAR(opline->result.var));
46311 				HANDLE_EXCEPTION();
46312 			}
46313 		} else {
46314 			ce = Z_CE_P(EX_VAR(opline->op2.var));
46315 		}
46316 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
46317 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
46318 		expr = Z_REFVAL_P(expr);
46319 		goto try_instanceof;
46320 	} else {
46321 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
46322 			ZVAL_UNDEFINED_OP1();
46323 		}
46324 		result = 0;
46325 	}
46326 
46327 	ZEND_VM_SMART_BRANCH(result, 1);
46328 }
46329 
ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46330 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46331 {
46332 	USE_OPLINE
46333 	zval *var_ptr;
46334 	zval *value, *container, *dim;
46335 
46336 	SAVE_OPLINE();
46337 	container = EX_VAR(opline->op1.var);
46338 
46339 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
46340 assign_dim_op_array:
46341 		SEPARATE_ARRAY(container);
46342 assign_dim_op_new_array:
46343 		dim = NULL;
46344 		if (IS_UNUSED == IS_UNUSED) {
46345 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
46346 			if (UNEXPECTED(!var_ptr)) {
46347 				zend_cannot_add_element();
46348 				goto assign_dim_op_ret_null;
46349 			}
46350 		} else {
46351 			if (IS_UNUSED == IS_CONST) {
46352 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
46353 			} else {
46354 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
46355 			}
46356 			if (UNEXPECTED(!var_ptr)) {
46357 				goto assign_dim_op_ret_null;
46358 			}
46359 		}
46360 
46361 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
46362 
46363 		do {
46364 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
46365 				zend_reference *ref = Z_REF_P(var_ptr);
46366 				var_ptr = Z_REFVAL_P(var_ptr);
46367 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
46368 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
46369 					break;
46370 				}
46371 			}
46372 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
46373 		} while (0);
46374 
46375 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46376 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
46377 		}
46378 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
46379 	} else {
46380 		if (EXPECTED(Z_ISREF_P(container))) {
46381 			container = Z_REFVAL_P(container);
46382 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
46383 				goto assign_dim_op_array;
46384 			}
46385 		}
46386 
46387 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
46388 			zend_object *obj = Z_OBJ_P(container);
46389 
46390 			GC_ADDREF(obj);
46391 			dim = NULL;
46392 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46393 				dim = ZVAL_UNDEFINED_OP2();
46394 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46395 				dim++;
46396 			}
46397 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
46398 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46399 				zend_objects_store_del(obj);
46400 			}
46401 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
46402 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
46403 				ZVAL_UNDEFINED_OP1();
46404 			}
46405 			ZVAL_ARR(container, zend_new_array(8));
46406 			goto assign_dim_op_new_array;
46407 		} else {
46408 			dim = NULL;
46409 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
46410 assign_dim_op_ret_null:
46411 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
46412 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46413 				ZVAL_NULL(EX_VAR(opline->result.var));
46414 			}
46415 		}
46416 	}
46417 
46418 
46419 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46420 }
46421 
zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)46422 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)
46423 {
46424 	USE_OPLINE
46425 	zval *varname;
46426 	zval *retval;
46427 	zend_string *name, *tmp_name;
46428 	HashTable *target_symbol_table;
46429 
46430 	SAVE_OPLINE();
46431 	varname = EX_VAR(opline->op1.var);
46432 
46433 	if (IS_CV == IS_CONST) {
46434 		name = Z_STR_P(varname);
46435 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
46436 		name = Z_STR_P(varname);
46437 		tmp_name = NULL;
46438 	} else {
46439 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
46440 			ZVAL_UNDEFINED_OP1();
46441 		}
46442 		name = zval_try_get_tmp_string(varname, &tmp_name);
46443 		if (UNEXPECTED(!name)) {
46444 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
46445 
46446 			}
46447 			ZVAL_UNDEF(EX_VAR(opline->result.var));
46448 			HANDLE_EXCEPTION();
46449 		}
46450 	}
46451 
46452 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
46453 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
46454 	if (retval == NULL) {
46455 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
46456 fetch_this:
46457 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
46458 			if (IS_CV != IS_CONST) {
46459 				zend_tmp_string_release(tmp_name);
46460 			}
46461 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46462 		}
46463 		if (type == BP_VAR_W) {
46464 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
46465 		} else if (type == BP_VAR_IS) {
46466 			retval = &EG(uninitialized_zval);
46467 		} else {
46468 			zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(name));
46469 			if (type == BP_VAR_RW) {
46470 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
46471 			} else {
46472 				retval = &EG(uninitialized_zval);
46473 			}
46474 		}
46475 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
46476 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
46477 		retval = Z_INDIRECT_P(retval);
46478 		if (Z_TYPE_P(retval) == IS_UNDEF) {
46479 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
46480 				goto fetch_this;
46481 			}
46482 			if (type == BP_VAR_W) {
46483 				ZVAL_NULL(retval);
46484 			} else if (type == BP_VAR_IS) {
46485 				retval = &EG(uninitialized_zval);
46486 			} else {
46487 				zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(name));
46488 				if (type == BP_VAR_RW) {
46489 					ZVAL_NULL(retval);
46490 				} else {
46491 					retval = &EG(uninitialized_zval);
46492 				}
46493 			}
46494 		}
46495 	}
46496 
46497 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
46498 
46499 	}
46500 
46501 	if (IS_CV != IS_CONST) {
46502 		zend_tmp_string_release(tmp_name);
46503 	}
46504 
46505 	ZEND_ASSERT(retval != NULL);
46506 	if (type == BP_VAR_R || type == BP_VAR_IS) {
46507 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
46508 	} else {
46509 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
46510 	}
46511 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46512 }
46513 
ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46514 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46515 {
46516 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
46517 }
46518 
ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46519 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46520 {
46521 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
46522 }
46523 
ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46524 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46525 {
46526 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
46527 }
46528 
ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46530 {
46531 	int fetch_type =
46532 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
46533 			BP_VAR_W : BP_VAR_R;
46534 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
46535 }
46536 
ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46537 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46538 {
46539 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
46540 }
46541 
ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46542 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46543 {
46544 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
46545 }
46546 
46547 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46548 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46549 {
46550 	USE_OPLINE
46551 	zval *container;
46552 
46553 	SAVE_OPLINE();
46554 	container = EX_VAR(opline->op1.var);
46555 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
46556 
46557 	if (IS_CV == IS_VAR) {
46558 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
46559 	}
46560 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46561 }
46562 
ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46563 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46564 {
46565 	USE_OPLINE
46566 	zval *container;
46567 
46568 	SAVE_OPLINE();
46569 	container = EX_VAR(opline->op1.var);
46570 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
46571 
46572 	if (IS_CV == IS_VAR) {
46573 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
46574 	}
46575 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46576 }
46577 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46578 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46579 {
46580 #if 0
46581 	USE_OPLINE
46582 #endif
46583 
46584 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
46585         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
46586 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46587         }
46588 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46589 	} else {
46590 		if (IS_UNUSED == IS_UNUSED) {
46591 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46592 		}
46593 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46594 	}
46595 }
46596 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46597 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46598 {
46599 	USE_OPLINE
46600 	zval *object_ptr, *orig_object_ptr;
46601 	zval *value;
46602 	zval *variable_ptr;
46603 	zval *dim;
46604 
46605 	SAVE_OPLINE();
46606 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
46607 
46608 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46609 try_assign_dim_array:
46610 		SEPARATE_ARRAY(object_ptr);
46611 		if (IS_UNUSED == IS_UNUSED) {
46612 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
46613 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
46614 				HashTable *ht = Z_ARRVAL_P(object_ptr);
46615 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46616 					GC_ADDREF(ht);
46617 				}
46618 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46619 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
46620 					zend_array_destroy(ht);
46621 					goto assign_dim_error;
46622 				}
46623 			}
46624 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
46625 				ZVAL_DEREF(value);
46626 			}
46627 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
46628 			if (UNEXPECTED(variable_ptr == NULL)) {
46629 				zend_cannot_add_element();
46630 				goto assign_dim_error;
46631 			} else if (IS_CONST == IS_CV) {
46632 				if (Z_REFCOUNTED_P(value)) {
46633 					Z_ADDREF_P(value);
46634 				}
46635 			} else if (IS_CONST == IS_VAR) {
46636 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
46637 				if (value != free_op_data) {
46638 					if (Z_REFCOUNTED_P(value)) {
46639 						Z_ADDREF_P(value);
46640 					}
46641 					zval_ptr_dtor_nogc(free_op_data);
46642 				}
46643 			} else if (IS_CONST == IS_CONST) {
46644 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
46645 					Z_ADDREF_P(value);
46646 				}
46647 			}
46648 		} else {
46649 			dim = NULL;
46650 			if (IS_UNUSED == IS_CONST) {
46651 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46652 			} else {
46653 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46654 			}
46655 			if (UNEXPECTED(variable_ptr == NULL)) {
46656 				goto assign_dim_error;
46657 			}
46658 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
46659 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
46660 		}
46661 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46662 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46663 		}
46664 	} else {
46665 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46666 			object_ptr = Z_REFVAL_P(object_ptr);
46667 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46668 				goto try_assign_dim_array;
46669 			}
46670 		}
46671 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46672 			zend_object *obj = Z_OBJ_P(object_ptr);
46673 
46674 			GC_ADDREF(obj);
46675 			dim = NULL;
46676 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46677 				dim = ZVAL_UNDEFINED_OP2();
46678 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46679 				dim++;
46680 			}
46681 
46682 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
46683 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
46684 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46685 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
46686 				ZVAL_DEREF(value);
46687 			}
46688 
46689 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
46690 
46691 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46692 				zend_objects_store_del(obj);
46693 			}
46694 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46695 			if (IS_UNUSED == IS_UNUSED) {
46696 				zend_use_new_element_for_string();
46697 
46698 				UNDEF_RESULT();
46699 			} else {
46700 				dim = NULL;
46701 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
46702 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46703 
46704 			}
46705 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46706 			if (Z_ISREF_P(orig_object_ptr)
46707 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46708 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46709 				dim = NULL;
46710 
46711 				UNDEF_RESULT();
46712 			} else {
46713 				ZVAL_ARR(object_ptr, zend_new_array(8));
46714 				goto try_assign_dim_array;
46715 			}
46716 		} else {
46717 			zend_use_scalar_as_array();
46718 			dim = NULL;
46719 assign_dim_error:
46720 
46721 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46722 				ZVAL_NULL(EX_VAR(opline->result.var));
46723 			}
46724 		}
46725 	}
46726 	if (IS_UNUSED != IS_UNUSED) {
46727 
46728 	}
46729 
46730 	/* assign_dim has two opcodes! */
46731 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46732 }
46733 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46734 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46735 {
46736 	USE_OPLINE
46737 	zval *object_ptr, *orig_object_ptr;
46738 	zval *value;
46739 	zval *variable_ptr;
46740 	zval *dim;
46741 
46742 	SAVE_OPLINE();
46743 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
46744 
46745 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46746 try_assign_dim_array:
46747 		SEPARATE_ARRAY(object_ptr);
46748 		if (IS_UNUSED == IS_UNUSED) {
46749 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46750 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
46751 				HashTable *ht = Z_ARRVAL_P(object_ptr);
46752 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46753 					GC_ADDREF(ht);
46754 				}
46755 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46756 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
46757 					zend_array_destroy(ht);
46758 					goto assign_dim_error;
46759 				}
46760 			}
46761 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
46762 				ZVAL_DEREF(value);
46763 			}
46764 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
46765 			if (UNEXPECTED(variable_ptr == NULL)) {
46766 				zend_cannot_add_element();
46767 				goto assign_dim_error;
46768 			} else if (IS_TMP_VAR == IS_CV) {
46769 				if (Z_REFCOUNTED_P(value)) {
46770 					Z_ADDREF_P(value);
46771 				}
46772 			} else if (IS_TMP_VAR == IS_VAR) {
46773 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
46774 				if (value != free_op_data) {
46775 					if (Z_REFCOUNTED_P(value)) {
46776 						Z_ADDREF_P(value);
46777 					}
46778 					zval_ptr_dtor_nogc(free_op_data);
46779 				}
46780 			} else if (IS_TMP_VAR == IS_CONST) {
46781 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
46782 					Z_ADDREF_P(value);
46783 				}
46784 			}
46785 		} else {
46786 			dim = NULL;
46787 			if (IS_UNUSED == IS_CONST) {
46788 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46789 			} else {
46790 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46791 			}
46792 			if (UNEXPECTED(variable_ptr == NULL)) {
46793 				goto assign_dim_error;
46794 			}
46795 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46796 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
46797 		}
46798 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46799 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46800 		}
46801 	} else {
46802 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46803 			object_ptr = Z_REFVAL_P(object_ptr);
46804 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46805 				goto try_assign_dim_array;
46806 			}
46807 		}
46808 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46809 			zend_object *obj = Z_OBJ_P(object_ptr);
46810 
46811 			GC_ADDREF(obj);
46812 			dim = NULL;
46813 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46814 				dim = ZVAL_UNDEFINED_OP2();
46815 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46816 				dim++;
46817 			}
46818 
46819 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46820 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
46821 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46822 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
46823 				ZVAL_DEREF(value);
46824 			}
46825 
46826 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
46827 
46828 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46829 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46830 				zend_objects_store_del(obj);
46831 			}
46832 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46833 			if (IS_UNUSED == IS_UNUSED) {
46834 				zend_use_new_element_for_string();
46835 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46836 				UNDEF_RESULT();
46837 			} else {
46838 				dim = NULL;
46839 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46840 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46841 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46842 			}
46843 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46844 			if (Z_ISREF_P(orig_object_ptr)
46845 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46846 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46847 				dim = NULL;
46848 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46849 				UNDEF_RESULT();
46850 			} else {
46851 				ZVAL_ARR(object_ptr, zend_new_array(8));
46852 				goto try_assign_dim_array;
46853 			}
46854 		} else {
46855 			zend_use_scalar_as_array();
46856 			dim = NULL;
46857 assign_dim_error:
46858 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46859 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46860 				ZVAL_NULL(EX_VAR(opline->result.var));
46861 			}
46862 		}
46863 	}
46864 	if (IS_UNUSED != IS_UNUSED) {
46865 
46866 	}
46867 
46868 	/* assign_dim has two opcodes! */
46869 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46870 }
46871 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46872 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46873 {
46874 	USE_OPLINE
46875 	zval *object_ptr, *orig_object_ptr;
46876 	zval *value;
46877 	zval *variable_ptr;
46878 	zval *dim;
46879 
46880 	SAVE_OPLINE();
46881 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
46882 
46883 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46884 try_assign_dim_array:
46885 		SEPARATE_ARRAY(object_ptr);
46886 		if (IS_UNUSED == IS_UNUSED) {
46887 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46888 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
46889 				HashTable *ht = Z_ARRVAL_P(object_ptr);
46890 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46891 					GC_ADDREF(ht);
46892 				}
46893 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46894 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
46895 					zend_array_destroy(ht);
46896 					goto assign_dim_error;
46897 				}
46898 			}
46899 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
46900 				ZVAL_DEREF(value);
46901 			}
46902 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
46903 			if (UNEXPECTED(variable_ptr == NULL)) {
46904 				zend_cannot_add_element();
46905 				goto assign_dim_error;
46906 			} else if (IS_VAR == IS_CV) {
46907 				if (Z_REFCOUNTED_P(value)) {
46908 					Z_ADDREF_P(value);
46909 				}
46910 			} else if (IS_VAR == IS_VAR) {
46911 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
46912 				if (value != free_op_data) {
46913 					if (Z_REFCOUNTED_P(value)) {
46914 						Z_ADDREF_P(value);
46915 					}
46916 					zval_ptr_dtor_nogc(free_op_data);
46917 				}
46918 			} else if (IS_VAR == IS_CONST) {
46919 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
46920 					Z_ADDREF_P(value);
46921 				}
46922 			}
46923 		} else {
46924 			dim = NULL;
46925 			if (IS_UNUSED == IS_CONST) {
46926 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46927 			} else {
46928 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46929 			}
46930 			if (UNEXPECTED(variable_ptr == NULL)) {
46931 				goto assign_dim_error;
46932 			}
46933 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46934 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
46935 		}
46936 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46937 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46938 		}
46939 	} else {
46940 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46941 			object_ptr = Z_REFVAL_P(object_ptr);
46942 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46943 				goto try_assign_dim_array;
46944 			}
46945 		}
46946 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46947 			zend_object *obj = Z_OBJ_P(object_ptr);
46948 
46949 			GC_ADDREF(obj);
46950 			dim = NULL;
46951 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46952 				dim = ZVAL_UNDEFINED_OP2();
46953 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46954 				dim++;
46955 			}
46956 
46957 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46958 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
46959 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46960 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
46961 				ZVAL_DEREF(value);
46962 			}
46963 
46964 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
46965 
46966 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46967 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46968 				zend_objects_store_del(obj);
46969 			}
46970 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46971 			if (IS_UNUSED == IS_UNUSED) {
46972 				zend_use_new_element_for_string();
46973 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46974 				UNDEF_RESULT();
46975 			} else {
46976 				dim = NULL;
46977 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46978 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46979 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46980 			}
46981 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46982 			if (Z_ISREF_P(orig_object_ptr)
46983 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46984 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46985 				dim = NULL;
46986 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46987 				UNDEF_RESULT();
46988 			} else {
46989 				ZVAL_ARR(object_ptr, zend_new_array(8));
46990 				goto try_assign_dim_array;
46991 			}
46992 		} else {
46993 			zend_use_scalar_as_array();
46994 			dim = NULL;
46995 assign_dim_error:
46996 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46997 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46998 				ZVAL_NULL(EX_VAR(opline->result.var));
46999 			}
47000 		}
47001 	}
47002 	if (IS_UNUSED != IS_UNUSED) {
47003 
47004 	}
47005 
47006 	/* assign_dim has two opcodes! */
47007 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47008 }
47009 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47010 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47011 {
47012 	USE_OPLINE
47013 	zval *object_ptr, *orig_object_ptr;
47014 	zval *value;
47015 	zval *variable_ptr;
47016 	zval *dim;
47017 
47018 	SAVE_OPLINE();
47019 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
47020 
47021 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47022 try_assign_dim_array:
47023 		SEPARATE_ARRAY(object_ptr);
47024 		if (IS_UNUSED == IS_UNUSED) {
47025 			value = EX_VAR((opline+1)->op1.var);
47026 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
47027 				HashTable *ht = Z_ARRVAL_P(object_ptr);
47028 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
47029 					GC_ADDREF(ht);
47030 				}
47031 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47032 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
47033 					zend_array_destroy(ht);
47034 					goto assign_dim_error;
47035 				}
47036 			}
47037 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
47038 				ZVAL_DEREF(value);
47039 			}
47040 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
47041 			if (UNEXPECTED(variable_ptr == NULL)) {
47042 				zend_cannot_add_element();
47043 				goto assign_dim_error;
47044 			} else if (IS_CV == IS_CV) {
47045 				if (Z_REFCOUNTED_P(value)) {
47046 					Z_ADDREF_P(value);
47047 				}
47048 			} else if (IS_CV == IS_VAR) {
47049 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
47050 				if (value != free_op_data) {
47051 					if (Z_REFCOUNTED_P(value)) {
47052 						Z_ADDREF_P(value);
47053 					}
47054 					zval_ptr_dtor_nogc(free_op_data);
47055 				}
47056 			} else if (IS_CV == IS_CONST) {
47057 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
47058 					Z_ADDREF_P(value);
47059 				}
47060 			}
47061 		} else {
47062 			dim = NULL;
47063 			if (IS_UNUSED == IS_CONST) {
47064 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47065 			} else {
47066 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
47067 			}
47068 			if (UNEXPECTED(variable_ptr == NULL)) {
47069 				goto assign_dim_error;
47070 			}
47071 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
47072 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
47073 		}
47074 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47075 			ZVAL_COPY(EX_VAR(opline->result.var), value);
47076 		}
47077 	} else {
47078 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
47079 			object_ptr = Z_REFVAL_P(object_ptr);
47080 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
47081 				goto try_assign_dim_array;
47082 			}
47083 		}
47084 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
47085 			zend_object *obj = Z_OBJ_P(object_ptr);
47086 
47087 			GC_ADDREF(obj);
47088 			dim = NULL;
47089 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
47090 				dim = ZVAL_UNDEFINED_OP2();
47091 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
47092 				dim++;
47093 			}
47094 
47095 			value = EX_VAR((opline+1)->op1.var);
47096 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
47097 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
47098 			} else if (IS_CV & (IS_CV|IS_VAR)) {
47099 				ZVAL_DEREF(value);
47100 			}
47101 
47102 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
47103 
47104 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
47105 				zend_objects_store_del(obj);
47106 			}
47107 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
47108 			if (IS_UNUSED == IS_UNUSED) {
47109 				zend_use_new_element_for_string();
47110 
47111 				UNDEF_RESULT();
47112 			} else {
47113 				dim = NULL;
47114 				value = EX_VAR((opline+1)->op1.var);
47115 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
47116 
47117 			}
47118 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
47119 			if (Z_ISREF_P(orig_object_ptr)
47120 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
47121 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
47122 				dim = NULL;
47123 
47124 				UNDEF_RESULT();
47125 			} else {
47126 				ZVAL_ARR(object_ptr, zend_new_array(8));
47127 				goto try_assign_dim_array;
47128 			}
47129 		} else {
47130 			zend_use_scalar_as_array();
47131 			dim = NULL;
47132 assign_dim_error:
47133 
47134 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47135 				ZVAL_NULL(EX_VAR(opline->result.var));
47136 			}
47137 		}
47138 	}
47139 	if (IS_UNUSED != IS_UNUSED) {
47140 
47141 	}
47142 
47143 	/* assign_dim has two opcodes! */
47144 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47145 }
47146 
ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47147 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47148 {
47149 	if (IS_CV == IS_UNUSED) {
47150 		SAVE_OPLINE();
47151 		zend_verify_missing_return_type(EX(func));
47152 		HANDLE_EXCEPTION();
47153 	} else {
47154 /* prevents "undefined variable opline" errors */
47155 #if 0 || (IS_CV != IS_UNUSED)
47156 		USE_OPLINE
47157 		zval *retval_ref, *retval_ptr;
47158 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
47159 		retval_ref = retval_ptr = EX_VAR(opline->op1.var);
47160 
47161 		if (IS_CV == IS_CONST) {
47162 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
47163 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
47164 		} else if (IS_CV == IS_VAR) {
47165 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
47166 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
47167 			}
47168 			ZVAL_DEREF(retval_ptr);
47169 		} else if (IS_CV == IS_CV) {
47170 			ZVAL_DEREF(retval_ptr);
47171 		}
47172 
47173 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
47174 			ZEND_VM_NEXT_OPCODE();
47175 		}
47176 
47177 		if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
47178 			SAVE_OPLINE();
47179 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
47180 			if (UNEXPECTED(EG(exception))) {
47181 				HANDLE_EXCEPTION();
47182 			}
47183 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
47184 				ZEND_VM_NEXT_OPCODE();
47185 			}
47186 		}
47187 
47188 		zend_reference *ref = NULL;
47189 		void *cache_slot = CACHE_ADDR(opline->op2.num);
47190 		if (UNEXPECTED(retval_ref != retval_ptr)) {
47191 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
47192 				ref = Z_REF_P(retval_ref);
47193 			} else {
47194 				/* A cast might happen - unwrap the reference if this is a by-value return */
47195 				if (Z_REFCOUNT_P(retval_ref) == 1) {
47196 					ZVAL_UNREF(retval_ref);
47197 				} else {
47198 					Z_DELREF_P(retval_ref);
47199 					ZVAL_COPY(retval_ref, retval_ptr);
47200 				}
47201 				retval_ptr = retval_ref;
47202 			}
47203 		}
47204 
47205 		SAVE_OPLINE();
47206 		if (UNEXPECTED(!zend_check_type_slow(ret_info->type, retval_ptr, ref, cache_slot, NULL, 1, 0))) {
47207 			zend_verify_return_error(EX(func), retval_ptr);
47208 			HANDLE_EXCEPTION();
47209 		}
47210 		ZEND_VM_NEXT_OPCODE();
47211 #endif
47212 	}
47213 }
47214 
ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47215 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47216 {
47217 	USE_OPLINE
47218 	zval *varptr, *arg;
47219 
47220 	if (IS_UNUSED == IS_CONST) {
47221 		SAVE_OPLINE();
47222 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
47223 		uint32_t arg_num;
47224 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
47225 		if (UNEXPECTED(!arg)) {
47226 
47227 			HANDLE_EXCEPTION();
47228 		}
47229 	} else {
47230 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
47231 	}
47232 
47233 	varptr = EX_VAR(opline->op1.var);
47234 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
47235 		SAVE_OPLINE();
47236 		ZVAL_UNDEFINED_OP1();
47237 		ZVAL_NULL(arg);
47238 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47239 	}
47240 
47241 	if (IS_CV == IS_CV) {
47242 		ZVAL_COPY_DEREF(arg, varptr);
47243 	} else /* if (IS_CV == IS_VAR) */ {
47244 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
47245 			zend_refcounted *ref = Z_COUNTED_P(varptr);
47246 
47247 			varptr = Z_REFVAL_P(varptr);
47248 			ZVAL_COPY_VALUE(arg, varptr);
47249 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47250 				efree_size(ref, sizeof(zend_reference));
47251 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
47252 				Z_ADDREF_P(arg);
47253 			}
47254 		} else {
47255 			ZVAL_COPY_VALUE(arg, varptr);
47256 		}
47257 	}
47258 
47259 	ZEND_VM_NEXT_OPCODE();
47260 }
47261 
ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47262 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47263 {
47264 	USE_OPLINE
47265 	zval *varptr, *arg;
47266 
47267 	SAVE_OPLINE();
47268 	if (IS_UNUSED == IS_CONST) {
47269 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
47270 		uint32_t arg_num;
47271 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
47272 		if (UNEXPECTED(!arg)) {
47273 
47274 			HANDLE_EXCEPTION();
47275 		}
47276 	} else {
47277 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
47278 	}
47279 
47280 	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47281 	if (Z_ISREF_P(varptr)) {
47282 		Z_ADDREF_P(varptr);
47283 	} else {
47284 		ZVAL_MAKE_REF_EX(varptr, 2);
47285 	}
47286 	ZVAL_REF(arg, Z_REF_P(varptr));
47287 
47288 	ZEND_VM_NEXT_OPCODE();
47289 }
47290 
ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47291 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47292 {
47293 	USE_OPLINE
47294 	zval *varptr, *arg;
47295 	uint32_t arg_num;
47296 
47297 	if (IS_UNUSED == IS_CONST) {
47298 		SAVE_OPLINE();
47299 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
47300 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
47301 		if (UNEXPECTED(!arg)) {
47302 
47303 			HANDLE_EXCEPTION();
47304 		}
47305 	} else {
47306 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
47307 		arg_num = opline->op2.num;
47308 	}
47309 
47310 	if (EXPECTED(0)) {
47311 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
47312 			goto send_var_by_ref;
47313 		}
47314 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
47315 send_var_by_ref:
47316 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47317 		if (Z_ISREF_P(varptr)) {
47318 			Z_ADDREF_P(varptr);
47319 		} else {
47320 			ZVAL_MAKE_REF_EX(varptr, 2);
47321 		}
47322 		ZVAL_REF(arg, Z_REF_P(varptr));
47323 
47324 		ZEND_VM_NEXT_OPCODE();
47325 	}
47326 
47327 	varptr = EX_VAR(opline->op1.var);
47328 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
47329 		SAVE_OPLINE();
47330 		ZVAL_UNDEFINED_OP1();
47331 		ZVAL_NULL(arg);
47332 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47333 	}
47334 
47335 	if (IS_CV == IS_CV) {
47336 		ZVAL_COPY_DEREF(arg, varptr);
47337 	} else /* if (IS_CV == IS_VAR) */ {
47338 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
47339 			zend_refcounted *ref = Z_COUNTED_P(varptr);
47340 
47341 			varptr = Z_REFVAL_P(varptr);
47342 			ZVAL_COPY_VALUE(arg, varptr);
47343 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47344 				efree_size(ref, sizeof(zend_reference));
47345 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
47346 				Z_ADDREF_P(arg);
47347 			}
47348 		} else {
47349 			ZVAL_COPY_VALUE(arg, varptr);
47350 		}
47351 	}
47352 
47353 	ZEND_VM_NEXT_OPCODE();
47354 }
47355 
ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47356 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47357 {
47358 	USE_OPLINE
47359 	zval *varptr, *arg;
47360 	uint32_t arg_num;
47361 
47362 	if (IS_UNUSED == IS_CONST) {
47363 		SAVE_OPLINE();
47364 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
47365 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
47366 		if (UNEXPECTED(!arg)) {
47367 
47368 			HANDLE_EXCEPTION();
47369 		}
47370 	} else {
47371 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
47372 		arg_num = opline->op2.num;
47373 	}
47374 
47375 	if (EXPECTED(1)) {
47376 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
47377 			goto send_var_by_ref;
47378 		}
47379 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
47380 send_var_by_ref:
47381 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47382 		if (Z_ISREF_P(varptr)) {
47383 			Z_ADDREF_P(varptr);
47384 		} else {
47385 			ZVAL_MAKE_REF_EX(varptr, 2);
47386 		}
47387 		ZVAL_REF(arg, Z_REF_P(varptr));
47388 
47389 		ZEND_VM_NEXT_OPCODE();
47390 	}
47391 
47392 	varptr = EX_VAR(opline->op1.var);
47393 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
47394 		SAVE_OPLINE();
47395 		ZVAL_UNDEFINED_OP1();
47396 		ZVAL_NULL(arg);
47397 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47398 	}
47399 
47400 	if (IS_CV == IS_CV) {
47401 		ZVAL_COPY_DEREF(arg, varptr);
47402 	} else /* if (IS_CV == IS_VAR) */ {
47403 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
47404 			zend_refcounted *ref = Z_COUNTED_P(varptr);
47405 
47406 			varptr = Z_REFVAL_P(varptr);
47407 			ZVAL_COPY_VALUE(arg, varptr);
47408 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47409 				efree_size(ref, sizeof(zend_reference));
47410 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
47411 				Z_ADDREF_P(arg);
47412 			}
47413 		} else {
47414 			ZVAL_COPY_VALUE(arg, varptr);
47415 		}
47416 	}
47417 
47418 	ZEND_VM_NEXT_OPCODE();
47419 }
47420 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47421 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47422 {
47423 	USE_OPLINE
47424 	zval *expr_ptr, new_expr;
47425 
47426 	SAVE_OPLINE();
47427 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
47428 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
47429 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47430 		if (Z_ISREF_P(expr_ptr)) {
47431 			Z_ADDREF_P(expr_ptr);
47432 		} else {
47433 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
47434 		}
47435 
47436 	} else {
47437 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47438 		if (IS_CV == IS_TMP_VAR) {
47439 			/* pass */
47440 		} else if (IS_CV == IS_CONST) {
47441 			Z_TRY_ADDREF_P(expr_ptr);
47442 		} else if (IS_CV == IS_CV) {
47443 			ZVAL_DEREF(expr_ptr);
47444 			Z_TRY_ADDREF_P(expr_ptr);
47445 		} else /* if (IS_CV == IS_VAR) */ {
47446 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
47447 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
47448 
47449 				expr_ptr = Z_REFVAL_P(expr_ptr);
47450 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47451 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
47452 					expr_ptr = &new_expr;
47453 					efree_size(ref, sizeof(zend_reference));
47454 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
47455 					Z_ADDREF_P(expr_ptr);
47456 				}
47457 			}
47458 		}
47459 	}
47460 
47461 	if (IS_UNUSED != IS_UNUSED) {
47462 		zval *offset = NULL;
47463 		zend_string *str;
47464 		zend_ulong hval;
47465 
47466 add_again:
47467 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
47468 			str = Z_STR_P(offset);
47469 			if (IS_UNUSED != IS_CONST) {
47470 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
47471 					goto num_index;
47472 				}
47473 			}
47474 str_index:
47475 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
47476 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
47477 			hval = Z_LVAL_P(offset);
47478 num_index:
47479 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
47480 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
47481 			offset = Z_REFVAL_P(offset);
47482 			goto add_again;
47483 		} else if (Z_TYPE_P(offset) == IS_NULL) {
47484 			str = ZSTR_EMPTY_ALLOC();
47485 			goto str_index;
47486 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
47487 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
47488 			goto num_index;
47489 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
47490 			hval = 0;
47491 			goto num_index;
47492 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
47493 			hval = 1;
47494 			goto num_index;
47495 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
47496 			zend_use_resource_as_offset(offset);
47497 			hval = Z_RES_HANDLE_P(offset);
47498 			goto num_index;
47499 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
47500 			ZVAL_UNDEFINED_OP2();
47501 			str = ZSTR_EMPTY_ALLOC();
47502 			goto str_index;
47503 		} else {
47504 			zend_illegal_offset();
47505 			zval_ptr_dtor_nogc(expr_ptr);
47506 		}
47507 
47508 	} else {
47509 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
47510 			zend_cannot_add_element();
47511 			zval_ptr_dtor_nogc(expr_ptr);
47512 		}
47513 	}
47514 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47515 }
47516 
ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47517 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47518 {
47519 	zval *array;
47520 	uint32_t size;
47521 	USE_OPLINE
47522 
47523 	array = EX_VAR(opline->result.var);
47524 	if (IS_CV != IS_UNUSED) {
47525 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
47526 		ZVAL_ARR(array, zend_new_array(size));
47527 		/* Explicitly initialize array as not-packed if flag is set */
47528 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
47529 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
47530 		}
47531 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47532 	} else {
47533 		ZVAL_ARR(array, zend_new_array(0));
47534 		ZEND_VM_NEXT_OPCODE();
47535 	}
47536 }
47537 
ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47538 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47539 {
47540 	USE_OPLINE
47541 	zval *var = EX_VAR(opline->op1.var);
47542 
47543 	if (Z_REFCOUNTED_P(var)) {
47544 		zend_refcounted *garbage = Z_COUNTED_P(var);
47545 
47546 		ZVAL_UNDEF(var);
47547 		SAVE_OPLINE();
47548 		if (!GC_DELREF(garbage)) {
47549 			rc_dtor_func(garbage);
47550 		} else {
47551 			gc_check_possible_root(garbage);
47552 		}
47553 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47554 	} else {
47555 		ZVAL_UNDEF(var);
47556 	}
47557 	ZEND_VM_NEXT_OPCODE();
47558 }
47559 
ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47560 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47561 {
47562 	USE_OPLINE
47563 	zval *varname;
47564 	zend_string *name, *tmp_name;
47565 	HashTable *target_symbol_table;
47566 
47567 	SAVE_OPLINE();
47568 
47569 	varname = EX_VAR(opline->op1.var);
47570 
47571 	if (IS_CV == IS_CONST) {
47572 		name = Z_STR_P(varname);
47573 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
47574 		name = Z_STR_P(varname);
47575 		tmp_name = NULL;
47576 	} else {
47577 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
47578 			varname = ZVAL_UNDEFINED_OP1();
47579 		}
47580 		name = zval_try_get_tmp_string(varname, &tmp_name);
47581 		if (UNEXPECTED(!name)) {
47582 
47583 			HANDLE_EXCEPTION();
47584 		}
47585 	}
47586 
47587 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
47588 	zend_hash_del_ind(target_symbol_table, name);
47589 
47590 	if (IS_CV != IS_CONST) {
47591 		zend_tmp_string_release(tmp_name);
47592 	}
47593 
47594 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47595 }
47596 
47597 /* 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)47598 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47599 {
47600 	USE_OPLINE
47601 	zval *value;
47602 
47603 	value = EX_VAR(opline->op1.var);
47604 	if (!(0)) {
47605 		if (Z_TYPE_P(value) > IS_NULL &&
47606 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
47607 			ZEND_VM_SMART_BRANCH_TRUE();
47608 		} else {
47609 			ZEND_VM_SMART_BRANCH_FALSE();
47610 		}
47611 	} else {
47612 		bool result;
47613 
47614 		SAVE_OPLINE();
47615 		result = !i_zend_is_true(value);
47616 		ZEND_VM_SMART_BRANCH(result, 1);
47617 	}
47618 }
47619 
ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47620 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47621 {
47622 	USE_OPLINE
47623 	zval *value;
47624 
47625 	value = EX_VAR(opline->op1.var);
47626 	if (!(1)) {
47627 		if (Z_TYPE_P(value) > IS_NULL &&
47628 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
47629 			ZEND_VM_SMART_BRANCH_TRUE();
47630 		} else {
47631 			ZEND_VM_SMART_BRANCH_FALSE();
47632 		}
47633 	} else {
47634 		bool result;
47635 
47636 		SAVE_OPLINE();
47637 		result = !i_zend_is_true(value);
47638 		ZEND_VM_SMART_BRANCH(result, 1);
47639 	}
47640 }
47641 
ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47642 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47643 {
47644 	USE_OPLINE
47645 	zval *value;
47646 	/* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
47647 	int result;
47648 	zval *varname;
47649 	zend_string *name, *tmp_name;
47650 	HashTable *target_symbol_table;
47651 
47652 	SAVE_OPLINE();
47653 	varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
47654 	if (IS_CV == IS_CONST) {
47655 		name = Z_STR_P(varname);
47656 	} else {
47657 		name = zval_get_tmp_string(varname, &tmp_name);
47658 	}
47659 
47660 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
47661 	value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
47662 
47663 	if (IS_CV != IS_CONST) {
47664 		zend_tmp_string_release(tmp_name);
47665 	}
47666 
47667 	if (!value) {
47668 		result = (opline->extended_value & ZEND_ISEMPTY);
47669 	} else {
47670 		if (Z_TYPE_P(value) == IS_INDIRECT) {
47671 			value = Z_INDIRECT_P(value);
47672 		}
47673 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
47674 			if (Z_ISREF_P(value)) {
47675 				value = Z_REFVAL_P(value);
47676 			}
47677 			result = Z_TYPE_P(value) > IS_NULL;
47678 		} else {
47679 			result = !i_zend_is_true(value);
47680 		}
47681 	}
47682 
47683 	ZEND_VM_SMART_BRANCH(result, 1);
47684 }
47685 
47686 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47687 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47688 {
47689 	USE_OPLINE
47690 	zval *expr;
47691 	zend_bool result;
47692 
47693 	SAVE_OPLINE();
47694 	expr = EX_VAR(opline->op1.var);
47695 
47696 try_instanceof:
47697 	if (Z_TYPE_P(expr) == IS_OBJECT) {
47698 		zend_class_entry *ce;
47699 
47700 		if (IS_UNUSED == IS_CONST) {
47701 			ce = CACHED_PTR(opline->extended_value);
47702 			if (UNEXPECTED(ce == NULL)) {
47703 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
47704 				if (EXPECTED(ce)) {
47705 					CACHE_PTR(opline->extended_value, ce);
47706 				}
47707 			}
47708 		} else if (IS_UNUSED == IS_UNUSED) {
47709 			ce = zend_fetch_class(NULL, opline->op2.num);
47710 			if (UNEXPECTED(ce == NULL)) {
47711 
47712 				ZVAL_UNDEF(EX_VAR(opline->result.var));
47713 				HANDLE_EXCEPTION();
47714 			}
47715 		} else {
47716 			ce = Z_CE_P(EX_VAR(opline->op2.var));
47717 		}
47718 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
47719 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
47720 		expr = Z_REFVAL_P(expr);
47721 		goto try_instanceof;
47722 	} else {
47723 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
47724 			ZVAL_UNDEFINED_OP1();
47725 		}
47726 		result = 0;
47727 	}
47728 
47729 	ZEND_VM_SMART_BRANCH(result, 1);
47730 }
47731 
ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47733 {
47734 	USE_OPLINE
47735 
47736 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
47737 
47738 	SAVE_OPLINE();
47739 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
47740 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47741 	}
47742 
47743 	/* Destroy the previously yielded value */
47744 	zval_ptr_dtor(&generator->value);
47745 
47746 	/* Destroy the previously yielded key */
47747 	zval_ptr_dtor(&generator->key);
47748 
47749 	/* Set the new yielded value */
47750 	if (IS_CV != IS_UNUSED) {
47751 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
47752 			/* Constants and temporary variables aren't yieldable by reference,
47753 			 * but we still allow them with a notice. */
47754 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
47755 				zval *value;
47756 
47757 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
47758 
47759 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47760 				ZVAL_COPY_VALUE(&generator->value, value);
47761 				if (IS_CV == IS_CONST) {
47762 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
47763 						Z_ADDREF(generator->value);
47764 					}
47765 				}
47766 			} else {
47767 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47768 
47769 				/* If a function call result is yielded and the function did
47770 				 * not return by reference we throw a notice. */
47771 				do {
47772 					if (IS_CV == IS_VAR) {
47773 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
47774 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
47775 						 && !Z_ISREF_P(value_ptr)) {
47776 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
47777 							ZVAL_COPY(&generator->value, value_ptr);
47778 							break;
47779 						}
47780 					}
47781 					if (Z_ISREF_P(value_ptr)) {
47782 						Z_ADDREF_P(value_ptr);
47783 					} else {
47784 						ZVAL_MAKE_REF_EX(value_ptr, 2);
47785 					}
47786 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
47787 				} while (0);
47788 
47789 			}
47790 		} else {
47791 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47792 
47793 			/* Consts, temporary variables and references need copying */
47794 			if (IS_CV == IS_CONST) {
47795 				ZVAL_COPY_VALUE(&generator->value, value);
47796 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
47797 					Z_ADDREF(generator->value);
47798 				}
47799 			} else if (IS_CV == IS_TMP_VAR) {
47800 				ZVAL_COPY_VALUE(&generator->value, value);
47801             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
47802 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
47803 
47804 			} else {
47805 				ZVAL_COPY_VALUE(&generator->value, value);
47806 				if (IS_CV == IS_CV) {
47807 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
47808 				}
47809 			}
47810 		}
47811 	} else {
47812 		/* If no value was specified yield null */
47813 		ZVAL_NULL(&generator->value);
47814 	}
47815 
47816 	/* Set the new yielded key */
47817 	if (IS_UNUSED != IS_UNUSED) {
47818 		zval *key = NULL;
47819 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
47820 			key = Z_REFVAL_P(key);
47821 		}
47822 		ZVAL_COPY(&generator->key, key);
47823 
47824 		if (Z_TYPE(generator->key) == IS_LONG
47825 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
47826 		) {
47827 			generator->largest_used_integer_key = Z_LVAL(generator->key);
47828 		}
47829 	} else {
47830 		/* If no key was specified we use auto-increment keys */
47831 		generator->largest_used_integer_key++;
47832 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
47833 	}
47834 
47835 	if (RETURN_VALUE_USED(opline)) {
47836 		/* If the return value of yield is used set the send
47837 		 * target and initialize it to NULL */
47838 		generator->send_target = EX_VAR(opline->result.var);
47839 		ZVAL_NULL(generator->send_target);
47840 	} else {
47841 		generator->send_target = NULL;
47842 	}
47843 
47844 	/* We increment to the next op, so we are at the correct position when the
47845 	 * generator is resumed. */
47846 	ZEND_VM_INC_OPCODE();
47847 
47848 	/* The GOTO VM uses a local opline variable. We need to set the opline
47849 	 * variable in execute_data so we don't resume at an old position. */
47850 	SAVE_OPLINE();
47851 
47852 	ZEND_VM_RETURN();
47853 }
47854 
ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47855 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47856 {
47857 	USE_OPLINE
47858 	HashTable *ht;
47859 	zval *value;
47860 	zval *variable_ptr;
47861 
47862 	variable_ptr = EX_VAR(opline->op1.var);
47863 
47864 	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
47865 	if (!ht) {
47866 		ZEND_ASSERT(EX(func)->op_array.fn_flags & (ZEND_ACC_IMMUTABLE|ZEND_ACC_PRELOADED));
47867 		ht = zend_array_dup(EX(func)->op_array.static_variables);
47868 		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
47869 	} else if (GC_REFCOUNT(ht) > 1) {
47870 		if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
47871 			GC_DELREF(ht);
47872 		}
47873 		ht = zend_array_dup(ht);
47874 		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
47875 	}
47876 
47877 	value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)));
47878 
47879 	SAVE_OPLINE();
47880 	if (opline->extended_value & ZEND_BIND_REF) {
47881 		if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
47882 			if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
47883 				HANDLE_EXCEPTION();
47884 			}
47885 		}
47886 
47887 		i_zval_ptr_dtor(variable_ptr);
47888 		if (UNEXPECTED(!Z_ISREF_P(value))) {
47889 			zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
47890 			GC_SET_REFCOUNT(ref, 2);
47891 			GC_TYPE_INFO(ref) = GC_REFERENCE;
47892 			ZVAL_COPY_VALUE(&ref->val, value);
47893 			ref->sources.ptr = NULL;
47894 			Z_REF_P(value) = ref;
47895 			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
47896 			ZVAL_REF(variable_ptr, ref);
47897 		} else {
47898 			Z_ADDREF_P(value);
47899 			ZVAL_REF(variable_ptr, Z_REF_P(value));
47900 		}
47901 	} else {
47902 		i_zval_ptr_dtor(variable_ptr);
47903 		ZVAL_COPY(variable_ptr, value);
47904 	}
47905 
47906 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47907 }
47908 
ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47909 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47910 {
47911 	USE_OPLINE
47912 	zval *op1 = EX_VAR(opline->op1.var);
47913 
47914 	if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
47915 		SAVE_OPLINE();
47916 		ZVAL_UNDEFINED_OP1();
47917 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47918 	}
47919 	ZEND_VM_NEXT_OPCODE();
47920 }
47921 
ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47922 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47923 {
47924 	USE_OPLINE
47925 	zval *op1 = EX_VAR(opline->op1.var);
47926 
47927 	if (IS_CV == IS_CV) {
47928 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
47929 			ZVAL_NEW_EMPTY_REF(op1);
47930 			Z_SET_REFCOUNT_P(op1, 2);
47931 			ZVAL_NULL(Z_REFVAL_P(op1));
47932 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
47933 		} else {
47934 			if (Z_ISREF_P(op1)) {
47935 				Z_ADDREF_P(op1);
47936 			} else {
47937 				ZVAL_MAKE_REF_EX(op1, 2);
47938 			}
47939 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
47940 		}
47941 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
47942 		op1 = Z_INDIRECT_P(op1);
47943 		if (EXPECTED(!Z_ISREF_P(op1))) {
47944 			ZVAL_MAKE_REF_EX(op1, 2);
47945 		} else {
47946 			GC_ADDREF(Z_REF_P(op1));
47947 		}
47948 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
47949 	} else {
47950 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
47951 	}
47952 	ZEND_VM_NEXT_OPCODE();
47953 }
47954 
ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47955 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47956 {
47957 	USE_OPLINE
47958 	zval *op1;
47959 	zend_long count;
47960 
47961 	SAVE_OPLINE();
47962 	op1 = EX_VAR(opline->op1.var);
47963 
47964 	while (1) {
47965 		if (Z_TYPE_P(op1) == IS_ARRAY) {
47966 			count = zend_array_count(Z_ARRVAL_P(op1));
47967 			break;
47968 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
47969 			zend_object *zobj = Z_OBJ_P(op1);
47970 
47971 			/* first, we check if the handler is defined */
47972 			if (zobj->handlers->count_elements) {
47973 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
47974 					break;
47975 				}
47976 				if (UNEXPECTED(EG(exception))) {
47977 					count = 0;
47978 					break;
47979 				}
47980 			}
47981 
47982 			/* if not and the object implements Countable we call its count() method */
47983 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
47984 				zval retval;
47985 
47986 				zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
47987 				count = zval_get_long(&retval);
47988 				zval_ptr_dtor(&retval);
47989 				break;
47990 			}
47991 
47992 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
47993 		} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
47994 			op1 = Z_REFVAL_P(op1);
47995 			continue;
47996 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
47997 			ZVAL_UNDEFINED_OP1();
47998 		}
47999 		count = 0;
48000 		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));
48001 		break;
48002 	}
48003 
48004 	ZVAL_LONG(EX_VAR(opline->result.var), count);
48005 
48006 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48007 }
48008 
ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48009 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48010 {
48011 	USE_OPLINE
48012 
48013 	if (IS_CV == IS_UNUSED) {
48014 		if (UNEXPECTED(!EX(func)->common.scope)) {
48015 			SAVE_OPLINE();
48016 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
48017 			ZVAL_UNDEF(EX_VAR(opline->result.var));
48018 			HANDLE_EXCEPTION();
48019 		} else {
48020 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
48021 			ZEND_VM_NEXT_OPCODE();
48022 		}
48023 	} else {
48024 		zval *op1;
48025 
48026 		SAVE_OPLINE();
48027 		op1 = EX_VAR(opline->op1.var);
48028 		while (1) {
48029 			if (Z_TYPE_P(op1) == IS_OBJECT) {
48030 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
48031 			} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
48032 				op1 = Z_REFVAL_P(op1);
48033 				continue;
48034 			} else {
48035 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
48036 					ZVAL_UNDEFINED_OP1();
48037 				}
48038 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
48039 				ZVAL_UNDEF(EX_VAR(opline->result.var));
48040 			}
48041 			break;
48042 		}
48043 
48044 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48045 	}
48046 }
48047 
ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48048 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48049 {
48050 	USE_OPLINE
48051 	zval *op1;
48052 	zend_string *type;
48053 
48054 	SAVE_OPLINE();
48055 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48056 	type = zend_zval_get_legacy_type(op1);
48057 	if (EXPECTED(type)) {
48058 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
48059 	} else {
48060 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
48061 	}
48062 
48063 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48064 }
48065 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48066 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48067 {
48068 	USE_OPLINE
48069 	zval *varptr, *arg;
48070 	uint32_t arg_num = opline->op2.num;
48071 
48072 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
48073 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48074 	}
48075 
48076 	varptr = EX_VAR(opline->op1.var);
48077 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
48078 
48079 	if (IS_CV == IS_CV) {
48080 		ZVAL_COPY(arg, varptr);
48081 	} else /* if (IS_CV == IS_VAR) */ {
48082 		ZVAL_COPY_VALUE(arg, varptr);
48083 	}
48084 
48085 	ZEND_VM_NEXT_OPCODE();
48086 }
48087 
ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48088 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48089 {
48090 	USE_OPLINE
48091 	zval *op1, *op2;
48092 
48093 	SAVE_OPLINE();
48094 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48095 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48096 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
48097 
48098 
48099 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48100 }
48101 
ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48102 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48103 {
48104 	USE_OPLINE
48105 	zval *op1, *op2;
48106 
48107 	SAVE_OPLINE();
48108 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48109 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48110 	pow_function(EX_VAR(opline->result.var), op1, op2);
48111 
48112 
48113 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48114 }
48115 
ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48117 {
48118 	USE_OPLINE
48119 	zval *op1, *op2;
48120 
48121 	op1 = EX_VAR(opline->op1.var);
48122 	op2 = EX_VAR(opline->op2.var);
48123 
48124 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
48125 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
48126 		zend_string *op1_str = Z_STR_P(op1);
48127 		zend_string *op2_str = Z_STR_P(op2);
48128 		zend_string *str;
48129 
48130 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
48131 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
48132 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
48133 			} else {
48134 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
48135 			}
48136 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48137 				zend_string_release_ex(op1_str, 0);
48138 			}
48139 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
48140 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
48141 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
48142 			} else {
48143 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
48144 			}
48145 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48146 				zend_string_release_ex(op2_str, 0);
48147 			}
48148 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
48149 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
48150 		    size_t len = ZSTR_LEN(op1_str);
48151 
48152 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
48153 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
48154 			}
48155 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
48156 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
48157 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
48158 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48159 				zend_string_release_ex(op2_str, 0);
48160 			}
48161 		} else {
48162 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
48163 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
48164 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
48165 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
48166 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48167 				zend_string_release_ex(op1_str, 0);
48168 			}
48169 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48170 				zend_string_release_ex(op2_str, 0);
48171 			}
48172 		}
48173 		ZEND_VM_NEXT_OPCODE();
48174 	} else {
48175 		SAVE_OPLINE();
48176 
48177 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
48178 			op1 = ZVAL_UNDEFINED_OP1();
48179 		}
48180 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
48181 			op2 = ZVAL_UNDEFINED_OP2();
48182 		}
48183 		concat_function(EX_VAR(opline->result.var), op1, op2);
48184 
48185 
48186 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48187 	}
48188 }
48189 
ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48190 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48191 {
48192 	USE_OPLINE
48193 	zval *op1, *op2;
48194 	zend_bool result;
48195 
48196 	SAVE_OPLINE();
48197 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48198 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48199 	result = fast_is_identical_function(op1, op2);
48200 
48201 
48202 	ZEND_VM_SMART_BRANCH(result, 1);
48203 }
48204 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48206 {
48207 	USE_OPLINE
48208 	zval *op1, *op2;
48209 	zend_bool result;
48210 
48211 	SAVE_OPLINE();
48212 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48213 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48214 	result = fast_is_not_identical_function(op1, op2);
48215 
48216 
48217 	ZEND_VM_SMART_BRANCH(result, 1);
48218 }
48219 
ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48220 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48221 {
48222 	USE_OPLINE
48223 	zval *op1, *op2;
48224 	double d1, d2;
48225 
48226 	op1 = EX_VAR(opline->op1.var);
48227 	op2 = EX_VAR(opline->op2.var);
48228 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
48229 		/* pass */
48230 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
48231 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48232 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
48233 is_equal_true:
48234 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
48235 			} else {
48236 is_equal_false:
48237 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
48238 			}
48239 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48240 			d1 = (double)Z_LVAL_P(op1);
48241 			d2 = Z_DVAL_P(op2);
48242 			goto is_equal_double;
48243 		}
48244 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
48245 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48246 			d1 = Z_DVAL_P(op1);
48247 			d2 = Z_DVAL_P(op2);
48248 is_equal_double:
48249 			if (d1 == d2) {
48250 				goto is_equal_true;
48251 			} else {
48252 				goto is_equal_false;
48253 			}
48254 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48255 			d1 = Z_DVAL_P(op1);
48256 			d2 = (double)Z_LVAL_P(op2);
48257 			goto is_equal_double;
48258 		}
48259 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
48260 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
48261 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
48262 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48263 				zval_ptr_dtor_str(op1);
48264 			}
48265 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48266 				zval_ptr_dtor_str(op2);
48267 			}
48268 			if (result) {
48269 				goto is_equal_true;
48270 			} else {
48271 				goto is_equal_false;
48272 			}
48273 		}
48274 	}
48275 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48276 }
48277 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48278 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48279 {
48280 	USE_OPLINE
48281 	zval *op1, *op2;
48282 	double d1, d2;
48283 
48284 	op1 = EX_VAR(opline->op1.var);
48285 	op2 = EX_VAR(opline->op2.var);
48286 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
48287 		/* pass */
48288 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
48289 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48290 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
48291 is_equal_true:
48292 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
48293 			} else {
48294 is_equal_false:
48295 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
48296 			}
48297 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48298 			d1 = (double)Z_LVAL_P(op1);
48299 			d2 = Z_DVAL_P(op2);
48300 			goto is_equal_double;
48301 		}
48302 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
48303 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48304 			d1 = Z_DVAL_P(op1);
48305 			d2 = Z_DVAL_P(op2);
48306 is_equal_double:
48307 			if (d1 == d2) {
48308 				goto is_equal_true;
48309 			} else {
48310 				goto is_equal_false;
48311 			}
48312 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48313 			d1 = Z_DVAL_P(op1);
48314 			d2 = (double)Z_LVAL_P(op2);
48315 			goto is_equal_double;
48316 		}
48317 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
48318 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
48319 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
48320 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48321 				zval_ptr_dtor_str(op1);
48322 			}
48323 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48324 				zval_ptr_dtor_str(op2);
48325 			}
48326 			if (result) {
48327 				goto is_equal_true;
48328 			} else {
48329 				goto is_equal_false;
48330 			}
48331 		}
48332 	}
48333 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48334 }
48335 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48336 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48337 {
48338 	USE_OPLINE
48339 	zval *op1, *op2;
48340 	double d1, d2;
48341 
48342 	op1 = EX_VAR(opline->op1.var);
48343 	op2 = EX_VAR(opline->op2.var);
48344 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
48345 		/* pass */
48346 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
48347 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48348 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
48349 is_equal_true:
48350 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
48351 			} else {
48352 is_equal_false:
48353 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
48354 			}
48355 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48356 			d1 = (double)Z_LVAL_P(op1);
48357 			d2 = Z_DVAL_P(op2);
48358 			goto is_equal_double;
48359 		}
48360 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
48361 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48362 			d1 = Z_DVAL_P(op1);
48363 			d2 = Z_DVAL_P(op2);
48364 is_equal_double:
48365 			if (d1 == d2) {
48366 				goto is_equal_true;
48367 			} else {
48368 				goto is_equal_false;
48369 			}
48370 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48371 			d1 = Z_DVAL_P(op1);
48372 			d2 = (double)Z_LVAL_P(op2);
48373 			goto is_equal_double;
48374 		}
48375 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
48376 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
48377 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
48378 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48379 				zval_ptr_dtor_str(op1);
48380 			}
48381 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48382 				zval_ptr_dtor_str(op2);
48383 			}
48384 			if (result) {
48385 				goto is_equal_true;
48386 			} else {
48387 				goto is_equal_false;
48388 			}
48389 		}
48390 	}
48391 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48392 }
48393 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48395 {
48396 	USE_OPLINE
48397 	zval *op1, *op2;
48398 	double d1, d2;
48399 
48400 	op1 = EX_VAR(opline->op1.var);
48401 	op2 = EX_VAR(opline->op2.var);
48402 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
48403 		/* pass */
48404 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
48405 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48406 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
48407 is_not_equal_true:
48408 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
48409 			} else {
48410 is_not_equal_false:
48411 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
48412 			}
48413 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48414 			d1 = (double)Z_LVAL_P(op1);
48415 			d2 = Z_DVAL_P(op2);
48416 			goto is_not_equal_double;
48417 		}
48418 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
48419 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48420 			d1 = Z_DVAL_P(op1);
48421 			d2 = Z_DVAL_P(op2);
48422 is_not_equal_double:
48423 			if (d1 != d2) {
48424 				goto is_not_equal_true;
48425 			} else {
48426 				goto is_not_equal_false;
48427 			}
48428 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48429 			d1 = Z_DVAL_P(op1);
48430 			d2 = (double)Z_LVAL_P(op2);
48431 			goto is_not_equal_double;
48432 		}
48433 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
48434 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
48435 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
48436 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48437 				zval_ptr_dtor_str(op1);
48438 			}
48439 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48440 				zval_ptr_dtor_str(op2);
48441 			}
48442 			if (!result) {
48443 				goto is_not_equal_true;
48444 			} else {
48445 				goto is_not_equal_false;
48446 			}
48447 		}
48448 	}
48449 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48450 }
48451 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48452 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48453 {
48454 	USE_OPLINE
48455 	zval *op1, *op2;
48456 	double d1, d2;
48457 
48458 	op1 = EX_VAR(opline->op1.var);
48459 	op2 = EX_VAR(opline->op2.var);
48460 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
48461 		/* pass */
48462 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
48463 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48464 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
48465 is_not_equal_true:
48466 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
48467 			} else {
48468 is_not_equal_false:
48469 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
48470 			}
48471 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48472 			d1 = (double)Z_LVAL_P(op1);
48473 			d2 = Z_DVAL_P(op2);
48474 			goto is_not_equal_double;
48475 		}
48476 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
48477 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48478 			d1 = Z_DVAL_P(op1);
48479 			d2 = Z_DVAL_P(op2);
48480 is_not_equal_double:
48481 			if (d1 != d2) {
48482 				goto is_not_equal_true;
48483 			} else {
48484 				goto is_not_equal_false;
48485 			}
48486 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48487 			d1 = Z_DVAL_P(op1);
48488 			d2 = (double)Z_LVAL_P(op2);
48489 			goto is_not_equal_double;
48490 		}
48491 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
48492 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
48493 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
48494 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48495 				zval_ptr_dtor_str(op1);
48496 			}
48497 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48498 				zval_ptr_dtor_str(op2);
48499 			}
48500 			if (!result) {
48501 				goto is_not_equal_true;
48502 			} else {
48503 				goto is_not_equal_false;
48504 			}
48505 		}
48506 	}
48507 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48508 }
48509 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48510 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48511 {
48512 	USE_OPLINE
48513 	zval *op1, *op2;
48514 	double d1, d2;
48515 
48516 	op1 = EX_VAR(opline->op1.var);
48517 	op2 = EX_VAR(opline->op2.var);
48518 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
48519 		/* pass */
48520 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
48521 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48522 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
48523 is_not_equal_true:
48524 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
48525 			} else {
48526 is_not_equal_false:
48527 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
48528 			}
48529 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48530 			d1 = (double)Z_LVAL_P(op1);
48531 			d2 = Z_DVAL_P(op2);
48532 			goto is_not_equal_double;
48533 		}
48534 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
48535 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
48536 			d1 = Z_DVAL_P(op1);
48537 			d2 = Z_DVAL_P(op2);
48538 is_not_equal_double:
48539 			if (d1 != d2) {
48540 				goto is_not_equal_true;
48541 			} else {
48542 				goto is_not_equal_false;
48543 			}
48544 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
48545 			d1 = Z_DVAL_P(op1);
48546 			d2 = (double)Z_LVAL_P(op2);
48547 			goto is_not_equal_double;
48548 		}
48549 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
48550 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
48551 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
48552 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48553 				zval_ptr_dtor_str(op1);
48554 			}
48555 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
48556 				zval_ptr_dtor_str(op2);
48557 			}
48558 			if (!result) {
48559 				goto is_not_equal_true;
48560 			} else {
48561 				goto is_not_equal_false;
48562 			}
48563 		}
48564 	}
48565 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48566 }
48567 
ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48568 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48569 {
48570 	USE_OPLINE
48571 	zval *op1, *op2;
48572 
48573 	SAVE_OPLINE();
48574 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48575 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48576 	compare_function(EX_VAR(opline->result.var), op1, op2);
48577 
48578 
48579 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48580 }
48581 
ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48582 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48583 {
48584 	USE_OPLINE
48585 	zval *op1, *op2;
48586 
48587 	SAVE_OPLINE();
48588 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48589 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48590 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
48591 
48592 
48593 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48594 }
48595 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48596 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48597 {
48598 	USE_OPLINE
48599 	zval *object;
48600 	zval *property;
48601 	zval *value;
48602 	zval *zptr;
48603 	void **cache_slot;
48604 	zend_property_info *prop_info;
48605 	zend_object *zobj;
48606 	zend_string *name, *tmp_name;
48607 
48608 	SAVE_OPLINE();
48609 	object = EX_VAR(opline->op1.var);
48610 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48611 
48612 	do {
48613 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
48614 
48615 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
48616 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
48617 				object = Z_REFVAL_P(object);
48618 				goto assign_op_object;
48619 			}
48620 			if (IS_CV == IS_CV
48621 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
48622 				ZVAL_UNDEFINED_OP1();
48623 			}
48624 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
48625 			break;
48626 		}
48627 
48628 assign_op_object:
48629 		/* here we are sure we are dealing with an object */
48630 		zobj = Z_OBJ_P(object);
48631 		if (IS_CV == IS_CONST) {
48632 			name = Z_STR_P(property);
48633 		} else {
48634 			name = zval_try_get_tmp_string(property, &tmp_name);
48635 			if (UNEXPECTED(!name)) {
48636 				UNDEF_RESULT();
48637 				break;
48638 			}
48639 		}
48640 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
48641 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
48642 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
48643 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48644 					ZVAL_NULL(EX_VAR(opline->result.var));
48645 				}
48646 			} else {
48647 				zval *orig_zptr = zptr;
48648 				zend_reference *ref;
48649 
48650 				do {
48651 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
48652 						ref = Z_REF_P(zptr);
48653 						zptr = Z_REFVAL_P(zptr);
48654 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
48655 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
48656 							break;
48657 						}
48658 					}
48659 
48660 					if (IS_CV == IS_CONST) {
48661 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
48662 					} else {
48663 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
48664 					}
48665 					if (UNEXPECTED(prop_info)) {
48666 						/* special case for typed properties */
48667 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
48668 					} else {
48669 						zend_binary_op(zptr, zptr, value OPLINE_CC);
48670 					}
48671 				} while (0);
48672 
48673 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48674 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
48675 				}
48676 			}
48677 		} else {
48678 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
48679 		}
48680 		if (IS_CV != IS_CONST) {
48681 			zend_tmp_string_release(tmp_name);
48682 		}
48683 	} while (0);
48684 
48685 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
48686 
48687 
48688 	/* assign_obj has two opcodes! */
48689 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48690 }
48691 
48692 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48693 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48694 {
48695 	USE_OPLINE
48696 	zval *var_ptr;
48697 	zval *value, *container, *dim;
48698 
48699 	SAVE_OPLINE();
48700 	container = EX_VAR(opline->op1.var);
48701 
48702 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48703 assign_dim_op_array:
48704 		SEPARATE_ARRAY(container);
48705 assign_dim_op_new_array:
48706 		dim = EX_VAR(opline->op2.var);
48707 		if (IS_CV == IS_UNUSED) {
48708 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
48709 			if (UNEXPECTED(!var_ptr)) {
48710 				zend_cannot_add_element();
48711 				goto assign_dim_op_ret_null;
48712 			}
48713 		} else {
48714 			if (IS_CV == IS_CONST) {
48715 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
48716 			} else {
48717 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
48718 			}
48719 			if (UNEXPECTED(!var_ptr)) {
48720 				goto assign_dim_op_ret_null;
48721 			}
48722 		}
48723 
48724 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
48725 
48726 		do {
48727 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
48728 				zend_reference *ref = Z_REF_P(var_ptr);
48729 				var_ptr = Z_REFVAL_P(var_ptr);
48730 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
48731 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
48732 					break;
48733 				}
48734 			}
48735 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
48736 		} while (0);
48737 
48738 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48739 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
48740 		}
48741 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
48742 	} else {
48743 		if (EXPECTED(Z_ISREF_P(container))) {
48744 			container = Z_REFVAL_P(container);
48745 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48746 				goto assign_dim_op_array;
48747 			}
48748 		}
48749 
48750 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
48751 			zend_object *obj = Z_OBJ_P(container);
48752 
48753 			GC_ADDREF(obj);
48754 			dim = EX_VAR(opline->op2.var);
48755 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
48756 				dim = ZVAL_UNDEFINED_OP2();
48757 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48758 				dim++;
48759 			}
48760 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
48761 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
48762 				zend_objects_store_del(obj);
48763 			}
48764 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
48765 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
48766 				ZVAL_UNDEFINED_OP1();
48767 			}
48768 			ZVAL_ARR(container, zend_new_array(8));
48769 			goto assign_dim_op_new_array;
48770 		} else {
48771 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48772 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
48773 assign_dim_op_ret_null:
48774 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
48775 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48776 				ZVAL_NULL(EX_VAR(opline->result.var));
48777 			}
48778 		}
48779 	}
48780 
48781 
48782 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48783 }
48784 
ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48786 {
48787 	USE_OPLINE
48788 	zval *var_ptr;
48789 	zval *value;
48790 
48791 	SAVE_OPLINE();
48792 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48793 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
48794 
48795 	do {
48796 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
48797 			zend_reference *ref = Z_REF_P(var_ptr);
48798 			var_ptr = Z_REFVAL_P(var_ptr);
48799 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
48800 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
48801 				break;
48802 			}
48803 		}
48804 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
48805 	} while (0);
48806 
48807 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48808 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
48809 	}
48810 
48811 
48812 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48813 }
48814 
ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48815 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48816 {
48817 	USE_OPLINE
48818 	zval *object;
48819 	zval *property;
48820 	zval *zptr;
48821 	void **cache_slot;
48822 	zend_property_info *prop_info;
48823 	zend_object *zobj;
48824 	zend_string *name, *tmp_name;
48825 
48826 	SAVE_OPLINE();
48827 	object = EX_VAR(opline->op1.var);
48828 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48829 
48830 	do {
48831 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
48832 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
48833 				object = Z_REFVAL_P(object);
48834 				goto pre_incdec_object;
48835 			}
48836 			if (IS_CV == IS_CV
48837 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
48838 				ZVAL_UNDEFINED_OP1();
48839 			}
48840 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
48841 			break;
48842 		}
48843 
48844 pre_incdec_object:
48845 		/* here we are sure we are dealing with an object */
48846 		zobj = Z_OBJ_P(object);
48847 		if (IS_CV == IS_CONST) {
48848 			name = Z_STR_P(property);
48849 		} else {
48850 			name = zval_try_get_tmp_string(property, &tmp_name);
48851 			if (UNEXPECTED(!name)) {
48852 				UNDEF_RESULT();
48853 				break;
48854 			}
48855 		}
48856 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
48857 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
48858 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
48859 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48860 					ZVAL_NULL(EX_VAR(opline->result.var));
48861 				}
48862 			} else {
48863 				if (IS_CV == IS_CONST) {
48864 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
48865 				} else {
48866 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
48867 				}
48868 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
48869 			}
48870 		} else {
48871 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
48872 		}
48873 		if (IS_CV != IS_CONST) {
48874 			zend_tmp_string_release(tmp_name);
48875 		}
48876 	} while (0);
48877 
48878 
48879 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48880 }
48881 
ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48883 {
48884 	USE_OPLINE
48885 	zval *object;
48886 	zval *property;
48887 	zval *zptr;
48888 	void **cache_slot;
48889 	zend_property_info *prop_info;
48890 	zend_object *zobj;
48891 	zend_string *name, *tmp_name;
48892 
48893 	SAVE_OPLINE();
48894 	object = EX_VAR(opline->op1.var);
48895 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48896 
48897 	do {
48898 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
48899 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
48900 				object = Z_REFVAL_P(object);
48901 				goto post_incdec_object;
48902 			}
48903 			if (IS_CV == IS_CV
48904 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
48905 				ZVAL_UNDEFINED_OP1();
48906 			}
48907 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
48908 			break;
48909 		}
48910 
48911 post_incdec_object:
48912 		/* here we are sure we are dealing with an object */
48913 		zobj = Z_OBJ_P(object);
48914 		if (IS_CV == IS_CONST) {
48915 			name = Z_STR_P(property);
48916 		} else {
48917 			name = zval_try_get_tmp_string(property, &tmp_name);
48918 			if (UNEXPECTED(!name)) {
48919 				ZVAL_UNDEF(EX_VAR(opline->result.var));
48920 				break;
48921 			}
48922 		}
48923 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
48924 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
48925 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
48926 				ZVAL_NULL(EX_VAR(opline->result.var));
48927 			} else {
48928 				if (IS_CV == IS_CONST) {
48929 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
48930 				} else {
48931 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
48932 				}
48933 
48934 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
48935 			}
48936 		} else {
48937 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
48938 		}
48939 		if (IS_CV != IS_CONST) {
48940 			zend_tmp_string_release(tmp_name);
48941 		}
48942 	} while (0);
48943 
48944 
48945 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48946 }
48947 
ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48948 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48949 {
48950 	USE_OPLINE
48951 	zval *container, *dim, *value;
48952 
48953 	SAVE_OPLINE();
48954 	container = EX_VAR(opline->op1.var);
48955 	dim = EX_VAR(opline->op2.var);
48956 	if (IS_CV != IS_CONST) {
48957 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48958 fetch_dim_r_array:
48959 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
48960 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
48961 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
48962 			container = Z_REFVAL_P(container);
48963 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48964 				goto fetch_dim_r_array;
48965 			} else {
48966 				goto fetch_dim_r_slow;
48967 			}
48968 		} else {
48969 fetch_dim_r_slow:
48970 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48971 				dim++;
48972 			}
48973 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
48974 		}
48975 	} else {
48976 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
48977 	}
48978 
48979 
48980 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48981 }
48982 
ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48983 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48984 {
48985 	USE_OPLINE
48986 	zval *container;
48987 
48988 	SAVE_OPLINE();
48989 	container = EX_VAR(opline->op1.var);
48990 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
48991 
48992 	if (IS_CV == IS_VAR) {
48993 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
48994 	}
48995 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48996 }
48997 
ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48998 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48999 {
49000 	USE_OPLINE
49001 	zval *container;
49002 
49003 	SAVE_OPLINE();
49004 	container = EX_VAR(opline->op1.var);
49005 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
49006 
49007 	if (IS_CV == IS_VAR) {
49008 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49009 	}
49010 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49011 }
49012 
ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49013 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49014 {
49015 	USE_OPLINE
49016 	zval *container;
49017 
49018 	SAVE_OPLINE();
49019 	container = EX_VAR(opline->op1.var);
49020 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
49021 
49022 
49023 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49024 }
49025 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49027 {
49028 #if 0
49029 	USE_OPLINE
49030 #endif
49031 
49032 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
49033         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
49034 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49035         }
49036 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49037 	} else {
49038 		if (IS_CV == IS_UNUSED) {
49039 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49040 		}
49041 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49042 	}
49043 }
49044 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49046 {
49047 	USE_OPLINE
49048 	zval *container;
49049 
49050 	SAVE_OPLINE();
49051 	container = EX_VAR(opline->op1.var);
49052 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
49053 
49054 	if (IS_CV == IS_VAR) {
49055 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49056 	}
49057 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49058 }
49059 
ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49061 {
49062 	USE_OPLINE
49063 	zval *container;
49064 	zval *offset;
49065 	void **cache_slot = NULL;
49066 
49067 	SAVE_OPLINE();
49068 	container = EX_VAR(opline->op1.var);
49069 	offset = EX_VAR(opline->op2.var);
49070 
49071 	if (IS_CV == IS_CONST ||
49072 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
49073 	    do {
49074 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
49075 				container = Z_REFVAL_P(container);
49076 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
49077 					break;
49078 				}
49079 			}
49080 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49081 				ZVAL_UNDEFINED_OP1();
49082 			}
49083 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
49084 				ZVAL_UNDEFINED_OP2();
49085 			}
49086 			zend_wrong_property_read(container, offset);
49087 			ZVAL_NULL(EX_VAR(opline->result.var));
49088 			goto fetch_obj_r_finish;
49089 		} while (0);
49090 	}
49091 
49092 	/* here we are sure we are dealing with an object */
49093 	do {
49094 		zend_object *zobj = Z_OBJ_P(container);
49095 		zend_string *name, *tmp_name;
49096 		zval *retval;
49097 
49098 		if (IS_CV == IS_CONST) {
49099 			name = Z_STR_P(offset);
49100 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
49101 
49102 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
49103 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
49104 
49105 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
49106 					retval = OBJ_PROP(zobj, prop_offset);
49107 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
49108 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49109 							goto fetch_obj_r_copy;
49110 						} else {
49111 fetch_obj_r_fast_copy:
49112 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
49113 							ZEND_VM_NEXT_OPCODE();
49114 						}
49115 					}
49116 				} else if (EXPECTED(zobj->properties != NULL)) {
49117 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
49118 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
49119 
49120 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
49121 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
49122 
49123 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
49124 						        (EXPECTED(p->key == name) ||
49125 						         (EXPECTED(p->h == ZSTR_H(name)) &&
49126 						          EXPECTED(p->key != NULL) &&
49127 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
49128 								retval = &p->val;
49129 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49130 									goto fetch_obj_r_copy;
49131 								} else {
49132 									goto fetch_obj_r_fast_copy;
49133 								}
49134 							}
49135 						}
49136 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
49137 					}
49138 					retval = zend_hash_find_ex(zobj->properties, name, 1);
49139 					if (EXPECTED(retval)) {
49140 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
49141 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
49142 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49143 							goto fetch_obj_r_copy;
49144 						} else {
49145 							goto fetch_obj_r_fast_copy;
49146 						}
49147 					}
49148 				}
49149 			}
49150 		} else {
49151 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
49152 				ZVAL_UNDEFINED_OP2();
49153 			}
49154 			name = zval_try_get_tmp_string(offset, &tmp_name);
49155 			if (UNEXPECTED(!name)) {
49156 				ZVAL_UNDEF(EX_VAR(opline->result.var));
49157 				break;
49158 			}
49159 		}
49160 
49161 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
49162 
49163 		if (IS_CV != IS_CONST) {
49164 			zend_tmp_string_release(tmp_name);
49165 		}
49166 
49167 		if (retval != EX_VAR(opline->result.var)) {
49168 fetch_obj_r_copy:
49169 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
49170 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
49171 			zend_unwrap_reference(retval);
49172 		}
49173 	} while (0);
49174 
49175 fetch_obj_r_finish:
49176 
49177 
49178 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49179 }
49180 
ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49181 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49182 {
49183 	USE_OPLINE
49184 	zval *property, *container, *result;
49185 
49186 	SAVE_OPLINE();
49187 
49188 	container = EX_VAR(opline->op1.var);
49189 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49190 	result = EX_VAR(opline->result.var);
49191 	zend_fetch_property_address(
49192 		result, container, IS_CV, property, IS_CV,
49193 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
49194 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
49195 
49196 	if (IS_CV == IS_VAR) {
49197 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49198 	}
49199 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49200 }
49201 
ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49203 {
49204 	USE_OPLINE
49205 	zval *property, *container, *result;
49206 
49207 	SAVE_OPLINE();
49208 	container = EX_VAR(opline->op1.var);
49209 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49210 	result = EX_VAR(opline->result.var);
49211 	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
49212 
49213 	if (IS_CV == IS_VAR) {
49214 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49215 	}
49216 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49217 }
49218 
ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49220 {
49221 	USE_OPLINE
49222 	zval *container;
49223 	zval *offset;
49224 	void **cache_slot = NULL;
49225 
49226 	SAVE_OPLINE();
49227 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
49228 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49229 
49230 	if (IS_CV == IS_CONST ||
49231 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
49232 		do {
49233 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
49234 				container = Z_REFVAL_P(container);
49235 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
49236 					break;
49237 				}
49238 			}
49239 			ZVAL_NULL(EX_VAR(opline->result.var));
49240 			goto fetch_obj_is_finish;
49241 		} while (0);
49242 	}
49243 
49244 	/* here we are sure we are dealing with an object */
49245 	do {
49246 		zend_object *zobj = Z_OBJ_P(container);
49247 		zend_string *name, *tmp_name;
49248 		zval *retval;
49249 
49250 		if (IS_CV == IS_CONST) {
49251 			name = Z_STR_P(offset);
49252 			cache_slot = CACHE_ADDR(opline->extended_value);
49253 
49254 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
49255 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
49256 
49257 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
49258 					retval = OBJ_PROP(zobj, prop_offset);
49259 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
49260 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49261 							goto fetch_obj_is_copy;
49262 						} else {
49263 fetch_obj_is_fast_copy:
49264 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
49265 							ZEND_VM_NEXT_OPCODE();
49266 						}
49267 					}
49268 				} else if (EXPECTED(zobj->properties != NULL)) {
49269 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
49270 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
49271 
49272 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
49273 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
49274 
49275 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
49276 						        (EXPECTED(p->key == name) ||
49277 						         (EXPECTED(p->h == ZSTR_H(name)) &&
49278 						          EXPECTED(p->key != NULL) &&
49279 						          EXPECTED(zend_string_equal_content(p->key, name))))) {
49280 								retval = &p->val;
49281 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49282 									goto fetch_obj_is_copy;
49283 								} else {
49284 									goto fetch_obj_is_fast_copy;
49285 								}
49286 							}
49287 						}
49288 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
49289 					}
49290 					retval = zend_hash_find_ex(zobj->properties, name, 1);
49291 					if (EXPECTED(retval)) {
49292 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
49293 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
49294 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
49295 							goto fetch_obj_is_copy;
49296 						} else {
49297 							goto fetch_obj_is_fast_copy;
49298 						}
49299 					}
49300 				}
49301 			}
49302 		} else {
49303 			name = zval_try_get_tmp_string(offset, &tmp_name);
49304 			if (UNEXPECTED(!name)) {
49305 				ZVAL_UNDEF(EX_VAR(opline->result.var));
49306 				break;
49307 			}
49308 		}
49309 
49310 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
49311 
49312 		if (IS_CV != IS_CONST) {
49313 			zend_tmp_string_release(tmp_name);
49314 		}
49315 
49316 		if (retval != EX_VAR(opline->result.var)) {
49317 fetch_obj_is_copy:
49318 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
49319 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
49320 			zend_unwrap_reference(retval);
49321 		}
49322 	} while (0);
49323 
49324 fetch_obj_is_finish:
49325 
49326 
49327 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49328 }
49329 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49330 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49331 {
49332 #if 0
49333 	USE_OPLINE
49334 #endif
49335 
49336 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
49337 		/* Behave like FETCH_OBJ_W */
49338 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
49339 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49340 		}
49341 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49342 	} else {
49343 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49344 	}
49345 }
49346 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49347 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49348 {
49349 	USE_OPLINE
49350 	zval *container, *property, *result;
49351 
49352 	SAVE_OPLINE();
49353 	container = EX_VAR(opline->op1.var);
49354 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49355 	result = EX_VAR(opline->result.var);
49356 	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
49357 
49358 	if (IS_CV == IS_VAR) {
49359 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
49360 	}
49361 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49362 }
49363 
ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49364 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49365 {
49366 	USE_OPLINE
49367 	zval *object, *property, *value, tmp;
49368 	zend_object *zobj;
49369 	zend_string *name, *tmp_name;
49370 
49371 	SAVE_OPLINE();
49372 	object = EX_VAR(opline->op1.var);
49373 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49374 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
49375 
49376 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49377 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
49378 			object = Z_REFVAL_P(object);
49379 			goto assign_object;
49380 		}
49381 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
49382 		value = &EG(uninitialized_zval);
49383 		goto free_and_exit_assign_obj;
49384 	}
49385 
49386 assign_object:
49387 	zobj = Z_OBJ_P(object);
49388 	if (IS_CV == IS_CONST &&
49389 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
49390 		void **cache_slot = CACHE_ADDR(opline->extended_value);
49391 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
49392 		zend_object *zobj = Z_OBJ_P(object);
49393 		zval *property_val;
49394 
49395 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
49396 			property_val = OBJ_PROP(zobj, prop_offset);
49397 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
49398 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
49399 
49400 				if (UNEXPECTED(prop_info != NULL)) {
49401 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
49402 					goto free_and_exit_assign_obj;
49403 				} else {
49404 fast_assign_obj:
49405 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
49406 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49407 						ZVAL_COPY(EX_VAR(opline->result.var), value);
49408 					}
49409 					goto exit_assign_obj;
49410 				}
49411 			}
49412 		} else {
49413 			if (EXPECTED(zobj->properties != NULL)) {
49414 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
49415 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
49416 						GC_DELREF(zobj->properties);
49417 					}
49418 					zobj->properties = zend_array_dup(zobj->properties);
49419 				}
49420 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
49421 				if (property_val) {
49422 					goto fast_assign_obj;
49423 				}
49424 			}
49425 
49426 			if (!zobj->ce->__set) {
49427 
49428 				if (EXPECTED(zobj->properties == NULL)) {
49429 					rebuild_object_properties(zobj);
49430 				}
49431 				if (IS_CONST == IS_CONST) {
49432 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
49433 						Z_ADDREF_P(value);
49434 					}
49435 				} else if (IS_CONST != IS_TMP_VAR) {
49436 					if (Z_ISREF_P(value)) {
49437 						if (IS_CONST == IS_VAR) {
49438 							zend_reference *ref = Z_REF_P(value);
49439 							if (GC_DELREF(ref) == 0) {
49440 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
49441 								efree_size(ref, sizeof(zend_reference));
49442 								value = &tmp;
49443 							} else {
49444 								value = Z_REFVAL_P(value);
49445 								Z_TRY_ADDREF_P(value);
49446 							}
49447 						} else {
49448 							value = Z_REFVAL_P(value);
49449 							Z_TRY_ADDREF_P(value);
49450 						}
49451 					} else if (IS_CONST == IS_CV) {
49452 						Z_TRY_ADDREF_P(value);
49453 					}
49454 				}
49455 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
49456 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49457 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49458 				}
49459 				goto exit_assign_obj;
49460 			}
49461 		}
49462 	}
49463 
49464 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
49465 		ZVAL_DEREF(value);
49466 	}
49467 
49468 	if (IS_CV == IS_CONST) {
49469 		name = Z_STR_P(property);
49470 	} else {
49471 		name = zval_try_get_tmp_string(property, &tmp_name);
49472 		if (UNEXPECTED(!name)) {
49473 
49474 			UNDEF_RESULT();
49475 			goto exit_assign_obj;
49476 		}
49477 	}
49478 
49479 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
49480 
49481 	if (IS_CV != IS_CONST) {
49482 		zend_tmp_string_release(tmp_name);
49483 	}
49484 
49485 free_and_exit_assign_obj:
49486 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49487 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
49488 	}
49489 
49490 exit_assign_obj:
49491 
49492 
49493 	/* assign_obj has two opcodes! */
49494 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49495 }
49496 
49497 /* 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)49498 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49499 {
49500 	USE_OPLINE
49501 	zval *object, *property, *value, tmp;
49502 	zend_object *zobj;
49503 	zend_string *name, *tmp_name;
49504 
49505 	SAVE_OPLINE();
49506 	object = EX_VAR(opline->op1.var);
49507 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49508 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
49509 
49510 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49511 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
49512 			object = Z_REFVAL_P(object);
49513 			goto assign_object;
49514 		}
49515 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
49516 		value = &EG(uninitialized_zval);
49517 		goto free_and_exit_assign_obj;
49518 	}
49519 
49520 assign_object:
49521 	zobj = Z_OBJ_P(object);
49522 	if (IS_CV == IS_CONST &&
49523 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
49524 		void **cache_slot = CACHE_ADDR(opline->extended_value);
49525 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
49526 		zend_object *zobj = Z_OBJ_P(object);
49527 		zval *property_val;
49528 
49529 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
49530 			property_val = OBJ_PROP(zobj, prop_offset);
49531 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
49532 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
49533 
49534 				if (UNEXPECTED(prop_info != NULL)) {
49535 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
49536 					goto free_and_exit_assign_obj;
49537 				} else {
49538 fast_assign_obj:
49539 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
49540 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49541 						ZVAL_COPY(EX_VAR(opline->result.var), value);
49542 					}
49543 					goto exit_assign_obj;
49544 				}
49545 			}
49546 		} else {
49547 			if (EXPECTED(zobj->properties != NULL)) {
49548 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
49549 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
49550 						GC_DELREF(zobj->properties);
49551 					}
49552 					zobj->properties = zend_array_dup(zobj->properties);
49553 				}
49554 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
49555 				if (property_val) {
49556 					goto fast_assign_obj;
49557 				}
49558 			}
49559 
49560 			if (!zobj->ce->__set) {
49561 
49562 				if (EXPECTED(zobj->properties == NULL)) {
49563 					rebuild_object_properties(zobj);
49564 				}
49565 				if (IS_TMP_VAR == IS_CONST) {
49566 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
49567 						Z_ADDREF_P(value);
49568 					}
49569 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
49570 					if (Z_ISREF_P(value)) {
49571 						if (IS_TMP_VAR == IS_VAR) {
49572 							zend_reference *ref = Z_REF_P(value);
49573 							if (GC_DELREF(ref) == 0) {
49574 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
49575 								efree_size(ref, sizeof(zend_reference));
49576 								value = &tmp;
49577 							} else {
49578 								value = Z_REFVAL_P(value);
49579 								Z_TRY_ADDREF_P(value);
49580 							}
49581 						} else {
49582 							value = Z_REFVAL_P(value);
49583 							Z_TRY_ADDREF_P(value);
49584 						}
49585 					} else if (IS_TMP_VAR == IS_CV) {
49586 						Z_TRY_ADDREF_P(value);
49587 					}
49588 				}
49589 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
49590 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49591 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49592 				}
49593 				goto exit_assign_obj;
49594 			}
49595 		}
49596 	}
49597 
49598 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
49599 		ZVAL_DEREF(value);
49600 	}
49601 
49602 	if (IS_CV == IS_CONST) {
49603 		name = Z_STR_P(property);
49604 	} else {
49605 		name = zval_try_get_tmp_string(property, &tmp_name);
49606 		if (UNEXPECTED(!name)) {
49607 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49608 			UNDEF_RESULT();
49609 			goto exit_assign_obj;
49610 		}
49611 	}
49612 
49613 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
49614 
49615 	if (IS_CV != IS_CONST) {
49616 		zend_tmp_string_release(tmp_name);
49617 	}
49618 
49619 free_and_exit_assign_obj:
49620 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49621 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
49622 	}
49623 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49624 exit_assign_obj:
49625 
49626 
49627 	/* assign_obj has two opcodes! */
49628 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49629 }
49630 
49631 /* 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)49632 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49633 {
49634 	USE_OPLINE
49635 	zval *object, *property, *value, tmp;
49636 	zend_object *zobj;
49637 	zend_string *name, *tmp_name;
49638 
49639 	SAVE_OPLINE();
49640 	object = EX_VAR(opline->op1.var);
49641 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49642 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
49643 
49644 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49645 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
49646 			object = Z_REFVAL_P(object);
49647 			goto assign_object;
49648 		}
49649 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
49650 		value = &EG(uninitialized_zval);
49651 		goto free_and_exit_assign_obj;
49652 	}
49653 
49654 assign_object:
49655 	zobj = Z_OBJ_P(object);
49656 	if (IS_CV == IS_CONST &&
49657 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
49658 		void **cache_slot = CACHE_ADDR(opline->extended_value);
49659 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
49660 		zend_object *zobj = Z_OBJ_P(object);
49661 		zval *property_val;
49662 
49663 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
49664 			property_val = OBJ_PROP(zobj, prop_offset);
49665 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
49666 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
49667 
49668 				if (UNEXPECTED(prop_info != NULL)) {
49669 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
49670 					goto free_and_exit_assign_obj;
49671 				} else {
49672 fast_assign_obj:
49673 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
49674 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49675 						ZVAL_COPY(EX_VAR(opline->result.var), value);
49676 					}
49677 					goto exit_assign_obj;
49678 				}
49679 			}
49680 		} else {
49681 			if (EXPECTED(zobj->properties != NULL)) {
49682 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
49683 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
49684 						GC_DELREF(zobj->properties);
49685 					}
49686 					zobj->properties = zend_array_dup(zobj->properties);
49687 				}
49688 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
49689 				if (property_val) {
49690 					goto fast_assign_obj;
49691 				}
49692 			}
49693 
49694 			if (!zobj->ce->__set) {
49695 
49696 				if (EXPECTED(zobj->properties == NULL)) {
49697 					rebuild_object_properties(zobj);
49698 				}
49699 				if (IS_VAR == IS_CONST) {
49700 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
49701 						Z_ADDREF_P(value);
49702 					}
49703 				} else if (IS_VAR != IS_TMP_VAR) {
49704 					if (Z_ISREF_P(value)) {
49705 						if (IS_VAR == IS_VAR) {
49706 							zend_reference *ref = Z_REF_P(value);
49707 							if (GC_DELREF(ref) == 0) {
49708 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
49709 								efree_size(ref, sizeof(zend_reference));
49710 								value = &tmp;
49711 							} else {
49712 								value = Z_REFVAL_P(value);
49713 								Z_TRY_ADDREF_P(value);
49714 							}
49715 						} else {
49716 							value = Z_REFVAL_P(value);
49717 							Z_TRY_ADDREF_P(value);
49718 						}
49719 					} else if (IS_VAR == IS_CV) {
49720 						Z_TRY_ADDREF_P(value);
49721 					}
49722 				}
49723 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
49724 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49725 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49726 				}
49727 				goto exit_assign_obj;
49728 			}
49729 		}
49730 	}
49731 
49732 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
49733 		ZVAL_DEREF(value);
49734 	}
49735 
49736 	if (IS_CV == IS_CONST) {
49737 		name = Z_STR_P(property);
49738 	} else {
49739 		name = zval_try_get_tmp_string(property, &tmp_name);
49740 		if (UNEXPECTED(!name)) {
49741 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49742 			UNDEF_RESULT();
49743 			goto exit_assign_obj;
49744 		}
49745 	}
49746 
49747 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
49748 
49749 	if (IS_CV != IS_CONST) {
49750 		zend_tmp_string_release(tmp_name);
49751 	}
49752 
49753 free_and_exit_assign_obj:
49754 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49755 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
49756 	}
49757 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49758 exit_assign_obj:
49759 
49760 
49761 	/* assign_obj has two opcodes! */
49762 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49763 }
49764 
49765 /* 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)49766 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49767 {
49768 	USE_OPLINE
49769 	zval *object, *property, *value, tmp;
49770 	zend_object *zobj;
49771 	zend_string *name, *tmp_name;
49772 
49773 	SAVE_OPLINE();
49774 	object = EX_VAR(opline->op1.var);
49775 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49776 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
49777 
49778 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49779 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
49780 			object = Z_REFVAL_P(object);
49781 			goto assign_object;
49782 		}
49783 		zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
49784 		value = &EG(uninitialized_zval);
49785 		goto free_and_exit_assign_obj;
49786 	}
49787 
49788 assign_object:
49789 	zobj = Z_OBJ_P(object);
49790 	if (IS_CV == IS_CONST &&
49791 	    EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
49792 		void **cache_slot = CACHE_ADDR(opline->extended_value);
49793 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
49794 		zend_object *zobj = Z_OBJ_P(object);
49795 		zval *property_val;
49796 
49797 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
49798 			property_val = OBJ_PROP(zobj, prop_offset);
49799 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
49800 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
49801 
49802 				if (UNEXPECTED(prop_info != NULL)) {
49803 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
49804 					goto free_and_exit_assign_obj;
49805 				} else {
49806 fast_assign_obj:
49807 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
49808 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49809 						ZVAL_COPY(EX_VAR(opline->result.var), value);
49810 					}
49811 					goto exit_assign_obj;
49812 				}
49813 			}
49814 		} else {
49815 			if (EXPECTED(zobj->properties != NULL)) {
49816 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
49817 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
49818 						GC_DELREF(zobj->properties);
49819 					}
49820 					zobj->properties = zend_array_dup(zobj->properties);
49821 				}
49822 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
49823 				if (property_val) {
49824 					goto fast_assign_obj;
49825 				}
49826 			}
49827 
49828 			if (!zobj->ce->__set) {
49829 
49830 				if (EXPECTED(zobj->properties == NULL)) {
49831 					rebuild_object_properties(zobj);
49832 				}
49833 				if (IS_CV == IS_CONST) {
49834 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
49835 						Z_ADDREF_P(value);
49836 					}
49837 				} else if (IS_CV != IS_TMP_VAR) {
49838 					if (Z_ISREF_P(value)) {
49839 						if (IS_CV == IS_VAR) {
49840 							zend_reference *ref = Z_REF_P(value);
49841 							if (GC_DELREF(ref) == 0) {
49842 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
49843 								efree_size(ref, sizeof(zend_reference));
49844 								value = &tmp;
49845 							} else {
49846 								value = Z_REFVAL_P(value);
49847 								Z_TRY_ADDREF_P(value);
49848 							}
49849 						} else {
49850 							value = Z_REFVAL_P(value);
49851 							Z_TRY_ADDREF_P(value);
49852 						}
49853 					} else if (IS_CV == IS_CV) {
49854 						Z_TRY_ADDREF_P(value);
49855 					}
49856 				}
49857 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
49858 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49859 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49860 				}
49861 				goto exit_assign_obj;
49862 			}
49863 		}
49864 	}
49865 
49866 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
49867 		ZVAL_DEREF(value);
49868 	}
49869 
49870 	if (IS_CV == IS_CONST) {
49871 		name = Z_STR_P(property);
49872 	} else {
49873 		name = zval_try_get_tmp_string(property, &tmp_name);
49874 		if (UNEXPECTED(!name)) {
49875 
49876 			UNDEF_RESULT();
49877 			goto exit_assign_obj;
49878 		}
49879 	}
49880 
49881 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
49882 
49883 	if (IS_CV != IS_CONST) {
49884 		zend_tmp_string_release(tmp_name);
49885 	}
49886 
49887 free_and_exit_assign_obj:
49888 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49889 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
49890 	}
49891 
49892 exit_assign_obj:
49893 
49894 
49895 	/* assign_obj has two opcodes! */
49896 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49897 }
49898 
49899 /* 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)49900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49901 {
49902 	USE_OPLINE
49903 	zval *object_ptr, *orig_object_ptr;
49904 	zval *value;
49905 	zval *variable_ptr;
49906 	zval *dim;
49907 
49908 	SAVE_OPLINE();
49909 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
49910 
49911 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
49912 try_assign_dim_array:
49913 		SEPARATE_ARRAY(object_ptr);
49914 		if (IS_CV == IS_UNUSED) {
49915 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
49916 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
49917 				HashTable *ht = Z_ARRVAL_P(object_ptr);
49918 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
49919 					GC_ADDREF(ht);
49920 				}
49921 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
49922 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
49923 					zend_array_destroy(ht);
49924 					goto assign_dim_error;
49925 				}
49926 			}
49927 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
49928 				ZVAL_DEREF(value);
49929 			}
49930 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
49931 			if (UNEXPECTED(variable_ptr == NULL)) {
49932 				zend_cannot_add_element();
49933 				goto assign_dim_error;
49934 			} else if (IS_CONST == IS_CV) {
49935 				if (Z_REFCOUNTED_P(value)) {
49936 					Z_ADDREF_P(value);
49937 				}
49938 			} else if (IS_CONST == IS_VAR) {
49939 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
49940 				if (value != free_op_data) {
49941 					if (Z_REFCOUNTED_P(value)) {
49942 						Z_ADDREF_P(value);
49943 					}
49944 					zval_ptr_dtor_nogc(free_op_data);
49945 				}
49946 			} else if (IS_CONST == IS_CONST) {
49947 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
49948 					Z_ADDREF_P(value);
49949 				}
49950 			}
49951 		} else {
49952 			dim = EX_VAR(opline->op2.var);
49953 			if (IS_CV == IS_CONST) {
49954 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
49955 			} else {
49956 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
49957 			}
49958 			if (UNEXPECTED(variable_ptr == NULL)) {
49959 				goto assign_dim_error;
49960 			}
49961 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
49962 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
49963 		}
49964 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49965 			ZVAL_COPY(EX_VAR(opline->result.var), value);
49966 		}
49967 	} else {
49968 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
49969 			object_ptr = Z_REFVAL_P(object_ptr);
49970 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
49971 				goto try_assign_dim_array;
49972 			}
49973 		}
49974 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
49975 			zend_object *obj = Z_OBJ_P(object_ptr);
49976 
49977 			GC_ADDREF(obj);
49978 			dim = EX_VAR(opline->op2.var);
49979 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
49980 				dim = ZVAL_UNDEFINED_OP2();
49981 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
49982 				dim++;
49983 			}
49984 
49985 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
49986 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
49987 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
49988 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
49989 				ZVAL_DEREF(value);
49990 			}
49991 
49992 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
49993 
49994 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
49995 				zend_objects_store_del(obj);
49996 			}
49997 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
49998 			if (IS_CV == IS_UNUSED) {
49999 				zend_use_new_element_for_string();
50000 
50001 				UNDEF_RESULT();
50002 			} else {
50003 				dim = EX_VAR(opline->op2.var);
50004 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
50005 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
50006 
50007 			}
50008 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50009 			if (Z_ISREF_P(orig_object_ptr)
50010 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
50011 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
50012 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50013 
50014 				UNDEF_RESULT();
50015 			} else {
50016 				ZVAL_ARR(object_ptr, zend_new_array(8));
50017 				goto try_assign_dim_array;
50018 			}
50019 		} else {
50020 			zend_use_scalar_as_array();
50021 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50022 assign_dim_error:
50023 
50024 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50025 				ZVAL_NULL(EX_VAR(opline->result.var));
50026 			}
50027 		}
50028 	}
50029 	if (IS_CV != IS_UNUSED) {
50030 
50031 	}
50032 
50033 	/* assign_dim has two opcodes! */
50034 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50035 }
50036 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50037 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50038 {
50039 	USE_OPLINE
50040 	zval *object_ptr, *orig_object_ptr;
50041 	zval *value;
50042 	zval *variable_ptr;
50043 	zval *dim;
50044 
50045 	SAVE_OPLINE();
50046 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
50047 
50048 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50049 try_assign_dim_array:
50050 		SEPARATE_ARRAY(object_ptr);
50051 		if (IS_CV == IS_UNUSED) {
50052 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
50053 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
50054 				HashTable *ht = Z_ARRVAL_P(object_ptr);
50055 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
50056 					GC_ADDREF(ht);
50057 				}
50058 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50059 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
50060 					zend_array_destroy(ht);
50061 					goto assign_dim_error;
50062 				}
50063 			}
50064 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
50065 				ZVAL_DEREF(value);
50066 			}
50067 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
50068 			if (UNEXPECTED(variable_ptr == NULL)) {
50069 				zend_cannot_add_element();
50070 				goto assign_dim_error;
50071 			} else if (IS_TMP_VAR == IS_CV) {
50072 				if (Z_REFCOUNTED_P(value)) {
50073 					Z_ADDREF_P(value);
50074 				}
50075 			} else if (IS_TMP_VAR == IS_VAR) {
50076 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
50077 				if (value != free_op_data) {
50078 					if (Z_REFCOUNTED_P(value)) {
50079 						Z_ADDREF_P(value);
50080 					}
50081 					zval_ptr_dtor_nogc(free_op_data);
50082 				}
50083 			} else if (IS_TMP_VAR == IS_CONST) {
50084 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
50085 					Z_ADDREF_P(value);
50086 				}
50087 			}
50088 		} else {
50089 			dim = EX_VAR(opline->op2.var);
50090 			if (IS_CV == IS_CONST) {
50091 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50092 			} else {
50093 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50094 			}
50095 			if (UNEXPECTED(variable_ptr == NULL)) {
50096 				goto assign_dim_error;
50097 			}
50098 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
50099 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
50100 		}
50101 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50102 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50103 		}
50104 	} else {
50105 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50106 			object_ptr = Z_REFVAL_P(object_ptr);
50107 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50108 				goto try_assign_dim_array;
50109 			}
50110 		}
50111 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50112 			zend_object *obj = Z_OBJ_P(object_ptr);
50113 
50114 			GC_ADDREF(obj);
50115 			dim = EX_VAR(opline->op2.var);
50116 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
50117 				dim = ZVAL_UNDEFINED_OP2();
50118 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
50119 				dim++;
50120 			}
50121 
50122 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
50123 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
50124 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50125 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
50126 				ZVAL_DEREF(value);
50127 			}
50128 
50129 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
50130 
50131 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50132 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
50133 				zend_objects_store_del(obj);
50134 			}
50135 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50136 			if (IS_CV == IS_UNUSED) {
50137 				zend_use_new_element_for_string();
50138 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50139 				UNDEF_RESULT();
50140 			} else {
50141 				dim = EX_VAR(opline->op2.var);
50142 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
50143 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
50144 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50145 			}
50146 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50147 			if (Z_ISREF_P(orig_object_ptr)
50148 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
50149 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
50150 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50151 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50152 				UNDEF_RESULT();
50153 			} else {
50154 				ZVAL_ARR(object_ptr, zend_new_array(8));
50155 				goto try_assign_dim_array;
50156 			}
50157 		} else {
50158 			zend_use_scalar_as_array();
50159 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50160 assign_dim_error:
50161 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50162 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50163 				ZVAL_NULL(EX_VAR(opline->result.var));
50164 			}
50165 		}
50166 	}
50167 	if (IS_CV != IS_UNUSED) {
50168 
50169 	}
50170 
50171 	/* assign_dim has two opcodes! */
50172 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50173 }
50174 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50176 {
50177 	USE_OPLINE
50178 	zval *object_ptr, *orig_object_ptr;
50179 	zval *value;
50180 	zval *variable_ptr;
50181 	zval *dim;
50182 
50183 	SAVE_OPLINE();
50184 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
50185 
50186 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50187 try_assign_dim_array:
50188 		SEPARATE_ARRAY(object_ptr);
50189 		if (IS_CV == IS_UNUSED) {
50190 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50191 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
50192 				HashTable *ht = Z_ARRVAL_P(object_ptr);
50193 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
50194 					GC_ADDREF(ht);
50195 				}
50196 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50197 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
50198 					zend_array_destroy(ht);
50199 					goto assign_dim_error;
50200 				}
50201 			}
50202 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
50203 				ZVAL_DEREF(value);
50204 			}
50205 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
50206 			if (UNEXPECTED(variable_ptr == NULL)) {
50207 				zend_cannot_add_element();
50208 				goto assign_dim_error;
50209 			} else if (IS_VAR == IS_CV) {
50210 				if (Z_REFCOUNTED_P(value)) {
50211 					Z_ADDREF_P(value);
50212 				}
50213 			} else if (IS_VAR == IS_VAR) {
50214 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
50215 				if (value != free_op_data) {
50216 					if (Z_REFCOUNTED_P(value)) {
50217 						Z_ADDREF_P(value);
50218 					}
50219 					zval_ptr_dtor_nogc(free_op_data);
50220 				}
50221 			} else if (IS_VAR == IS_CONST) {
50222 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
50223 					Z_ADDREF_P(value);
50224 				}
50225 			}
50226 		} else {
50227 			dim = EX_VAR(opline->op2.var);
50228 			if (IS_CV == IS_CONST) {
50229 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50230 			} else {
50231 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50232 			}
50233 			if (UNEXPECTED(variable_ptr == NULL)) {
50234 				goto assign_dim_error;
50235 			}
50236 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50237 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
50238 		}
50239 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50240 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50241 		}
50242 	} else {
50243 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50244 			object_ptr = Z_REFVAL_P(object_ptr);
50245 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50246 				goto try_assign_dim_array;
50247 			}
50248 		}
50249 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50250 			zend_object *obj = Z_OBJ_P(object_ptr);
50251 
50252 			GC_ADDREF(obj);
50253 			dim = EX_VAR(opline->op2.var);
50254 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
50255 				dim = ZVAL_UNDEFINED_OP2();
50256 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
50257 				dim++;
50258 			}
50259 
50260 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50261 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
50262 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50263 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
50264 				ZVAL_DEREF(value);
50265 			}
50266 
50267 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
50268 
50269 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50270 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
50271 				zend_objects_store_del(obj);
50272 			}
50273 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50274 			if (IS_CV == IS_UNUSED) {
50275 				zend_use_new_element_for_string();
50276 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50277 				UNDEF_RESULT();
50278 			} else {
50279 				dim = EX_VAR(opline->op2.var);
50280 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50281 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
50282 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50283 			}
50284 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50285 			if (Z_ISREF_P(orig_object_ptr)
50286 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
50287 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
50288 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50289 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50290 				UNDEF_RESULT();
50291 			} else {
50292 				ZVAL_ARR(object_ptr, zend_new_array(8));
50293 				goto try_assign_dim_array;
50294 			}
50295 		} else {
50296 			zend_use_scalar_as_array();
50297 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50298 assign_dim_error:
50299 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50300 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50301 				ZVAL_NULL(EX_VAR(opline->result.var));
50302 			}
50303 		}
50304 	}
50305 	if (IS_CV != IS_UNUSED) {
50306 
50307 	}
50308 
50309 	/* assign_dim has two opcodes! */
50310 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50311 }
50312 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50313 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50314 {
50315 	USE_OPLINE
50316 	zval *object_ptr, *orig_object_ptr;
50317 	zval *value;
50318 	zval *variable_ptr;
50319 	zval *dim;
50320 
50321 	SAVE_OPLINE();
50322 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
50323 
50324 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50325 try_assign_dim_array:
50326 		SEPARATE_ARRAY(object_ptr);
50327 		if (IS_CV == IS_UNUSED) {
50328 			value = EX_VAR((opline+1)->op1.var);
50329 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
50330 				HashTable *ht = Z_ARRVAL_P(object_ptr);
50331 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
50332 					GC_ADDREF(ht);
50333 				}
50334 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50335 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
50336 					zend_array_destroy(ht);
50337 					goto assign_dim_error;
50338 				}
50339 			}
50340 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
50341 				ZVAL_DEREF(value);
50342 			}
50343 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
50344 			if (UNEXPECTED(variable_ptr == NULL)) {
50345 				zend_cannot_add_element();
50346 				goto assign_dim_error;
50347 			} else if (IS_CV == IS_CV) {
50348 				if (Z_REFCOUNTED_P(value)) {
50349 					Z_ADDREF_P(value);
50350 				}
50351 			} else if (IS_CV == IS_VAR) {
50352 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
50353 				if (value != free_op_data) {
50354 					if (Z_REFCOUNTED_P(value)) {
50355 						Z_ADDREF_P(value);
50356 					}
50357 					zval_ptr_dtor_nogc(free_op_data);
50358 				}
50359 			} else if (IS_CV == IS_CONST) {
50360 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
50361 					Z_ADDREF_P(value);
50362 				}
50363 			}
50364 		} else {
50365 			dim = EX_VAR(opline->op2.var);
50366 			if (IS_CV == IS_CONST) {
50367 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50368 			} else {
50369 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
50370 			}
50371 			if (UNEXPECTED(variable_ptr == NULL)) {
50372 				goto assign_dim_error;
50373 			}
50374 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
50375 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
50376 		}
50377 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50378 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50379 		}
50380 	} else {
50381 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50382 			object_ptr = Z_REFVAL_P(object_ptr);
50383 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50384 				goto try_assign_dim_array;
50385 			}
50386 		}
50387 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50388 			zend_object *obj = Z_OBJ_P(object_ptr);
50389 
50390 			GC_ADDREF(obj);
50391 			dim = EX_VAR(opline->op2.var);
50392 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
50393 				dim = ZVAL_UNDEFINED_OP2();
50394 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
50395 				dim++;
50396 			}
50397 
50398 			value = EX_VAR((opline+1)->op1.var);
50399 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
50400 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
50401 			} else if (IS_CV & (IS_CV|IS_VAR)) {
50402 				ZVAL_DEREF(value);
50403 			}
50404 
50405 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
50406 
50407 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
50408 				zend_objects_store_del(obj);
50409 			}
50410 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50411 			if (IS_CV == IS_UNUSED) {
50412 				zend_use_new_element_for_string();
50413 
50414 				UNDEF_RESULT();
50415 			} else {
50416 				dim = EX_VAR(opline->op2.var);
50417 				value = EX_VAR((opline+1)->op1.var);
50418 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
50419 
50420 			}
50421 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50422 			if (Z_ISREF_P(orig_object_ptr)
50423 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
50424 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
50425 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50426 
50427 				UNDEF_RESULT();
50428 			} else {
50429 				ZVAL_ARR(object_ptr, zend_new_array(8));
50430 				goto try_assign_dim_array;
50431 			}
50432 		} else {
50433 			zend_use_scalar_as_array();
50434 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50435 assign_dim_error:
50436 
50437 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50438 				ZVAL_NULL(EX_VAR(opline->result.var));
50439 			}
50440 		}
50441 	}
50442 	if (IS_CV != IS_UNUSED) {
50443 
50444 	}
50445 
50446 	/* assign_dim has two opcodes! */
50447 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50448 }
50449 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50450 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50451 {
50452 	USE_OPLINE
50453 	zval *value;
50454 	zval *variable_ptr;
50455 
50456 	SAVE_OPLINE();
50457 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50458 	variable_ptr = EX_VAR(opline->op1.var);
50459 
50460 	value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
50461 	if (UNEXPECTED(0)) {
50462 		ZVAL_COPY(EX_VAR(opline->result.var), value);
50463 	}
50464 
50465 	/* zend_assign_to_variable() always takes care of op2, never free it! */
50466 
50467 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50468 }
50469 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50470 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50471 {
50472 	USE_OPLINE
50473 	zval *value;
50474 	zval *variable_ptr;
50475 
50476 	SAVE_OPLINE();
50477 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50478 	variable_ptr = EX_VAR(opline->op1.var);
50479 
50480 	value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
50481 	if (UNEXPECTED(1)) {
50482 		ZVAL_COPY(EX_VAR(opline->result.var), value);
50483 	}
50484 
50485 	/* zend_assign_to_variable() always takes care of op2, never free it! */
50486 
50487 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50488 }
50489 
ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50490 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50491 {
50492 	USE_OPLINE
50493 	zval *variable_ptr;
50494 	zval *value_ptr;
50495 
50496 	SAVE_OPLINE();
50497 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
50498 	variable_ptr = EX_VAR(opline->op1.var);
50499 
50500 	if (IS_CV == IS_VAR &&
50501 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
50502 
50503 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
50504 		variable_ptr = &EG(uninitialized_zval);
50505 	} else if (IS_CV == IS_VAR &&
50506 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
50507 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
50508 
50509 		variable_ptr = zend_wrong_assign_to_variable_reference(
50510 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50511 	} else {
50512 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
50513 	}
50514 
50515 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50516 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
50517 	}
50518 
50519 
50520 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50521 }
50522 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50523 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50524 {
50525 	USE_OPLINE
50526 	zval *property, *container, *value_ptr;
50527 
50528 	SAVE_OPLINE();
50529 
50530 	container = EX_VAR(opline->op1.var);
50531 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50532 
50533 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
50534 
50535 	if (1) {
50536 		if (IS_CV == IS_UNUSED) {
50537 			if (IS_CV == IS_CONST) {
50538 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50539 			} else {
50540 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50541 			}
50542 		} else {
50543 			if (IS_CV == IS_CONST) {
50544 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50545 			} else {
50546 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50547 			}
50548 		}
50549 	} else {
50550 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50551 	}
50552 
50553 
50554 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
50555 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50556 }
50557 
50558 /* 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)50559 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50560 {
50561 	USE_OPLINE
50562 	zval *property, *container, *value_ptr;
50563 
50564 	SAVE_OPLINE();
50565 
50566 	container = EX_VAR(opline->op1.var);
50567 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50568 
50569 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
50570 
50571 	if (1) {
50572 		if (IS_CV == IS_UNUSED) {
50573 			if (IS_CV == IS_CONST) {
50574 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50575 			} else {
50576 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50577 			}
50578 		} else {
50579 			if (IS_CV == IS_CONST) {
50580 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50581 			} else {
50582 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50583 			}
50584 		}
50585 	} else {
50586 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
50587 	}
50588 
50589 
50590 
50591 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50592 }
50593 
50594 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50596 {
50597 	USE_OPLINE
50598 	zval *op1, *op2;
50599 	zend_string *op1_str, *op2_str, *str;
50600 
50601 
50602 	op1 = EX_VAR(opline->op1.var);
50603 	op2 = EX_VAR(opline->op2.var);
50604 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
50605 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
50606 		zend_string *op1_str = Z_STR_P(op1);
50607 		zend_string *op2_str = Z_STR_P(op2);
50608 		zend_string *str;
50609 
50610 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
50611 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
50612 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
50613 			} else {
50614 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
50615 			}
50616 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50617 				zend_string_release_ex(op1_str, 0);
50618 			}
50619 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
50620 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
50621 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
50622 			} else {
50623 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
50624 			}
50625 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50626 				zend_string_release_ex(op2_str, 0);
50627 			}
50628 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
50629 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
50630 		    size_t len = ZSTR_LEN(op1_str);
50631 
50632 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
50633 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
50634 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
50635 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50636 				zend_string_release_ex(op2_str, 0);
50637 			}
50638 		} else {
50639 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
50640 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
50641 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
50642 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
50643 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50644 				zend_string_release_ex(op1_str, 0);
50645 			}
50646 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50647 				zend_string_release_ex(op2_str, 0);
50648 			}
50649 		}
50650 		ZEND_VM_NEXT_OPCODE();
50651 	}
50652 
50653 	SAVE_OPLINE();
50654 	if (IS_CV == IS_CONST) {
50655 		op1_str = Z_STR_P(op1);
50656 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50657 		op1_str = zend_string_copy(Z_STR_P(op1));
50658 	} else {
50659 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
50660 			ZVAL_UNDEFINED_OP1();
50661 		}
50662 		op1_str = zval_get_string_func(op1);
50663 	}
50664 	if (IS_CV == IS_CONST) {
50665 		op2_str = Z_STR_P(op2);
50666 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50667 		op2_str = zend_string_copy(Z_STR_P(op2));
50668 	} else {
50669 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
50670 			ZVAL_UNDEFINED_OP2();
50671 		}
50672 		op2_str = zval_get_string_func(op2);
50673 	}
50674 	do {
50675 		if (IS_CV != IS_CONST) {
50676 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
50677 				if (IS_CV == IS_CONST) {
50678 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
50679 						GC_ADDREF(op2_str);
50680 					}
50681 				}
50682 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
50683 				zend_string_release_ex(op1_str, 0);
50684 				break;
50685 			}
50686 		}
50687 		if (IS_CV != IS_CONST) {
50688 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
50689 				if (IS_CV == IS_CONST) {
50690 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
50691 						GC_ADDREF(op1_str);
50692 					}
50693 				}
50694 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
50695 				zend_string_release_ex(op2_str, 0);
50696 				break;
50697 			}
50698 		}
50699 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
50700 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
50701 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
50702 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
50703 		if (IS_CV != IS_CONST) {
50704 			zend_string_release_ex(op1_str, 0);
50705 		}
50706 		if (IS_CV != IS_CONST) {
50707 			zend_string_release_ex(op2_str, 0);
50708 		}
50709 	} while (0);
50710 
50711 
50712 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50713 }
50714 
ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50715 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50716 {
50717 	USE_OPLINE
50718 	zval *function_name;
50719 	zval *object;
50720 	zend_function *fbc;
50721 	zend_class_entry *called_scope;
50722 	zend_object *obj;
50723 	zend_execute_data *call;
50724 	uint32_t call_info;
50725 
50726 	SAVE_OPLINE();
50727 
50728 	object = EX_VAR(opline->op1.var);
50729 
50730 	if (IS_CV != IS_CONST) {
50731 		function_name = EX_VAR(opline->op2.var);
50732 	}
50733 
50734 	if (IS_CV != IS_CONST &&
50735 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
50736 		do {
50737 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
50738 				function_name = Z_REFVAL_P(function_name);
50739 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
50740 					break;
50741 				}
50742 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
50743 				ZVAL_UNDEFINED_OP2();
50744 				if (UNEXPECTED(EG(exception) != NULL)) {
50745 
50746 					HANDLE_EXCEPTION();
50747 				}
50748 			}
50749 			zend_throw_error(NULL, "Method name must be a string");
50750 
50751 
50752 			HANDLE_EXCEPTION();
50753 		} while (0);
50754 	}
50755 
50756 	if (IS_CV == IS_UNUSED) {
50757 		obj = Z_OBJ_P(object);
50758 	} else {
50759 		do {
50760 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
50761 				obj = Z_OBJ_P(object);
50762 			} else {
50763 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
50764 					zend_reference *ref = Z_REF_P(object);
50765 
50766 					object = &ref->val;
50767 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
50768 						obj = Z_OBJ_P(object);
50769 						if (IS_CV & IS_VAR) {
50770 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
50771 								efree_size(ref, sizeof(zend_reference));
50772 							} else {
50773 								Z_ADDREF_P(object);
50774 							}
50775 						}
50776 						break;
50777 					}
50778 				}
50779 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
50780 					object = ZVAL_UNDEFINED_OP1();
50781 					if (UNEXPECTED(EG(exception) != NULL)) {
50782 						if (IS_CV != IS_CONST) {
50783 
50784 						}
50785 						HANDLE_EXCEPTION();
50786 					}
50787 				}
50788 				if (IS_CV == IS_CONST) {
50789 					function_name = EX_VAR(opline->op2.var);
50790 				}
50791 				zend_invalid_method_call(object, function_name);
50792 
50793 
50794 				HANDLE_EXCEPTION();
50795 			}
50796 		} while (0);
50797 	}
50798 
50799 	called_scope = obj->ce;
50800 
50801 	if (IS_CV == IS_CONST &&
50802 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
50803 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
50804 	} else {
50805 	    zend_object *orig_obj = obj;
50806 
50807 		if (IS_CV == IS_CONST) {
50808 			function_name = EX_VAR(opline->op2.var);
50809 		}
50810 
50811 		/* First, locate the function. */
50812 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
50813 		if (UNEXPECTED(fbc == NULL)) {
50814 			if (EXPECTED(!EG(exception))) {
50815 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
50816 			}
50817 
50818 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
50819 				zend_objects_store_del(orig_obj);
50820 			}
50821 			HANDLE_EXCEPTION();
50822 		}
50823 		if (IS_CV == IS_CONST &&
50824 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
50825 		    EXPECTED(obj == orig_obj)) {
50826 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
50827 		}
50828 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
50829 			GC_ADDREF(obj); /* For $this pointer */
50830 			if (GC_DELREF(orig_obj) == 0) {
50831 				zend_objects_store_del(orig_obj);
50832 			}
50833 		}
50834 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
50835 			init_func_run_time_cache(&fbc->op_array);
50836 		}
50837 	}
50838 
50839 	if (IS_CV != IS_CONST) {
50840 
50841 	}
50842 
50843 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
50844 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
50845 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
50846 			zend_objects_store_del(obj);
50847 			if (UNEXPECTED(EG(exception))) {
50848 				HANDLE_EXCEPTION();
50849 			}
50850 		}
50851 		/* call static method */
50852 		obj = (zend_object*)called_scope;
50853 		call_info = ZEND_CALL_NESTED_FUNCTION;
50854 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
50855 		if (IS_CV == IS_CV) {
50856 			GC_ADDREF(obj); /* For $this pointer */
50857 		}
50858 		/* CV may be changed indirectly (e.g. when it's a reference) */
50859 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
50860 	}
50861 
50862 	call = zend_vm_stack_push_call_frame(call_info,
50863 		fbc, opline->extended_value, obj);
50864 	call->prev_execute_data = EX(call);
50865 	EX(call) = call;
50866 
50867 	ZEND_VM_NEXT_OPCODE();
50868 }
50869 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50871 {
50872 	USE_OPLINE
50873 	zval *expr_ptr, new_expr;
50874 
50875 	SAVE_OPLINE();
50876 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
50877 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
50878 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
50879 		if (Z_ISREF_P(expr_ptr)) {
50880 			Z_ADDREF_P(expr_ptr);
50881 		} else {
50882 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
50883 		}
50884 
50885 	} else {
50886 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50887 		if (IS_CV == IS_TMP_VAR) {
50888 			/* pass */
50889 		} else if (IS_CV == IS_CONST) {
50890 			Z_TRY_ADDREF_P(expr_ptr);
50891 		} else if (IS_CV == IS_CV) {
50892 			ZVAL_DEREF(expr_ptr);
50893 			Z_TRY_ADDREF_P(expr_ptr);
50894 		} else /* if (IS_CV == IS_VAR) */ {
50895 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
50896 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
50897 
50898 				expr_ptr = Z_REFVAL_P(expr_ptr);
50899 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
50900 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
50901 					expr_ptr = &new_expr;
50902 					efree_size(ref, sizeof(zend_reference));
50903 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
50904 					Z_ADDREF_P(expr_ptr);
50905 				}
50906 			}
50907 		}
50908 	}
50909 
50910 	if (IS_CV != IS_UNUSED) {
50911 		zval *offset = EX_VAR(opline->op2.var);
50912 		zend_string *str;
50913 		zend_ulong hval;
50914 
50915 add_again:
50916 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
50917 			str = Z_STR_P(offset);
50918 			if (IS_CV != IS_CONST) {
50919 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
50920 					goto num_index;
50921 				}
50922 			}
50923 str_index:
50924 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
50925 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
50926 			hval = Z_LVAL_P(offset);
50927 num_index:
50928 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
50929 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
50930 			offset = Z_REFVAL_P(offset);
50931 			goto add_again;
50932 		} else if (Z_TYPE_P(offset) == IS_NULL) {
50933 			str = ZSTR_EMPTY_ALLOC();
50934 			goto str_index;
50935 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
50936 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
50937 			goto num_index;
50938 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
50939 			hval = 0;
50940 			goto num_index;
50941 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
50942 			hval = 1;
50943 			goto num_index;
50944 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
50945 			zend_use_resource_as_offset(offset);
50946 			hval = Z_RES_HANDLE_P(offset);
50947 			goto num_index;
50948 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
50949 			ZVAL_UNDEFINED_OP2();
50950 			str = ZSTR_EMPTY_ALLOC();
50951 			goto str_index;
50952 		} else {
50953 			zend_illegal_offset();
50954 			zval_ptr_dtor_nogc(expr_ptr);
50955 		}
50956 
50957 	} else {
50958 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
50959 			zend_cannot_add_element();
50960 			zval_ptr_dtor_nogc(expr_ptr);
50961 		}
50962 	}
50963 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50964 }
50965 
ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50966 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50967 {
50968 	zval *array;
50969 	uint32_t size;
50970 	USE_OPLINE
50971 
50972 	array = EX_VAR(opline->result.var);
50973 	if (IS_CV != IS_UNUSED) {
50974 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
50975 		ZVAL_ARR(array, zend_new_array(size));
50976 		/* Explicitly initialize array as not-packed if flag is set */
50977 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
50978 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
50979 		}
50980 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
50981 	} else {
50982 		ZVAL_ARR(array, zend_new_array(0));
50983 		ZEND_VM_NEXT_OPCODE();
50984 	}
50985 }
50986 
ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50987 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50988 {
50989 	USE_OPLINE
50990 	zval *container;
50991 	zval *offset;
50992 	zend_ulong hval;
50993 	zend_string *key;
50994 
50995 	SAVE_OPLINE();
50996 	container = EX_VAR(opline->op1.var);
50997 	offset = EX_VAR(opline->op2.var);
50998 
50999 	do {
51000 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51001 			HashTable *ht;
51002 
51003 unset_dim_array:
51004 			SEPARATE_ARRAY(container);
51005 			ht = Z_ARRVAL_P(container);
51006 offset_again:
51007 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
51008 				key = Z_STR_P(offset);
51009 				if (IS_CV != IS_CONST) {
51010 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
51011 						goto num_index_dim;
51012 					}
51013 				}
51014 str_index_dim:
51015 				if (ht == &EG(symbol_table)) {
51016 					zend_delete_global_variable(key);
51017 				} else {
51018 					zend_hash_del(ht, key);
51019 				}
51020 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
51021 				hval = Z_LVAL_P(offset);
51022 num_index_dim:
51023 				zend_hash_index_del(ht, hval);
51024 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
51025 				offset = Z_REFVAL_P(offset);
51026 				goto offset_again;
51027 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
51028 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
51029 				goto num_index_dim;
51030 			} else if (Z_TYPE_P(offset) == IS_NULL) {
51031 				key = ZSTR_EMPTY_ALLOC();
51032 				goto str_index_dim;
51033 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
51034 				hval = 0;
51035 				goto num_index_dim;
51036 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
51037 				hval = 1;
51038 				goto num_index_dim;
51039 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
51040 				hval = Z_RES_HANDLE_P(offset);
51041 				goto num_index_dim;
51042 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
51043 				ZVAL_UNDEFINED_OP2();
51044 				key = ZSTR_EMPTY_ALLOC();
51045 				goto str_index_dim;
51046 			} else {
51047 				zend_type_error("Illegal offset type in unset");
51048 			}
51049 			break;
51050 		} else if (Z_ISREF_P(container)) {
51051 			container = Z_REFVAL_P(container);
51052 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51053 				goto unset_dim_array;
51054 			}
51055 		}
51056 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
51057 			container = ZVAL_UNDEFINED_OP1();
51058 		}
51059 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
51060 			offset = ZVAL_UNDEFINED_OP2();
51061 		}
51062 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
51063 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
51064 				offset++;
51065 			}
51066 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
51067 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
51068 			zend_throw_error(NULL, "Cannot unset string offsets");
51069 		}
51070 	} while (0);
51071 
51072 
51073 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51074 }
51075 
ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51077 {
51078 	USE_OPLINE
51079 	zval *container;
51080 	zval *offset;
51081 	zend_string *name, *tmp_name;
51082 
51083 	SAVE_OPLINE();
51084 	container = EX_VAR(opline->op1.var);
51085 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51086 
51087 	do {
51088 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
51089 			if (Z_ISREF_P(container)) {
51090 				container = Z_REFVAL_P(container);
51091 				if (Z_TYPE_P(container) != IS_OBJECT) {
51092 					if (IS_CV == IS_CV
51093 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
51094 						ZVAL_UNDEFINED_OP1();
51095 					}
51096 					break;
51097 				}
51098 			} else {
51099 				break;
51100 			}
51101 		}
51102 		if (IS_CV == IS_CONST) {
51103 			name = Z_STR_P(offset);
51104 		} else {
51105 			name = zval_try_get_tmp_string(offset, &tmp_name);
51106 			if (UNEXPECTED(!name)) {
51107 				break;
51108 			}
51109 		}
51110 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
51111 		if (IS_CV != IS_CONST) {
51112 			zend_tmp_string_release(tmp_name);
51113 		}
51114 	} while (0);
51115 
51116 
51117 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51118 }
51119 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51120 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51121 {
51122 	USE_OPLINE
51123 	zval *container;
51124 	bool result;
51125 	zend_ulong hval;
51126 	zval *offset;
51127 
51128 	SAVE_OPLINE();
51129 	container = EX_VAR(opline->op1.var);
51130 	offset = EX_VAR(opline->op2.var);
51131 
51132 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51133 		HashTable *ht;
51134 		zval *value;
51135 		zend_string *str;
51136 
51137 isset_dim_obj_array:
51138 		ht = Z_ARRVAL_P(container);
51139 isset_again:
51140 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
51141 			str = Z_STR_P(offset);
51142 			if (IS_CV != IS_CONST) {
51143 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
51144 					goto num_index_prop;
51145 				}
51146 			}
51147 			value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST);
51148 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
51149 			hval = Z_LVAL_P(offset);
51150 num_index_prop:
51151 			value = zend_hash_index_find(ht, hval);
51152 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
51153 			offset = Z_REFVAL_P(offset);
51154 			goto isset_again;
51155 		} else {
51156 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
51157 			if (UNEXPECTED(EG(exception))) {
51158 				result = 0;
51159 				goto isset_dim_obj_exit;
51160 			}
51161 		}
51162 
51163 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
51164 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
51165 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
51166 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
51167 
51168 			if (IS_CV & (IS_CONST|IS_CV)) {
51169 				/* avoid exception check */
51170 
51171 				ZEND_VM_SMART_BRANCH(result, 0);
51172 			}
51173 		} else {
51174 			result = (value == NULL || !i_zend_is_true(value));
51175 		}
51176 		goto isset_dim_obj_exit;
51177 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
51178 		container = Z_REFVAL_P(container);
51179 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51180 			goto isset_dim_obj_array;
51181 		}
51182 	}
51183 
51184 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
51185 		offset++;
51186 	}
51187 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
51188 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
51189 	} else {
51190 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
51191 	}
51192 
51193 isset_dim_obj_exit:
51194 
51195 
51196 	ZEND_VM_SMART_BRANCH(result, 1);
51197 }
51198 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51199 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51200 {
51201 	USE_OPLINE
51202 	zval *container;
51203 	int result;
51204 	zval *offset;
51205 	zend_string *name, *tmp_name;
51206 
51207 	SAVE_OPLINE();
51208 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
51209 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51210 
51211 	if (IS_CV == IS_CONST ||
51212 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
51213 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
51214 			container = Z_REFVAL_P(container);
51215 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
51216 				result = (opline->extended_value & ZEND_ISEMPTY);
51217 				goto isset_object_finish;
51218 			}
51219 		} else {
51220 			result = (opline->extended_value & ZEND_ISEMPTY);
51221 			goto isset_object_finish;
51222 		}
51223 	}
51224 
51225 	if (IS_CV == IS_CONST) {
51226 		name = Z_STR_P(offset);
51227 	} else {
51228 		name = zval_try_get_tmp_string(offset, &tmp_name);
51229 		if (UNEXPECTED(!name)) {
51230 			result = 0;
51231 			goto isset_object_finish;
51232 		}
51233 	}
51234 
51235 	result =
51236 		(opline->extended_value & ZEND_ISEMPTY) ^
51237 		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));
51238 
51239 	if (IS_CV != IS_CONST) {
51240 		zend_tmp_string_release(tmp_name);
51241 	}
51242 
51243 isset_object_finish:
51244 
51245 
51246 	ZEND_VM_SMART_BRANCH(result, 1);
51247 }
51248 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51249 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51250 {
51251 	USE_OPLINE
51252 
51253 	zval *key, *subject;
51254 	HashTable *ht;
51255 	zend_bool result;
51256 
51257 	SAVE_OPLINE();
51258 
51259 	key = EX_VAR(opline->op1.var);
51260 	subject = EX_VAR(opline->op2.var);
51261 
51262 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
51263 array_key_exists_array:
51264 		ht = Z_ARRVAL_P(subject);
51265 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
51266 	} else {
51267 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
51268 			subject = Z_REFVAL_P(subject);
51269 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
51270 				goto array_key_exists_array;
51271 			}
51272 		}
51273 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
51274 		result = 0;
51275 	}
51276 
51277 
51278 	ZEND_VM_SMART_BRANCH(result, 1);
51279 }
51280 
51281 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51282 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51283 {
51284 	USE_OPLINE
51285 
51286 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
51287 
51288 	SAVE_OPLINE();
51289 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
51290 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51291 	}
51292 
51293 	/* Destroy the previously yielded value */
51294 	zval_ptr_dtor(&generator->value);
51295 
51296 	/* Destroy the previously yielded key */
51297 	zval_ptr_dtor(&generator->key);
51298 
51299 	/* Set the new yielded value */
51300 	if (IS_CV != IS_UNUSED) {
51301 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
51302 			/* Constants and temporary variables aren't yieldable by reference,
51303 			 * but we still allow them with a notice. */
51304 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
51305 				zval *value;
51306 
51307 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
51308 
51309 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
51310 				ZVAL_COPY_VALUE(&generator->value, value);
51311 				if (IS_CV == IS_CONST) {
51312 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
51313 						Z_ADDREF(generator->value);
51314 					}
51315 				}
51316 			} else {
51317 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
51318 
51319 				/* If a function call result is yielded and the function did
51320 				 * not return by reference we throw a notice. */
51321 				do {
51322 					if (IS_CV == IS_VAR) {
51323 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
51324 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
51325 						 && !Z_ISREF_P(value_ptr)) {
51326 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
51327 							ZVAL_COPY(&generator->value, value_ptr);
51328 							break;
51329 						}
51330 					}
51331 					if (Z_ISREF_P(value_ptr)) {
51332 						Z_ADDREF_P(value_ptr);
51333 					} else {
51334 						ZVAL_MAKE_REF_EX(value_ptr, 2);
51335 					}
51336 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
51337 				} while (0);
51338 
51339 			}
51340 		} else {
51341 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
51342 
51343 			/* Consts, temporary variables and references need copying */
51344 			if (IS_CV == IS_CONST) {
51345 				ZVAL_COPY_VALUE(&generator->value, value);
51346 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
51347 					Z_ADDREF(generator->value);
51348 				}
51349 			} else if (IS_CV == IS_TMP_VAR) {
51350 				ZVAL_COPY_VALUE(&generator->value, value);
51351             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
51352 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
51353 
51354 			} else {
51355 				ZVAL_COPY_VALUE(&generator->value, value);
51356 				if (IS_CV == IS_CV) {
51357 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
51358 				}
51359 			}
51360 		}
51361 	} else {
51362 		/* If no value was specified yield null */
51363 		ZVAL_NULL(&generator->value);
51364 	}
51365 
51366 	/* Set the new yielded key */
51367 	if (IS_CV != IS_UNUSED) {
51368 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51369 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
51370 			key = Z_REFVAL_P(key);
51371 		}
51372 		ZVAL_COPY(&generator->key, key);
51373 
51374 		if (Z_TYPE(generator->key) == IS_LONG
51375 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
51376 		) {
51377 			generator->largest_used_integer_key = Z_LVAL(generator->key);
51378 		}
51379 	} else {
51380 		/* If no key was specified we use auto-increment keys */
51381 		generator->largest_used_integer_key++;
51382 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
51383 	}
51384 
51385 	if (RETURN_VALUE_USED(opline)) {
51386 		/* If the return value of yield is used set the send
51387 		 * target and initialize it to NULL */
51388 		generator->send_target = EX_VAR(opline->result.var);
51389 		ZVAL_NULL(generator->send_target);
51390 	} else {
51391 		generator->send_target = NULL;
51392 	}
51393 
51394 	/* We increment to the next op, so we are at the correct position when the
51395 	 * generator is resumed. */
51396 	ZEND_VM_INC_OPCODE();
51397 
51398 	/* The GOTO VM uses a local opline variable. We need to set the opline
51399 	 * variable in execute_data so we don't resume at an old position. */
51400 	SAVE_OPLINE();
51401 
51402 	ZEND_VM_RETURN();
51403 }
51404 
ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51405 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51406 {
51407 	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
51408 	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
51409 	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
51410 	USE_OPLINE
51411 	zval *op1, *op2;
51412 	zend_bool result;
51413 
51414 	op1 = EX_VAR(opline->op1.var);
51415 	op2 = EX_VAR(opline->op2.var);
51416 	result = fast_is_identical_function(op1, op2);
51417 	/* Free is a no-op for const/cv */
51418 	ZEND_VM_SMART_BRANCH(result, 0);
51419 }
51420 
ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51421 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51422 {
51423 	USE_OPLINE
51424 	zval *op1, *op2;
51425 	zend_bool result;
51426 
51427 	op1 = EX_VAR(opline->op1.var);
51428 	op2 = EX_VAR(opline->op2.var);
51429 	result = fast_is_identical_function(op1, op2);
51430 	/* Free is a no-op for const/cv */
51431 	ZEND_VM_SMART_BRANCH(!result, 0);
51432 }
51433 
ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51434 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51435 {
51436 	USE_OPLINE
51437 
51438 	SAVE_OPLINE();
51439 	zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
51440 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
51441 }
51442 
51443 
51444 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
51445 # undef ZEND_VM_TAIL_CALL
51446 # undef ZEND_VM_CONTINUE
51447 # undef ZEND_VM_RETURN
51448 
51449 # define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE()
51450 # define ZEND_VM_CONTINUE()      HYBRID_NEXT()
51451 # define ZEND_VM_RETURN()        goto HYBRID_HALT_LABEL
51452 #endif
51453 
51454 
51455 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
51456 # pragma GCC push_options
51457 # pragma GCC optimize("no-gcse")
51458 # pragma GCC optimize("no-ivopts")
51459 #endif
execute_ex(zend_execute_data * ex)51460 ZEND_API void execute_ex(zend_execute_data *ex)
51461 {
51462 	DCL_OPLINE
51463 
51464 #if defined(ZEND_VM_IP_GLOBAL_REG) || defined(ZEND_VM_IP_GLOBAL_REG)
51465 	struct {
51466 #ifdef ZEND_VM_IP_GLOBAL_REG
51467 		const zend_op *orig_opline;
51468 #endif
51469 #ifdef ZEND_VM_FP_GLOBAL_REG
51470 		zend_execute_data *orig_execute_data;
51471 #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
51472 		char hybrid_jit_red_zone[ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE];
51473 #endif
51474 #endif
51475 	} vm_stack_data;
51476 #endif
51477 #ifdef ZEND_VM_IP_GLOBAL_REG
51478 	vm_stack_data.orig_opline = opline;
51479 #endif
51480 #ifdef ZEND_VM_FP_GLOBAL_REG
51481 	vm_stack_data.orig_execute_data = execute_data;
51482 	execute_data = ex;
51483 #else
51484 	zend_execute_data *execute_data = ex;
51485 #endif
51486 #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
51487 	memset(vm_stack_data.hybrid_jit_red_zone, 0, ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE);
51488 	if (zend_touch_vm_stack_data) {
51489 		zend_touch_vm_stack_data(&vm_stack_data);
51490 	}
51491 #endif
51492 
51493 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
51494 	if (UNEXPECTED(execute_data == NULL)) {
51495 		static const void * const labels[] = {
51496 			(void*)&&ZEND_NOP_SPEC_LABEL,
51497 			(void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
51498 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
51499 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
51500 			(void*)&&ZEND_NULL_LABEL,
51501 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
51502 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
51503 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51504 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51505 			(void*)&&ZEND_NULL_LABEL,
51506 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51507 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
51508 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51509 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51510 			(void*)&&ZEND_NULL_LABEL,
51511 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51512 			(void*)&&ZEND_NULL_LABEL,
51513 			(void*)&&ZEND_NULL_LABEL,
51514 			(void*)&&ZEND_NULL_LABEL,
51515 			(void*)&&ZEND_NULL_LABEL,
51516 			(void*)&&ZEND_NULL_LABEL,
51517 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
51518 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51519 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51520 			(void*)&&ZEND_NULL_LABEL,
51521 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51522 			(void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
51523 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
51524 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
51525 			(void*)&&ZEND_NULL_LABEL,
51526 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
51527 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
51528 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
51529 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
51530 			(void*)&&ZEND_NULL_LABEL,
51531 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
51532 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
51533 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
51534 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
51535 			(void*)&&ZEND_NULL_LABEL,
51536 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
51537 			(void*)&&ZEND_NULL_LABEL,
51538 			(void*)&&ZEND_NULL_LABEL,
51539 			(void*)&&ZEND_NULL_LABEL,
51540 			(void*)&&ZEND_NULL_LABEL,
51541 			(void*)&&ZEND_NULL_LABEL,
51542 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
51543 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
51544 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
51545 			(void*)&&ZEND_NULL_LABEL,
51546 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
51547 			(void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
51548 			(void*)&&ZEND_NULL_LABEL,
51549 			(void*)&&ZEND_NULL_LABEL,
51550 			(void*)&&ZEND_NULL_LABEL,
51551 			(void*)&&ZEND_NULL_LABEL,
51552 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
51553 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51554 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51555 			(void*)&&ZEND_NULL_LABEL,
51556 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51557 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
51558 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51559 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51560 			(void*)&&ZEND_NULL_LABEL,
51561 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51562 			(void*)&&ZEND_NULL_LABEL,
51563 			(void*)&&ZEND_NULL_LABEL,
51564 			(void*)&&ZEND_NULL_LABEL,
51565 			(void*)&&ZEND_NULL_LABEL,
51566 			(void*)&&ZEND_NULL_LABEL,
51567 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
51568 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51569 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51570 			(void*)&&ZEND_NULL_LABEL,
51571 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51572 			(void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
51573 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
51574 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
51575 			(void*)&&ZEND_NULL_LABEL,
51576 			(void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
51577 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
51578 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
51579 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
51580 			(void*)&&ZEND_NULL_LABEL,
51581 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
51582 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
51583 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
51584 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
51585 			(void*)&&ZEND_NULL_LABEL,
51586 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
51587 			(void*)&&ZEND_NULL_LABEL,
51588 			(void*)&&ZEND_NULL_LABEL,
51589 			(void*)&&ZEND_NULL_LABEL,
51590 			(void*)&&ZEND_NULL_LABEL,
51591 			(void*)&&ZEND_NULL_LABEL,
51592 			(void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
51593 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
51594 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
51595 			(void*)&&ZEND_NULL_LABEL,
51596 			(void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
51597 			(void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
51598 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
51599 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
51600 			(void*)&&ZEND_NULL_LABEL,
51601 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
51602 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
51603 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51604 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51605 			(void*)&&ZEND_NULL_LABEL,
51606 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51607 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
51608 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51609 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51610 			(void*)&&ZEND_NULL_LABEL,
51611 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51612 			(void*)&&ZEND_NULL_LABEL,
51613 			(void*)&&ZEND_NULL_LABEL,
51614 			(void*)&&ZEND_NULL_LABEL,
51615 			(void*)&&ZEND_NULL_LABEL,
51616 			(void*)&&ZEND_NULL_LABEL,
51617 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
51618 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51619 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51620 			(void*)&&ZEND_NULL_LABEL,
51621 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
51622 			(void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
51623 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
51624 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
51625 			(void*)&&ZEND_NULL_LABEL,
51626 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
51627 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
51628 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51629 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51630 			(void*)&&ZEND_NULL_LABEL,
51631 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51632 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
51633 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51634 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51635 			(void*)&&ZEND_NULL_LABEL,
51636 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51637 			(void*)&&ZEND_NULL_LABEL,
51638 			(void*)&&ZEND_NULL_LABEL,
51639 			(void*)&&ZEND_NULL_LABEL,
51640 			(void*)&&ZEND_NULL_LABEL,
51641 			(void*)&&ZEND_NULL_LABEL,
51642 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
51643 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51644 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51645 			(void*)&&ZEND_NULL_LABEL,
51646 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
51647 			(void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
51648 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
51649 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
51650 			(void*)&&ZEND_NULL_LABEL,
51651 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
51652 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
51653 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51654 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51655 			(void*)&&ZEND_NULL_LABEL,
51656 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51657 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
51658 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51659 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51660 			(void*)&&ZEND_NULL_LABEL,
51661 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51662 			(void*)&&ZEND_NULL_LABEL,
51663 			(void*)&&ZEND_NULL_LABEL,
51664 			(void*)&&ZEND_NULL_LABEL,
51665 			(void*)&&ZEND_NULL_LABEL,
51666 			(void*)&&ZEND_NULL_LABEL,
51667 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
51668 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51669 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51670 			(void*)&&ZEND_NULL_LABEL,
51671 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51672 			(void*)&&ZEND_NULL_LABEL,
51673 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
51674 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
51675 			(void*)&&ZEND_NULL_LABEL,
51676 			(void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
51677 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
51678 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
51679 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
51680 			(void*)&&ZEND_NULL_LABEL,
51681 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
51682 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
51683 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
51684 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
51685 			(void*)&&ZEND_NULL_LABEL,
51686 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
51687 			(void*)&&ZEND_NULL_LABEL,
51688 			(void*)&&ZEND_NULL_LABEL,
51689 			(void*)&&ZEND_NULL_LABEL,
51690 			(void*)&&ZEND_NULL_LABEL,
51691 			(void*)&&ZEND_NULL_LABEL,
51692 			(void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
51693 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
51694 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
51695 			(void*)&&ZEND_NULL_LABEL,
51696 			(void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
51697 			(void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
51698 			(void*)&&ZEND_NULL_LABEL,
51699 			(void*)&&ZEND_NULL_LABEL,
51700 			(void*)&&ZEND_NULL_LABEL,
51701 			(void*)&&ZEND_NULL_LABEL,
51702 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
51703 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51704 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51705 			(void*)&&ZEND_NULL_LABEL,
51706 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51707 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
51708 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51709 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51710 			(void*)&&ZEND_NULL_LABEL,
51711 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51712 			(void*)&&ZEND_NULL_LABEL,
51713 			(void*)&&ZEND_NULL_LABEL,
51714 			(void*)&&ZEND_NULL_LABEL,
51715 			(void*)&&ZEND_NULL_LABEL,
51716 			(void*)&&ZEND_NULL_LABEL,
51717 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
51718 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51719 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51720 			(void*)&&ZEND_NULL_LABEL,
51721 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51722 			(void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
51723 			(void*)&&ZEND_NULL_LABEL,
51724 			(void*)&&ZEND_NULL_LABEL,
51725 			(void*)&&ZEND_NULL_LABEL,
51726 			(void*)&&ZEND_NULL_LABEL,
51727 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
51728 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
51729 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
51730 			(void*)&&ZEND_NULL_LABEL,
51731 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
51732 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
51733 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
51734 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
51735 			(void*)&&ZEND_NULL_LABEL,
51736 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
51737 			(void*)&&ZEND_NULL_LABEL,
51738 			(void*)&&ZEND_NULL_LABEL,
51739 			(void*)&&ZEND_NULL_LABEL,
51740 			(void*)&&ZEND_NULL_LABEL,
51741 			(void*)&&ZEND_NULL_LABEL,
51742 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
51743 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
51744 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
51745 			(void*)&&ZEND_NULL_LABEL,
51746 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
51747 			(void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
51748 			(void*)&&ZEND_NULL_LABEL,
51749 			(void*)&&ZEND_NULL_LABEL,
51750 			(void*)&&ZEND_NULL_LABEL,
51751 			(void*)&&ZEND_NULL_LABEL,
51752 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
51753 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51754 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51755 			(void*)&&ZEND_NULL_LABEL,
51756 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51757 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
51758 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51759 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51760 			(void*)&&ZEND_NULL_LABEL,
51761 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51762 			(void*)&&ZEND_NULL_LABEL,
51763 			(void*)&&ZEND_NULL_LABEL,
51764 			(void*)&&ZEND_NULL_LABEL,
51765 			(void*)&&ZEND_NULL_LABEL,
51766 			(void*)&&ZEND_NULL_LABEL,
51767 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
51768 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51769 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51770 			(void*)&&ZEND_NULL_LABEL,
51771 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
51772 			(void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
51773 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
51774 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
51775 			(void*)&&ZEND_NULL_LABEL,
51776 			(void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
51777 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
51778 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
51779 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
51780 			(void*)&&ZEND_NULL_LABEL,
51781 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
51782 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
51783 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
51784 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
51785 			(void*)&&ZEND_NULL_LABEL,
51786 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
51787 			(void*)&&ZEND_NULL_LABEL,
51788 			(void*)&&ZEND_NULL_LABEL,
51789 			(void*)&&ZEND_NULL_LABEL,
51790 			(void*)&&ZEND_NULL_LABEL,
51791 			(void*)&&ZEND_NULL_LABEL,
51792 			(void*)&&ZEND_POW_SPEC_CV_CONST_LABEL,
51793 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
51794 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
51795 			(void*)&&ZEND_NULL_LABEL,
51796 			(void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
51797 			(void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
51798 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
51799 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
51800 			(void*)&&ZEND_NULL_LABEL,
51801 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
51802 			(void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
51803 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
51804 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
51805 			(void*)&&ZEND_NULL_LABEL,
51806 			(void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
51807 			(void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
51808 			(void*)&&ZEND_NULL_LABEL,
51809 			(void*)&&ZEND_NULL_LABEL,
51810 			(void*)&&ZEND_NULL_LABEL,
51811 			(void*)&&ZEND_NULL_LABEL,
51812 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
51813 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
51814 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
51815 			(void*)&&ZEND_NULL_LABEL,
51816 			(void*)&&ZEND_NULL_LABEL,
51817 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
51818 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
51819 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
51820 			(void*)&&ZEND_NULL_LABEL,
51821 			(void*)&&ZEND_NULL_LABEL,
51822 			(void*)&&ZEND_NULL_LABEL,
51823 			(void*)&&ZEND_NULL_LABEL,
51824 			(void*)&&ZEND_NULL_LABEL,
51825 			(void*)&&ZEND_NULL_LABEL,
51826 			(void*)&&ZEND_NULL_LABEL,
51827 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
51828 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
51829 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
51830 			(void*)&&ZEND_NULL_LABEL,
51831 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
51832 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
51833 			(void*)&&ZEND_NULL_LABEL,
51834 			(void*)&&ZEND_NULL_LABEL,
51835 			(void*)&&ZEND_NULL_LABEL,
51836 			(void*)&&ZEND_NULL_LABEL,
51837 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
51838 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
51839 			(void*)&&ZEND_NULL_LABEL,
51840 			(void*)&&ZEND_NULL_LABEL,
51841 			(void*)&&ZEND_NULL_LABEL,
51842 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
51843 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
51844 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
51845 			(void*)&&ZEND_NULL_LABEL,
51846 			(void*)&&ZEND_NULL_LABEL,
51847 			(void*)&&ZEND_NULL_LABEL,
51848 			(void*)&&ZEND_NULL_LABEL,
51849 			(void*)&&ZEND_NULL_LABEL,
51850 			(void*)&&ZEND_NULL_LABEL,
51851 			(void*)&&ZEND_NULL_LABEL,
51852 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
51853 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
51854 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
51855 			(void*)&&ZEND_NULL_LABEL,
51856 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
51857 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
51858 			(void*)&&ZEND_NULL_LABEL,
51859 			(void*)&&ZEND_NULL_LABEL,
51860 			(void*)&&ZEND_NULL_LABEL,
51861 			(void*)&&ZEND_NULL_LABEL,
51862 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
51863 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
51864 			(void*)&&ZEND_NULL_LABEL,
51865 			(void*)&&ZEND_NULL_LABEL,
51866 			(void*)&&ZEND_NULL_LABEL,
51867 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
51868 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
51869 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
51870 			(void*)&&ZEND_NULL_LABEL,
51871 			(void*)&&ZEND_NULL_LABEL,
51872 			(void*)&&ZEND_NULL_LABEL,
51873 			(void*)&&ZEND_NULL_LABEL,
51874 			(void*)&&ZEND_NULL_LABEL,
51875 			(void*)&&ZEND_NULL_LABEL,
51876 			(void*)&&ZEND_NULL_LABEL,
51877 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
51878 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
51879 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
51880 			(void*)&&ZEND_NULL_LABEL,
51881 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
51882 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
51883 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
51884 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
51885 			(void*)&&ZEND_NULL_LABEL,
51886 			(void*)&&ZEND_NULL_LABEL,
51887 			(void*)&&ZEND_NULL_LABEL,
51888 			(void*)&&ZEND_NULL_LABEL,
51889 			(void*)&&ZEND_NULL_LABEL,
51890 			(void*)&&ZEND_NULL_LABEL,
51891 			(void*)&&ZEND_NULL_LABEL,
51892 			(void*)&&ZEND_NULL_LABEL,
51893 			(void*)&&ZEND_NULL_LABEL,
51894 			(void*)&&ZEND_NULL_LABEL,
51895 			(void*)&&ZEND_NULL_LABEL,
51896 			(void*)&&ZEND_NULL_LABEL,
51897 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
51898 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
51899 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
51900 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
51901 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
51902 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
51903 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
51904 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
51905 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
51906 			(void*)&&ZEND_NULL_LABEL,
51907 			(void*)&&ZEND_NULL_LABEL,
51908 			(void*)&&ZEND_NULL_LABEL,
51909 			(void*)&&ZEND_NULL_LABEL,
51910 			(void*)&&ZEND_NULL_LABEL,
51911 			(void*)&&ZEND_NULL_LABEL,
51912 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
51913 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
51914 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
51915 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
51916 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
51917 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
51918 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
51919 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
51920 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
51921 			(void*)&&ZEND_NULL_LABEL,
51922 			(void*)&&ZEND_NULL_LABEL,
51923 			(void*)&&ZEND_NULL_LABEL,
51924 			(void*)&&ZEND_NULL_LABEL,
51925 			(void*)&&ZEND_NULL_LABEL,
51926 			(void*)&&ZEND_NULL_LABEL,
51927 			(void*)&&ZEND_NULL_LABEL,
51928 			(void*)&&ZEND_NULL_LABEL,
51929 			(void*)&&ZEND_NULL_LABEL,
51930 			(void*)&&ZEND_NULL_LABEL,
51931 			(void*)&&ZEND_NULL_LABEL,
51932 			(void*)&&ZEND_NULL_LABEL,
51933 			(void*)&&ZEND_NULL_LABEL,
51934 			(void*)&&ZEND_NULL_LABEL,
51935 			(void*)&&ZEND_NULL_LABEL,
51936 			(void*)&&ZEND_NULL_LABEL,
51937 			(void*)&&ZEND_NULL_LABEL,
51938 			(void*)&&ZEND_NULL_LABEL,
51939 			(void*)&&ZEND_NULL_LABEL,
51940 			(void*)&&ZEND_NULL_LABEL,
51941 			(void*)&&ZEND_NULL_LABEL,
51942 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
51943 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
51944 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
51945 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
51946 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
51947 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
51948 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
51949 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
51950 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
51951 			(void*)&&ZEND_NULL_LABEL,
51952 			(void*)&&ZEND_NULL_LABEL,
51953 			(void*)&&ZEND_NULL_LABEL,
51954 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
51955 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
51956 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
51957 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
51958 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
51959 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
51960 			(void*)&&ZEND_NULL_LABEL,
51961 			(void*)&&ZEND_NULL_LABEL,
51962 			(void*)&&ZEND_NULL_LABEL,
51963 			(void*)&&ZEND_NULL_LABEL,
51964 			(void*)&&ZEND_NULL_LABEL,
51965 			(void*)&&ZEND_NULL_LABEL,
51966 			(void*)&&ZEND_NULL_LABEL,
51967 			(void*)&&ZEND_NULL_LABEL,
51968 			(void*)&&ZEND_NULL_LABEL,
51969 			(void*)&&ZEND_NULL_LABEL,
51970 			(void*)&&ZEND_NULL_LABEL,
51971 			(void*)&&ZEND_NULL_LABEL,
51972 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
51973 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
51974 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
51975 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
51976 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
51977 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
51978 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
51979 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
51980 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
51981 			(void*)&&ZEND_NULL_LABEL,
51982 			(void*)&&ZEND_NULL_LABEL,
51983 			(void*)&&ZEND_NULL_LABEL,
51984 			(void*)&&ZEND_NULL_LABEL,
51985 			(void*)&&ZEND_NULL_LABEL,
51986 			(void*)&&ZEND_NULL_LABEL,
51987 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
51988 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
51989 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
51990 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
51991 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
51992 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
51993 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
51994 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
51995 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
51996 			(void*)&&ZEND_NULL_LABEL,
51997 			(void*)&&ZEND_NULL_LABEL,
51998 			(void*)&&ZEND_NULL_LABEL,
51999 			(void*)&&ZEND_NULL_LABEL,
52000 			(void*)&&ZEND_NULL_LABEL,
52001 			(void*)&&ZEND_NULL_LABEL,
52002 			(void*)&&ZEND_NULL_LABEL,
52003 			(void*)&&ZEND_NULL_LABEL,
52004 			(void*)&&ZEND_NULL_LABEL,
52005 			(void*)&&ZEND_NULL_LABEL,
52006 			(void*)&&ZEND_NULL_LABEL,
52007 			(void*)&&ZEND_NULL_LABEL,
52008 			(void*)&&ZEND_NULL_LABEL,
52009 			(void*)&&ZEND_NULL_LABEL,
52010 			(void*)&&ZEND_NULL_LABEL,
52011 			(void*)&&ZEND_NULL_LABEL,
52012 			(void*)&&ZEND_NULL_LABEL,
52013 			(void*)&&ZEND_NULL_LABEL,
52014 			(void*)&&ZEND_NULL_LABEL,
52015 			(void*)&&ZEND_NULL_LABEL,
52016 			(void*)&&ZEND_NULL_LABEL,
52017 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
52018 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
52019 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
52020 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
52021 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
52022 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
52023 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
52024 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
52025 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
52026 			(void*)&&ZEND_NULL_LABEL,
52027 			(void*)&&ZEND_NULL_LABEL,
52028 			(void*)&&ZEND_NULL_LABEL,
52029 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
52030 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
52031 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
52032 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
52033 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
52034 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
52035 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
52036 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52037 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52038 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
52039 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52040 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52041 			(void*)&&ZEND_NULL_LABEL,
52042 			(void*)&&ZEND_NULL_LABEL,
52043 			(void*)&&ZEND_NULL_LABEL,
52044 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
52045 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52046 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52047 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
52048 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52049 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52050 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52051 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52052 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52053 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52054 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52055 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52056 			(void*)&&ZEND_NULL_LABEL,
52057 			(void*)&&ZEND_NULL_LABEL,
52058 			(void*)&&ZEND_NULL_LABEL,
52059 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52060 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52061 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52062 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
52063 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52064 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52065 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52066 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52067 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52068 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52069 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52070 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52071 			(void*)&&ZEND_NULL_LABEL,
52072 			(void*)&&ZEND_NULL_LABEL,
52073 			(void*)&&ZEND_NULL_LABEL,
52074 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52075 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52076 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52077 			(void*)&&ZEND_NULL_LABEL,
52078 			(void*)&&ZEND_NULL_LABEL,
52079 			(void*)&&ZEND_NULL_LABEL,
52080 			(void*)&&ZEND_NULL_LABEL,
52081 			(void*)&&ZEND_NULL_LABEL,
52082 			(void*)&&ZEND_NULL_LABEL,
52083 			(void*)&&ZEND_NULL_LABEL,
52084 			(void*)&&ZEND_NULL_LABEL,
52085 			(void*)&&ZEND_NULL_LABEL,
52086 			(void*)&&ZEND_NULL_LABEL,
52087 			(void*)&&ZEND_NULL_LABEL,
52088 			(void*)&&ZEND_NULL_LABEL,
52089 			(void*)&&ZEND_NULL_LABEL,
52090 			(void*)&&ZEND_NULL_LABEL,
52091 			(void*)&&ZEND_NULL_LABEL,
52092 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
52093 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52094 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52095 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52096 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52097 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52098 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52099 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52100 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52101 			(void*)&&ZEND_NULL_LABEL,
52102 			(void*)&&ZEND_NULL_LABEL,
52103 			(void*)&&ZEND_NULL_LABEL,
52104 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
52105 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52106 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52107 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
52108 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
52109 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
52110 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
52111 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52112 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52113 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
52114 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52115 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52116 			(void*)&&ZEND_NULL_LABEL,
52117 			(void*)&&ZEND_NULL_LABEL,
52118 			(void*)&&ZEND_NULL_LABEL,
52119 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
52120 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52121 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52122 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
52123 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52124 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52125 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52126 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52127 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52128 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52129 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52130 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52131 			(void*)&&ZEND_NULL_LABEL,
52132 			(void*)&&ZEND_NULL_LABEL,
52133 			(void*)&&ZEND_NULL_LABEL,
52134 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52135 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52136 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52137 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
52138 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52139 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52140 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52141 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52142 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52143 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52144 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52145 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52146 			(void*)&&ZEND_NULL_LABEL,
52147 			(void*)&&ZEND_NULL_LABEL,
52148 			(void*)&&ZEND_NULL_LABEL,
52149 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52150 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52151 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52152 			(void*)&&ZEND_NULL_LABEL,
52153 			(void*)&&ZEND_NULL_LABEL,
52154 			(void*)&&ZEND_NULL_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_NULL_LABEL,
52161 			(void*)&&ZEND_NULL_LABEL,
52162 			(void*)&&ZEND_NULL_LABEL,
52163 			(void*)&&ZEND_NULL_LABEL,
52164 			(void*)&&ZEND_NULL_LABEL,
52165 			(void*)&&ZEND_NULL_LABEL,
52166 			(void*)&&ZEND_NULL_LABEL,
52167 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
52168 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52169 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52170 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52171 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52172 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52173 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52174 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52175 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52176 			(void*)&&ZEND_NULL_LABEL,
52177 			(void*)&&ZEND_NULL_LABEL,
52178 			(void*)&&ZEND_NULL_LABEL,
52179 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
52180 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52181 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52182 			(void*)&&ZEND_NULL_LABEL,
52183 			(void*)&&ZEND_NULL_LABEL,
52184 			(void*)&&ZEND_NULL_LABEL,
52185 			(void*)&&ZEND_NULL_LABEL,
52186 			(void*)&&ZEND_NULL_LABEL,
52187 			(void*)&&ZEND_NULL_LABEL,
52188 			(void*)&&ZEND_NULL_LABEL,
52189 			(void*)&&ZEND_NULL_LABEL,
52190 			(void*)&&ZEND_NULL_LABEL,
52191 			(void*)&&ZEND_NULL_LABEL,
52192 			(void*)&&ZEND_NULL_LABEL,
52193 			(void*)&&ZEND_NULL_LABEL,
52194 			(void*)&&ZEND_NULL_LABEL,
52195 			(void*)&&ZEND_NULL_LABEL,
52196 			(void*)&&ZEND_NULL_LABEL,
52197 			(void*)&&ZEND_NULL_LABEL,
52198 			(void*)&&ZEND_NULL_LABEL,
52199 			(void*)&&ZEND_NULL_LABEL,
52200 			(void*)&&ZEND_NULL_LABEL,
52201 			(void*)&&ZEND_NULL_LABEL,
52202 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
52203 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
52204 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
52205 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
52206 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
52207 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
52208 			(void*)&&ZEND_NULL_LABEL,
52209 			(void*)&&ZEND_NULL_LABEL,
52210 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
52211 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL,
52212 			(void*)&&ZEND_NULL_LABEL,
52213 			(void*)&&ZEND_NULL_LABEL,
52214 			(void*)&&ZEND_NULL_LABEL,
52215 			(void*)&&ZEND_NULL_LABEL,
52216 			(void*)&&ZEND_NULL_LABEL,
52217 			(void*)&&ZEND_NULL_LABEL,
52218 			(void*)&&ZEND_NULL_LABEL,
52219 			(void*)&&ZEND_NULL_LABEL,
52220 			(void*)&&ZEND_NULL_LABEL,
52221 			(void*)&&ZEND_NULL_LABEL,
52222 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
52223 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
52224 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
52225 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
52226 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
52227 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
52228 			(void*)&&ZEND_NULL_LABEL,
52229 			(void*)&&ZEND_NULL_LABEL,
52230 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
52231 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL,
52232 			(void*)&&ZEND_NULL_LABEL,
52233 			(void*)&&ZEND_NULL_LABEL,
52234 			(void*)&&ZEND_NULL_LABEL,
52235 			(void*)&&ZEND_NULL_LABEL,
52236 			(void*)&&ZEND_NULL_LABEL,
52237 			(void*)&&ZEND_NULL_LABEL,
52238 			(void*)&&ZEND_NULL_LABEL,
52239 			(void*)&&ZEND_NULL_LABEL,
52240 			(void*)&&ZEND_NULL_LABEL,
52241 			(void*)&&ZEND_NULL_LABEL,
52242 			(void*)&&ZEND_NULL_LABEL,
52243 			(void*)&&ZEND_NULL_LABEL,
52244 			(void*)&&ZEND_NULL_LABEL,
52245 			(void*)&&ZEND_NULL_LABEL,
52246 			(void*)&&ZEND_NULL_LABEL,
52247 			(void*)&&ZEND_NULL_LABEL,
52248 			(void*)&&ZEND_NULL_LABEL,
52249 			(void*)&&ZEND_NULL_LABEL,
52250 			(void*)&&ZEND_NULL_LABEL,
52251 			(void*)&&ZEND_NULL_LABEL,
52252 			(void*)&&ZEND_NULL_LABEL,
52253 			(void*)&&ZEND_NULL_LABEL,
52254 			(void*)&&ZEND_NULL_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_NULL_LABEL,
52261 			(void*)&&ZEND_NULL_LABEL,
52262 			(void*)&&ZEND_NULL_LABEL,
52263 			(void*)&&ZEND_NULL_LABEL,
52264 			(void*)&&ZEND_NULL_LABEL,
52265 			(void*)&&ZEND_NULL_LABEL,
52266 			(void*)&&ZEND_NULL_LABEL,
52267 			(void*)&&ZEND_NULL_LABEL,
52268 			(void*)&&ZEND_NULL_LABEL,
52269 			(void*)&&ZEND_NULL_LABEL,
52270 			(void*)&&ZEND_NULL_LABEL,
52271 			(void*)&&ZEND_NULL_LABEL,
52272 			(void*)&&ZEND_NULL_LABEL,
52273 			(void*)&&ZEND_NULL_LABEL,
52274 			(void*)&&ZEND_NULL_LABEL,
52275 			(void*)&&ZEND_NULL_LABEL,
52276 			(void*)&&ZEND_NULL_LABEL,
52277 			(void*)&&ZEND_NULL_LABEL,
52278 			(void*)&&ZEND_NULL_LABEL,
52279 			(void*)&&ZEND_NULL_LABEL,
52280 			(void*)&&ZEND_NULL_LABEL,
52281 			(void*)&&ZEND_NULL_LABEL,
52282 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
52283 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
52284 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
52285 			(void*)&&ZEND_NULL_LABEL,
52286 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
52287 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
52288 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
52289 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
52290 			(void*)&&ZEND_NULL_LABEL,
52291 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
52292 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
52293 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
52294 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
52295 			(void*)&&ZEND_NULL_LABEL,
52296 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
52297 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
52298 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
52299 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
52300 			(void*)&&ZEND_NULL_LABEL,
52301 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
52302 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
52303 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
52304 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
52305 			(void*)&&ZEND_NULL_LABEL,
52306 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL,
52307 			(void*)&&ZEND_NULL_LABEL,
52308 			(void*)&&ZEND_NULL_LABEL,
52309 			(void*)&&ZEND_NULL_LABEL,
52310 			(void*)&&ZEND_NULL_LABEL,
52311 			(void*)&&ZEND_NULL_LABEL,
52312 			(void*)&&ZEND_NULL_LABEL,
52313 			(void*)&&ZEND_NULL_LABEL,
52314 			(void*)&&ZEND_NULL_LABEL,
52315 			(void*)&&ZEND_NULL_LABEL,
52316 			(void*)&&ZEND_NULL_LABEL,
52317 			(void*)&&ZEND_NULL_LABEL,
52318 			(void*)&&ZEND_NULL_LABEL,
52319 			(void*)&&ZEND_NULL_LABEL,
52320 			(void*)&&ZEND_NULL_LABEL,
52321 			(void*)&&ZEND_NULL_LABEL,
52322 			(void*)&&ZEND_NULL_LABEL,
52323 			(void*)&&ZEND_NULL_LABEL,
52324 			(void*)&&ZEND_NULL_LABEL,
52325 			(void*)&&ZEND_NULL_LABEL,
52326 			(void*)&&ZEND_NULL_LABEL,
52327 			(void*)&&ZEND_NULL_LABEL,
52328 			(void*)&&ZEND_NULL_LABEL,
52329 			(void*)&&ZEND_NULL_LABEL,
52330 			(void*)&&ZEND_NULL_LABEL,
52331 			(void*)&&ZEND_NULL_LABEL,
52332 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
52333 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
52334 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
52335 			(void*)&&ZEND_NULL_LABEL,
52336 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
52337 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
52338 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
52339 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
52340 			(void*)&&ZEND_NULL_LABEL,
52341 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
52342 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
52343 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
52344 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
52345 			(void*)&&ZEND_NULL_LABEL,
52346 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
52347 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
52348 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
52349 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
52350 			(void*)&&ZEND_NULL_LABEL,
52351 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
52352 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
52353 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
52354 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
52355 			(void*)&&ZEND_NULL_LABEL,
52356 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL,
52357 			(void*)&&ZEND_NULL_LABEL,
52358 			(void*)&&ZEND_NULL_LABEL,
52359 			(void*)&&ZEND_NULL_LABEL,
52360 			(void*)&&ZEND_NULL_LABEL,
52361 			(void*)&&ZEND_NULL_LABEL,
52362 			(void*)&&ZEND_NULL_LABEL,
52363 			(void*)&&ZEND_NULL_LABEL,
52364 			(void*)&&ZEND_NULL_LABEL,
52365 			(void*)&&ZEND_NULL_LABEL,
52366 			(void*)&&ZEND_NULL_LABEL,
52367 			(void*)&&ZEND_NULL_LABEL,
52368 			(void*)&&ZEND_NULL_LABEL,
52369 			(void*)&&ZEND_NULL_LABEL,
52370 			(void*)&&ZEND_NULL_LABEL,
52371 			(void*)&&ZEND_NULL_LABEL,
52372 			(void*)&&ZEND_NULL_LABEL,
52373 			(void*)&&ZEND_NULL_LABEL,
52374 			(void*)&&ZEND_NULL_LABEL,
52375 			(void*)&&ZEND_NULL_LABEL,
52376 			(void*)&&ZEND_NULL_LABEL,
52377 			(void*)&&ZEND_NULL_LABEL,
52378 			(void*)&&ZEND_NULL_LABEL,
52379 			(void*)&&ZEND_NULL_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_NULL_LABEL,
52386 			(void*)&&ZEND_NULL_LABEL,
52387 			(void*)&&ZEND_NULL_LABEL,
52388 			(void*)&&ZEND_NULL_LABEL,
52389 			(void*)&&ZEND_NULL_LABEL,
52390 			(void*)&&ZEND_NULL_LABEL,
52391 			(void*)&&ZEND_NULL_LABEL,
52392 			(void*)&&ZEND_NULL_LABEL,
52393 			(void*)&&ZEND_NULL_LABEL,
52394 			(void*)&&ZEND_NULL_LABEL,
52395 			(void*)&&ZEND_NULL_LABEL,
52396 			(void*)&&ZEND_NULL_LABEL,
52397 			(void*)&&ZEND_NULL_LABEL,
52398 			(void*)&&ZEND_NULL_LABEL,
52399 			(void*)&&ZEND_NULL_LABEL,
52400 			(void*)&&ZEND_NULL_LABEL,
52401 			(void*)&&ZEND_NULL_LABEL,
52402 			(void*)&&ZEND_NULL_LABEL,
52403 			(void*)&&ZEND_NULL_LABEL,
52404 			(void*)&&ZEND_NULL_LABEL,
52405 			(void*)&&ZEND_NULL_LABEL,
52406 			(void*)&&ZEND_NULL_LABEL,
52407 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
52408 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
52409 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
52410 			(void*)&&ZEND_NULL_LABEL,
52411 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
52412 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
52413 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
52414 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
52415 			(void*)&&ZEND_NULL_LABEL,
52416 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
52417 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
52418 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
52419 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
52420 			(void*)&&ZEND_NULL_LABEL,
52421 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
52422 			(void*)&&ZEND_NULL_LABEL,
52423 			(void*)&&ZEND_NULL_LABEL,
52424 			(void*)&&ZEND_NULL_LABEL,
52425 			(void*)&&ZEND_NULL_LABEL,
52426 			(void*)&&ZEND_NULL_LABEL,
52427 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
52428 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
52429 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
52430 			(void*)&&ZEND_NULL_LABEL,
52431 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
52432 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
52433 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
52434 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
52435 			(void*)&&ZEND_NULL_LABEL,
52436 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
52437 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
52438 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
52439 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
52440 			(void*)&&ZEND_NULL_LABEL,
52441 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
52442 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
52443 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
52444 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
52445 			(void*)&&ZEND_NULL_LABEL,
52446 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
52447 			(void*)&&ZEND_NULL_LABEL,
52448 			(void*)&&ZEND_NULL_LABEL,
52449 			(void*)&&ZEND_NULL_LABEL,
52450 			(void*)&&ZEND_NULL_LABEL,
52451 			(void*)&&ZEND_NULL_LABEL,
52452 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
52453 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
52454 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
52455 			(void*)&&ZEND_NULL_LABEL,
52456 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
52457 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
52458 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
52459 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
52460 			(void*)&&ZEND_NULL_LABEL,
52461 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
52462 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
52463 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
52464 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
52465 			(void*)&&ZEND_NULL_LABEL,
52466 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
52467 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
52468 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
52469 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
52470 			(void*)&&ZEND_NULL_LABEL,
52471 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
52472 			(void*)&&ZEND_NULL_LABEL,
52473 			(void*)&&ZEND_NULL_LABEL,
52474 			(void*)&&ZEND_NULL_LABEL,
52475 			(void*)&&ZEND_NULL_LABEL,
52476 			(void*)&&ZEND_NULL_LABEL,
52477 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
52478 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
52479 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
52480 			(void*)&&ZEND_NULL_LABEL,
52481 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
52482 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_LABEL,
52483 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_LABEL,
52484 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_LABEL,
52485 			(void*)&&ZEND_NULL_LABEL,
52486 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_LABEL,
52487 			(void*)&&ZEND_NULL_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_NULL_LABEL,
52496 			(void*)&&ZEND_NULL_LABEL,
52497 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CONST_LABEL,
52498 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
52499 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
52500 			(void*)&&ZEND_NULL_LABEL,
52501 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CV_LABEL,
52502 			(void*)&&ZEND_NULL_LABEL,
52503 			(void*)&&ZEND_NULL_LABEL,
52504 			(void*)&&ZEND_NULL_LABEL,
52505 			(void*)&&ZEND_NULL_LABEL,
52506 			(void*)&&ZEND_NULL_LABEL,
52507 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CONST_LABEL,
52508 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
52509 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
52510 			(void*)&&ZEND_NULL_LABEL,
52511 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CV_LABEL,
52512 			(void*)&&ZEND_NULL_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_NULL_LABEL,
52521 			(void*)&&ZEND_NULL_LABEL,
52522 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_LABEL,
52523 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
52524 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
52525 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_LABEL,
52526 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_LABEL,
52527 			(void*)&&ZEND_NULL_LABEL,
52528 			(void*)&&ZEND_NULL_LABEL,
52529 			(void*)&&ZEND_NULL_LABEL,
52530 			(void*)&&ZEND_NULL_LABEL,
52531 			(void*)&&ZEND_NULL_LABEL,
52532 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_LABEL,
52533 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
52534 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
52535 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_LABEL,
52536 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_LABEL,
52537 			(void*)&&ZEND_NULL_LABEL,
52538 			(void*)&&ZEND_NULL_LABEL,
52539 			(void*)&&ZEND_NULL_LABEL,
52540 			(void*)&&ZEND_NULL_LABEL,
52541 			(void*)&&ZEND_NULL_LABEL,
52542 			(void*)&&ZEND_NULL_LABEL,
52543 			(void*)&&ZEND_NULL_LABEL,
52544 			(void*)&&ZEND_NULL_LABEL,
52545 			(void*)&&ZEND_NULL_LABEL,
52546 			(void*)&&ZEND_NULL_LABEL,
52547 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_LABEL,
52548 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
52549 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
52550 			(void*)&&ZEND_NULL_LABEL,
52551 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_LABEL,
52552 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_LABEL,
52553 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
52554 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
52555 			(void*)&&ZEND_NULL_LABEL,
52556 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_LABEL,
52557 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_LABEL,
52558 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
52559 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
52560 			(void*)&&ZEND_NULL_LABEL,
52561 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_LABEL,
52562 			(void*)&&ZEND_ASSIGN_STATIC_PROP_OP_SPEC_LABEL,
52563 			(void*)&&ZEND_NULL_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_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
52576 			(void*)&&ZEND_NULL_LABEL,
52577 			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_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_ASSIGN_REF_SPEC_CV_VAR_LABEL,
52586 			(void*)&&ZEND_NULL_LABEL,
52587 			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
52588 			(void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
52589 			(void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
52590 			(void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
52591 			(void*)&&ZEND_NULL_LABEL,
52592 			(void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
52593 			(void*)&&ZEND_NULL_LABEL,
52594 			(void*)&&ZEND_NULL_LABEL,
52595 			(void*)&&ZEND_NULL_LABEL,
52596 			(void*)&&ZEND_NULL_LABEL,
52597 			(void*)&&ZEND_NULL_LABEL,
52598 			(void*)&&ZEND_NULL_LABEL,
52599 			(void*)&&ZEND_NULL_LABEL,
52600 			(void*)&&ZEND_NULL_LABEL,
52601 			(void*)&&ZEND_NULL_LABEL,
52602 			(void*)&&ZEND_NULL_LABEL,
52603 			(void*)&&ZEND_NULL_LABEL,
52604 			(void*)&&ZEND_NULL_LABEL,
52605 			(void*)&&ZEND_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_NULL_LABEL,
52616 			(void*)&&ZEND_NULL_LABEL,
52617 			(void*)&&ZEND_NULL_LABEL,
52618 			(void*)&&ZEND_NULL_LABEL,
52619 			(void*)&&ZEND_NULL_LABEL,
52620 			(void*)&&ZEND_NULL_LABEL,
52621 			(void*)&&ZEND_NULL_LABEL,
52622 			(void*)&&ZEND_NULL_LABEL,
52623 			(void*)&&ZEND_NULL_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_NULL_LABEL,
52631 			(void*)&&ZEND_NULL_LABEL,
52632 			(void*)&&ZEND_NULL_LABEL,
52633 			(void*)&&ZEND_NULL_LABEL,
52634 			(void*)&&ZEND_NULL_LABEL,
52635 			(void*)&&ZEND_NULL_LABEL,
52636 			(void*)&&ZEND_NULL_LABEL,
52637 			(void*)&&ZEND_NULL_LABEL,
52638 			(void*)&&ZEND_NULL_LABEL,
52639 			(void*)&&ZEND_NULL_LABEL,
52640 			(void*)&&ZEND_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_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
52646 			(void*)&&ZEND_NULL_LABEL,
52647 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
52648 			(void*)&&ZEND_NULL_LABEL,
52649 			(void*)&&ZEND_NULL_LABEL,
52650 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
52651 			(void*)&&ZEND_NULL_LABEL,
52652 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
52653 			(void*)&&ZEND_NULL_LABEL,
52654 			(void*)&&ZEND_NULL_LABEL,
52655 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
52656 			(void*)&&ZEND_NULL_LABEL,
52657 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
52658 			(void*)&&ZEND_NULL_LABEL,
52659 			(void*)&&ZEND_NULL_LABEL,
52660 			(void*)&&ZEND_NULL_LABEL,
52661 			(void*)&&ZEND_NULL_LABEL,
52662 			(void*)&&ZEND_NULL_LABEL,
52663 			(void*)&&ZEND_NULL_LABEL,
52664 			(void*)&&ZEND_NULL_LABEL,
52665 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
52666 			(void*)&&ZEND_NULL_LABEL,
52667 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_LABEL,
52668 			(void*)&&ZEND_NULL_LABEL,
52669 			(void*)&&ZEND_NULL_LABEL,
52670 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
52671 			(void*)&&ZEND_NULL_LABEL,
52672 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
52673 			(void*)&&ZEND_NULL_LABEL,
52674 			(void*)&&ZEND_NULL_LABEL,
52675 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
52676 			(void*)&&ZEND_NULL_LABEL,
52677 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
52678 			(void*)&&ZEND_NULL_LABEL,
52679 			(void*)&&ZEND_NULL_LABEL,
52680 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
52681 			(void*)&&ZEND_NULL_LABEL,
52682 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
52683 			(void*)&&ZEND_NULL_LABEL,
52684 			(void*)&&ZEND_NULL_LABEL,
52685 			(void*)&&ZEND_NULL_LABEL,
52686 			(void*)&&ZEND_NULL_LABEL,
52687 			(void*)&&ZEND_NULL_LABEL,
52688 			(void*)&&ZEND_NULL_LABEL,
52689 			(void*)&&ZEND_NULL_LABEL,
52690 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
52691 			(void*)&&ZEND_NULL_LABEL,
52692 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
52693 			(void*)&&ZEND_NULL_LABEL,
52694 			(void*)&&ZEND_NULL_LABEL,
52695 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
52696 			(void*)&&ZEND_NULL_LABEL,
52697 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_LABEL,
52698 			(void*)&&ZEND_NULL_LABEL,
52699 			(void*)&&ZEND_NULL_LABEL,
52700 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
52701 			(void*)&&ZEND_NULL_LABEL,
52702 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
52703 			(void*)&&ZEND_NULL_LABEL,
52704 			(void*)&&ZEND_NULL_LABEL,
52705 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
52706 			(void*)&&ZEND_NULL_LABEL,
52707 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
52708 			(void*)&&ZEND_NULL_LABEL,
52709 			(void*)&&ZEND_NULL_LABEL,
52710 			(void*)&&ZEND_NULL_LABEL,
52711 			(void*)&&ZEND_NULL_LABEL,
52712 			(void*)&&ZEND_NULL_LABEL,
52713 			(void*)&&ZEND_NULL_LABEL,
52714 			(void*)&&ZEND_NULL_LABEL,
52715 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_LABEL,
52716 			(void*)&&ZEND_NULL_LABEL,
52717 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_LABEL,
52718 			(void*)&&ZEND_ASSIGN_STATIC_PROP_REF_SPEC_LABEL,
52719 			(void*)&&ZEND_NULL_LABEL,
52720 			(void*)&&ZEND_NULL_LABEL,
52721 			(void*)&&ZEND_NULL_LABEL,
52722 			(void*)&&ZEND_NULL_LABEL,
52723 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
52724 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
52725 			(void*)&&ZEND_NULL_LABEL,
52726 			(void*)&&ZEND_NULL_LABEL,
52727 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
52728 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
52729 			(void*)&&ZEND_NULL_LABEL,
52730 			(void*)&&ZEND_NULL_LABEL,
52731 			(void*)&&ZEND_NULL_LABEL,
52732 			(void*)&&ZEND_NULL_LABEL,
52733 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
52734 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
52735 			(void*)&&ZEND_NULL_LABEL,
52736 			(void*)&&ZEND_NULL_LABEL,
52737 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
52738 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
52739 			(void*)&&ZEND_NULL_LABEL,
52740 			(void*)&&ZEND_NULL_LABEL,
52741 			(void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
52742 			(void*)&&ZEND_NULL_LABEL,
52743 			(void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
52744 			(void*)&&ZEND_NULL_LABEL,
52745 			(void*)&&ZEND_NULL_LABEL,
52746 			(void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
52747 			(void*)&&ZEND_NULL_LABEL,
52748 			(void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
52749 			(void*)&&ZEND_PRE_INC_STATIC_PROP_SPEC_LABEL,
52750 			(void*)&&ZEND_POST_INC_STATIC_PROP_SPEC_LABEL,
52751 			(void*)&&ZEND_JMP_SPEC_LABEL,
52752 			(void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
52753 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
52754 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
52755 			(void*)&&ZEND_NULL_LABEL,
52756 			(void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
52757 			(void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
52758 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
52759 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
52760 			(void*)&&ZEND_NULL_LABEL,
52761 			(void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
52762 			(void*)&&ZEND_JMPZNZ_SPEC_CONST_LABEL,
52763 			(void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
52764 			(void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
52765 			(void*)&&ZEND_NULL_LABEL,
52766 			(void*)&&ZEND_JMPZNZ_SPEC_CV_LABEL,
52767 			(void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
52768 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
52769 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
52770 			(void*)&&ZEND_NULL_LABEL,
52771 			(void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
52772 			(void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
52773 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
52774 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
52775 			(void*)&&ZEND_NULL_LABEL,
52776 			(void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
52777 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
52778 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
52779 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
52780 			(void*)&&ZEND_NULL_LABEL,
52781 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
52782 			(void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
52783 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
52784 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
52785 			(void*)&&ZEND_NULL_LABEL,
52786 			(void*)&&ZEND_NULL_LABEL,
52787 			(void*)&&ZEND_NULL_LABEL,
52788 			(void*)&&ZEND_NULL_LABEL,
52789 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_LABEL,
52790 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
52791 			(void*)&&ZEND_NULL_LABEL,
52792 			(void*)&&ZEND_NULL_LABEL,
52793 			(void*)&&ZEND_CAST_SPEC_CONST_LABEL,
52794 			(void*)&&ZEND_CAST_SPEC_TMP_LABEL,
52795 			(void*)&&ZEND_CAST_SPEC_VAR_LABEL,
52796 			(void*)&&ZEND_NULL_LABEL,
52797 			(void*)&&ZEND_CAST_SPEC_CV_LABEL,
52798 			(void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
52799 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
52800 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
52801 			(void*)&&ZEND_NULL_LABEL,
52802 			(void*)&&ZEND_BOOL_SPEC_CV_LABEL,
52803 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
52804 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
52805 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
52806 			(void*)&&ZEND_NULL_LABEL,
52807 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
52808 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
52809 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
52810 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
52811 			(void*)&&ZEND_NULL_LABEL,
52812 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
52813 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
52814 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
52815 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
52816 			(void*)&&ZEND_NULL_LABEL,
52817 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
52818 			(void*)&&ZEND_NULL_LABEL,
52819 			(void*)&&ZEND_NULL_LABEL,
52820 			(void*)&&ZEND_NULL_LABEL,
52821 			(void*)&&ZEND_NULL_LABEL,
52822 			(void*)&&ZEND_NULL_LABEL,
52823 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
52824 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
52825 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
52826 			(void*)&&ZEND_NULL_LABEL,
52827 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
52828 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
52829 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
52830 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
52831 			(void*)&&ZEND_NULL_LABEL,
52832 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
52833 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
52834 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
52835 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
52836 			(void*)&&ZEND_NULL_LABEL,
52837 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
52838 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
52839 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
52840 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
52841 			(void*)&&ZEND_NULL_LABEL,
52842 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
52843 			(void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
52844 			(void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
52845 			(void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
52846 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
52847 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
52848 			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
52849 			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
52850 			(void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
52851 			(void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
52852 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
52853 			(void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
52854 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
52855 			(void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
52856 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
52857 			(void*)&&ZEND_NULL_LABEL,
52858 			(void*)&&ZEND_NULL_LABEL,
52859 			(void*)&&ZEND_RETURN_SPEC_CV_LABEL,
52860 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
52861 			(void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
52862 			(void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
52863 			(void*)&&ZEND_SEND_VAL_SPEC_CONST_CONST_LABEL,
52864 			(void*)&&ZEND_NULL_LABEL,
52865 			(void*)&&ZEND_NULL_LABEL,
52866 			(void*)&&ZEND_SEND_VAL_SPEC_CONST_UNUSED_LABEL,
52867 			(void*)&&ZEND_NULL_LABEL,
52868 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
52869 			(void*)&&ZEND_NULL_LABEL,
52870 			(void*)&&ZEND_NULL_LABEL,
52871 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
52872 			(void*)&&ZEND_NULL_LABEL,
52873 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
52874 			(void*)&&ZEND_NULL_LABEL,
52875 			(void*)&&ZEND_NULL_LABEL,
52876 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_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_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
52909 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
52910 			(void*)&&ZEND_NULL_LABEL,
52911 			(void*)&&ZEND_NULL_LABEL,
52912 			(void*)&&ZEND_NULL_LABEL,
52913 			(void*)&&ZEND_NULL_LABEL,
52914 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_LABEL,
52915 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_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_NULL_LABEL,
52926 			(void*)&&ZEND_NULL_LABEL,
52927 			(void*)&&ZEND_NULL_LABEL,
52928 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
52929 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
52930 			(void*)&&ZEND_NULL_LABEL,
52931 			(void*)&&ZEND_NULL_LABEL,
52932 			(void*)&&ZEND_NULL_LABEL,
52933 			(void*)&&ZEND_NULL_LABEL,
52934 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_LABEL,
52935 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_LABEL,
52936 			(void*)&&ZEND_NULL_LABEL,
52937 			(void*)&&ZEND_NULL_LABEL,
52938 			(void*)&&ZEND_NULL_LABEL,
52939 			(void*)&&ZEND_NULL_LABEL,
52940 			(void*)&&ZEND_NULL_LABEL,
52941 			(void*)&&ZEND_NULL_LABEL,
52942 			(void*)&&ZEND_NULL_LABEL,
52943 			(void*)&&ZEND_NULL_LABEL,
52944 			(void*)&&ZEND_NULL_LABEL,
52945 			(void*)&&ZEND_NULL_LABEL,
52946 			(void*)&&ZEND_NULL_LABEL,
52947 			(void*)&&ZEND_NULL_LABEL,
52948 			(void*)&&ZEND_SEND_REF_SPEC_VAR_CONST_LABEL,
52949 			(void*)&&ZEND_NULL_LABEL,
52950 			(void*)&&ZEND_NULL_LABEL,
52951 			(void*)&&ZEND_SEND_REF_SPEC_VAR_UNUSED_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_SEND_REF_SPEC_CV_CONST_LABEL,
52959 			(void*)&&ZEND_NULL_LABEL,
52960 			(void*)&&ZEND_NULL_LABEL,
52961 			(void*)&&ZEND_SEND_REF_SPEC_CV_UNUSED_LABEL,
52962 			(void*)&&ZEND_NULL_LABEL,
52963 			(void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL,
52964 			(void*)&&ZEND_NULL_LABEL,
52965 			(void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL,
52966 			(void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL,
52967 			(void*)&&ZEND_NULL_LABEL,
52968 			(void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
52969 			(void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
52970 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
52971 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
52972 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
52973 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
52974 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
52975 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
52976 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
52977 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
52978 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
52979 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
52980 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
52981 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
52982 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
52983 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
52984 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
52985 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_LABEL,
52986 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
52987 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
52988 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_LABEL,
52989 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CV_LABEL,
52990 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
52991 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
52992 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
52993 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
52994 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
52995 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
52996 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
52997 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
52998 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
52999 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
53000 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
53001 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
53002 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
53003 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
53004 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
53005 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
53006 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
53007 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
53008 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
53009 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_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_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
53016 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
53017 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
53018 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
53019 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
53020 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
53021 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
53022 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
53023 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
53024 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
53025 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
53026 			(void*)&&ZEND_NULL_LABEL,
53027 			(void*)&&ZEND_NULL_LABEL,
53028 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
53029 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
53030 			(void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
53031 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
53032 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
53033 			(void*)&&ZEND_NULL_LABEL,
53034 			(void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_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_UNSET_DIM_SPEC_VAR_CONST_LABEL,
53046 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
53047 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
53048 			(void*)&&ZEND_NULL_LABEL,
53049 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL,
53050 			(void*)&&ZEND_NULL_LABEL,
53051 			(void*)&&ZEND_NULL_LABEL,
53052 			(void*)&&ZEND_NULL_LABEL,
53053 			(void*)&&ZEND_NULL_LABEL,
53054 			(void*)&&ZEND_NULL_LABEL,
53055 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL,
53056 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
53057 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
53058 			(void*)&&ZEND_NULL_LABEL,
53059 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
53060 			(void*)&&ZEND_NULL_LABEL,
53061 			(void*)&&ZEND_NULL_LABEL,
53062 			(void*)&&ZEND_NULL_LABEL,
53063 			(void*)&&ZEND_NULL_LABEL,
53064 			(void*)&&ZEND_NULL_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_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
53071 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
53072 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
53073 			(void*)&&ZEND_NULL_LABEL,
53074 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
53075 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
53076 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53077 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53078 			(void*)&&ZEND_NULL_LABEL,
53079 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
53080 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
53081 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
53082 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
53083 			(void*)&&ZEND_NULL_LABEL,
53084 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
53085 			(void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
53086 			(void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
53087 			(void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
53088 			(void*)&&ZEND_NULL_LABEL,
53089 			(void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
53090 			(void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
53091 			(void*)&&ZEND_EXIT_SPEC_LABEL,
53092 			(void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
53093 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
53094 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
53095 			(void*)&&ZEND_NULL_LABEL,
53096 			(void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
53097 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
53098 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
53099 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
53100 			(void*)&&ZEND_NULL_LABEL,
53101 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
53102 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
53103 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
53104 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
53105 			(void*)&&ZEND_NULL_LABEL,
53106 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
53107 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
53108 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
53109 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
53110 			(void*)&&ZEND_NULL_LABEL,
53111 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
53112 			(void*)&&ZEND_NULL_LABEL,
53113 			(void*)&&ZEND_NULL_LABEL,
53114 			(void*)&&ZEND_NULL_LABEL,
53115 			(void*)&&ZEND_NULL_LABEL,
53116 			(void*)&&ZEND_NULL_LABEL,
53117 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
53118 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
53119 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
53120 			(void*)&&ZEND_NULL_LABEL,
53121 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
53122 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
53123 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
53124 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
53125 			(void*)&&ZEND_NULL_LABEL,
53126 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
53127 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
53128 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
53129 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
53130 			(void*)&&ZEND_NULL_LABEL,
53131 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
53132 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
53133 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
53134 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
53135 			(void*)&&ZEND_NULL_LABEL,
53136 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
53137 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
53138 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
53139 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
53140 			(void*)&&ZEND_NULL_LABEL,
53141 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
53142 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
53143 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
53144 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
53145 			(void*)&&ZEND_NULL_LABEL,
53146 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
53147 			(void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
53148 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
53149 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
53150 			(void*)&&ZEND_NULL_LABEL,
53151 			(void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
53152 			(void*)&&ZEND_NULL_LABEL,
53153 			(void*)&&ZEND_NULL_LABEL,
53154 			(void*)&&ZEND_NULL_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_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
53163 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
53164 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
53165 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
53166 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL,
53167 			(void*)&&ZEND_NULL_LABEL,
53168 			(void*)&&ZEND_NULL_LABEL,
53169 			(void*)&&ZEND_NULL_LABEL,
53170 			(void*)&&ZEND_NULL_LABEL,
53171 			(void*)&&ZEND_NULL_LABEL,
53172 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
53173 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
53174 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
53175 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
53176 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
53177 			(void*)&&ZEND_NULL_LABEL,
53178 			(void*)&&ZEND_NULL_LABEL,
53179 			(void*)&&ZEND_NULL_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_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
53188 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
53189 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
53190 			(void*)&&ZEND_NULL_LABEL,
53191 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
53192 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
53193 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
53194 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
53195 			(void*)&&ZEND_NULL_LABEL,
53196 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
53197 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
53198 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
53199 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
53200 			(void*)&&ZEND_NULL_LABEL,
53201 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
53202 			(void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
53203 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
53204 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
53205 			(void*)&&ZEND_NULL_LABEL,
53206 			(void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_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_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
53218 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
53219 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
53220 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
53221 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_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_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
53228 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
53229 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
53230 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
53231 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_LABEL,
53232 			(void*)&&ZEND_NULL_LABEL,
53233 			(void*)&&ZEND_NULL_LABEL,
53234 			(void*)&&ZEND_NULL_LABEL,
53235 			(void*)&&ZEND_NULL_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_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
53243 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
53244 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
53245 			(void*)&&ZEND_NULL_LABEL,
53246 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
53247 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
53248 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
53249 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
53250 			(void*)&&ZEND_NULL_LABEL,
53251 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
53252 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
53253 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
53254 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
53255 			(void*)&&ZEND_NULL_LABEL,
53256 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
53257 			(void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
53258 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
53259 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
53260 			(void*)&&ZEND_NULL_LABEL,
53261 			(void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
53262 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
53263 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
53264 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
53265 			(void*)&&ZEND_NULL_LABEL,
53266 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
53267 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
53268 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53269 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53270 			(void*)&&ZEND_NULL_LABEL,
53271 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
53272 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
53273 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53274 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53275 			(void*)&&ZEND_NULL_LABEL,
53276 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_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_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
53283 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
53284 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
53285 			(void*)&&ZEND_NULL_LABEL,
53286 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
53287 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
53288 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
53289 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
53290 			(void*)&&ZEND_NULL_LABEL,
53291 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
53292 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
53293 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53294 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53295 			(void*)&&ZEND_NULL_LABEL,
53296 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
53297 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
53298 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53299 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
53300 			(void*)&&ZEND_NULL_LABEL,
53301 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
53302 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
53303 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
53304 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
53305 			(void*)&&ZEND_NULL_LABEL,
53306 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
53307 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
53308 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
53309 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
53310 			(void*)&&ZEND_NULL_LABEL,
53311 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
53312 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
53313 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
53314 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
53315 			(void*)&&ZEND_NULL_LABEL,
53316 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
53317 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
53318 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
53319 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
53320 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
53321 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
53322 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
53323 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
53324 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
53325 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
53326 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
53327 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
53328 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
53329 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
53330 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
53331 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_LABEL,
53332 			(void*)&&ZEND_NULL_LABEL,
53333 			(void*)&&ZEND_NULL_LABEL,
53334 			(void*)&&ZEND_NULL_LABEL,
53335 			(void*)&&ZEND_NULL_LABEL,
53336 			(void*)&&ZEND_NULL_LABEL,
53337 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
53338 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
53339 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
53340 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
53341 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
53342 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
53343 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
53344 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
53345 			(void*)&&ZEND_NULL_LABEL,
53346 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
53347 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
53348 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
53349 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
53350 			(void*)&&ZEND_NULL_LABEL,
53351 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
53352 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
53353 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
53354 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
53355 			(void*)&&ZEND_NULL_LABEL,
53356 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
53357 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
53358 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
53359 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
53360 			(void*)&&ZEND_NULL_LABEL,
53361 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
53362 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
53363 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
53364 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
53365 			(void*)&&ZEND_NULL_LABEL,
53366 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
53367 			(void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
53368 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
53369 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
53370 			(void*)&&ZEND_NULL_LABEL,
53371 			(void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
53372 			(void*)&&ZEND_NULL_LABEL,
53373 			(void*)&&ZEND_NULL_LABEL,
53374 			(void*)&&ZEND_NULL_LABEL,
53375 			(void*)&&ZEND_NULL_LABEL,
53376 			(void*)&&ZEND_NULL_LABEL,
53377 			(void*)&&ZEND_NULL_LABEL,
53378 			(void*)&&ZEND_NULL_LABEL,
53379 			(void*)&&ZEND_NULL_LABEL,
53380 			(void*)&&ZEND_NULL_LABEL,
53381 			(void*)&&ZEND_NULL_LABEL,
53382 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
53383 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
53384 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
53385 			(void*)&&ZEND_NULL_LABEL,
53386 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL,
53387 			(void*)&&ZEND_NULL_LABEL,
53388 			(void*)&&ZEND_NULL_LABEL,
53389 			(void*)&&ZEND_NULL_LABEL,
53390 			(void*)&&ZEND_NULL_LABEL,
53391 			(void*)&&ZEND_NULL_LABEL,
53392 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
53393 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
53394 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
53395 			(void*)&&ZEND_NULL_LABEL,
53396 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
53397 			(void*)&&ZEND_NULL_LABEL,
53398 			(void*)&&ZEND_NULL_LABEL,
53399 			(void*)&&ZEND_NULL_LABEL,
53400 			(void*)&&ZEND_NULL_LABEL,
53401 			(void*)&&ZEND_NULL_LABEL,
53402 			(void*)&&ZEND_NULL_LABEL,
53403 			(void*)&&ZEND_NULL_LABEL,
53404 			(void*)&&ZEND_NULL_LABEL,
53405 			(void*)&&ZEND_NULL_LABEL,
53406 			(void*)&&ZEND_NULL_LABEL,
53407 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
53408 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
53409 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
53410 			(void*)&&ZEND_NULL_LABEL,
53411 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
53412 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
53413 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
53414 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
53415 			(void*)&&ZEND_NULL_LABEL,
53416 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
53417 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
53418 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
53419 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
53420 			(void*)&&ZEND_NULL_LABEL,
53421 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
53422 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL,
53423 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
53424 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
53425 			(void*)&&ZEND_NULL_LABEL,
53426 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL,
53427 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
53428 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
53429 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
53430 			(void*)&&ZEND_NULL_LABEL,
53431 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
53432 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
53433 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
53434 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
53435 			(void*)&&ZEND_NULL_LABEL,
53436 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
53437 			(void*)&&ZEND_NULL_LABEL,
53438 			(void*)&&ZEND_NULL_LABEL,
53439 			(void*)&&ZEND_NULL_LABEL,
53440 			(void*)&&ZEND_NULL_LABEL,
53441 			(void*)&&ZEND_NULL_LABEL,
53442 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
53443 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
53444 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
53445 			(void*)&&ZEND_NULL_LABEL,
53446 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
53447 			(void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
53448 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
53449 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
53450 			(void*)&&ZEND_NULL_LABEL,
53451 			(void*)&&ZEND_NULL_LABEL,
53452 			(void*)&&ZEND_NULL_LABEL,
53453 			(void*)&&ZEND_NULL_LABEL,
53454 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_LABEL,
53455 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_LABEL,
53456 			(void*)&&ZEND_NULL_LABEL,
53457 			(void*)&&ZEND_NULL_LABEL,
53458 			(void*)&&ZEND_EXT_STMT_SPEC_LABEL,
53459 			(void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
53460 			(void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
53461 			(void*)&&ZEND_EXT_NOP_SPEC_LABEL,
53462 			(void*)&&ZEND_TICKS_SPEC_LABEL,
53463 			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_LABEL,
53464 			(void*)&&ZEND_NULL_LABEL,
53465 			(void*)&&ZEND_NULL_LABEL,
53466 			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_LABEL,
53467 			(void*)&&ZEND_NULL_LABEL,
53468 			(void*)&&ZEND_CATCH_SPEC_CONST_LABEL,
53469 			(void*)&&ZEND_THROW_SPEC_CONST_LABEL,
53470 			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
53471 			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
53472 			(void*)&&ZEND_NULL_LABEL,
53473 			(void*)&&ZEND_THROW_SPEC_CV_LABEL,
53474 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL,
53475 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
53476 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
53477 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL,
53478 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL,
53479 			(void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
53480 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
53481 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
53482 			(void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
53483 			(void*)&&ZEND_CLONE_SPEC_CV_LABEL,
53484 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
53485 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
53486 			(void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
53487 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
53488 			(void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
53489 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
53490 			(void*)&&ZEND_NULL_LABEL,
53491 			(void*)&&ZEND_NULL_LABEL,
53492 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
53493 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
53494 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
53495 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
53496 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
53497 			(void*)&&ZEND_NULL_LABEL,
53498 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
53499 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
53500 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
53501 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
53502 			(void*)&&ZEND_NULL_LABEL,
53503 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
53504 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
53505 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
53506 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
53507 			(void*)&&ZEND_NULL_LABEL,
53508 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
53509 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
53510 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
53511 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
53512 			(void*)&&ZEND_NULL_LABEL,
53513 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
53514 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
53515 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
53516 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
53517 			(void*)&&ZEND_NULL_LABEL,
53518 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
53519 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
53520 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
53521 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
53522 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
53523 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_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_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
53530 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
53531 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
53532 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
53533 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
53534 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
53535 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
53536 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
53537 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
53538 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_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_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
53545 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
53546 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
53547 			(void*)&&ZEND_NULL_LABEL,
53548 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
53549 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
53550 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
53551 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
53552 			(void*)&&ZEND_NULL_LABEL,
53553 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
53554 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
53555 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
53556 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
53557 			(void*)&&ZEND_NULL_LABEL,
53558 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
53559 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
53560 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
53561 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
53562 			(void*)&&ZEND_NULL_LABEL,
53563 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_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_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
53570 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
53571 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
53572 			(void*)&&ZEND_NULL_LABEL,
53573 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
53574 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
53575 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
53576 			(void*)&&ZEND_NULL_LABEL,
53577 			(void*)&&ZEND_NULL_LABEL,
53578 			(void*)&&ZEND_NULL_LABEL,
53579 			(void*)&&ZEND_NULL_LABEL,
53580 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_LABEL,
53581 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_LABEL,
53582 			(void*)&&ZEND_NULL_LABEL,
53583 			(void*)&&ZEND_NULL_LABEL,
53584 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
53585 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
53586 			(void*)&&ZEND_NULL_LABEL,
53587 			(void*)&&ZEND_NULL_LABEL,
53588 			(void*)&&ZEND_NULL_LABEL,
53589 			(void*)&&ZEND_NULL_LABEL,
53590 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_LABEL,
53591 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_LABEL,
53592 			(void*)&&ZEND_NULL_LABEL,
53593 			(void*)&&ZEND_NULL_LABEL,
53594 			(void*)&&ZEND_NULL_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_NULL_LABEL,
53602 			(void*)&&ZEND_NULL_LABEL,
53603 			(void*)&&ZEND_NULL_LABEL,
53604 			(void*)&&ZEND_NULL_LABEL,
53605 			(void*)&&ZEND_NULL_LABEL,
53606 			(void*)&&ZEND_NULL_LABEL,
53607 			(void*)&&ZEND_NULL_LABEL,
53608 			(void*)&&ZEND_NULL_LABEL,
53609 			(void*)&&ZEND_NULL_LABEL,
53610 			(void*)&&ZEND_NULL_LABEL,
53611 			(void*)&&ZEND_NULL_LABEL,
53612 			(void*)&&ZEND_NULL_LABEL,
53613 			(void*)&&ZEND_NULL_LABEL,
53614 			(void*)&&ZEND_NULL_LABEL,
53615 			(void*)&&ZEND_NULL_LABEL,
53616 			(void*)&&ZEND_NULL_LABEL,
53617 			(void*)&&ZEND_NULL_LABEL,
53618 			(void*)&&ZEND_NULL_LABEL,
53619 			(void*)&&ZEND_NULL_LABEL,
53620 			(void*)&&ZEND_NULL_LABEL,
53621 			(void*)&&ZEND_NULL_LABEL,
53622 			(void*)&&ZEND_NULL_LABEL,
53623 			(void*)&&ZEND_NULL_LABEL,
53624 			(void*)&&ZEND_NULL_LABEL,
53625 			(void*)&&ZEND_NULL_LABEL,
53626 			(void*)&&ZEND_NULL_LABEL,
53627 			(void*)&&ZEND_NULL_LABEL,
53628 			(void*)&&ZEND_NULL_LABEL,
53629 			(void*)&&ZEND_NULL_LABEL,
53630 			(void*)&&ZEND_NULL_LABEL,
53631 			(void*)&&ZEND_NULL_LABEL,
53632 			(void*)&&ZEND_NULL_LABEL,
53633 			(void*)&&ZEND_NULL_LABEL,
53634 			(void*)&&ZEND_SEND_VAR_SPEC_VAR_CONST_LABEL,
53635 			(void*)&&ZEND_NULL_LABEL,
53636 			(void*)&&ZEND_NULL_LABEL,
53637 			(void*)&&ZEND_SEND_VAR_SPEC_VAR_UNUSED_LABEL,
53638 			(void*)&&ZEND_NULL_LABEL,
53639 			(void*)&&ZEND_NULL_LABEL,
53640 			(void*)&&ZEND_NULL_LABEL,
53641 			(void*)&&ZEND_NULL_LABEL,
53642 			(void*)&&ZEND_NULL_LABEL,
53643 			(void*)&&ZEND_NULL_LABEL,
53644 			(void*)&&ZEND_SEND_VAR_SPEC_CV_CONST_LABEL,
53645 			(void*)&&ZEND_NULL_LABEL,
53646 			(void*)&&ZEND_NULL_LABEL,
53647 			(void*)&&ZEND_SEND_VAR_SPEC_CV_UNUSED_LABEL,
53648 			(void*)&&ZEND_NULL_LABEL,
53649 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
53650 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
53651 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
53652 			(void*)&&ZEND_NULL_LABEL,
53653 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
53654 			(void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
53655 			(void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
53656 			(void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
53657 			(void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
53658 			(void*)&&ZEND_NULL_LABEL,
53659 			(void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
53660 			(void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
53661 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
53662 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
53663 			(void*)&&ZEND_NULL_LABEL,
53664 			(void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
53665 			(void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
53666 			(void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
53667 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
53668 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
53669 			(void*)&&ZEND_NULL_LABEL,
53670 			(void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
53671 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
53672 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
53673 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
53674 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
53675 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
53676 			(void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
53677 			(void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
53678 			(void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
53679 			(void*)&&ZEND_NULL_LABEL,
53680 			(void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
53681 			(void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
53682 			(void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
53683 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
53684 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
53685 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
53686 			(void*)&&ZEND_NULL_LABEL,
53687 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
53688 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
53689 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
53690 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
53691 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
53692 			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
53693 			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
53694 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
53695 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
53696 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
53697 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
53698 			(void*)&&ZEND_NULL_LABEL,
53699 			(void*)&&ZEND_NULL_LABEL,
53700 			(void*)&&ZEND_NULL_LABEL,
53701 			(void*)&&ZEND_NULL_LABEL,
53702 			(void*)&&ZEND_NULL_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_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
53709 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
53710 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
53711 			(void*)&&ZEND_NULL_LABEL,
53712 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
53713 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
53714 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53715 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53716 			(void*)&&ZEND_NULL_LABEL,
53717 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
53718 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
53719 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
53720 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
53721 			(void*)&&ZEND_NULL_LABEL,
53722 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_LABEL,
53723 			(void*)&&ZEND_NULL_LABEL,
53724 			(void*)&&ZEND_NULL_LABEL,
53725 			(void*)&&ZEND_NULL_LABEL,
53726 			(void*)&&ZEND_NULL_LABEL,
53727 			(void*)&&ZEND_NULL_LABEL,
53728 			(void*)&&ZEND_NULL_LABEL,
53729 			(void*)&&ZEND_NULL_LABEL,
53730 			(void*)&&ZEND_NULL_LABEL,
53731 			(void*)&&ZEND_NULL_LABEL,
53732 			(void*)&&ZEND_NULL_LABEL,
53733 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
53734 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
53735 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
53736 			(void*)&&ZEND_NULL_LABEL,
53737 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
53738 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
53739 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53740 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53741 			(void*)&&ZEND_NULL_LABEL,
53742 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
53743 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
53744 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
53745 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
53746 			(void*)&&ZEND_NULL_LABEL,
53747 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
53748 			(void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
53749 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
53750 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
53751 			(void*)&&ZEND_NULL_LABEL,
53752 			(void*)&&ZEND_ECHO_SPEC_CV_LABEL,
53753 			(void*)&&ZEND_NULL_LABEL,
53754 			(void*)&&ZEND_NULL_LABEL,
53755 			(void*)&&ZEND_NULL_LABEL,
53756 			(void*)&&ZEND_NULL_LABEL,
53757 			(void*)&&ZEND_NULL_LABEL,
53758 			(void*)&&ZEND_NULL_LABEL,
53759 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
53760 			(void*)&&ZEND_NULL_LABEL,
53761 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
53762 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
53763 			(void*)&&ZEND_NULL_LABEL,
53764 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
53765 			(void*)&&ZEND_NULL_LABEL,
53766 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
53767 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
53768 			(void*)&&ZEND_NULL_LABEL,
53769 			(void*)&&ZEND_NULL_LABEL,
53770 			(void*)&&ZEND_NULL_LABEL,
53771 			(void*)&&ZEND_NULL_LABEL,
53772 			(void*)&&ZEND_NULL_LABEL,
53773 			(void*)&&ZEND_NULL_LABEL,
53774 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
53775 			(void*)&&ZEND_NULL_LABEL,
53776 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
53777 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
53778 			(void*)&&ZEND_NULL_LABEL,
53779 			(void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
53780 			(void*)&&ZEND_NULL_LABEL,
53781 			(void*)&&ZEND_NULL_LABEL,
53782 			(void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
53783 			(void*)&&ZEND_NULL_LABEL,
53784 			(void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
53785 			(void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
53786 			(void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_LABEL,
53787 			(void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
53788 			(void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL,
53789 			(void*)&&ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_LABEL,
53790 			(void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
53791 			(void*)&&ZEND_ADD_ARRAY_UNPACK_SPEC_LABEL,
53792 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
53793 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
53794 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
53795 			(void*)&&ZEND_NULL_LABEL,
53796 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
53797 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
53798 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
53799 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
53800 			(void*)&&ZEND_NULL_LABEL,
53801 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
53802 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
53803 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
53804 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
53805 			(void*)&&ZEND_NULL_LABEL,
53806 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
53807 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
53808 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53809 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
53810 			(void*)&&ZEND_NULL_LABEL,
53811 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
53812 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
53813 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
53814 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
53815 			(void*)&&ZEND_NULL_LABEL,
53816 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
53817 			(void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
53818 			(void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
53819 			(void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
53820 			(void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
53821 			(void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
53822 			(void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
53823 			(void*)&&ZEND_NULL_LABEL,
53824 			(void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
53825 			(void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
53826 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL,
53827 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL,
53828 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL,
53829 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
53830 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
53831 			(void*)&&ZEND_NULL_LABEL,
53832 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL,
53833 			(void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
53834 			(void*)&&ZEND_NULL_LABEL,
53835 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
53836 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
53837 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
53838 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_CV_LABEL,
53839 			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
53840 			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_LABEL,
53841 			(void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
53842 			(void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
53843 			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
53844 			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
53845 			(void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
53846 			(void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
53847 			(void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
53848 			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
53849 			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
53850 			(void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
53851 			(void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
53852 			(void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
53853 			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
53854 			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
53855 			(void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
53856 			(void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
53857 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
53858 			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
53859 			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
53860 			(void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
53861 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
53862 			(void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
53863 			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
53864 			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
53865 			(void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
53866 			(void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
53867 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
53868 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
53869 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
53870 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
53871 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
53872 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
53873 			(void*)&&ZEND_NULL_LABEL,
53874 			(void*)&&ZEND_NULL_LABEL,
53875 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
53876 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
53877 			(void*)&&ZEND_FAST_CALL_SPEC_LABEL,
53878 			(void*)&&ZEND_FAST_RET_SPEC_LABEL,
53879 			(void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
53880 			(void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
53881 			(void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
53882 			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
53883 			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
53884 			(void*)&&ZEND_NULL_LABEL,
53885 			(void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
53886 			(void*)&&ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_LABEL,
53887 			(void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
53888 			(void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
53889 			(void*)&&ZEND_COALESCE_SPEC_TMP_LABEL,
53890 			(void*)&&ZEND_COALESCE_SPEC_VAR_LABEL,
53891 			(void*)&&ZEND_NULL_LABEL,
53892 			(void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
53893 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
53894 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
53895 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
53896 			(void*)&&ZEND_NULL_LABEL,
53897 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
53898 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
53899 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
53900 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
53901 			(void*)&&ZEND_NULL_LABEL,
53902 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
53903 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
53904 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
53905 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
53906 			(void*)&&ZEND_NULL_LABEL,
53907 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
53908 			(void*)&&ZEND_NULL_LABEL,
53909 			(void*)&&ZEND_NULL_LABEL,
53910 			(void*)&&ZEND_NULL_LABEL,
53911 			(void*)&&ZEND_NULL_LABEL,
53912 			(void*)&&ZEND_NULL_LABEL,
53913 			(void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL,
53914 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
53915 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
53916 			(void*)&&ZEND_NULL_LABEL,
53917 			(void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
53918 			(void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
53919 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
53920 			(void*)&&ZEND_NULL_LABEL,
53921 			(void*)&&ZEND_NULL_LABEL,
53922 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
53923 			(void*)&&ZEND_NULL_LABEL,
53924 			(void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_LABEL,
53925 			(void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_LABEL,
53926 			(void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_LABEL,
53927 			(void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_LABEL,
53928 			(void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_LABEL,
53929 			(void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_LABEL,
53930 			(void*)&&ZEND_UNSET_STATIC_PROP_SPEC_LABEL,
53931 			(void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_LABEL,
53932 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
53933 			(void*)&&ZEND_NULL_LABEL,
53934 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
53935 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
53936 			(void*)&&ZEND_NULL_LABEL,
53937 			(void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
53938 			(void*)&&ZEND_BIND_STATIC_SPEC_CV_UNUSED_LABEL,
53939 			(void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
53940 			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_LABEL,
53941 			(void*)&&ZEND_NULL_LABEL,
53942 			(void*)&&ZEND_NULL_LABEL,
53943 			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
53944 			(void*)&&ZEND_NULL_LABEL,
53945 			(void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
53946 			(void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
53947 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
53948 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
53949 			(void*)&&ZEND_NULL_LABEL,
53950 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
53951 			(void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
53952 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
53953 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
53954 			(void*)&&ZEND_NULL_LABEL,
53955 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
53956 			(void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
53957 			(void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
53958 			(void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
53959 			(void*)&&ZEND_NULL_LABEL,
53960 			(void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
53961 			(void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
53962 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
53963 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
53964 			(void*)&&ZEND_NULL_LABEL,
53965 			(void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
53966 			(void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
53967 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
53968 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
53969 			(void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
53970 			(void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
53971 			(void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
53972 			(void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
53973 			(void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
53974 			(void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
53975 			(void*)&&ZEND_NULL_LABEL,
53976 			(void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
53977 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_LABEL,
53978 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
53979 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
53980 			(void*)&&ZEND_NULL_LABEL,
53981 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_LABEL,
53982 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
53983 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
53984 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
53985 			(void*)&&ZEND_NULL_LABEL,
53986 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
53987 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
53988 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
53989 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
53990 			(void*)&&ZEND_NULL_LABEL,
53991 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
53992 			(void*)&&ZEND_NULL_LABEL,
53993 			(void*)&&ZEND_NULL_LABEL,
53994 			(void*)&&ZEND_NULL_LABEL,
53995 			(void*)&&ZEND_NULL_LABEL,
53996 			(void*)&&ZEND_NULL_LABEL,
53997 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_LABEL,
53998 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
53999 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
54000 			(void*)&&ZEND_NULL_LABEL,
54001 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_LABEL,
54002 			(void*)&&ZEND_MATCH_SPEC_CONST_CONST_LABEL,
54003 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
54004 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
54005 			(void*)&&ZEND_NULL_LABEL,
54006 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
54007 			(void*)&&ZEND_NULL_LABEL,
54008 			(void*)&&ZEND_NULL_LABEL,
54009 			(void*)&&ZEND_NULL_LABEL,
54010 			(void*)&&ZEND_NULL_LABEL,
54011 			(void*)&&ZEND_NULL_LABEL,
54012 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_CONST_LABEL,
54013 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_TMP_LABEL,
54014 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_VAR_LABEL,
54015 			(void*)&&ZEND_NULL_LABEL,
54016 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_CV_LABEL,
54017 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CONST_LABEL,
54018 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_TMP_LABEL,
54019 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_VAR_LABEL,
54020 			(void*)&&ZEND_NULL_LABEL,
54021 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CV_LABEL,
54022 			(void*)&&ZEND_NULL_LABEL,
54023 			(void*)&&ZEND_NULL_LABEL,
54024 			(void*)&&ZEND_NULL_LABEL,
54025 			(void*)&&ZEND_NULL_LABEL,
54026 			(void*)&&ZEND_NULL_LABEL,
54027 			(void*)&&ZEND_NULL_LABEL,
54028 			(void*)&&ZEND_NULL_LABEL,
54029 			(void*)&&ZEND_NULL_LABEL,
54030 			(void*)&&ZEND_NULL_LABEL,
54031 			(void*)&&ZEND_NULL_LABEL,
54032 			(void*)&&ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_LABEL,
54033 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
54034 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
54035 			(void*)&&ZEND_NULL_LABEL,
54036 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
54037 			(void*)&&ZEND_JMP_NULL_SPEC_CONST_LABEL,
54038 			(void*)&&ZEND_JMP_NULL_SPEC_TMP_LABEL,
54039 			(void*)&&ZEND_JMP_NULL_SPEC_VAR_LABEL,
54040 			(void*)&&ZEND_NULL_LABEL,
54041 			(void*)&&ZEND_JMP_NULL_SPEC_CV_LABEL,
54042 			(void*)&&ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_LABEL,
54043 			(void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
54044 			(void*)&&ZEND_JMP_FORWARD_SPEC_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_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54051 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54052 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54053 			(void*)&&ZEND_NULL_LABEL,
54054 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54055 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54056 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54057 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54058 			(void*)&&ZEND_NULL_LABEL,
54059 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54060 			(void*)&&ZEND_NULL_LABEL,
54061 			(void*)&&ZEND_NULL_LABEL,
54062 			(void*)&&ZEND_NULL_LABEL,
54063 			(void*)&&ZEND_NULL_LABEL,
54064 			(void*)&&ZEND_NULL_LABEL,
54065 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54066 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54067 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54068 			(void*)&&ZEND_NULL_LABEL,
54069 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54070 			(void*)&&ZEND_NULL_LABEL,
54071 			(void*)&&ZEND_NULL_LABEL,
54072 			(void*)&&ZEND_NULL_LABEL,
54073 			(void*)&&ZEND_NULL_LABEL,
54074 			(void*)&&ZEND_NULL_LABEL,
54075 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
54076 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54077 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54078 			(void*)&&ZEND_NULL_LABEL,
54079 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54080 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
54081 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54082 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54083 			(void*)&&ZEND_NULL_LABEL,
54084 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54085 			(void*)&&ZEND_NULL_LABEL,
54086 			(void*)&&ZEND_NULL_LABEL,
54087 			(void*)&&ZEND_NULL_LABEL,
54088 			(void*)&&ZEND_NULL_LABEL,
54089 			(void*)&&ZEND_NULL_LABEL,
54090 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
54091 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54092 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54093 			(void*)&&ZEND_NULL_LABEL,
54094 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54095 			(void*)&&ZEND_NULL_LABEL,
54096 			(void*)&&ZEND_NULL_LABEL,
54097 			(void*)&&ZEND_NULL_LABEL,
54098 			(void*)&&ZEND_NULL_LABEL,
54099 			(void*)&&ZEND_NULL_LABEL,
54100 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54101 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54102 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54103 			(void*)&&ZEND_NULL_LABEL,
54104 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54105 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54106 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54107 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54108 			(void*)&&ZEND_NULL_LABEL,
54109 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54110 			(void*)&&ZEND_NULL_LABEL,
54111 			(void*)&&ZEND_NULL_LABEL,
54112 			(void*)&&ZEND_NULL_LABEL,
54113 			(void*)&&ZEND_NULL_LABEL,
54114 			(void*)&&ZEND_NULL_LABEL,
54115 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54116 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54117 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54118 			(void*)&&ZEND_NULL_LABEL,
54119 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54120 			(void*)&&ZEND_NULL_LABEL,
54121 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
54122 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
54123 			(void*)&&ZEND_NULL_LABEL,
54124 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
54125 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54126 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54127 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54128 			(void*)&&ZEND_NULL_LABEL,
54129 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54130 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54131 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54132 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54133 			(void*)&&ZEND_NULL_LABEL,
54134 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54135 			(void*)&&ZEND_NULL_LABEL,
54136 			(void*)&&ZEND_NULL_LABEL,
54137 			(void*)&&ZEND_NULL_LABEL,
54138 			(void*)&&ZEND_NULL_LABEL,
54139 			(void*)&&ZEND_NULL_LABEL,
54140 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54141 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54142 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54143 			(void*)&&ZEND_NULL_LABEL,
54144 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54145 			(void*)&&ZEND_NULL_LABEL,
54146 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
54147 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
54148 			(void*)&&ZEND_NULL_LABEL,
54149 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
54150 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
54151 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54152 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54153 			(void*)&&ZEND_NULL_LABEL,
54154 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54155 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
54156 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54157 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54158 			(void*)&&ZEND_NULL_LABEL,
54159 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54160 			(void*)&&ZEND_NULL_LABEL,
54161 			(void*)&&ZEND_NULL_LABEL,
54162 			(void*)&&ZEND_NULL_LABEL,
54163 			(void*)&&ZEND_NULL_LABEL,
54164 			(void*)&&ZEND_NULL_LABEL,
54165 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
54166 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54167 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54168 			(void*)&&ZEND_NULL_LABEL,
54169 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54170 			(void*)&&ZEND_NULL_LABEL,
54171 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54172 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54173 			(void*)&&ZEND_NULL_LABEL,
54174 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54175 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54176 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54177 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54178 			(void*)&&ZEND_NULL_LABEL,
54179 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54180 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54181 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54182 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54183 			(void*)&&ZEND_NULL_LABEL,
54184 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54185 			(void*)&&ZEND_NULL_LABEL,
54186 			(void*)&&ZEND_NULL_LABEL,
54187 			(void*)&&ZEND_NULL_LABEL,
54188 			(void*)&&ZEND_NULL_LABEL,
54189 			(void*)&&ZEND_NULL_LABEL,
54190 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54191 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54192 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54193 			(void*)&&ZEND_NULL_LABEL,
54194 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54195 			(void*)&&ZEND_NULL_LABEL,
54196 			(void*)&&ZEND_NULL_LABEL,
54197 			(void*)&&ZEND_NULL_LABEL,
54198 			(void*)&&ZEND_NULL_LABEL,
54199 			(void*)&&ZEND_NULL_LABEL,
54200 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54201 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54202 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54203 			(void*)&&ZEND_NULL_LABEL,
54204 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54205 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54206 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54207 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54208 			(void*)&&ZEND_NULL_LABEL,
54209 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54210 			(void*)&&ZEND_NULL_LABEL,
54211 			(void*)&&ZEND_NULL_LABEL,
54212 			(void*)&&ZEND_NULL_LABEL,
54213 			(void*)&&ZEND_NULL_LABEL,
54214 			(void*)&&ZEND_NULL_LABEL,
54215 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
54216 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54217 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54218 			(void*)&&ZEND_NULL_LABEL,
54219 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
54220 			(void*)&&ZEND_NULL_LABEL,
54221 			(void*)&&ZEND_NULL_LABEL,
54222 			(void*)&&ZEND_NULL_LABEL,
54223 			(void*)&&ZEND_NULL_LABEL,
54224 			(void*)&&ZEND_NULL_LABEL,
54225 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54226 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54227 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54228 			(void*)&&ZEND_NULL_LABEL,
54229 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54230 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54231 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54232 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54233 			(void*)&&ZEND_NULL_LABEL,
54234 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_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_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54241 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54242 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54243 			(void*)&&ZEND_NULL_LABEL,
54244 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_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_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54251 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54252 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54253 			(void*)&&ZEND_NULL_LABEL,
54254 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54255 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54256 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54257 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54258 			(void*)&&ZEND_NULL_LABEL,
54259 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54266 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54267 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54268 			(void*)&&ZEND_NULL_LABEL,
54269 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
54278 			(void*)&&ZEND_NULL_LABEL,
54279 			(void*)&&ZEND_NULL_LABEL,
54280 			(void*)&&ZEND_NULL_LABEL,
54281 			(void*)&&ZEND_NULL_LABEL,
54282 			(void*)&&ZEND_NULL_LABEL,
54283 			(void*)&&ZEND_NULL_LABEL,
54284 			(void*)&&ZEND_NULL_LABEL,
54285 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54286 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54287 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54288 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54289 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54290 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54291 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54292 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54293 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54294 			(void*)&&ZEND_NULL_LABEL,
54295 			(void*)&&ZEND_NULL_LABEL,
54296 			(void*)&&ZEND_NULL_LABEL,
54297 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54298 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54299 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54300 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54301 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54302 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54303 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54304 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54305 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54306 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54307 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54308 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54309 			(void*)&&ZEND_NULL_LABEL,
54310 			(void*)&&ZEND_NULL_LABEL,
54311 			(void*)&&ZEND_NULL_LABEL,
54312 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54313 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54314 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54315 			(void*)&&ZEND_NULL_LABEL,
54316 			(void*)&&ZEND_NULL_LABEL,
54317 			(void*)&&ZEND_NULL_LABEL,
54318 			(void*)&&ZEND_NULL_LABEL,
54319 			(void*)&&ZEND_NULL_LABEL,
54320 			(void*)&&ZEND_NULL_LABEL,
54321 			(void*)&&ZEND_NULL_LABEL,
54322 			(void*)&&ZEND_NULL_LABEL,
54323 			(void*)&&ZEND_NULL_LABEL,
54324 			(void*)&&ZEND_NULL_LABEL,
54325 			(void*)&&ZEND_NULL_LABEL,
54326 			(void*)&&ZEND_NULL_LABEL,
54327 			(void*)&&ZEND_NULL_LABEL,
54328 			(void*)&&ZEND_NULL_LABEL,
54329 			(void*)&&ZEND_NULL_LABEL,
54330 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54331 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54332 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54333 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54334 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54335 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54336 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54337 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54338 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54339 			(void*)&&ZEND_NULL_LABEL,
54340 			(void*)&&ZEND_NULL_LABEL,
54341 			(void*)&&ZEND_NULL_LABEL,
54342 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54343 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54344 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_LABEL,
54352 			(void*)&&ZEND_NULL_LABEL,
54353 			(void*)&&ZEND_NULL_LABEL,
54354 			(void*)&&ZEND_NULL_LABEL,
54355 			(void*)&&ZEND_NULL_LABEL,
54356 			(void*)&&ZEND_NULL_LABEL,
54357 			(void*)&&ZEND_NULL_LABEL,
54358 			(void*)&&ZEND_NULL_LABEL,
54359 			(void*)&&ZEND_NULL_LABEL,
54360 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54361 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54362 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54363 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54364 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54365 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54366 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54367 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54368 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54369 			(void*)&&ZEND_NULL_LABEL,
54370 			(void*)&&ZEND_NULL_LABEL,
54371 			(void*)&&ZEND_NULL_LABEL,
54372 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54373 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54374 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54375 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54376 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54377 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54378 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54379 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54380 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54381 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54382 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54383 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54384 			(void*)&&ZEND_NULL_LABEL,
54385 			(void*)&&ZEND_NULL_LABEL,
54386 			(void*)&&ZEND_NULL_LABEL,
54387 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54388 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54389 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54390 			(void*)&&ZEND_NULL_LABEL,
54391 			(void*)&&ZEND_NULL_LABEL,
54392 			(void*)&&ZEND_NULL_LABEL,
54393 			(void*)&&ZEND_NULL_LABEL,
54394 			(void*)&&ZEND_NULL_LABEL,
54395 			(void*)&&ZEND_NULL_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_NULL_LABEL,
54403 			(void*)&&ZEND_NULL_LABEL,
54404 			(void*)&&ZEND_NULL_LABEL,
54405 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54406 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54407 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54408 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54409 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54410 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54411 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54412 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54413 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54414 			(void*)&&ZEND_NULL_LABEL,
54415 			(void*)&&ZEND_NULL_LABEL,
54416 			(void*)&&ZEND_NULL_LABEL,
54417 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54418 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54419 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54420 			(void*)&&ZEND_NULL_LABEL,
54421 			(void*)&&ZEND_NULL_LABEL,
54422 			(void*)&&ZEND_NULL_LABEL,
54423 			(void*)&&ZEND_NULL_LABEL,
54424 			(void*)&&ZEND_NULL_LABEL,
54425 			(void*)&&ZEND_NULL_LABEL,
54426 			(void*)&&ZEND_NULL_LABEL,
54427 			(void*)&&ZEND_NULL_LABEL,
54428 			(void*)&&ZEND_NULL_LABEL,
54429 			(void*)&&ZEND_NULL_LABEL,
54430 			(void*)&&ZEND_NULL_LABEL,
54431 			(void*)&&ZEND_NULL_LABEL,
54432 			(void*)&&ZEND_NULL_LABEL,
54433 			(void*)&&ZEND_NULL_LABEL,
54434 			(void*)&&ZEND_NULL_LABEL,
54435 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54436 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54437 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54438 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54439 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54440 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54441 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54442 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54443 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54444 			(void*)&&ZEND_NULL_LABEL,
54445 			(void*)&&ZEND_NULL_LABEL,
54446 			(void*)&&ZEND_NULL_LABEL,
54447 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54448 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54449 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54450 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54451 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54452 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54453 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54454 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54455 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54456 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54457 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54458 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54459 			(void*)&&ZEND_NULL_LABEL,
54460 			(void*)&&ZEND_NULL_LABEL,
54461 			(void*)&&ZEND_NULL_LABEL,
54462 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54463 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54464 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54465 			(void*)&&ZEND_NULL_LABEL,
54466 			(void*)&&ZEND_NULL_LABEL,
54467 			(void*)&&ZEND_NULL_LABEL,
54468 			(void*)&&ZEND_NULL_LABEL,
54469 			(void*)&&ZEND_NULL_LABEL,
54470 			(void*)&&ZEND_NULL_LABEL,
54471 			(void*)&&ZEND_NULL_LABEL,
54472 			(void*)&&ZEND_NULL_LABEL,
54473 			(void*)&&ZEND_NULL_LABEL,
54474 			(void*)&&ZEND_NULL_LABEL,
54475 			(void*)&&ZEND_NULL_LABEL,
54476 			(void*)&&ZEND_NULL_LABEL,
54477 			(void*)&&ZEND_NULL_LABEL,
54478 			(void*)&&ZEND_NULL_LABEL,
54479 			(void*)&&ZEND_NULL_LABEL,
54480 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54481 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54482 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54483 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54484 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54485 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54486 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54487 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54488 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54489 			(void*)&&ZEND_NULL_LABEL,
54490 			(void*)&&ZEND_NULL_LABEL,
54491 			(void*)&&ZEND_NULL_LABEL,
54492 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54493 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54494 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54495 			(void*)&&ZEND_NULL_LABEL,
54496 			(void*)&&ZEND_NULL_LABEL,
54497 			(void*)&&ZEND_NULL_LABEL,
54498 			(void*)&&ZEND_NULL_LABEL,
54499 			(void*)&&ZEND_NULL_LABEL,
54500 			(void*)&&ZEND_NULL_LABEL,
54501 			(void*)&&ZEND_NULL_LABEL,
54502 			(void*)&&ZEND_NULL_LABEL,
54503 			(void*)&&ZEND_NULL_LABEL,
54504 			(void*)&&ZEND_NULL_LABEL,
54505 			(void*)&&ZEND_NULL_LABEL,
54506 			(void*)&&ZEND_NULL_LABEL,
54507 			(void*)&&ZEND_NULL_LABEL,
54508 			(void*)&&ZEND_NULL_LABEL,
54509 			(void*)&&ZEND_NULL_LABEL,
54510 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54511 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54512 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54513 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54514 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54515 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54516 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54517 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54518 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54519 			(void*)&&ZEND_NULL_LABEL,
54520 			(void*)&&ZEND_NULL_LABEL,
54521 			(void*)&&ZEND_NULL_LABEL,
54522 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54523 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54524 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54525 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54526 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54527 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54528 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54529 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54530 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54531 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54532 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54533 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54534 			(void*)&&ZEND_NULL_LABEL,
54535 			(void*)&&ZEND_NULL_LABEL,
54536 			(void*)&&ZEND_NULL_LABEL,
54537 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54538 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54539 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54540 			(void*)&&ZEND_NULL_LABEL,
54541 			(void*)&&ZEND_NULL_LABEL,
54542 			(void*)&&ZEND_NULL_LABEL,
54543 			(void*)&&ZEND_NULL_LABEL,
54544 			(void*)&&ZEND_NULL_LABEL,
54545 			(void*)&&ZEND_NULL_LABEL,
54546 			(void*)&&ZEND_NULL_LABEL,
54547 			(void*)&&ZEND_NULL_LABEL,
54548 			(void*)&&ZEND_NULL_LABEL,
54549 			(void*)&&ZEND_NULL_LABEL,
54550 			(void*)&&ZEND_NULL_LABEL,
54551 			(void*)&&ZEND_NULL_LABEL,
54552 			(void*)&&ZEND_NULL_LABEL,
54553 			(void*)&&ZEND_NULL_LABEL,
54554 			(void*)&&ZEND_NULL_LABEL,
54555 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54556 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54557 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54558 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54559 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54560 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54561 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54562 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54563 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54564 			(void*)&&ZEND_NULL_LABEL,
54565 			(void*)&&ZEND_NULL_LABEL,
54566 			(void*)&&ZEND_NULL_LABEL,
54567 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54568 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54569 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54570 			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
54571 			(void*)&&ZEND_NULL_LABEL,
54572 			(void*)&&ZEND_NULL_LABEL,
54573 			(void*)&&ZEND_NULL_LABEL,
54574 			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
54575 			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
54576 			(void*)&&ZEND_NULL_LABEL,
54577 			(void*)&&ZEND_NULL_LABEL,
54578 			(void*)&&ZEND_NULL_LABEL,
54579 			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
54580 			(void*)&&ZEND_NULL_LABEL,
54581 			(void*)&&ZEND_NULL_LABEL,
54582 			(void*)&&ZEND_NULL_LABEL,
54583 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
54584 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54585 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54586 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
54587 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54588 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54589 			(void*)&&ZEND_NULL_LABEL,
54590 			(void*)&&ZEND_NULL_LABEL,
54591 			(void*)&&ZEND_NULL_LABEL,
54592 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
54593 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54594 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54595 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
54596 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54597 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54598 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54599 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54600 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54601 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54602 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54603 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54604 			(void*)&&ZEND_NULL_LABEL,
54605 			(void*)&&ZEND_NULL_LABEL,
54606 			(void*)&&ZEND_NULL_LABEL,
54607 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54608 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54609 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54610 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
54611 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54612 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54613 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54614 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54615 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54616 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54617 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54618 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54619 			(void*)&&ZEND_NULL_LABEL,
54620 			(void*)&&ZEND_NULL_LABEL,
54621 			(void*)&&ZEND_NULL_LABEL,
54622 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54623 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54624 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54625 			(void*)&&ZEND_NULL_LABEL,
54626 			(void*)&&ZEND_NULL_LABEL,
54627 			(void*)&&ZEND_NULL_LABEL,
54628 			(void*)&&ZEND_NULL_LABEL,
54629 			(void*)&&ZEND_NULL_LABEL,
54630 			(void*)&&ZEND_NULL_LABEL,
54631 			(void*)&&ZEND_NULL_LABEL,
54632 			(void*)&&ZEND_NULL_LABEL,
54633 			(void*)&&ZEND_NULL_LABEL,
54634 			(void*)&&ZEND_NULL_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_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
54641 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54642 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54643 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54644 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54645 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54646 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54647 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54648 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54649 			(void*)&&ZEND_NULL_LABEL,
54650 			(void*)&&ZEND_NULL_LABEL,
54651 			(void*)&&ZEND_NULL_LABEL,
54652 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54653 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54654 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54655 			(void*)&&ZEND_NULL_LABEL,
54656 			(void*)&&ZEND_NULL_LABEL,
54657 			(void*)&&ZEND_NULL_LABEL,
54658 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54659 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54660 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54661 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54662 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54663 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54664 			(void*)&&ZEND_NULL_LABEL,
54665 			(void*)&&ZEND_NULL_LABEL,
54666 			(void*)&&ZEND_NULL_LABEL,
54667 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54668 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54669 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54670 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54671 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54672 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54673 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54674 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54675 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54676 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54677 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54678 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54679 			(void*)&&ZEND_NULL_LABEL,
54680 			(void*)&&ZEND_NULL_LABEL,
54681 			(void*)&&ZEND_NULL_LABEL,
54682 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54683 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54684 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54685 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54686 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54687 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54688 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54689 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54690 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54691 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54692 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54693 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54694 			(void*)&&ZEND_NULL_LABEL,
54695 			(void*)&&ZEND_NULL_LABEL,
54696 			(void*)&&ZEND_NULL_LABEL,
54697 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54698 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54699 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54700 			(void*)&&ZEND_NULL_LABEL,
54701 			(void*)&&ZEND_NULL_LABEL,
54702 			(void*)&&ZEND_NULL_LABEL,
54703 			(void*)&&ZEND_NULL_LABEL,
54704 			(void*)&&ZEND_NULL_LABEL,
54705 			(void*)&&ZEND_NULL_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_NULL_LABEL,
54712 			(void*)&&ZEND_NULL_LABEL,
54713 			(void*)&&ZEND_NULL_LABEL,
54714 			(void*)&&ZEND_NULL_LABEL,
54715 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54716 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54717 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54718 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54719 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54720 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54721 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54722 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54723 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54724 			(void*)&&ZEND_NULL_LABEL,
54725 			(void*)&&ZEND_NULL_LABEL,
54726 			(void*)&&ZEND_NULL_LABEL,
54727 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54728 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54729 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54730 			(void*)&&ZEND_NULL_LABEL,
54731 			(void*)&&ZEND_NULL_LABEL,
54732 			(void*)&&ZEND_NULL_LABEL,
54733 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
54734 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54735 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54736 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
54737 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54738 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54739 			(void*)&&ZEND_NULL_LABEL,
54740 			(void*)&&ZEND_NULL_LABEL,
54741 			(void*)&&ZEND_NULL_LABEL,
54742 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
54743 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54744 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54745 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54746 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54747 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54748 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54749 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54750 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54751 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54752 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54753 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54754 			(void*)&&ZEND_NULL_LABEL,
54755 			(void*)&&ZEND_NULL_LABEL,
54756 			(void*)&&ZEND_NULL_LABEL,
54757 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54758 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54759 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54760 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54761 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54762 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54763 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54764 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54765 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54766 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54767 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54768 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54769 			(void*)&&ZEND_NULL_LABEL,
54770 			(void*)&&ZEND_NULL_LABEL,
54771 			(void*)&&ZEND_NULL_LABEL,
54772 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54773 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54774 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54775 			(void*)&&ZEND_NULL_LABEL,
54776 			(void*)&&ZEND_NULL_LABEL,
54777 			(void*)&&ZEND_NULL_LABEL,
54778 			(void*)&&ZEND_NULL_LABEL,
54779 			(void*)&&ZEND_NULL_LABEL,
54780 			(void*)&&ZEND_NULL_LABEL,
54781 			(void*)&&ZEND_NULL_LABEL,
54782 			(void*)&&ZEND_NULL_LABEL,
54783 			(void*)&&ZEND_NULL_LABEL,
54784 			(void*)&&ZEND_NULL_LABEL,
54785 			(void*)&&ZEND_NULL_LABEL,
54786 			(void*)&&ZEND_NULL_LABEL,
54787 			(void*)&&ZEND_NULL_LABEL,
54788 			(void*)&&ZEND_NULL_LABEL,
54789 			(void*)&&ZEND_NULL_LABEL,
54790 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
54791 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54792 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54793 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54794 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54795 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54796 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54797 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54798 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54799 			(void*)&&ZEND_NULL_LABEL,
54800 			(void*)&&ZEND_NULL_LABEL,
54801 			(void*)&&ZEND_NULL_LABEL,
54802 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
54803 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54804 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54805 			(void*)&&ZEND_NULL_LABEL,
54806 			(void*)&&ZEND_NULL_LABEL,
54807 			(void*)&&ZEND_NULL_LABEL,
54808 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54809 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54810 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54811 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54812 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54813 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54814 			(void*)&&ZEND_NULL_LABEL,
54815 			(void*)&&ZEND_NULL_LABEL,
54816 			(void*)&&ZEND_NULL_LABEL,
54817 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
54818 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54819 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54820 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54821 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54822 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54823 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54824 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54825 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54826 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54827 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54828 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54829 			(void*)&&ZEND_NULL_LABEL,
54830 			(void*)&&ZEND_NULL_LABEL,
54831 			(void*)&&ZEND_NULL_LABEL,
54832 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54833 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54834 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54835 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54836 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54837 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54838 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54839 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54840 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54841 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54842 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54843 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54844 			(void*)&&ZEND_NULL_LABEL,
54845 			(void*)&&ZEND_NULL_LABEL,
54846 			(void*)&&ZEND_NULL_LABEL,
54847 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54848 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54849 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54850 			(void*)&&ZEND_NULL_LABEL,
54851 			(void*)&&ZEND_NULL_LABEL,
54852 			(void*)&&ZEND_NULL_LABEL,
54853 			(void*)&&ZEND_NULL_LABEL,
54854 			(void*)&&ZEND_NULL_LABEL,
54855 			(void*)&&ZEND_NULL_LABEL,
54856 			(void*)&&ZEND_NULL_LABEL,
54857 			(void*)&&ZEND_NULL_LABEL,
54858 			(void*)&&ZEND_NULL_LABEL,
54859 			(void*)&&ZEND_NULL_LABEL,
54860 			(void*)&&ZEND_NULL_LABEL,
54861 			(void*)&&ZEND_NULL_LABEL,
54862 			(void*)&&ZEND_NULL_LABEL,
54863 			(void*)&&ZEND_NULL_LABEL,
54864 			(void*)&&ZEND_NULL_LABEL,
54865 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
54866 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54867 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54868 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54869 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54870 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54871 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54872 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54873 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54874 			(void*)&&ZEND_NULL_LABEL,
54875 			(void*)&&ZEND_NULL_LABEL,
54876 			(void*)&&ZEND_NULL_LABEL,
54877 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
54878 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54879 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54880 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
54881 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
54882 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
54883 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL,
54884 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
54885 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
54886 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
54887 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL,
54888 			(void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
54889 			(void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL,
54890 			(void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
54891 			(void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL,
54892 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_CONST_LABEL,
54893 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
54894 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
54895 			(void*)&&ZEND_NULL_LABEL,
54896 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
54897 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
54898 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
54899 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
54900 			(void*)&&ZEND_NULL_LABEL,
54901 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
54902 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
54903 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
54904 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
54905 			(void*)&&ZEND_NULL_LABEL,
54906 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
54907 			(void*)&&ZEND_NULL_LABEL,
54908 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
54909 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
54910 			(void*)&&ZEND_NULL_LABEL,
54911 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
54912 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
54913 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
54914 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
54915 			(void*)&&ZEND_NULL_LABEL,
54916 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
54917 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
54918 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
54919 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
54920 			(void*)&&ZEND_NULL_LABEL,
54921 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_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_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
54928 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
54929 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
54930 			(void*)&&ZEND_NULL_LABEL,
54931 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
54932 			(void*)&&ZEND_NULL_LABEL,
54933 			(void*)&&ZEND_NULL_LABEL,
54934 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
54935 			(void*)&&ZEND_NULL_LABEL,
54936 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
54937 			(void*)&&ZEND_NULL_LABEL,
54938 			(void*)&&ZEND_NULL_LABEL,
54939 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_LABEL,
54940 			(void*)&&ZEND_NULL_LABEL,
54941 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_LABEL,
54942 			(void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL,
54943 			(void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL,
54944 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
54945 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
54946 			(void*)&&ZEND_NULL_LABEL
54947 		};
54948 		zend_opcode_handlers = (const void **) labels;
54949 		zend_handlers_count = sizeof(labels) / sizeof(void*);
54950 		memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
54951 		hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
54952 		goto HYBRID_HALT_LABEL;
54953 	}
54954 #endif
54955 
54956 	LOAD_OPLINE();
54957 	ZEND_VM_LOOP_INTERRUPT_CHECK();
54958 
54959 	while (1) {
54960 #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
54961 			int ret;
54962 #endif
54963 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
54964 		HYBRID_SWITCH() {
54965 #else
54966 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
54967 		((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54968 		if (UNEXPECTED(!OPLINE)) {
54969 #else
54970 		if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
54971 #endif
54972 #endif
54973 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
54974 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC):
54975 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
54976 				ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54977 				HYBRID_BREAK();
54978 			HYBRID_CASE(ZEND_PRE_INC_STATIC_PROP_SPEC):
54979 				VM_TRACE(ZEND_PRE_INC_STATIC_PROP_SPEC)
54980 				ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54981 				HYBRID_BREAK();
54982 			HYBRID_CASE(ZEND_POST_INC_STATIC_PROP_SPEC):
54983 				VM_TRACE(ZEND_POST_INC_STATIC_PROP_SPEC)
54984 				ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54985 				HYBRID_BREAK();
54986 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC):
54987 				VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC)
54988 				ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54989 				HYBRID_BREAK();
54990 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC):
54991 				VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC)
54992 				ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54993 				HYBRID_BREAK();
54994 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC):
54995 				VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC)
54996 				ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54997 				HYBRID_BREAK();
54998 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC):
54999 				VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
55000 				ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55001 				HYBRID_BREAK();
55002 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC):
55003 				VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
55004 				ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55005 				HYBRID_BREAK();
55006 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC):
55007 				VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC)
55008 				ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55009 				HYBRID_BREAK();
55010 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST):
55011 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
55012 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55013 				HYBRID_BREAK();
55014 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP):
55015 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
55016 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55017 				HYBRID_BREAK();
55018 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR):
55019 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
55020 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55021 				HYBRID_BREAK();
55022 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV):
55023 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
55024 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55025 				HYBRID_BREAK();
55026 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC):
55027 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
55028 				ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55029 				HYBRID_BREAK();
55030 zend_leave_helper_SPEC_LABEL:
55031 {
55032 	zend_execute_data *old_execute_data;
55033 	uint32_t call_info = EX_CALL_INFO();
55034 	SAVE_OPLINE();
55035 
55036 	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)) {
55037 		EG(current_execute_data) = EX(prev_execute_data);
55038 		i_free_compiled_variables(execute_data);
55039 
55040 #ifdef ZEND_PREFER_RELOAD
55041 		call_info = EX_CALL_INFO();
55042 #endif
55043 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
55044 			OBJ_RELEASE(Z_OBJ(execute_data->This));
55045 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
55046 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
55047 		}
55048 		EG(vm_stack_top) = (zval*)execute_data;
55049 		execute_data = EX(prev_execute_data);
55050 
55051 		if (UNEXPECTED(EG(exception) != NULL)) {
55052 			zend_rethrow_exception(execute_data);
55053 			HANDLE_EXCEPTION_LEAVE();
55054 		}
55055 
55056 		LOAD_NEXT_OPLINE();
55057 		ZEND_VM_LEAVE();
55058 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
55059 		EG(current_execute_data) = EX(prev_execute_data);
55060 		i_free_compiled_variables(execute_data);
55061 
55062 #ifdef ZEND_PREFER_RELOAD
55063 		call_info = EX_CALL_INFO();
55064 #endif
55065 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
55066 			zend_clean_and_cache_symbol_table(EX(symbol_table));
55067 		}
55068 
55069 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
55070 			zend_free_extra_named_params(EX(extra_named_params));
55071 		}
55072 
55073 		/* Free extra args before releasing the closure,
55074 		 * as that may free the op_array. */
55075 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
55076 
55077 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
55078 			OBJ_RELEASE(Z_OBJ(execute_data->This));
55079 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
55080 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
55081 		}
55082 
55083 		old_execute_data = execute_data;
55084 		execute_data = EX(prev_execute_data);
55085 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
55086 
55087 		if (UNEXPECTED(EG(exception) != NULL)) {
55088 			zend_rethrow_exception(execute_data);
55089 			HANDLE_EXCEPTION_LEAVE();
55090 		}
55091 
55092 		LOAD_NEXT_OPLINE();
55093 		ZEND_VM_LEAVE();
55094 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
55095 		zend_detach_symbol_table(execute_data);
55096 		destroy_op_array(&EX(func)->op_array);
55097 		efree_size(EX(func), sizeof(zend_op_array));
55098 #ifdef ZEND_PREFER_RELOAD
55099 		call_info = EX_CALL_INFO();
55100 #endif
55101 		old_execute_data = execute_data;
55102 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
55103 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
55104 
55105 		zend_attach_symbol_table(execute_data);
55106 		if (UNEXPECTED(EG(exception) != NULL)) {
55107 			zend_rethrow_exception(execute_data);
55108 			HANDLE_EXCEPTION_LEAVE();
55109 		}
55110 
55111 		LOAD_NEXT_OPLINE();
55112 		ZEND_VM_LEAVE();
55113 	} else {
55114 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
55115 			EG(current_execute_data) = EX(prev_execute_data);
55116 			i_free_compiled_variables(execute_data);
55117 #ifdef ZEND_PREFER_RELOAD
55118 			call_info = EX_CALL_INFO();
55119 #endif
55120 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
55121 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
55122 					zend_clean_and_cache_symbol_table(EX(symbol_table));
55123 				}
55124 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
55125 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
55126 					zend_free_extra_named_params(EX(extra_named_params));
55127 				}
55128 			}
55129 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
55130 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
55131 			}
55132 			ZEND_VM_RETURN();
55133 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
55134 			zend_array *symbol_table = EX(symbol_table);
55135 
55136 			zend_detach_symbol_table(execute_data);
55137 			old_execute_data = EX(prev_execute_data);
55138 			while (old_execute_data) {
55139 				if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
55140 					if (old_execute_data->symbol_table == symbol_table) {
55141 						zend_attach_symbol_table(old_execute_data);
55142 					}
55143 					break;
55144 				}
55145 				old_execute_data = old_execute_data->prev_execute_data;
55146 			}
55147 			EG(current_execute_data) = EX(prev_execute_data);
55148 			ZEND_VM_RETURN();
55149 		}
55150 	}
55151 }
55152 
55153 			HYBRID_CASE(ZEND_JMP_SPEC):
55154 				VM_TRACE(ZEND_JMP_SPEC)
55155 				ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55156 				HYBRID_BREAK();
55157 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
55158 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
55159 				ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55160 				HYBRID_BREAK();
55161 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
55162 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
55163 				ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55164 				HYBRID_BREAK();
55165 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
55166 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
55167 				ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55168 				HYBRID_BREAK();
55169 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
55170 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
55171 				ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55172 				HYBRID_BREAK();
55173 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_OBSERVER):
55174 				VM_TRACE(ZEND_DO_UCALL_SPEC_OBSERVER)
55175 				ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55176 				HYBRID_BREAK();
55177 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
55178 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
55179 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55180 				HYBRID_BREAK();
55181 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
55182 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
55183 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55184 				HYBRID_BREAK();
55185 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER):
55186 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER)
55187 				ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55188 				HYBRID_BREAK();
55189 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
55190 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
55191 				ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55192 				HYBRID_BREAK();
55193 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
55194 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
55195 				ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55196 				HYBRID_BREAK();
55197 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_OBSERVER):
55198 				VM_TRACE(ZEND_DO_FCALL_SPEC_OBSERVER)
55199 				ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55200 				HYBRID_BREAK();
55201 			HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
55202 				VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
55203 				ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55204 				HYBRID_BREAK();
55205 			HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
55206 				VM_TRACE(ZEND_SEND_UNPACK_SPEC)
55207 				ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55208 				HYBRID_BREAK();
55209 			HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
55210 				VM_TRACE(ZEND_SEND_ARRAY_SPEC)
55211 				ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55212 				HYBRID_BREAK();
55213 			HYBRID_CASE(ZEND_RECV_NOTYPE_SPEC):
55214 				VM_TRACE(ZEND_RECV_NOTYPE_SPEC)
55215 				ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55216 				HYBRID_BREAK();
55217 			HYBRID_CASE(ZEND_ADD_ARRAY_UNPACK_SPEC):
55218 				VM_TRACE(ZEND_ADD_ARRAY_UNPACK_SPEC)
55219 				ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55220 				HYBRID_BREAK();
55221 			HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC):
55222 				VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC)
55223 				ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55224 				HYBRID_BREAK();
55225 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC):
55226 				VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
55227 				ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55228 				HYBRID_BREAK();
55229 			HYBRID_CASE(ZEND_EXIT_SPEC):
55230 				VM_TRACE(ZEND_EXIT_SPEC)
55231 				ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55232 				HYBRID_BREAK();
55233 			HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
55234 				VM_TRACE(ZEND_BEGIN_SILENCE_SPEC)
55235 				ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55236 				HYBRID_BREAK();
55237 			HYBRID_CASE(ZEND_EXT_STMT_SPEC):
55238 				VM_TRACE(ZEND_EXT_STMT_SPEC)
55239 				ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55240 				HYBRID_BREAK();
55241 			HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
55242 				VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC)
55243 				ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55244 				HYBRID_BREAK();
55245 			HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
55246 				VM_TRACE(ZEND_EXT_FCALL_END_SPEC)
55247 				ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55248 				HYBRID_BREAK();
55249 			HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
55250 				VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC)
55251 				ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55252 				HYBRID_BREAK();
55253 			HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
55254 				VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC)
55255 				ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55256 				HYBRID_BREAK();
55257 			HYBRID_CASE(ZEND_TICKS_SPEC):
55258 				VM_TRACE(ZEND_TICKS_SPEC)
55259 				ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55260 				HYBRID_BREAK();
55261 			HYBRID_CASE(ZEND_EXT_NOP_SPEC):
55262 				VM_TRACE(ZEND_EXT_NOP_SPEC)
55263 				ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55264 				HYBRID_BREAK();
55265 			HYBRID_CASE(ZEND_NOP_SPEC):
55266 				VM_TRACE(ZEND_NOP_SPEC)
55267 				ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55268 				HYBRID_BREAK();
55269 			HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
55270 				VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
55271 				ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55272 				HYBRID_BREAK();
55273 			HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
55274 				VM_TRACE(ZEND_USER_OPCODE_SPEC)
55275 				ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55276 				HYBRID_BREAK();
55277 			HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
55278 				VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC)
55279 				ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55280 				HYBRID_BREAK();
55281 			HYBRID_CASE(ZEND_FAST_CALL_SPEC):
55282 				VM_TRACE(ZEND_FAST_CALL_SPEC)
55283 				ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55284 				HYBRID_BREAK();
55285 			HYBRID_CASE(ZEND_FAST_RET_SPEC):
55286 				VM_TRACE(ZEND_FAST_RET_SPEC)
55287 				ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55288 				HYBRID_BREAK();
55289 			HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
55290 				VM_TRACE(ZEND_ASSERT_CHECK_SPEC)
55291 				ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55292 				HYBRID_BREAK();
55293 			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
55294 				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
55295 				ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55296 				HYBRID_BREAK();
55297 			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER):
55298 				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
55299 				ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55300 				HYBRID_BREAK();
55301 			HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
55302 				VM_TRACE(ZEND_JMP_FORWARD_SPEC)
55303 				ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55304 				HYBRID_BREAK();
55305 			HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
55306 				VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
55307 				ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55308 				HYBRID_BREAK();
55309 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
55310 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
55311 				ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55312 				HYBRID_BREAK();
55313 			HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
55314 				VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
55315 				ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55316 				HYBRID_BREAK();
55317 			HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
55318 				VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST)
55319 				ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55320 				HYBRID_BREAK();
55321 			HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
55322 				VM_TRACE(ZEND_RECV_INIT_SPEC_CONST)
55323 				ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55324 				HYBRID_BREAK();
55325 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
55326 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
55327 				ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55328 				HYBRID_BREAK();
55329 			HYBRID_CASE(ZEND_RECV_SPEC_UNUSED):
55330 				VM_TRACE(ZEND_RECV_SPEC_UNUSED)
55331 				ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55332 				HYBRID_BREAK();
55333 			HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED):
55334 				VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED)
55335 				ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55336 				HYBRID_BREAK();
55337 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
55338 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
55339 				ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55340 				HYBRID_BREAK();
55341 			HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
55342 				VM_TRACE(ZEND_BW_NOT_SPEC_CONST)
55343 				ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55344 				HYBRID_BREAK();
55345 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
55346 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST)
55347 				ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55348 				HYBRID_BREAK();
55349 			HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
55350 				VM_TRACE(ZEND_ECHO_SPEC_CONST)
55351 				ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55352 				HYBRID_BREAK();
55353 			HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
55354 				VM_TRACE(ZEND_JMPZ_SPEC_CONST)
55355 				ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55356 				HYBRID_BREAK();
55357 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
55358 				VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
55359 				ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55360 				HYBRID_BREAK();
55361 			HYBRID_CASE(ZEND_JMPZNZ_SPEC_CONST):
55362 				VM_TRACE(ZEND_JMPZNZ_SPEC_CONST)
55363 				ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55364 				HYBRID_BREAK();
55365 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
55366 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
55367 				ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55368 				HYBRID_BREAK();
55369 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
55370 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST)
55371 				ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55372 				HYBRID_BREAK();
55373 			HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
55374 				VM_TRACE(ZEND_RETURN_SPEC_CONST)
55375 {
55376 	USE_OPLINE
55377 	zval *retval_ptr;
55378 	zval *return_value;
55379 
55380 	retval_ptr = RT_CONSTANT(opline, opline->op1);
55381 	return_value = EX(return_value);
55382 
55383 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
55384 		SAVE_OPLINE();
55385 		retval_ptr = ZVAL_UNDEFINED_OP1();
55386 		if (return_value) {
55387 			ZVAL_NULL(return_value);
55388 		}
55389 	} else if (!return_value) {
55390 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
55391 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
55392 				SAVE_OPLINE();
55393 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
55394 			}
55395 		}
55396 	} else {
55397 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
55398 			ZVAL_COPY_VALUE(return_value, retval_ptr);
55399 			if (IS_CONST == IS_CONST) {
55400 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
55401 					Z_ADDREF_P(return_value);
55402 				}
55403 			}
55404 		} else if (IS_CONST == IS_CV) {
55405 			do {
55406 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55407 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
55408 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
55409 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
55410 							ZVAL_COPY_VALUE(return_value, retval_ptr);
55411 							if (GC_MAY_LEAK(ref)) {
55412 								SAVE_OPLINE();
55413 								gc_possible_root(ref);
55414 							}
55415 							ZVAL_NULL(retval_ptr);
55416 							break;
55417 						} else {
55418 							Z_ADDREF_P(retval_ptr);
55419 						}
55420 					} else {
55421 						retval_ptr = Z_REFVAL_P(retval_ptr);
55422 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55423 							Z_ADDREF_P(retval_ptr);
55424 						}
55425 					}
55426 				}
55427 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55428 			} while (0);
55429 		} else /* if (IS_CONST == IS_VAR) */ {
55430 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
55431 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
55432 
55433 				retval_ptr = Z_REFVAL_P(retval_ptr);
55434 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55435 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
55436 					efree_size(ref, sizeof(zend_reference));
55437 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55438 					Z_ADDREF_P(retval_ptr);
55439 				}
55440 			} else {
55441 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55442 			}
55443 		}
55444 	}
55445 
55446 
55447 
55448 	goto zend_leave_helper_SPEC_LABEL;
55449 }
55450 
55451 			HYBRID_CASE(ZEND_RETURN_SPEC_OBSERVER):
55452 				VM_TRACE(ZEND_RETURN_SPEC_OBSERVER)
55453 {
55454 	USE_OPLINE
55455 	zval *retval_ptr;
55456 	zval *return_value;
55457 	zval observer_retval;
55458 
55459 	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
55460 	return_value = EX(return_value);
55461 	if (!return_value) { return_value = &observer_retval; };
55462 	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
55463 		SAVE_OPLINE();
55464 		retval_ptr = ZVAL_UNDEFINED_OP1();
55465 		if (return_value) {
55466 			ZVAL_NULL(return_value);
55467 		}
55468 	} else if (!return_value) {
55469 		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
55470 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
55471 				SAVE_OPLINE();
55472 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
55473 			}
55474 		}
55475 	} else {
55476 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
55477 			ZVAL_COPY_VALUE(return_value, retval_ptr);
55478 			if (opline->op1_type == IS_CONST) {
55479 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
55480 					Z_ADDREF_P(return_value);
55481 				}
55482 			}
55483 		} else if (opline->op1_type == IS_CV) {
55484 			do {
55485 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55486 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
55487 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
55488 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
55489 							ZVAL_COPY_VALUE(return_value, retval_ptr);
55490 							if (GC_MAY_LEAK(ref)) {
55491 								SAVE_OPLINE();
55492 								gc_possible_root(ref);
55493 							}
55494 							ZVAL_NULL(retval_ptr);
55495 							break;
55496 						} else {
55497 							Z_ADDREF_P(retval_ptr);
55498 						}
55499 					} else {
55500 						retval_ptr = Z_REFVAL_P(retval_ptr);
55501 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55502 							Z_ADDREF_P(retval_ptr);
55503 						}
55504 					}
55505 				}
55506 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55507 			} while (0);
55508 		} else /* if (opline->op1_type == IS_VAR) */ {
55509 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
55510 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
55511 
55512 				retval_ptr = Z_REFVAL_P(retval_ptr);
55513 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55514 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
55515 					efree_size(ref, sizeof(zend_reference));
55516 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55517 					Z_ADDREF_P(retval_ptr);
55518 				}
55519 			} else {
55520 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55521 			}
55522 		}
55523 	}
55524 	SAVE_OPLINE();
55525 	zend_observer_fcall_end(execute_data, return_value);
55526 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
55527 	goto zend_leave_helper_SPEC_LABEL;
55528 }
55529 
55530 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
55531 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
55532 				ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55533 				HYBRID_BREAK();
55534 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_OBSERVER):
55535 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_OBSERVER)
55536 				ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55537 				HYBRID_BREAK();
55538 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
55539 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
55540 				ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55541 				HYBRID_BREAK();
55542 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER):
55543 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER)
55544 				ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55545 				HYBRID_BREAK();
55546 			HYBRID_CASE(ZEND_THROW_SPEC_CONST):
55547 				VM_TRACE(ZEND_THROW_SPEC_CONST)
55548 				ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55549 				HYBRID_BREAK();
55550 			HYBRID_CASE(ZEND_CATCH_SPEC_CONST):
55551 				VM_TRACE(ZEND_CATCH_SPEC_CONST)
55552 				ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55553 				HYBRID_BREAK();
55554 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
55555 				VM_TRACE(ZEND_SEND_USER_SPEC_CONST)
55556 				ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55557 				HYBRID_BREAK();
55558 			HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
55559 				VM_TRACE(ZEND_BOOL_SPEC_CONST)
55560 				ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55561 				HYBRID_BREAK();
55562 			HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
55563 				VM_TRACE(ZEND_CLONE_SPEC_CONST)
55564 				ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55565 				HYBRID_BREAK();
55566 			HYBRID_CASE(ZEND_CAST_SPEC_CONST):
55567 				VM_TRACE(ZEND_CAST_SPEC_CONST)
55568 				ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55569 				HYBRID_BREAK();
55570 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
55571 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
55572 				ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55573 				HYBRID_BREAK();
55574 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER):
55575 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER)
55576 				ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55577 				HYBRID_BREAK();
55578 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
55579 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
55580 				ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55581 				HYBRID_BREAK();
55582 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
55583 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST)
55584 				ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55585 				HYBRID_BREAK();
55586 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
55587 				VM_TRACE(ZEND_JMP_SET_SPEC_CONST)
55588 				ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55589 				HYBRID_BREAK();
55590 			HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
55591 				VM_TRACE(ZEND_COALESCE_SPEC_CONST)
55592 				ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55593 				HYBRID_BREAK();
55594 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CONST):
55595 				VM_TRACE(ZEND_JMP_NULL_SPEC_CONST)
55596 				ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55597 				HYBRID_BREAK();
55598 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
55599 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST)
55600 				ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55601 				HYBRID_BREAK();
55602 			HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST):
55603 				VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST)
55604 				ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55605 				HYBRID_BREAK();
55606 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
55607 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST)
55608 				ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55609 				HYBRID_BREAK();
55610 			HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
55611 				VM_TRACE(ZEND_STRLEN_SPEC_CONST)
55612 				ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55613 				HYBRID_BREAK();
55614 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
55615 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST)
55616 				ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55617 				HYBRID_BREAK();
55618 			HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
55619 				VM_TRACE(ZEND_DEFINED_SPEC_CONST)
55620 				ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55621 				HYBRID_BREAK();
55622 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_CONST):
55623 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
55624 				ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55625 				HYBRID_BREAK();
55626 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
55627 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
55628 				ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55629 				HYBRID_BREAK();
55630 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
55631 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
55632 				ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55633 				HYBRID_BREAK();
55634 			HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST):
55635 				VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
55636 				ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55637 				HYBRID_BREAK();
55638 			HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST):
55639 				VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
55640 				ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55641 				HYBRID_BREAK();
55642 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
55643 				VM_TRACE(ZEND_ADD_SPEC_CONST_CONST)
55644 				ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55645 				HYBRID_BREAK();
55646 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
55647 				VM_TRACE(ZEND_SUB_SPEC_CONST_CONST)
55648 				ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55649 				HYBRID_BREAK();
55650 			HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
55651 				VM_TRACE(ZEND_MUL_SPEC_CONST_CONST)
55652 				ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55653 				HYBRID_BREAK();
55654 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
55655 				VM_TRACE(ZEND_DIV_SPEC_CONST_CONST)
55656 				ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55657 				HYBRID_BREAK();
55658 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
55659 				VM_TRACE(ZEND_MOD_SPEC_CONST_CONST)
55660 				ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55661 				HYBRID_BREAK();
55662 			HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
55663 				VM_TRACE(ZEND_SL_SPEC_CONST_CONST)
55664 				ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55665 				HYBRID_BREAK();
55666 			HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
55667 				VM_TRACE(ZEND_SR_SPEC_CONST_CONST)
55668 				ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55669 				HYBRID_BREAK();
55670 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
55671 				VM_TRACE(ZEND_POW_SPEC_CONST_CONST)
55672 				ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55673 				HYBRID_BREAK();
55674 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
55675 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
55676 				ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55677 				HYBRID_BREAK();
55678 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
55679 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
55680 				ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55681 				HYBRID_BREAK();
55682 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
55683 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST)
55684 				ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55685 				HYBRID_BREAK();
55686 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
55687 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
55688 				ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55689 				HYBRID_BREAK();
55690 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
55691 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST)
55692 				ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55693 				HYBRID_BREAK();
55694 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
55695 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
55696 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55697 				HYBRID_BREAK();
55698 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
55699 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST)
55700 				ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55701 				HYBRID_BREAK();
55702 			HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
55703 				VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST)
55704 				ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55705 				HYBRID_BREAK();
55706 			HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
55707 				VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST)
55708 				ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55709 				HYBRID_BREAK();
55710 			HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
55711 				VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST)
55712 				ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55713 				HYBRID_BREAK();
55714 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
55715 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST)
55716 				ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55717 				HYBRID_BREAK();
55718 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
55719 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
55720 				ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55721 				HYBRID_BREAK();
55722 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
55723 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
55724 				ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55725 				HYBRID_BREAK();
55726 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
55727 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
55728 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55729 				HYBRID_BREAK();
55730 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
55731 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
55732 				ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55733 				HYBRID_BREAK();
55734 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
55735 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
55736 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55737 				HYBRID_BREAK();
55738 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
55739 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
55740 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55741 				HYBRID_BREAK();
55742 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST):
55743 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
55744 				ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55745 				HYBRID_BREAK();
55746 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
55747 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
55748 				ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55749 				HYBRID_BREAK();
55750 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
55751 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
55752 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55753 				HYBRID_BREAK();
55754 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
55755 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
55756 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55757 				HYBRID_BREAK();
55758 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
55759 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
55760 				ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55761 				HYBRID_BREAK();
55762 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_CONST):
55763 				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_CONST)
55764 				ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55765 				HYBRID_BREAK();
55766 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST):
55767 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST)
55768 				ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55769 				HYBRID_BREAK();
55770 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
55771 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
55772 				ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55773 				HYBRID_BREAK();
55774 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
55775 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
55776 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55777 				HYBRID_BREAK();
55778 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
55779 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
55780 				ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55781 				HYBRID_BREAK();
55782 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
55783 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
55784 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55785 				HYBRID_BREAK();
55786 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
55787 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
55788 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55789 				HYBRID_BREAK();
55790 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST):
55791 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
55792 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55793 				HYBRID_BREAK();
55794 			HYBRID_CASE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST):
55795 				VM_TRACE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
55796 				ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55797 				HYBRID_BREAK();
55798 			HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
55799 				VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
55800 				ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55801 				HYBRID_BREAK();
55802 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
55803 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST)
55804 				ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55805 				HYBRID_BREAK();
55806 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
55807 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
55808 				ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55809 				HYBRID_BREAK();
55810 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
55811 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
55812 				ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55813 				HYBRID_BREAK();
55814 			HYBRID_CASE(ZEND_MATCH_SPEC_CONST_CONST):
55815 				VM_TRACE(ZEND_MATCH_SPEC_CONST_CONST)
55816 				ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55817 				HYBRID_BREAK();
55818 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
55819 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST)
55820 				ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55821 				HYBRID_BREAK();
55822 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVARCV):
55823 				VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVARCV)
55824 				ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55825 				HYBRID_BREAK();
55826 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVARCV):
55827 				VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVARCV)
55828 				ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55829 				HYBRID_BREAK();
55830 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVARCV):
55831 				VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVARCV)
55832 				ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55833 				HYBRID_BREAK();
55834 			HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVARCV):
55835 				VM_TRACE(ZEND_SL_SPEC_CONST_TMPVARCV)
55836 				ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55837 				HYBRID_BREAK();
55838 			HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVARCV):
55839 				VM_TRACE(ZEND_SR_SPEC_CONST_TMPVARCV)
55840 				ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55841 				HYBRID_BREAK();
55842 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV):
55843 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
55844 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55845 				HYBRID_BREAK();
55846 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ):
55847 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
55848 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55849 				HYBRID_BREAK();
55850 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ):
55851 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
55852 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55853 				HYBRID_BREAK();
55854 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV):
55855 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
55856 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55857 				HYBRID_BREAK();
55858 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ):
55859 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
55860 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55861 				HYBRID_BREAK();
55862 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ):
55863 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
55864 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55865 				HYBRID_BREAK();
55866 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
55867 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
55868 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55869 				HYBRID_BREAK();
55870 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
55871 				VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
55872 				ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55873 				HYBRID_BREAK();
55874 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
55875 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
55876 				ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55877 				HYBRID_BREAK();
55878 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
55879 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
55880 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55881 				HYBRID_BREAK();
55882 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
55883 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
55884 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55885 				HYBRID_BREAK();
55886 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
55887 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
55888 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55889 				HYBRID_BREAK();
55890 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
55891 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
55892 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55893 				HYBRID_BREAK();
55894 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
55895 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
55896 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55897 				HYBRID_BREAK();
55898 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
55899 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
55900 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55901 				HYBRID_BREAK();
55902 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
55903 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
55904 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55905 				HYBRID_BREAK();
55906 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
55907 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
55908 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55909 				HYBRID_BREAK();
55910 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
55911 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
55912 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55913 				HYBRID_BREAK();
55914 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
55915 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
55916 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55917 				HYBRID_BREAK();
55918 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
55919 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
55920 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55921 				HYBRID_BREAK();
55922 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
55923 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
55924 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55925 				HYBRID_BREAK();
55926 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV):
55927 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
55928 				ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55929 				HYBRID_BREAK();
55930 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
55931 				VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR)
55932 				ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55933 				HYBRID_BREAK();
55934 			HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
55935 				VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR)
55936 				ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55937 				HYBRID_BREAK();
55938 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
55939 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR)
55940 				ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55941 				HYBRID_BREAK();
55942 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
55943 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
55944 				ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55945 				HYBRID_BREAK();
55946 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
55947 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
55948 				ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55949 				HYBRID_BREAK();
55950 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
55951 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
55952 				ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55953 				HYBRID_BREAK();
55954 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
55955 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
55956 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55957 				HYBRID_BREAK();
55958 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
55959 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
55960 				ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55961 				HYBRID_BREAK();
55962 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
55963 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
55964 				ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55965 				HYBRID_BREAK();
55966 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
55967 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
55968 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55969 				HYBRID_BREAK();
55970 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR):
55971 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
55972 				ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55973 				HYBRID_BREAK();
55974 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
55975 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
55976 				ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55977 				HYBRID_BREAK();
55978 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
55979 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
55980 				ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55981 				HYBRID_BREAK();
55982 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
55983 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
55984 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55985 				HYBRID_BREAK();
55986 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
55987 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
55988 				ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55989 				HYBRID_BREAK();
55990 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
55991 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
55992 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55993 				HYBRID_BREAK();
55994 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
55995 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
55996 				ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55997 				HYBRID_BREAK();
55998 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
55999 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
56000 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56001 				HYBRID_BREAK();
56002 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
56003 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
56004 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56005 				HYBRID_BREAK();
56006 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR):
56007 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
56008 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56009 				HYBRID_BREAK();
56010 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMPVAR):
56011 				VM_TRACE(ZEND_YIELD_SPEC_CONST_TMPVAR)
56012 				ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56013 				HYBRID_BREAK();
56014 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
56015 				VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED)
56016 				ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56017 				HYBRID_BREAK();
56018 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
56019 				VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED)
56020 				ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56021 				HYBRID_BREAK();
56022 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
56023 				VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
56024 				ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56025 				HYBRID_BREAK();
56026 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
56027 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
56028 				ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56029 				HYBRID_BREAK();
56030 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
56031 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
56032 				ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56033 				HYBRID_BREAK();
56034 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
56035 				VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
56036 				ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56037 				HYBRID_BREAK();
56038 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
56039 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
56040 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56041 				HYBRID_BREAK();
56042 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
56043 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
56044 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56045 				HYBRID_BREAK();
56046 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
56047 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
56048 				ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56049 				HYBRID_BREAK();
56050 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_UNUSED):
56051 				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_UNUSED)
56052 				ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56053 				HYBRID_BREAK();
56054 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED):
56055 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED)
56056 				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56057 				HYBRID_BREAK();
56058 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK):
56059 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK)
56060 				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56061 				HYBRID_BREAK();
56062 			HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED):
56063 				VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED)
56064 				ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56065 				HYBRID_BREAK();
56066 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
56067 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
56068 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56069 				HYBRID_BREAK();
56070 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
56071 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
56072 				ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56073 				HYBRID_BREAK();
56074 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
56075 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
56076 				ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56077 				HYBRID_BREAK();
56078 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
56079 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
56080 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56081 				HYBRID_BREAK();
56082 			HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED):
56083 				VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED)
56084 				ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56085 				HYBRID_BREAK();
56086 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
56087 				VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED)
56088 				ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56089 				HYBRID_BREAK();
56090 			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED):
56091 				VM_TRACE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED)
56092 				ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56093 				HYBRID_BREAK();
56094 			HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
56095 				VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED)
56096 				ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56097 				HYBRID_BREAK();
56098 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
56099 				VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
56100 				ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56101 				HYBRID_BREAK();
56102 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
56103 				VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
56104 				ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56105 				HYBRID_BREAK();
56106 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
56107 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
56108 				ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56109 				HYBRID_BREAK();
56110 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
56111 				VM_TRACE(ZEND_DIV_SPEC_CONST_CV)
56112 				ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56113 				HYBRID_BREAK();
56114 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
56115 				VM_TRACE(ZEND_POW_SPEC_CONST_CV)
56116 				ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56117 				HYBRID_BREAK();
56118 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
56119 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV)
56120 				ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56121 				HYBRID_BREAK();
56122 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
56123 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV)
56124 				ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56125 				HYBRID_BREAK();
56126 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
56127 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
56128 				ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56129 				HYBRID_BREAK();
56130 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
56131 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
56132 				ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56133 				HYBRID_BREAK();
56134 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
56135 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
56136 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56137 				HYBRID_BREAK();
56138 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
56139 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
56140 				ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56141 				HYBRID_BREAK();
56142 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
56143 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
56144 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56145 				HYBRID_BREAK();
56146 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
56147 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
56148 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56149 				HYBRID_BREAK();
56150 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV):
56151 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
56152 				ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56153 				HYBRID_BREAK();
56154 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
56155 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV)
56156 				ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56157 				HYBRID_BREAK();
56158 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
56159 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
56160 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56161 				HYBRID_BREAK();
56162 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
56163 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
56164 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56165 				HYBRID_BREAK();
56166 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
56167 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
56168 				ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56169 				HYBRID_BREAK();
56170 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
56171 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
56172 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56173 				HYBRID_BREAK();
56174 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
56175 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV)
56176 				ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56177 				HYBRID_BREAK();
56178 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
56179 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
56180 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56181 				HYBRID_BREAK();
56182 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
56183 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
56184 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56185 				HYBRID_BREAK();
56186 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV):
56187 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
56188 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56189 				HYBRID_BREAK();
56190 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
56191 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CV)
56192 				ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56193 				HYBRID_BREAK();
56194 			HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVARCV):
56195 				VM_TRACE(ZEND_BW_NOT_SPEC_TMPVARCV)
56196 				ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56197 				HYBRID_BREAK();
56198 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
56199 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
56200 				ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56201 				HYBRID_BREAK();
56202 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
56203 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
56204 				ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56205 				HYBRID_BREAK();
56206 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
56207 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
56208 				ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56209 				HYBRID_BREAK();
56210 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_CONST):
56211 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_CONST)
56212 				ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56213 				HYBRID_BREAK();
56214 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_CONST):
56215 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_CONST)
56216 				ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56217 				HYBRID_BREAK();
56218 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_CONST):
56219 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_CONST)
56220 				ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56221 				HYBRID_BREAK();
56222 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_CONST):
56223 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_CONST)
56224 				ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56225 				HYBRID_BREAK();
56226 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_CONST):
56227 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_CONST)
56228 				ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56229 				HYBRID_BREAK();
56230 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_CONST):
56231 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_CONST)
56232 				ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56233 				HYBRID_BREAK();
56234 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST):
56235 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
56236 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56237 				HYBRID_BREAK();
56238 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ):
56239 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
56240 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56241 				HYBRID_BREAK();
56242 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ):
56243 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
56244 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56245 				HYBRID_BREAK();
56246 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST):
56247 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
56248 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56249 				HYBRID_BREAK();
56250 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ):
56251 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
56252 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56253 				HYBRID_BREAK();
56254 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ):
56255 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
56256 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56257 				HYBRID_BREAK();
56258 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_CONST):
56259 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
56260 				ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56261 				HYBRID_BREAK();
56262 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_CONST):
56263 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
56264 				ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56265 				HYBRID_BREAK();
56266 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST):
56267 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
56268 				ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56269 				HYBRID_BREAK();
56270 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST):
56271 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
56272 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56273 				HYBRID_BREAK();
56274 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST):
56275 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
56276 				ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56277 				HYBRID_BREAK();
56278 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST):
56279 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
56280 				ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56281 				HYBRID_BREAK();
56282 			HYBRID_CASE(ZEND_MATCH_SPEC_TMPVARCV_CONST):
56283 				VM_TRACE(ZEND_MATCH_SPEC_TMPVARCV_CONST)
56284 				ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56285 				HYBRID_BREAK();
56286 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
56287 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
56288 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56289 				HYBRID_BREAK();
56290 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST):
56291 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
56292 				ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56293 				HYBRID_BREAK();
56294 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST):
56295 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
56296 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56297 				HYBRID_BREAK();
56298 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
56299 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
56300 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56301 				HYBRID_BREAK();
56302 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
56303 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
56304 				ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56305 				HYBRID_BREAK();
56306 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
56307 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
56308 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56309 				HYBRID_BREAK();
56310 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
56311 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
56312 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56313 				HYBRID_BREAK();
56314 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST):
56315 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
56316 				ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56317 				HYBRID_BREAK();
56318 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST):
56319 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
56320 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56321 				HYBRID_BREAK();
56322 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST):
56323 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
56324 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56325 				HYBRID_BREAK();
56326 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
56327 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
56328 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56329 				HYBRID_BREAK();
56330 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
56331 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
56332 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56333 				HYBRID_BREAK();
56334 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
56335 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
56336 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56337 				HYBRID_BREAK();
56338 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
56339 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
56340 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56341 				HYBRID_BREAK();
56342 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
56343 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
56344 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56345 				HYBRID_BREAK();
56346 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST):
56347 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
56348 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56349 				HYBRID_BREAK();
56350 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
56351 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
56352 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56353 				HYBRID_BREAK();
56354 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
56355 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
56356 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56357 				HYBRID_BREAK();
56358 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
56359 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
56360 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56361 				HYBRID_BREAK();
56362 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
56363 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
56364 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56365 				HYBRID_BREAK();
56366 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
56367 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
56368 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56369 				HYBRID_BREAK();
56370 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
56371 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
56372 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56373 				HYBRID_BREAK();
56374 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
56375 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
56376 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56377 				HYBRID_BREAK();
56378 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
56379 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
56380 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56381 				HYBRID_BREAK();
56382 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
56383 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
56384 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56385 				HYBRID_BREAK();
56386 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
56387 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
56388 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56389 				HYBRID_BREAK();
56390 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
56391 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
56392 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56393 				HYBRID_BREAK();
56394 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
56395 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
56396 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56397 				HYBRID_BREAK();
56398 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
56399 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
56400 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56401 				HYBRID_BREAK();
56402 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
56403 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
56404 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56405 				HYBRID_BREAK();
56406 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
56407 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
56408 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56409 				HYBRID_BREAK();
56410 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
56411 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
56412 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56413 				HYBRID_BREAK();
56414 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
56415 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
56416 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56417 				HYBRID_BREAK();
56418 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV):
56419 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
56420 				ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56421 				HYBRID_BREAK();
56422 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV):
56423 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
56424 				ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56425 				HYBRID_BREAK();
56426 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV):
56427 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
56428 				ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56429 				HYBRID_BREAK();
56430 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV):
56431 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
56432 				ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56433 				HYBRID_BREAK();
56434 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV):
56435 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
56436 				ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56437 				HYBRID_BREAK();
56438 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV):
56439 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
56440 				ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56441 				HYBRID_BREAK();
56442 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV):
56443 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
56444 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56445 				HYBRID_BREAK();
56446 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56447 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56448 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56449 				HYBRID_BREAK();
56450 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56451 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56452 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56453 				HYBRID_BREAK();
56454 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV):
56455 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
56456 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56457 				HYBRID_BREAK();
56458 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56459 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56460 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56461 				HYBRID_BREAK();
56462 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56463 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56464 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56465 				HYBRID_BREAK();
56466 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV):
56467 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
56468 				ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56469 				HYBRID_BREAK();
56470 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV):
56471 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
56472 				ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56473 				HYBRID_BREAK();
56474 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV):
56475 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
56476 				ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56477 				HYBRID_BREAK();
56478 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
56479 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
56480 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56481 				HYBRID_BREAK();
56482 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
56483 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
56484 				ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56485 				HYBRID_BREAK();
56486 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
56487 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
56488 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56489 				HYBRID_BREAK();
56490 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
56491 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
56492 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56493 				HYBRID_BREAK();
56494 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
56495 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
56496 				ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56497 				HYBRID_BREAK();
56498 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
56499 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
56500 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56501 				HYBRID_BREAK();
56502 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
56503 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
56504 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56505 				HYBRID_BREAK();
56506 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
56507 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
56508 				ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56509 				HYBRID_BREAK();
56510 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
56511 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
56512 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56513 				HYBRID_BREAK();
56514 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
56515 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
56516 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56517 				HYBRID_BREAK();
56518 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56519 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56520 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56521 				HYBRID_BREAK();
56522 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56523 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56524 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56525 				HYBRID_BREAK();
56526 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
56527 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
56528 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56529 				HYBRID_BREAK();
56530 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56531 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56532 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56533 				HYBRID_BREAK();
56534 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56535 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56536 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56537 				HYBRID_BREAK();
56538 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
56539 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
56540 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56541 				HYBRID_BREAK();
56542 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56543 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56544 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56545 				HYBRID_BREAK();
56546 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56547 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56548 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56549 				HYBRID_BREAK();
56550 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
56551 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
56552 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56553 				HYBRID_BREAK();
56554 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56555 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56556 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56557 				HYBRID_BREAK();
56558 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56559 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56560 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56561 				HYBRID_BREAK();
56562 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
56563 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
56564 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56565 				HYBRID_BREAK();
56566 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56567 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56568 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56569 				HYBRID_BREAK();
56570 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56571 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56572 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56573 				HYBRID_BREAK();
56574 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
56575 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
56576 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56577 				HYBRID_BREAK();
56578 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56579 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56580 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56581 				HYBRID_BREAK();
56582 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56583 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56584 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56585 				HYBRID_BREAK();
56586 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
56587 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
56588 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56589 				HYBRID_BREAK();
56590 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56591 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56592 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56593 				HYBRID_BREAK();
56594 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56595 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56596 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56597 				HYBRID_BREAK();
56598 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
56599 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
56600 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56601 				HYBRID_BREAK();
56602 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
56603 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
56604 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56605 				HYBRID_BREAK();
56606 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
56607 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
56608 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56609 				HYBRID_BREAK();
56610 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR):
56611 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
56612 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56613 				HYBRID_BREAK();
56614 			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED):
56615 				VM_TRACE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED)
56616 				ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56617 				HYBRID_BREAK();
56618 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV):
56619 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
56620 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56621 				HYBRID_BREAK();
56622 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
56623 				VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR)
56624 				ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56625 				HYBRID_BREAK();
56626 			HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
56627 				VM_TRACE(ZEND_ECHO_SPEC_TMPVAR)
56628 				ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56629 				HYBRID_BREAK();
56630 			HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
56631 				VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR)
56632 				ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56633 				HYBRID_BREAK();
56634 			HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
56635 				VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
56636 				ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56637 				HYBRID_BREAK();
56638 			HYBRID_CASE(ZEND_JMPZNZ_SPEC_TMPVAR):
56639 				VM_TRACE(ZEND_JMPZNZ_SPEC_TMPVAR)
56640 				ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56641 				HYBRID_BREAK();
56642 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
56643 				VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
56644 				ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56645 				HYBRID_BREAK();
56646 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
56647 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR)
56648 				ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56649 				HYBRID_BREAK();
56650 			HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
56651 				VM_TRACE(ZEND_FREE_SPEC_TMPVAR)
56652 				ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56653 				HYBRID_BREAK();
56654 			HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
56655 				VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR)
56656 				ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56657 				HYBRID_BREAK();
56658 			HYBRID_CASE(ZEND_THROW_SPEC_TMPVAR):
56659 				VM_TRACE(ZEND_THROW_SPEC_TMPVAR)
56660 				ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56661 				HYBRID_BREAK();
56662 			HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
56663 				VM_TRACE(ZEND_BOOL_SPEC_TMPVAR)
56664 				ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56665 				HYBRID_BREAK();
56666 			HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
56667 				VM_TRACE(ZEND_CLONE_SPEC_TMPVAR)
56668 				ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56669 				HYBRID_BREAK();
56670 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
56671 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
56672 				ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56673 				HYBRID_BREAK();
56674 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
56675 				VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
56676 				ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56677 				HYBRID_BREAK();
56678 			HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
56679 				VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
56680 				ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56681 				HYBRID_BREAK();
56682 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR):
56683 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR)
56684 				ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56685 				HYBRID_BREAK();
56686 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR):
56687 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR)
56688 				ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56689 				HYBRID_BREAK();
56690 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
56691 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST)
56692 				ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56693 				HYBRID_BREAK();
56694 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
56695 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST)
56696 				ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56697 				HYBRID_BREAK();
56698 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
56699 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST)
56700 				ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56701 				HYBRID_BREAK();
56702 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
56703 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
56704 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56705 				HYBRID_BREAK();
56706 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
56707 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
56708 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56709 				HYBRID_BREAK();
56710 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
56711 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
56712 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56713 				HYBRID_BREAK();
56714 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
56715 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
56716 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56717 				HYBRID_BREAK();
56718 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
56719 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
56720 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56721 				HYBRID_BREAK();
56722 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
56723 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
56724 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56725 				HYBRID_BREAK();
56726 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
56727 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
56728 				ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56729 				HYBRID_BREAK();
56730 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
56731 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
56732 				ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56733 				HYBRID_BREAK();
56734 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
56735 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
56736 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56737 				HYBRID_BREAK();
56738 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
56739 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
56740 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56741 				HYBRID_BREAK();
56742 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST):
56743 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
56744 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56745 				HYBRID_BREAK();
56746 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
56747 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
56748 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56749 				HYBRID_BREAK();
56750 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
56751 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
56752 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56753 				HYBRID_BREAK();
56754 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
56755 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
56756 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56757 				HYBRID_BREAK();
56758 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST):
56759 				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST)
56760 				ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56761 				HYBRID_BREAK();
56762 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
56763 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST)
56764 				ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56765 				HYBRID_BREAK();
56766 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
56767 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
56768 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56769 				HYBRID_BREAK();
56770 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
56771 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
56772 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56773 				HYBRID_BREAK();
56774 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST):
56775 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
56776 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56777 				HYBRID_BREAK();
56778 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
56779 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
56780 				ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56781 				HYBRID_BREAK();
56782 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
56783 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
56784 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56785 				HYBRID_BREAK();
56786 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV):
56787 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
56788 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56789 				HYBRID_BREAK();
56790 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
56791 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
56792 				ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56793 				HYBRID_BREAK();
56794 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
56795 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR)
56796 				ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56797 				HYBRID_BREAK();
56798 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
56799 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
56800 				ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56801 				HYBRID_BREAK();
56802 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
56803 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
56804 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56805 				HYBRID_BREAK();
56806 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
56807 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
56808 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56809 				HYBRID_BREAK();
56810 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
56811 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
56812 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56813 				HYBRID_BREAK();
56814 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
56815 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
56816 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56817 				HYBRID_BREAK();
56818 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
56819 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
56820 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56821 				HYBRID_BREAK();
56822 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
56823 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
56824 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56825 				HYBRID_BREAK();
56826 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
56827 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
56828 				ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56829 				HYBRID_BREAK();
56830 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
56831 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
56832 				ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56833 				HYBRID_BREAK();
56834 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
56835 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
56836 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56837 				HYBRID_BREAK();
56838 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
56839 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
56840 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56841 				HYBRID_BREAK();
56842 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR):
56843 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
56844 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56845 				HYBRID_BREAK();
56846 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
56847 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
56848 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56849 				HYBRID_BREAK();
56850 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
56851 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
56852 				ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56853 				HYBRID_BREAK();
56854 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
56855 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
56856 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56857 				HYBRID_BREAK();
56858 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
56859 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
56860 				ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56861 				HYBRID_BREAK();
56862 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
56863 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
56864 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56865 				HYBRID_BREAK();
56866 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
56867 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
56868 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56869 				HYBRID_BREAK();
56870 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR):
56871 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
56872 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56873 				HYBRID_BREAK();
56874 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
56875 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
56876 				ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56877 				HYBRID_BREAK();
56878 			HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
56879 				VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
56880 				ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56881 				HYBRID_BREAK();
56882 			HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
56883 				VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
56884 				ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56885 				HYBRID_BREAK();
56886 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
56887 				VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
56888 				ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56889 				HYBRID_BREAK();
56890 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
56891 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
56892 				ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56893 				HYBRID_BREAK();
56894 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
56895 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
56896 				ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56897 				HYBRID_BREAK();
56898 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
56899 				VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
56900 				ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56901 				HYBRID_BREAK();
56902 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED):
56903 				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED)
56904 				ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56905 				HYBRID_BREAK();
56906 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
56907 				VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
56908 				ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56909 				HYBRID_BREAK();
56910 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
56911 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
56912 				ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56913 				HYBRID_BREAK();
56914 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
56915 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
56916 				ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56917 				HYBRID_BREAK();
56918 			HYBRID_CASE(ZEND_COUNT_SPEC_TMPVAR_UNUSED):
56919 				VM_TRACE(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
56920 				ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56921 				HYBRID_BREAK();
56922 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED):
56923 				VM_TRACE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
56924 				ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56925 				HYBRID_BREAK();
56926 			HYBRID_CASE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED):
56927 				VM_TRACE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
56928 				ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56929 				HYBRID_BREAK();
56930 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
56931 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV)
56932 				ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56933 				HYBRID_BREAK();
56934 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
56935 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV)
56936 				ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56937 				HYBRID_BREAK();
56938 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
56939 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV)
56940 				ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56941 				HYBRID_BREAK();
56942 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
56943 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
56944 				ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56945 				HYBRID_BREAK();
56946 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
56947 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
56948 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56949 				HYBRID_BREAK();
56950 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
56951 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
56952 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56953 				HYBRID_BREAK();
56954 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV):
56955 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
56956 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56957 				HYBRID_BREAK();
56958 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
56959 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
56960 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56961 				HYBRID_BREAK();
56962 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
56963 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
56964 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56965 				HYBRID_BREAK();
56966 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
56967 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
56968 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56969 				HYBRID_BREAK();
56970 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
56971 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV)
56972 				ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56973 				HYBRID_BREAK();
56974 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
56975 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
56976 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56977 				HYBRID_BREAK();
56978 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
56979 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
56980 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56981 				HYBRID_BREAK();
56982 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV):
56983 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
56984 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56985 				HYBRID_BREAK();
56986 			HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
56987 				VM_TRACE(ZEND_RETURN_SPEC_TMP)
56988 {
56989 	USE_OPLINE
56990 	zval *retval_ptr;
56991 	zval *return_value;
56992 
56993 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
56994 	return_value = EX(return_value);
56995 
56996 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
56997 		SAVE_OPLINE();
56998 		retval_ptr = ZVAL_UNDEFINED_OP1();
56999 		if (return_value) {
57000 			ZVAL_NULL(return_value);
57001 		}
57002 	} else if (!return_value) {
57003 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
57004 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
57005 				SAVE_OPLINE();
57006 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
57007 			}
57008 		}
57009 	} else {
57010 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
57011 			ZVAL_COPY_VALUE(return_value, retval_ptr);
57012 			if (IS_TMP_VAR == IS_CONST) {
57013 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
57014 					Z_ADDREF_P(return_value);
57015 				}
57016 			}
57017 		} else if (IS_TMP_VAR == IS_CV) {
57018 			do {
57019 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57020 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
57021 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
57022 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57023 							ZVAL_COPY_VALUE(return_value, retval_ptr);
57024 							if (GC_MAY_LEAK(ref)) {
57025 								SAVE_OPLINE();
57026 								gc_possible_root(ref);
57027 							}
57028 							ZVAL_NULL(retval_ptr);
57029 							break;
57030 						} else {
57031 							Z_ADDREF_P(retval_ptr);
57032 						}
57033 					} else {
57034 						retval_ptr = Z_REFVAL_P(retval_ptr);
57035 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57036 							Z_ADDREF_P(retval_ptr);
57037 						}
57038 					}
57039 				}
57040 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57041 			} while (0);
57042 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
57043 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
57044 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57045 
57046 				retval_ptr = Z_REFVAL_P(retval_ptr);
57047 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57048 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
57049 					efree_size(ref, sizeof(zend_reference));
57050 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57051 					Z_ADDREF_P(retval_ptr);
57052 				}
57053 			} else {
57054 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57055 			}
57056 		}
57057 	}
57058 
57059 
57060 
57061 	goto zend_leave_helper_SPEC_LABEL;
57062 }
57063 
57064 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
57065 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
57066 				ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57067 				HYBRID_BREAK();
57068 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
57069 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
57070 				ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57071 				HYBRID_BREAK();
57072 			HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
57073 				VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
57074 				ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57075 				HYBRID_BREAK();
57076 			HYBRID_CASE(ZEND_CAST_SPEC_TMP):
57077 				VM_TRACE(ZEND_CAST_SPEC_TMP)
57078 				ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57079 				HYBRID_BREAK();
57080 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
57081 				VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP)
57082 				ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57083 				HYBRID_BREAK();
57084 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
57085 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP)
57086 				ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57087 				HYBRID_BREAK();
57088 			HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
57089 				VM_TRACE(ZEND_END_SILENCE_SPEC_TMP)
57090 				ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57091 				HYBRID_BREAK();
57092 			HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
57093 				VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
57094 				ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57095 				HYBRID_BREAK();
57096 			HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
57097 				VM_TRACE(ZEND_COALESCE_SPEC_TMP)
57098 				ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57099 				HYBRID_BREAK();
57100 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMP):
57101 				VM_TRACE(ZEND_JMP_NULL_SPEC_TMP)
57102 				ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57103 				HYBRID_BREAK();
57104 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
57105 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
57106 				ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57107 				HYBRID_BREAK();
57108 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
57109 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
57110 				ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57111 				HYBRID_BREAK();
57112 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CONST):
57113 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CONST)
57114 				ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57115 				HYBRID_BREAK();
57116 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
57117 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
57118 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57119 				HYBRID_BREAK();
57120 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
57121 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
57122 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57123 				HYBRID_BREAK();
57124 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
57125 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
57126 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57127 				HYBRID_BREAK();
57128 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
57129 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
57130 				ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57131 				HYBRID_BREAK();
57132 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
57133 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST)
57134 				ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57135 				HYBRID_BREAK();
57136 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST):
57137 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST)
57138 				ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57139 				HYBRID_BREAK();
57140 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
57141 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
57142 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57143 				HYBRID_BREAK();
57144 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
57145 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
57146 				ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57147 				HYBRID_BREAK();
57148 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
57149 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST)
57150 				ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57151 				HYBRID_BREAK();
57152 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
57153 				VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST)
57154 				ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57155 				HYBRID_BREAK();
57156 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
57157 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
57158 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57159 				HYBRID_BREAK();
57160 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
57161 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
57162 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57163 				HYBRID_BREAK();
57164 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
57165 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
57166 				ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57167 				HYBRID_BREAK();
57168 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
57169 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
57170 				ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57171 				HYBRID_BREAK();
57172 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
57173 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
57174 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57175 				HYBRID_BREAK();
57176 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
57177 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
57178 				ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57179 				HYBRID_BREAK();
57180 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMPVAR):
57181 				VM_TRACE(ZEND_YIELD_SPEC_TMP_TMPVAR)
57182 				ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57183 				HYBRID_BREAK();
57184 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
57185 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
57186 				ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57187 				HYBRID_BREAK();
57188 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_TMP):
57189 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_TMP)
57190 				ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57191 				HYBRID_BREAK();
57192 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
57193 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
57194 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57195 				HYBRID_BREAK();
57196 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_VAR):
57197 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_VAR)
57198 				ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57199 				HYBRID_BREAK();
57200 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
57201 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
57202 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57203 				HYBRID_BREAK();
57204 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
57205 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
57206 				ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57207 				HYBRID_BREAK();
57208 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED):
57209 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED)
57210 				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57211 				HYBRID_BREAK();
57212 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK):
57213 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK)
57214 				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57215 				HYBRID_BREAK();
57216 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
57217 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
57218 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57219 				HYBRID_BREAK();
57220 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
57221 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
57222 				ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57223 				HYBRID_BREAK();
57224 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
57225 				VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED)
57226 				ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57227 				HYBRID_BREAK();
57228 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
57229 				VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
57230 				ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57231 				HYBRID_BREAK();
57232 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CV):
57233 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CV)
57234 				ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57235 				HYBRID_BREAK();
57236 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
57237 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
57238 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57239 				HYBRID_BREAK();
57240 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
57241 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
57242 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57243 				HYBRID_BREAK();
57244 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
57245 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
57246 				ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57247 				HYBRID_BREAK();
57248 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
57249 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV)
57250 				ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57251 				HYBRID_BREAK();
57252 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
57253 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
57254 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57255 				HYBRID_BREAK();
57256 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
57257 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV)
57258 				ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57259 				HYBRID_BREAK();
57260 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
57261 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CV)
57262 				ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57263 				HYBRID_BREAK();
57264 			HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
57265 				VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
57266 				ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57267 				HYBRID_BREAK();
57268 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
57269 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
57270 				ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57271 				HYBRID_BREAK();
57272 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
57273 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
57274 				ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57275 				HYBRID_BREAK();
57276 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
57277 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
57278 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57279 				HYBRID_BREAK();
57280 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
57281 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
57282 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57283 				HYBRID_BREAK();
57284 			HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
57285 				VM_TRACE(ZEND_POST_INC_SPEC_VAR)
57286 				ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57287 				HYBRID_BREAK();
57288 			HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
57289 				VM_TRACE(ZEND_POST_DEC_SPEC_VAR)
57290 				ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57291 				HYBRID_BREAK();
57292 			HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
57293 				VM_TRACE(ZEND_RETURN_SPEC_VAR)
57294 {
57295 	USE_OPLINE
57296 	zval *retval_ptr;
57297 	zval *return_value;
57298 
57299 	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
57300 	return_value = EX(return_value);
57301 
57302 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
57303 		SAVE_OPLINE();
57304 		retval_ptr = ZVAL_UNDEFINED_OP1();
57305 		if (return_value) {
57306 			ZVAL_NULL(return_value);
57307 		}
57308 	} else if (!return_value) {
57309 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
57310 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
57311 				SAVE_OPLINE();
57312 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
57313 			}
57314 		}
57315 	} else {
57316 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
57317 			ZVAL_COPY_VALUE(return_value, retval_ptr);
57318 			if (IS_VAR == IS_CONST) {
57319 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
57320 					Z_ADDREF_P(return_value);
57321 				}
57322 			}
57323 		} else if (IS_VAR == IS_CV) {
57324 			do {
57325 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57326 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
57327 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
57328 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57329 							ZVAL_COPY_VALUE(return_value, retval_ptr);
57330 							if (GC_MAY_LEAK(ref)) {
57331 								SAVE_OPLINE();
57332 								gc_possible_root(ref);
57333 							}
57334 							ZVAL_NULL(retval_ptr);
57335 							break;
57336 						} else {
57337 							Z_ADDREF_P(retval_ptr);
57338 						}
57339 					} else {
57340 						retval_ptr = Z_REFVAL_P(retval_ptr);
57341 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57342 							Z_ADDREF_P(retval_ptr);
57343 						}
57344 					}
57345 				}
57346 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57347 			} while (0);
57348 		} else /* if (IS_VAR == IS_VAR) */ {
57349 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
57350 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57351 
57352 				retval_ptr = Z_REFVAL_P(retval_ptr);
57353 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57354 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
57355 					efree_size(ref, sizeof(zend_reference));
57356 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57357 					Z_ADDREF_P(retval_ptr);
57358 				}
57359 			} else {
57360 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57361 			}
57362 		}
57363 	}
57364 
57365 
57366 
57367 	goto zend_leave_helper_SPEC_LABEL;
57368 }
57369 
57370 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
57371 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
57372 				ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57373 				HYBRID_BREAK();
57374 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
57375 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
57376 				ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57377 				HYBRID_BREAK();
57378 			HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
57379 				VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
57380 				ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57381 				HYBRID_BREAK();
57382 			HYBRID_CASE(ZEND_CAST_SPEC_VAR):
57383 				VM_TRACE(ZEND_CAST_SPEC_VAR)
57384 				ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57385 				HYBRID_BREAK();
57386 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
57387 				VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR)
57388 				ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57389 				HYBRID_BREAK();
57390 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
57391 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR)
57392 				ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57393 				HYBRID_BREAK();
57394 			HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
57395 				VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR)
57396 				ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57397 				HYBRID_BREAK();
57398 			HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
57399 				VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR)
57400 				ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57401 				HYBRID_BREAK();
57402 			HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
57403 				VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
57404 				ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57405 				HYBRID_BREAK();
57406 			HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
57407 				VM_TRACE(ZEND_COALESCE_SPEC_VAR)
57408 				ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57409 				HYBRID_BREAK();
57410 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_VAR):
57411 				VM_TRACE(ZEND_JMP_NULL_SPEC_VAR)
57412 				ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57413 				HYBRID_BREAK();
57414 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
57415 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
57416 				ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57417 				HYBRID_BREAK();
57418 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
57419 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
57420 				ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57421 				HYBRID_BREAK();
57422 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
57423 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
57424 				ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57425 				HYBRID_BREAK();
57426 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CONST):
57427 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CONST)
57428 				ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57429 				HYBRID_BREAK();
57430 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
57431 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
57432 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57433 				HYBRID_BREAK();
57434 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST):
57435 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
57436 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57437 				HYBRID_BREAK();
57438 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST):
57439 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
57440 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57441 				HYBRID_BREAK();
57442 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CONST):
57443 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
57444 				ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57445 				HYBRID_BREAK();
57446 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
57447 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
57448 				ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57449 				HYBRID_BREAK();
57450 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
57451 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
57452 				ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57453 				HYBRID_BREAK();
57454 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
57455 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
57456 				ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57457 				HYBRID_BREAK();
57458 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
57459 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
57460 				ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57461 				HYBRID_BREAK();
57462 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
57463 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
57464 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57465 				HYBRID_BREAK();
57466 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
57467 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
57468 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57469 				HYBRID_BREAK();
57470 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
57471 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
57472 				ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57473 				HYBRID_BREAK();
57474 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
57475 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
57476 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57477 				HYBRID_BREAK();
57478 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
57479 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
57480 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57481 				HYBRID_BREAK();
57482 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
57483 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
57484 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57485 				HYBRID_BREAK();
57486 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST):
57487 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
57488 				ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57489 				HYBRID_BREAK();
57490 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
57491 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
57492 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57493 				HYBRID_BREAK();
57494 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
57495 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
57496 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57497 				HYBRID_BREAK();
57498 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
57499 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
57500 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57501 				HYBRID_BREAK();
57502 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
57503 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
57504 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57505 				HYBRID_BREAK();
57506 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
57507 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
57508 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57509 				HYBRID_BREAK();
57510 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
57511 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
57512 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57513 				HYBRID_BREAK();
57514 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
57515 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
57516 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57517 				HYBRID_BREAK();
57518 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
57519 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
57520 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57521 				HYBRID_BREAK();
57522 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
57523 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
57524 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57525 				HYBRID_BREAK();
57526 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
57527 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
57528 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57529 				HYBRID_BREAK();
57530 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR):
57531 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
57532 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57533 				HYBRID_BREAK();
57534 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV):
57535 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
57536 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57537 				HYBRID_BREAK();
57538 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
57539 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
57540 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57541 				HYBRID_BREAK();
57542 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_CONST):
57543 				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_CONST)
57544 				ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57545 				HYBRID_BREAK();
57546 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST):
57547 				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST)
57548 				ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57549 				HYBRID_BREAK();
57550 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST):
57551 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST)
57552 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57553 				HYBRID_BREAK();
57554 			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_CONST):
57555 				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_CONST)
57556 				ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57557 				HYBRID_BREAK();
57558 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST):
57559 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST)
57560 				ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57561 				HYBRID_BREAK();
57562 			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST):
57563 				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST)
57564 				ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57565 				HYBRID_BREAK();
57566 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
57567 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
57568 				ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57569 				HYBRID_BREAK();
57570 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
57571 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
57572 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57573 				HYBRID_BREAK();
57574 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
57575 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
57576 				ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57577 				HYBRID_BREAK();
57578 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
57579 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST)
57580 				ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57581 				HYBRID_BREAK();
57582 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
57583 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
57584 				ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57585 				HYBRID_BREAK();
57586 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
57587 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST)
57588 				ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57589 				HYBRID_BREAK();
57590 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
57591 				VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
57592 				ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57593 				HYBRID_BREAK();
57594 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR):
57595 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
57596 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57597 				HYBRID_BREAK();
57598 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR):
57599 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
57600 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57601 				HYBRID_BREAK();
57602 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR):
57603 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
57604 				ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57605 				HYBRID_BREAK();
57606 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
57607 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
57608 				ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57609 				HYBRID_BREAK();
57610 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
57611 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
57612 				ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57613 				HYBRID_BREAK();
57614 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
57615 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
57616 				ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57617 				HYBRID_BREAK();
57618 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
57619 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
57620 				ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57621 				HYBRID_BREAK();
57622 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
57623 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
57624 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57625 				HYBRID_BREAK();
57626 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
57627 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
57628 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57629 				HYBRID_BREAK();
57630 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
57631 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
57632 				ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57633 				HYBRID_BREAK();
57634 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
57635 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
57636 				ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57637 				HYBRID_BREAK();
57638 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
57639 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
57640 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57641 				HYBRID_BREAK();
57642 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
57643 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
57644 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57645 				HYBRID_BREAK();
57646 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR):
57647 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
57648 				ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57649 				HYBRID_BREAK();
57650 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
57651 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
57652 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57653 				HYBRID_BREAK();
57654 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
57655 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
57656 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57657 				HYBRID_BREAK();
57658 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
57659 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
57660 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57661 				HYBRID_BREAK();
57662 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
57663 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
57664 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57665 				HYBRID_BREAK();
57666 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
57667 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
57668 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57669 				HYBRID_BREAK();
57670 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
57671 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
57672 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57673 				HYBRID_BREAK();
57674 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
57675 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
57676 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57677 				HYBRID_BREAK();
57678 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
57679 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
57680 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57681 				HYBRID_BREAK();
57682 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR):
57683 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
57684 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57685 				HYBRID_BREAK();
57686 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV):
57687 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
57688 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57689 				HYBRID_BREAK();
57690 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
57691 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
57692 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57693 				HYBRID_BREAK();
57694 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
57695 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
57696 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57697 				HYBRID_BREAK();
57698 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
57699 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
57700 				ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57701 				HYBRID_BREAK();
57702 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
57703 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
57704 				ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57705 				HYBRID_BREAK();
57706 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
57707 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
57708 				ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57709 				HYBRID_BREAK();
57710 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMPVAR):
57711 				VM_TRACE(ZEND_YIELD_SPEC_VAR_TMPVAR)
57712 				ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57713 				HYBRID_BREAK();
57714 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
57715 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
57716 				ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57717 				HYBRID_BREAK();
57718 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_TMP):
57719 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_TMP)
57720 				ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57721 				HYBRID_BREAK();
57722 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
57723 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
57724 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57725 				HYBRID_BREAK();
57726 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
57727 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
57728 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57729 				HYBRID_BREAK();
57730 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
57731 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
57732 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57733 				HYBRID_BREAK();
57734 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
57735 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
57736 				ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57737 				HYBRID_BREAK();
57738 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_VAR):
57739 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_VAR)
57740 				ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57741 				HYBRID_BREAK();
57742 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
57743 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
57744 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57745 				HYBRID_BREAK();
57746 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
57747 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
57748 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57749 				HYBRID_BREAK();
57750 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
57751 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
57752 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57753 				HYBRID_BREAK();
57754 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
57755 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
57756 				ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57757 				HYBRID_BREAK();
57758 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED):
57759 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
57760 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57761 				HYBRID_BREAK();
57762 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
57763 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
57764 				ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57765 				HYBRID_BREAK();
57766 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
57767 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
57768 				ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57769 				HYBRID_BREAK();
57770 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
57771 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
57772 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57773 				HYBRID_BREAK();
57774 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
57775 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
57776 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57777 				HYBRID_BREAK();
57778 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
57779 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
57780 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57781 				HYBRID_BREAK();
57782 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
57783 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
57784 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57785 				HYBRID_BREAK();
57786 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
57787 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
57788 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57789 				HYBRID_BREAK();
57790 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
57791 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
57792 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57793 				HYBRID_BREAK();
57794 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
57795 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
57796 				ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57797 				HYBRID_BREAK();
57798 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_UNUSED):
57799 				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_UNUSED)
57800 				ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57801 				HYBRID_BREAK();
57802 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED):
57803 				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED)
57804 				ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57805 				HYBRID_BREAK();
57806 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED):
57807 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED)
57808 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57809 				HYBRID_BREAK();
57810 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK):
57811 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK)
57812 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57813 				HYBRID_BREAK();
57814 			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_UNUSED):
57815 				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_UNUSED)
57816 				ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57817 				HYBRID_BREAK();
57818 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED):
57819 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED)
57820 				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57821 				HYBRID_BREAK();
57822 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK):
57823 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK)
57824 				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57825 				HYBRID_BREAK();
57826 			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED):
57827 				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED)
57828 				ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57829 				HYBRID_BREAK();
57830 			HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED):
57831 				VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED)
57832 				ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57833 				HYBRID_BREAK();
57834 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
57835 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
57836 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57837 				HYBRID_BREAK();
57838 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
57839 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
57840 				ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57841 				HYBRID_BREAK();
57842 			HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
57843 				VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED)
57844 				ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57845 				HYBRID_BREAK();
57846 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
57847 				VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED)
57848 				ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57849 				HYBRID_BREAK();
57850 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
57851 				VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
57852 				ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57853 				HYBRID_BREAK();
57854 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
57855 				VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
57856 				ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57857 				HYBRID_BREAK();
57858 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED):
57859 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED)
57860 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57861 				HYBRID_BREAK();
57862 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CV):
57863 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CV)
57864 				ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57865 				HYBRID_BREAK();
57866 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV):
57867 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
57868 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57869 				HYBRID_BREAK();
57870 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV):
57871 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
57872 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57873 				HYBRID_BREAK();
57874 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CV):
57875 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CV)
57876 				ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57877 				HYBRID_BREAK();
57878 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
57879 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
57880 				ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57881 				HYBRID_BREAK();
57882 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
57883 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
57884 				ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57885 				HYBRID_BREAK();
57886 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
57887 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
57888 				ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57889 				HYBRID_BREAK();
57890 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
57891 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
57892 				ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57893 				HYBRID_BREAK();
57894 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
57895 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
57896 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57897 				HYBRID_BREAK();
57898 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
57899 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
57900 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57901 				HYBRID_BREAK();
57902 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
57903 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
57904 				ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57905 				HYBRID_BREAK();
57906 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
57907 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
57908 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57909 				HYBRID_BREAK();
57910 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
57911 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
57912 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57913 				HYBRID_BREAK();
57914 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
57915 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
57916 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57917 				HYBRID_BREAK();
57918 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV):
57919 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
57920 				ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57921 				HYBRID_BREAK();
57922 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
57923 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
57924 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57925 				HYBRID_BREAK();
57926 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
57927 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
57928 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57929 				HYBRID_BREAK();
57930 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
57931 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
57932 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57933 				HYBRID_BREAK();
57934 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
57935 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
57936 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57937 				HYBRID_BREAK();
57938 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
57939 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
57940 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57941 				HYBRID_BREAK();
57942 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
57943 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
57944 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57945 				HYBRID_BREAK();
57946 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
57947 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
57948 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57949 				HYBRID_BREAK();
57950 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
57951 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
57952 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57953 				HYBRID_BREAK();
57954 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
57955 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
57956 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57957 				HYBRID_BREAK();
57958 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
57959 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
57960 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57961 				HYBRID_BREAK();
57962 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
57963 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
57964 				ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57965 				HYBRID_BREAK();
57966 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR):
57967 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
57968 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57969 				HYBRID_BREAK();
57970 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV):
57971 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
57972 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57973 				HYBRID_BREAK();
57974 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
57975 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
57976 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57977 				HYBRID_BREAK();
57978 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
57979 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
57980 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57981 				HYBRID_BREAK();
57982 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
57983 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV)
57984 				ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57985 				HYBRID_BREAK();
57986 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
57987 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV)
57988 				ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57989 				HYBRID_BREAK();
57990 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
57991 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV)
57992 				ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57993 				HYBRID_BREAK();
57994 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
57995 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CV)
57996 				ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57997 				HYBRID_BREAK();
57998 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
57999 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
58000 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58001 				HYBRID_BREAK();
58002 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
58003 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
58004 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58005 				HYBRID_BREAK();
58006 			HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
58007 				VM_TRACE(ZEND_CLONE_SPEC_UNUSED)
58008 				ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58009 				HYBRID_BREAK();
58010 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED):
58011 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
58012 				ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58013 				HYBRID_BREAK();
58014 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST):
58015 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
58016 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58017 				HYBRID_BREAK();
58018 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
58019 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
58020 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58021 				HYBRID_BREAK();
58022 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
58023 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
58024 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58025 				HYBRID_BREAK();
58026 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
58027 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
58028 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58029 				HYBRID_BREAK();
58030 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
58031 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
58032 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58033 				HYBRID_BREAK();
58034 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
58035 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
58036 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58037 				HYBRID_BREAK();
58038 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
58039 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
58040 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58041 				HYBRID_BREAK();
58042 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
58043 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
58044 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58045 				HYBRID_BREAK();
58046 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
58047 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
58048 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58049 				HYBRID_BREAK();
58050 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
58051 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
58052 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58053 				HYBRID_BREAK();
58054 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
58055 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
58056 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58057 				HYBRID_BREAK();
58058 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
58059 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
58060 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58061 				HYBRID_BREAK();
58062 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
58063 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
58064 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58065 				HYBRID_BREAK();
58066 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR):
58067 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
58068 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58069 				HYBRID_BREAK();
58070 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV):
58071 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
58072 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58073 				HYBRID_BREAK();
58074 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
58075 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
58076 				ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58077 				HYBRID_BREAK();
58078 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST):
58079 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
58080 				ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58081 				HYBRID_BREAK();
58082 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
58083 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
58084 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58085 				HYBRID_BREAK();
58086 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
58087 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
58088 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58089 				HYBRID_BREAK();
58090 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST):
58091 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST)
58092 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58093 				HYBRID_BREAK();
58094 			HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
58095 				VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
58096 				ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58097 				HYBRID_BREAK();
58098 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST):
58099 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
58100 				ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58101 				HYBRID_BREAK();
58102 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST):
58103 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
58104 				ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58105 				HYBRID_BREAK();
58106 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
58107 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
58108 				ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58109 				HYBRID_BREAK();
58110 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
58111 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
58112 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58113 				HYBRID_BREAK();
58114 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
58115 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST)
58116 				ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58117 				HYBRID_BREAK();
58118 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR):
58119 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
58120 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58121 				HYBRID_BREAK();
58122 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
58123 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
58124 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58125 				HYBRID_BREAK();
58126 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
58127 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
58128 				ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58129 				HYBRID_BREAK();
58130 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
58131 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
58132 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58133 				HYBRID_BREAK();
58134 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
58135 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
58136 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58137 				HYBRID_BREAK();
58138 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
58139 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
58140 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58141 				HYBRID_BREAK();
58142 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
58143 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
58144 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58145 				HYBRID_BREAK();
58146 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
58147 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
58148 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58149 				HYBRID_BREAK();
58150 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
58151 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
58152 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58153 				HYBRID_BREAK();
58154 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
58155 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
58156 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58157 				HYBRID_BREAK();
58158 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
58159 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
58160 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58161 				HYBRID_BREAK();
58162 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
58163 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
58164 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58165 				HYBRID_BREAK();
58166 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
58167 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
58168 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58169 				HYBRID_BREAK();
58170 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
58171 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
58172 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58173 				HYBRID_BREAK();
58174 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
58175 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
58176 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58177 				HYBRID_BREAK();
58178 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
58179 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
58180 				ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58181 				HYBRID_BREAK();
58182 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR):
58183 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
58184 				ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58185 				HYBRID_BREAK();
58186 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
58187 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
58188 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58189 				HYBRID_BREAK();
58190 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR):
58191 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
58192 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58193 				HYBRID_BREAK();
58194 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR):
58195 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
58196 				ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58197 				HYBRID_BREAK();
58198 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
58199 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
58200 				ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58201 				HYBRID_BREAK();
58202 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
58203 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
58204 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58205 				HYBRID_BREAK();
58206 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMPVAR):
58207 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMPVAR)
58208 				ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58209 				HYBRID_BREAK();
58210 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED):
58211 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
58212 				ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58213 				HYBRID_BREAK();
58214 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
58215 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
58216 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58217 				HYBRID_BREAK();
58218 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
58219 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
58220 				ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58221 				HYBRID_BREAK();
58222 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED):
58223 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED)
58224 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58225 				HYBRID_BREAK();
58226 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK):
58227 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK)
58228 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58229 				HYBRID_BREAK();
58230 			HYBRID_CASE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED):
58231 				VM_TRACE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED)
58232 				ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58233 				HYBRID_BREAK();
58234 			HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED):
58235 				VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
58236 				ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58237 				HYBRID_BREAK();
58238 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED):
58239 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
58240 				ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58241 				HYBRID_BREAK();
58242 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
58243 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
58244 				ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58245 				HYBRID_BREAK();
58246 			HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
58247 				VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
58248 				ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58249 				HYBRID_BREAK();
58250 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
58251 				VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
58252 				ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58253 				HYBRID_BREAK();
58254 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
58255 				VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
58256 				ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58257 				HYBRID_BREAK();
58258 			HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
58259 				VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
58260 				ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58261 				HYBRID_BREAK();
58262 			HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
58263 				VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
58264 				ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58265 				HYBRID_BREAK();
58266 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
58267 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
58268 				ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58269 				HYBRID_BREAK();
58270 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV):
58271 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
58272 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58273 				HYBRID_BREAK();
58274 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
58275 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
58276 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58277 				HYBRID_BREAK();
58278 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
58279 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
58280 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58281 				HYBRID_BREAK();
58282 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
58283 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
58284 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58285 				HYBRID_BREAK();
58286 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
58287 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
58288 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58289 				HYBRID_BREAK();
58290 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
58291 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
58292 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58293 				HYBRID_BREAK();
58294 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
58295 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
58296 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58297 				HYBRID_BREAK();
58298 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
58299 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
58300 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58301 				HYBRID_BREAK();
58302 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
58303 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
58304 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58305 				HYBRID_BREAK();
58306 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
58307 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
58308 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58309 				HYBRID_BREAK();
58310 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
58311 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
58312 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58313 				HYBRID_BREAK();
58314 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
58315 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
58316 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58317 				HYBRID_BREAK();
58318 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
58319 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
58320 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58321 				HYBRID_BREAK();
58322 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR):
58323 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
58324 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58325 				HYBRID_BREAK();
58326 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV):
58327 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
58328 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58329 				HYBRID_BREAK();
58330 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
58331 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
58332 				ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58333 				HYBRID_BREAK();
58334 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV):
58335 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
58336 				ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58337 				HYBRID_BREAK();
58338 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
58339 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
58340 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58341 				HYBRID_BREAK();
58342 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV):
58343 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
58344 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58345 				HYBRID_BREAK();
58346 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV):
58347 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
58348 				ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58349 				HYBRID_BREAK();
58350 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
58351 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
58352 				ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58353 				HYBRID_BREAK();
58354 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
58355 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
58356 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58357 				HYBRID_BREAK();
58358 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
58359 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV)
58360 				ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58361 				HYBRID_BREAK();
58362 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
58363 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CV)
58364 				ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58365 				HYBRID_BREAK();
58366 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
58367 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
58368 				ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58369 				HYBRID_BREAK();
58370 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
58371 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
58372 				ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58373 				HYBRID_BREAK();
58374 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
58375 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
58376 				ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58377 				HYBRID_BREAK();
58378 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
58379 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
58380 				ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58381 				HYBRID_BREAK();
58382 			HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
58383 				VM_TRACE(ZEND_POST_INC_SPEC_CV)
58384 				ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58385 				HYBRID_BREAK();
58386 			HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
58387 				VM_TRACE(ZEND_POST_DEC_SPEC_CV)
58388 				ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58389 				HYBRID_BREAK();
58390 			HYBRID_CASE(ZEND_ECHO_SPEC_CV):
58391 				VM_TRACE(ZEND_ECHO_SPEC_CV)
58392 				ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58393 				HYBRID_BREAK();
58394 			HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
58395 				VM_TRACE(ZEND_JMPZ_SPEC_CV)
58396 				ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58397 				HYBRID_BREAK();
58398 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
58399 				VM_TRACE(ZEND_JMPNZ_SPEC_CV)
58400 				ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58401 				HYBRID_BREAK();
58402 			HYBRID_CASE(ZEND_JMPZNZ_SPEC_CV):
58403 				VM_TRACE(ZEND_JMPZNZ_SPEC_CV)
58404 				ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58405 				HYBRID_BREAK();
58406 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
58407 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
58408 				ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58409 				HYBRID_BREAK();
58410 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
58411 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV)
58412 				ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58413 				HYBRID_BREAK();
58414 			HYBRID_CASE(ZEND_RETURN_SPEC_CV):
58415 				VM_TRACE(ZEND_RETURN_SPEC_CV)
58416 {
58417 	USE_OPLINE
58418 	zval *retval_ptr;
58419 	zval *return_value;
58420 
58421 	retval_ptr = EX_VAR(opline->op1.var);
58422 	return_value = EX(return_value);
58423 
58424 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
58425 		SAVE_OPLINE();
58426 		retval_ptr = ZVAL_UNDEFINED_OP1();
58427 		if (return_value) {
58428 			ZVAL_NULL(return_value);
58429 		}
58430 	} else if (!return_value) {
58431 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
58432 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
58433 				SAVE_OPLINE();
58434 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
58435 			}
58436 		}
58437 	} else {
58438 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
58439 			ZVAL_COPY_VALUE(return_value, retval_ptr);
58440 			if (IS_CV == IS_CONST) {
58441 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
58442 					Z_ADDREF_P(return_value);
58443 				}
58444 			}
58445 		} else if (IS_CV == IS_CV) {
58446 			do {
58447 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
58448 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
58449 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
58450 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
58451 							ZVAL_COPY_VALUE(return_value, retval_ptr);
58452 							if (GC_MAY_LEAK(ref)) {
58453 								SAVE_OPLINE();
58454 								gc_possible_root(ref);
58455 							}
58456 							ZVAL_NULL(retval_ptr);
58457 							break;
58458 						} else {
58459 							Z_ADDREF_P(retval_ptr);
58460 						}
58461 					} else {
58462 						retval_ptr = Z_REFVAL_P(retval_ptr);
58463 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
58464 							Z_ADDREF_P(retval_ptr);
58465 						}
58466 					}
58467 				}
58468 				ZVAL_COPY_VALUE(return_value, retval_ptr);
58469 			} while (0);
58470 		} else /* if (IS_CV == IS_VAR) */ {
58471 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
58472 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
58473 
58474 				retval_ptr = Z_REFVAL_P(retval_ptr);
58475 				ZVAL_COPY_VALUE(return_value, retval_ptr);
58476 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
58477 					efree_size(ref, sizeof(zend_reference));
58478 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
58479 					Z_ADDREF_P(retval_ptr);
58480 				}
58481 			} else {
58482 				ZVAL_COPY_VALUE(return_value, retval_ptr);
58483 			}
58484 		}
58485 	}
58486 
58487 
58488 
58489 	goto zend_leave_helper_SPEC_LABEL;
58490 }
58491 
58492 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
58493 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
58494 				ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58495 				HYBRID_BREAK();
58496 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
58497 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
58498 				ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58499 				HYBRID_BREAK();
58500 			HYBRID_CASE(ZEND_THROW_SPEC_CV):
58501 				VM_TRACE(ZEND_THROW_SPEC_CV)
58502 				ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58503 				HYBRID_BREAK();
58504 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
58505 				VM_TRACE(ZEND_SEND_USER_SPEC_CV)
58506 				ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58507 				HYBRID_BREAK();
58508 			HYBRID_CASE(ZEND_BOOL_SPEC_CV):
58509 				VM_TRACE(ZEND_BOOL_SPEC_CV)
58510 				ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58511 				HYBRID_BREAK();
58512 			HYBRID_CASE(ZEND_CLONE_SPEC_CV):
58513 				VM_TRACE(ZEND_CLONE_SPEC_CV)
58514 				ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58515 				HYBRID_BREAK();
58516 			HYBRID_CASE(ZEND_CAST_SPEC_CV):
58517 				VM_TRACE(ZEND_CAST_SPEC_CV)
58518 				ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58519 				HYBRID_BREAK();
58520 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
58521 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
58522 				ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58523 				HYBRID_BREAK();
58524 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
58525 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
58526 				ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58527 				HYBRID_BREAK();
58528 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
58529 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV)
58530 				ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58531 				HYBRID_BREAK();
58532 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
58533 				VM_TRACE(ZEND_JMP_SET_SPEC_CV)
58534 				ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58535 				HYBRID_BREAK();
58536 			HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
58537 				VM_TRACE(ZEND_COALESCE_SPEC_CV)
58538 				ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58539 				HYBRID_BREAK();
58540 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CV):
58541 				VM_TRACE(ZEND_JMP_NULL_SPEC_CV)
58542 				ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58543 				HYBRID_BREAK();
58544 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
58545 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
58546 				ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58547 				HYBRID_BREAK();
58548 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
58549 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CV)
58550 				ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58551 				HYBRID_BREAK();
58552 			HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
58553 				VM_TRACE(ZEND_STRLEN_SPEC_CV)
58554 				ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58555 				HYBRID_BREAK();
58556 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
58557 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV)
58558 				ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58559 				HYBRID_BREAK();
58560 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_CV):
58561 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_CV)
58562 				ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58563 				HYBRID_BREAK();
58564 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
58565 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
58566 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58567 				HYBRID_BREAK();
58568 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
58569 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
58570 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58571 				HYBRID_BREAK();
58572 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED):
58573 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
58574 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58575 				HYBRID_BREAK();
58576 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED):
58577 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
58578 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58579 				HYBRID_BREAK();
58580 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
58581 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
58582 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58583 				HYBRID_BREAK();
58584 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
58585 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
58586 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58587 				HYBRID_BREAK();
58588 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED):
58589 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
58590 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58591 				HYBRID_BREAK();
58592 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED):
58593 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
58594 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58595 				HYBRID_BREAK();
58596 			HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV):
58597 				VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
58598 				ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58599 				HYBRID_BREAK();
58600 			HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV):
58601 				VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV)
58602 				ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58603 				HYBRID_BREAK();
58604 			HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV):
58605 				VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
58606 				ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58607 				HYBRID_BREAK();
58608 			HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV):
58609 				VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV)
58610 				ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58611 				HYBRID_BREAK();
58612 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
58613 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
58614 				ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58615 				HYBRID_BREAK();
58616 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
58617 				VM_TRACE(ZEND_DIV_SPEC_CV_CONST)
58618 				ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58619 				HYBRID_BREAK();
58620 			HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
58621 				VM_TRACE(ZEND_POW_SPEC_CV_CONST)
58622 				ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58623 				HYBRID_BREAK();
58624 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
58625 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST)
58626 				ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58627 				HYBRID_BREAK();
58628 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
58629 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
58630 				ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58631 				HYBRID_BREAK();
58632 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
58633 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
58634 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58635 				HYBRID_BREAK();
58636 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
58637 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST)
58638 				ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58639 				HYBRID_BREAK();
58640 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ):
58641 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
58642 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58643 				HYBRID_BREAK();
58644 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ):
58645 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
58646 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58647 				HYBRID_BREAK();
58648 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
58649 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
58650 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58651 				HYBRID_BREAK();
58652 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ):
58653 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
58654 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58655 				HYBRID_BREAK();
58656 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ):
58657 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
58658 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58659 				HYBRID_BREAK();
58660 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
58661 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST)
58662 				ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58663 				HYBRID_BREAK();
58664 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
58665 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST)
58666 				ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58667 				HYBRID_BREAK();
58668 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST):
58669 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
58670 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58671 				HYBRID_BREAK();
58672 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST):
58673 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
58674 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58675 				HYBRID_BREAK();
58676 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CONST):
58677 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CONST)
58678 				ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58679 				HYBRID_BREAK();
58680 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
58681 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
58682 				ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58683 				HYBRID_BREAK();
58684 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
58685 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
58686 				ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58687 				HYBRID_BREAK();
58688 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
58689 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
58690 				ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58691 				HYBRID_BREAK();
58692 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
58693 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
58694 				ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58695 				HYBRID_BREAK();
58696 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
58697 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
58698 				ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58699 				HYBRID_BREAK();
58700 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
58701 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
58702 				ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58703 				HYBRID_BREAK();
58704 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
58705 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
58706 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58707 				HYBRID_BREAK();
58708 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
58709 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
58710 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58711 				HYBRID_BREAK();
58712 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
58713 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
58714 				ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58715 				HYBRID_BREAK();
58716 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
58717 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
58718 				ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58719 				HYBRID_BREAK();
58720 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
58721 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
58722 				ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58723 				HYBRID_BREAK();
58724 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
58725 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
58726 				ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58727 				HYBRID_BREAK();
58728 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
58729 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
58730 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58731 				HYBRID_BREAK();
58732 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
58733 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
58734 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58735 				HYBRID_BREAK();
58736 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
58737 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
58738 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58739 				HYBRID_BREAK();
58740 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
58741 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
58742 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58743 				HYBRID_BREAK();
58744 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
58745 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
58746 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58747 				HYBRID_BREAK();
58748 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
58749 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
58750 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58751 				HYBRID_BREAK();
58752 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
58753 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
58754 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58755 				HYBRID_BREAK();
58756 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
58757 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
58758 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58759 				HYBRID_BREAK();
58760 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
58761 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
58762 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58763 				HYBRID_BREAK();
58764 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
58765 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
58766 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58767 				HYBRID_BREAK();
58768 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
58769 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
58770 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58771 				HYBRID_BREAK();
58772 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
58773 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
58774 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58775 				HYBRID_BREAK();
58776 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR):
58777 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
58778 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58779 				HYBRID_BREAK();
58780 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV):
58781 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
58782 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58783 				HYBRID_BREAK();
58784 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
58785 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST)
58786 				ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58787 				HYBRID_BREAK();
58788 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
58789 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
58790 				ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58791 				HYBRID_BREAK();
58792 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_CONST):
58793 				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_CONST)
58794 				ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58795 				HYBRID_BREAK();
58796 			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_CONST):
58797 				VM_TRACE(ZEND_SEND_REF_SPEC_CV_CONST)
58798 				ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58799 				HYBRID_BREAK();
58800 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_CONST):
58801 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_CONST)
58802 				ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58803 				HYBRID_BREAK();
58804 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
58805 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
58806 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58807 				HYBRID_BREAK();
58808 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
58809 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST)
58810 				ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58811 				HYBRID_BREAK();
58812 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
58813 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST)
58814 				ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58815 				HYBRID_BREAK();
58816 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
58817 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST)
58818 				ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58819 				HYBRID_BREAK();
58820 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
58821 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
58822 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58823 				HYBRID_BREAK();
58824 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
58825 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
58826 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58827 				HYBRID_BREAK();
58828 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST):
58829 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
58830 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58831 				HYBRID_BREAK();
58832 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
58833 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST)
58834 				ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58835 				HYBRID_BREAK();
58836 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
58837 				VM_TRACE(ZEND_YIELD_SPEC_CV_CONST)
58838 				ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58839 				HYBRID_BREAK();
58840 			HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
58841 				VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
58842 				ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58843 				HYBRID_BREAK();
58844 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
58845 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST)
58846 				ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58847 				HYBRID_BREAK();
58848 			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST):
58849 				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST)
58850 				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58851 				HYBRID_BREAK();
58852 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST):
58853 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST)
58854 				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58855 				HYBRID_BREAK();
58856 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
58857 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
58858 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58859 				HYBRID_BREAK();
58860 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV):
58861 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
58862 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58863 				HYBRID_BREAK();
58864 			HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
58865 				VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR)
58866 				ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58867 				HYBRID_BREAK();
58868 			HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
58869 				VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR)
58870 				ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58871 				HYBRID_BREAK();
58872 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
58873 				VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR)
58874 				ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58875 				HYBRID_BREAK();
58876 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
58877 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
58878 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58879 				HYBRID_BREAK();
58880 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ):
58881 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
58882 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58883 				HYBRID_BREAK();
58884 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
58885 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
58886 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58887 				HYBRID_BREAK();
58888 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
58889 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
58890 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58891 				HYBRID_BREAK();
58892 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ):
58893 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
58894 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58895 				HYBRID_BREAK();
58896 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
58897 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
58898 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58899 				HYBRID_BREAK();
58900 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
58901 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
58902 				ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58903 				HYBRID_BREAK();
58904 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
58905 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
58906 				ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58907 				HYBRID_BREAK();
58908 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR):
58909 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
58910 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58911 				HYBRID_BREAK();
58912 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR):
58913 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
58914 				ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58915 				HYBRID_BREAK();
58916 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR):
58917 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
58918 				ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58919 				HYBRID_BREAK();
58920 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
58921 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
58922 				ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58923 				HYBRID_BREAK();
58924 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
58925 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
58926 				ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58927 				HYBRID_BREAK();
58928 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
58929 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
58930 				ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58931 				HYBRID_BREAK();
58932 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
58933 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
58934 				ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58935 				HYBRID_BREAK();
58936 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
58937 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
58938 				ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58939 				HYBRID_BREAK();
58940 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
58941 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
58942 				ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58943 				HYBRID_BREAK();
58944 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
58945 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
58946 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58947 				HYBRID_BREAK();
58948 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
58949 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
58950 				ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58951 				HYBRID_BREAK();
58952 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
58953 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
58954 				ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58955 				HYBRID_BREAK();
58956 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
58957 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
58958 				ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58959 				HYBRID_BREAK();
58960 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
58961 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
58962 				ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58963 				HYBRID_BREAK();
58964 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
58965 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
58966 				ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58967 				HYBRID_BREAK();
58968 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
58969 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
58970 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58971 				HYBRID_BREAK();
58972 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
58973 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
58974 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58975 				HYBRID_BREAK();
58976 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
58977 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
58978 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58979 				HYBRID_BREAK();
58980 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
58981 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
58982 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58983 				HYBRID_BREAK();
58984 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
58985 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
58986 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58987 				HYBRID_BREAK();
58988 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
58989 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
58990 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58991 				HYBRID_BREAK();
58992 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
58993 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
58994 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58995 				HYBRID_BREAK();
58996 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
58997 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
58998 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58999 				HYBRID_BREAK();
59000 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
59001 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
59002 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59003 				HYBRID_BREAK();
59004 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
59005 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
59006 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59007 				HYBRID_BREAK();
59008 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR):
59009 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
59010 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59011 				HYBRID_BREAK();
59012 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV):
59013 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
59014 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59015 				HYBRID_BREAK();
59016 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
59017 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
59018 				ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59019 				HYBRID_BREAK();
59020 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
59021 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
59022 				ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59023 				HYBRID_BREAK();
59024 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
59025 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
59026 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59027 				HYBRID_BREAK();
59028 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
59029 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
59030 				ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59031 				HYBRID_BREAK();
59032 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
59033 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
59034 				ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59035 				HYBRID_BREAK();
59036 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
59037 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
59038 				ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59039 				HYBRID_BREAK();
59040 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
59041 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
59042 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59043 				HYBRID_BREAK();
59044 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
59045 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
59046 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59047 				HYBRID_BREAK();
59048 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR):
59049 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
59050 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59051 				HYBRID_BREAK();
59052 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMPVAR):
59053 				VM_TRACE(ZEND_YIELD_SPEC_CV_TMPVAR)
59054 				ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59055 				HYBRID_BREAK();
59056 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
59057 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
59058 				ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59059 				HYBRID_BREAK();
59060 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
59061 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
59062 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59063 				HYBRID_BREAK();
59064 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
59065 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
59066 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59067 				HYBRID_BREAK();
59068 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
59069 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
59070 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59071 				HYBRID_BREAK();
59072 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
59073 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
59074 				ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59075 				HYBRID_BREAK();
59076 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
59077 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
59078 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59079 				HYBRID_BREAK();
59080 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
59081 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
59082 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59083 				HYBRID_BREAK();
59084 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
59085 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
59086 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59087 				HYBRID_BREAK();
59088 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
59089 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR)
59090 				ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59091 				HYBRID_BREAK();
59092 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
59093 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR)
59094 				ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59095 				HYBRID_BREAK();
59096 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED):
59097 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
59098 				ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59099 				HYBRID_BREAK();
59100 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
59101 				VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED)
59102 				ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59103 				HYBRID_BREAK();
59104 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
59105 				VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED)
59106 				ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59107 				HYBRID_BREAK();
59108 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
59109 				VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED)
59110 				ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59111 				HYBRID_BREAK();
59112 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
59113 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
59114 				ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59115 				HYBRID_BREAK();
59116 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
59117 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
59118 				ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59119 				HYBRID_BREAK();
59120 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
59121 				VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED)
59122 				ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59123 				HYBRID_BREAK();
59124 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
59125 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
59126 				ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59127 				HYBRID_BREAK();
59128 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
59129 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
59130 				ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59131 				HYBRID_BREAK();
59132 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
59133 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
59134 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59135 				HYBRID_BREAK();
59136 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
59137 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
59138 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59139 				HYBRID_BREAK();
59140 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
59141 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
59142 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59143 				HYBRID_BREAK();
59144 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
59145 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
59146 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59147 				HYBRID_BREAK();
59148 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
59149 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
59150 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59151 				HYBRID_BREAK();
59152 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
59153 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
59154 				ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59155 				HYBRID_BREAK();
59156 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_UNUSED):
59157 				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_UNUSED)
59158 				ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59159 				HYBRID_BREAK();
59160 			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_UNUSED):
59161 				VM_TRACE(ZEND_SEND_REF_SPEC_CV_UNUSED)
59162 				ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59163 				HYBRID_BREAK();
59164 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED):
59165 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED)
59166 				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59167 				HYBRID_BREAK();
59168 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK):
59169 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK)
59170 				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59171 				HYBRID_BREAK();
59172 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
59173 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
59174 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59175 				HYBRID_BREAK();
59176 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
59177 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
59178 				ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59179 				HYBRID_BREAK();
59180 			HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
59181 				VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED)
59182 				ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59183 				HYBRID_BREAK();
59184 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
59185 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
59186 				ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59187 				HYBRID_BREAK();
59188 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET):
59189 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
59190 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59191 				HYBRID_BREAK();
59192 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY):
59193 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
59194 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59195 				HYBRID_BREAK();
59196 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
59197 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
59198 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59199 				HYBRID_BREAK();
59200 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
59201 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
59202 				ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59203 				HYBRID_BREAK();
59204 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
59205 				VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
59206 				ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59207 				HYBRID_BREAK();
59208 			HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV_UNUSED):
59209 				VM_TRACE(ZEND_BIND_STATIC_SPEC_CV_UNUSED)
59210 				ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59211 				HYBRID_BREAK();
59212 			HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
59213 				VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
59214 				ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59215 				HYBRID_BREAK();
59216 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
59217 				VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED)
59218 				ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59219 				HYBRID_BREAK();
59220 			HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
59221 				VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED)
59222 				ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59223 				HYBRID_BREAK();
59224 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
59225 				VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED)
59226 				ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59227 				HYBRID_BREAK();
59228 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
59229 				VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED)
59230 				ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59231 				HYBRID_BREAK();
59232 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED):
59233 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED)
59234 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59235 				HYBRID_BREAK();
59236 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
59237 				VM_TRACE(ZEND_DIV_SPEC_CV_CV)
59238 				ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59239 				HYBRID_BREAK();
59240 			HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
59241 				VM_TRACE(ZEND_POW_SPEC_CV_CV)
59242 				ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59243 				HYBRID_BREAK();
59244 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
59245 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CV)
59246 				ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59247 				HYBRID_BREAK();
59248 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
59249 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV)
59250 				ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59251 				HYBRID_BREAK();
59252 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
59253 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
59254 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59255 				HYBRID_BREAK();
59256 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
59257 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV)
59258 				ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59259 				HYBRID_BREAK();
59260 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ):
59261 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
59262 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59263 				HYBRID_BREAK();
59264 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ):
59265 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
59266 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59267 				HYBRID_BREAK();
59268 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
59269 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
59270 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59271 				HYBRID_BREAK();
59272 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ):
59273 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
59274 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59275 				HYBRID_BREAK();
59276 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ):
59277 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
59278 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59279 				HYBRID_BREAK();
59280 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
59281 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV)
59282 				ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59283 				HYBRID_BREAK();
59284 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
59285 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV)
59286 				ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59287 				HYBRID_BREAK();
59288 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV):
59289 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
59290 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59291 				HYBRID_BREAK();
59292 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV):
59293 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
59294 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59295 				HYBRID_BREAK();
59296 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CV):
59297 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CV)
59298 				ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59299 				HYBRID_BREAK();
59300 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
59301 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
59302 				ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59303 				HYBRID_BREAK();
59304 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
59305 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV)
59306 				ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59307 				HYBRID_BREAK();
59308 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
59309 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV)
59310 				ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59311 				HYBRID_BREAK();
59312 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
59313 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV)
59314 				ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59315 				HYBRID_BREAK();
59316 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
59317 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
59318 				ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59319 				HYBRID_BREAK();
59320 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
59321 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
59322 				ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59323 				HYBRID_BREAK();
59324 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
59325 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
59326 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59327 				HYBRID_BREAK();
59328 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
59329 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
59330 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59331 				HYBRID_BREAK();
59332 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
59333 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
59334 				ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59335 				HYBRID_BREAK();
59336 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
59337 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
59338 				ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59339 				HYBRID_BREAK();
59340 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
59341 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
59342 				ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59343 				HYBRID_BREAK();
59344 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
59345 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
59346 				ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59347 				HYBRID_BREAK();
59348 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
59349 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
59350 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59351 				HYBRID_BREAK();
59352 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
59353 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
59354 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59355 				HYBRID_BREAK();
59356 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
59357 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
59358 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59359 				HYBRID_BREAK();
59360 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
59361 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
59362 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59363 				HYBRID_BREAK();
59364 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
59365 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
59366 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59367 				HYBRID_BREAK();
59368 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
59369 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
59370 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59371 				HYBRID_BREAK();
59372 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
59373 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
59374 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59375 				HYBRID_BREAK();
59376 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
59377 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
59378 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59379 				HYBRID_BREAK();
59380 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
59381 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
59382 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59383 				HYBRID_BREAK();
59384 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
59385 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
59386 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59387 				HYBRID_BREAK();
59388 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
59389 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
59390 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59391 				HYBRID_BREAK();
59392 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
59393 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
59394 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59395 				HYBRID_BREAK();
59396 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
59397 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV)
59398 				ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59399 				HYBRID_BREAK();
59400 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR):
59401 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
59402 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59403 				HYBRID_BREAK();
59404 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV):
59405 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
59406 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59407 				HYBRID_BREAK();
59408 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
59409 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV)
59410 				ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59411 				HYBRID_BREAK();
59412 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
59413 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
59414 				ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59415 				HYBRID_BREAK();
59416 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
59417 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
59418 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59419 				HYBRID_BREAK();
59420 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
59421 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV)
59422 				ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59423 				HYBRID_BREAK();
59424 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
59425 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV)
59426 				ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59427 				HYBRID_BREAK();
59428 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
59429 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV)
59430 				ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59431 				HYBRID_BREAK();
59432 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
59433 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
59434 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59435 				HYBRID_BREAK();
59436 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
59437 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
59438 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59439 				HYBRID_BREAK();
59440 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV):
59441 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
59442 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59443 				HYBRID_BREAK();
59444 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
59445 				VM_TRACE(ZEND_YIELD_SPEC_CV_CV)
59446 				ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59447 				HYBRID_BREAK();
59448 			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV):
59449 				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV)
59450 				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59451 				HYBRID_BREAK();
59452 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV):
59453 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV)
59454 				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59455 				HYBRID_BREAK();
59456 			HYBRID_CASE(HYBRID_HALT):
59457 #ifdef ZEND_VM_FP_GLOBAL_REG
59458 				execute_data = vm_stack_data.orig_execute_data;
59459 #endif
59460 #ifdef ZEND_VM_IP_GLOBAL_REG
59461 				opline = vm_stack_data.orig_opline;
59462 #endif
59463 				return;
59464 			HYBRID_DEFAULT:
59465 				VM_TRACE(ZEND_NULL)
59466 				ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59467 				HYBRID_BREAK(); /* Never reached */
59468 #else
59469 #ifdef ZEND_VM_FP_GLOBAL_REG
59470 			execute_data = vm_stack_data.orig_execute_data;
59471 # ifdef ZEND_VM_IP_GLOBAL_REG
59472 			opline = vm_stack_data.orig_opline;
59473 # endif
59474 			return;
59475 #else
59476 			if (EXPECTED(ret > 0)) {
59477 				execute_data = EG(current_execute_data);
59478 				ZEND_VM_LOOP_INTERRUPT_CHECK();
59479 			} else {
59480 # ifdef ZEND_VM_IP_GLOBAL_REG
59481 				opline = vm_stack_data.orig_opline;
59482 # endif
59483 				return;
59484 			}
59485 #endif
59486 #endif
59487 		}
59488 
59489 	}
59490 	zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
59491 }
59492 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
59493 # pragma GCC pop_options
59494 #endif
59495 
59496 ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
59497 {
59498 	zend_execute_data *execute_data;
59499 	void *object_or_called_scope;
59500 	uint32_t call_info;
59501 
59502 	if (EG(exception) != NULL) {
59503 		return;
59504 	}
59505 
59506 	object_or_called_scope = zend_get_this_object(EG(current_execute_data));
59507 	if (EXPECTED(!object_or_called_scope)) {
59508 		object_or_called_scope = zend_get_called_scope(EG(current_execute_data));
59509 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE;
59510 	} else {
59511 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE | ZEND_CALL_HAS_THIS;
59512 	}
59513 	execute_data = zend_vm_stack_push_call_frame(call_info,
59514 		(zend_function*)op_array, 0, object_or_called_scope);
59515 	if (EG(current_execute_data)) {
59516 		execute_data->symbol_table = zend_rebuild_symbol_table();
59517 	} else {
59518 		execute_data->symbol_table = &EG(symbol_table);
59519 	}
59520 	EX(prev_execute_data) = EG(current_execute_data);
59521 	i_init_code_execute_data(execute_data, op_array, return_value);
59522 	ZEND_OBSERVER_FCALL_BEGIN(execute_data);
59523 	zend_execute_ex(execute_data);
59524 	/* Observer end handlers are called from ZEND_RETURN */
59525 	zend_vm_stack_free_call_frame(execute_data);
59526 }
59527 
59528 
59529 void zend_vm_init(void)
59530 {
59531 	static const void * const labels[] = {
59532 		ZEND_NOP_SPEC_HANDLER,
59533 		ZEND_ADD_SPEC_CONST_CONST_HANDLER,
59534 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
59535 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
59536 		ZEND_NULL_HANDLER,
59537 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
59538 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
59539 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59540 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59541 		ZEND_NULL_HANDLER,
59542 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59543 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
59544 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59545 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59546 		ZEND_NULL_HANDLER,
59547 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59548 		ZEND_NULL_HANDLER,
59549 		ZEND_NULL_HANDLER,
59550 		ZEND_NULL_HANDLER,
59551 		ZEND_NULL_HANDLER,
59552 		ZEND_NULL_HANDLER,
59553 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
59554 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59555 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59556 		ZEND_NULL_HANDLER,
59557 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59558 		ZEND_SUB_SPEC_CONST_CONST_HANDLER,
59559 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
59560 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
59561 		ZEND_NULL_HANDLER,
59562 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
59563 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
59564 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59565 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59566 		ZEND_NULL_HANDLER,
59567 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59568 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
59569 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59570 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59571 		ZEND_NULL_HANDLER,
59572 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59573 		ZEND_NULL_HANDLER,
59574 		ZEND_NULL_HANDLER,
59575 		ZEND_NULL_HANDLER,
59576 		ZEND_NULL_HANDLER,
59577 		ZEND_NULL_HANDLER,
59578 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
59579 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59580 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59581 		ZEND_NULL_HANDLER,
59582 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59583 		ZEND_MUL_SPEC_CONST_CONST_HANDLER,
59584 		ZEND_NULL_HANDLER,
59585 		ZEND_NULL_HANDLER,
59586 		ZEND_NULL_HANDLER,
59587 		ZEND_NULL_HANDLER,
59588 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
59589 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59590 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59591 		ZEND_NULL_HANDLER,
59592 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59593 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
59594 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59595 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59596 		ZEND_NULL_HANDLER,
59597 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59598 		ZEND_NULL_HANDLER,
59599 		ZEND_NULL_HANDLER,
59600 		ZEND_NULL_HANDLER,
59601 		ZEND_NULL_HANDLER,
59602 		ZEND_NULL_HANDLER,
59603 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
59604 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59605 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59606 		ZEND_NULL_HANDLER,
59607 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59608 		ZEND_DIV_SPEC_CONST_CONST_HANDLER,
59609 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
59610 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
59611 		ZEND_NULL_HANDLER,
59612 		ZEND_DIV_SPEC_CONST_CV_HANDLER,
59613 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
59614 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
59615 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
59616 		ZEND_NULL_HANDLER,
59617 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
59618 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
59619 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
59620 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
59621 		ZEND_NULL_HANDLER,
59622 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
59623 		ZEND_NULL_HANDLER,
59624 		ZEND_NULL_HANDLER,
59625 		ZEND_NULL_HANDLER,
59626 		ZEND_NULL_HANDLER,
59627 		ZEND_NULL_HANDLER,
59628 		ZEND_DIV_SPEC_CV_CONST_HANDLER,
59629 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
59630 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
59631 		ZEND_NULL_HANDLER,
59632 		ZEND_DIV_SPEC_CV_CV_HANDLER,
59633 		ZEND_MOD_SPEC_CONST_CONST_HANDLER,
59634 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
59635 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
59636 		ZEND_NULL_HANDLER,
59637 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
59638 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
59639 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59640 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59641 		ZEND_NULL_HANDLER,
59642 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59643 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
59644 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59645 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59646 		ZEND_NULL_HANDLER,
59647 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59648 		ZEND_NULL_HANDLER,
59649 		ZEND_NULL_HANDLER,
59650 		ZEND_NULL_HANDLER,
59651 		ZEND_NULL_HANDLER,
59652 		ZEND_NULL_HANDLER,
59653 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
59654 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59655 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59656 		ZEND_NULL_HANDLER,
59657 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59658 		ZEND_SL_SPEC_CONST_CONST_HANDLER,
59659 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
59660 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
59661 		ZEND_NULL_HANDLER,
59662 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
59663 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
59664 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59665 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59666 		ZEND_NULL_HANDLER,
59667 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59668 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
59669 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59670 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59671 		ZEND_NULL_HANDLER,
59672 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59673 		ZEND_NULL_HANDLER,
59674 		ZEND_NULL_HANDLER,
59675 		ZEND_NULL_HANDLER,
59676 		ZEND_NULL_HANDLER,
59677 		ZEND_NULL_HANDLER,
59678 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
59679 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59680 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59681 		ZEND_NULL_HANDLER,
59682 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59683 		ZEND_SR_SPEC_CONST_CONST_HANDLER,
59684 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
59685 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
59686 		ZEND_NULL_HANDLER,
59687 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
59688 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
59689 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59690 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59691 		ZEND_NULL_HANDLER,
59692 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59693 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
59694 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59695 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59696 		ZEND_NULL_HANDLER,
59697 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59698 		ZEND_NULL_HANDLER,
59699 		ZEND_NULL_HANDLER,
59700 		ZEND_NULL_HANDLER,
59701 		ZEND_NULL_HANDLER,
59702 		ZEND_NULL_HANDLER,
59703 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
59704 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59705 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59706 		ZEND_NULL_HANDLER,
59707 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59708 		ZEND_NULL_HANDLER,
59709 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
59710 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
59711 		ZEND_NULL_HANDLER,
59712 		ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
59713 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
59714 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
59715 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
59716 		ZEND_NULL_HANDLER,
59717 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
59718 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
59719 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
59720 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
59721 		ZEND_NULL_HANDLER,
59722 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
59723 		ZEND_NULL_HANDLER,
59724 		ZEND_NULL_HANDLER,
59725 		ZEND_NULL_HANDLER,
59726 		ZEND_NULL_HANDLER,
59727 		ZEND_NULL_HANDLER,
59728 		ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
59729 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
59730 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
59731 		ZEND_NULL_HANDLER,
59732 		ZEND_CONCAT_SPEC_CV_CV_HANDLER,
59733 		ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
59734 		ZEND_NULL_HANDLER,
59735 		ZEND_NULL_HANDLER,
59736 		ZEND_NULL_HANDLER,
59737 		ZEND_NULL_HANDLER,
59738 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
59739 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59740 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59741 		ZEND_NULL_HANDLER,
59742 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59743 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
59744 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59745 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59746 		ZEND_NULL_HANDLER,
59747 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59748 		ZEND_NULL_HANDLER,
59749 		ZEND_NULL_HANDLER,
59750 		ZEND_NULL_HANDLER,
59751 		ZEND_NULL_HANDLER,
59752 		ZEND_NULL_HANDLER,
59753 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
59754 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59755 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59756 		ZEND_NULL_HANDLER,
59757 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59758 		ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
59759 		ZEND_NULL_HANDLER,
59760 		ZEND_NULL_HANDLER,
59761 		ZEND_NULL_HANDLER,
59762 		ZEND_NULL_HANDLER,
59763 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
59764 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59765 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59766 		ZEND_NULL_HANDLER,
59767 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59768 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
59769 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59770 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59771 		ZEND_NULL_HANDLER,
59772 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59773 		ZEND_NULL_HANDLER,
59774 		ZEND_NULL_HANDLER,
59775 		ZEND_NULL_HANDLER,
59776 		ZEND_NULL_HANDLER,
59777 		ZEND_NULL_HANDLER,
59778 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
59779 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59780 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59781 		ZEND_NULL_HANDLER,
59782 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59783 		ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
59784 		ZEND_NULL_HANDLER,
59785 		ZEND_NULL_HANDLER,
59786 		ZEND_NULL_HANDLER,
59787 		ZEND_NULL_HANDLER,
59788 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
59789 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59790 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59791 		ZEND_NULL_HANDLER,
59792 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59793 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
59794 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59795 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59796 		ZEND_NULL_HANDLER,
59797 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59798 		ZEND_NULL_HANDLER,
59799 		ZEND_NULL_HANDLER,
59800 		ZEND_NULL_HANDLER,
59801 		ZEND_NULL_HANDLER,
59802 		ZEND_NULL_HANDLER,
59803 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
59804 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59805 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59806 		ZEND_NULL_HANDLER,
59807 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59808 		ZEND_POW_SPEC_CONST_CONST_HANDLER,
59809 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
59810 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
59811 		ZEND_NULL_HANDLER,
59812 		ZEND_POW_SPEC_CONST_CV_HANDLER,
59813 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
59814 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
59815 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
59816 		ZEND_NULL_HANDLER,
59817 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
59818 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
59819 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
59820 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
59821 		ZEND_NULL_HANDLER,
59822 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
59823 		ZEND_NULL_HANDLER,
59824 		ZEND_NULL_HANDLER,
59825 		ZEND_NULL_HANDLER,
59826 		ZEND_NULL_HANDLER,
59827 		ZEND_NULL_HANDLER,
59828 		ZEND_POW_SPEC_CV_CONST_HANDLER,
59829 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
59830 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
59831 		ZEND_NULL_HANDLER,
59832 		ZEND_POW_SPEC_CV_CV_HANDLER,
59833 		ZEND_BW_NOT_SPEC_CONST_HANDLER,
59834 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
59835 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
59836 		ZEND_NULL_HANDLER,
59837 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
59838 		ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
59839 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
59840 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
59841 		ZEND_NULL_HANDLER,
59842 		ZEND_BOOL_NOT_SPEC_CV_HANDLER,
59843 		ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
59844 		ZEND_NULL_HANDLER,
59845 		ZEND_NULL_HANDLER,
59846 		ZEND_NULL_HANDLER,
59847 		ZEND_NULL_HANDLER,
59848 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
59849 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
59850 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
59851 		ZEND_NULL_HANDLER,
59852 		ZEND_NULL_HANDLER,
59853 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
59854 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
59855 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
59856 		ZEND_NULL_HANDLER,
59857 		ZEND_NULL_HANDLER,
59858 		ZEND_NULL_HANDLER,
59859 		ZEND_NULL_HANDLER,
59860 		ZEND_NULL_HANDLER,
59861 		ZEND_NULL_HANDLER,
59862 		ZEND_NULL_HANDLER,
59863 		ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
59864 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
59865 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
59866 		ZEND_NULL_HANDLER,
59867 		ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
59868 		ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
59869 		ZEND_NULL_HANDLER,
59870 		ZEND_NULL_HANDLER,
59871 		ZEND_NULL_HANDLER,
59872 		ZEND_NULL_HANDLER,
59873 		ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
59874 		ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
59875 		ZEND_NULL_HANDLER,
59876 		ZEND_NULL_HANDLER,
59877 		ZEND_NULL_HANDLER,
59878 		ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
59879 		ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
59880 		ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
59881 		ZEND_NULL_HANDLER,
59882 		ZEND_NULL_HANDLER,
59883 		ZEND_NULL_HANDLER,
59884 		ZEND_NULL_HANDLER,
59885 		ZEND_NULL_HANDLER,
59886 		ZEND_NULL_HANDLER,
59887 		ZEND_NULL_HANDLER,
59888 		ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
59889 		ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
59890 		ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
59891 		ZEND_NULL_HANDLER,
59892 		ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
59893 		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
59894 		ZEND_NULL_HANDLER,
59895 		ZEND_NULL_HANDLER,
59896 		ZEND_NULL_HANDLER,
59897 		ZEND_NULL_HANDLER,
59898 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
59899 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
59900 		ZEND_NULL_HANDLER,
59901 		ZEND_NULL_HANDLER,
59902 		ZEND_NULL_HANDLER,
59903 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
59904 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
59905 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
59906 		ZEND_NULL_HANDLER,
59907 		ZEND_NULL_HANDLER,
59908 		ZEND_NULL_HANDLER,
59909 		ZEND_NULL_HANDLER,
59910 		ZEND_NULL_HANDLER,
59911 		ZEND_NULL_HANDLER,
59912 		ZEND_NULL_HANDLER,
59913 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
59914 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
59915 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
59916 		ZEND_NULL_HANDLER,
59917 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
59918 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
59919 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
59920 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
59921 		ZEND_NULL_HANDLER,
59922 		ZEND_NULL_HANDLER,
59923 		ZEND_NULL_HANDLER,
59924 		ZEND_NULL_HANDLER,
59925 		ZEND_NULL_HANDLER,
59926 		ZEND_NULL_HANDLER,
59927 		ZEND_NULL_HANDLER,
59928 		ZEND_NULL_HANDLER,
59929 		ZEND_NULL_HANDLER,
59930 		ZEND_NULL_HANDLER,
59931 		ZEND_NULL_HANDLER,
59932 		ZEND_NULL_HANDLER,
59933 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
59934 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
59935 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
59936 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
59937 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
59938 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
59939 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
59940 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
59941 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
59942 		ZEND_NULL_HANDLER,
59943 		ZEND_NULL_HANDLER,
59944 		ZEND_NULL_HANDLER,
59945 		ZEND_NULL_HANDLER,
59946 		ZEND_NULL_HANDLER,
59947 		ZEND_NULL_HANDLER,
59948 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
59949 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
59950 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
59951 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
59952 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
59953 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
59954 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
59955 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
59956 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
59957 		ZEND_NULL_HANDLER,
59958 		ZEND_NULL_HANDLER,
59959 		ZEND_NULL_HANDLER,
59960 		ZEND_NULL_HANDLER,
59961 		ZEND_NULL_HANDLER,
59962 		ZEND_NULL_HANDLER,
59963 		ZEND_NULL_HANDLER,
59964 		ZEND_NULL_HANDLER,
59965 		ZEND_NULL_HANDLER,
59966 		ZEND_NULL_HANDLER,
59967 		ZEND_NULL_HANDLER,
59968 		ZEND_NULL_HANDLER,
59969 		ZEND_NULL_HANDLER,
59970 		ZEND_NULL_HANDLER,
59971 		ZEND_NULL_HANDLER,
59972 		ZEND_NULL_HANDLER,
59973 		ZEND_NULL_HANDLER,
59974 		ZEND_NULL_HANDLER,
59975 		ZEND_NULL_HANDLER,
59976 		ZEND_NULL_HANDLER,
59977 		ZEND_NULL_HANDLER,
59978 		ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
59979 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
59980 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
59981 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
59982 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
59983 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
59984 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
59985 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
59986 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
59987 		ZEND_NULL_HANDLER,
59988 		ZEND_NULL_HANDLER,
59989 		ZEND_NULL_HANDLER,
59990 		ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
59991 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
59992 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
59993 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
59994 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
59995 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
59996 		ZEND_NULL_HANDLER,
59997 		ZEND_NULL_HANDLER,
59998 		ZEND_NULL_HANDLER,
59999 		ZEND_NULL_HANDLER,
60000 		ZEND_NULL_HANDLER,
60001 		ZEND_NULL_HANDLER,
60002 		ZEND_NULL_HANDLER,
60003 		ZEND_NULL_HANDLER,
60004 		ZEND_NULL_HANDLER,
60005 		ZEND_NULL_HANDLER,
60006 		ZEND_NULL_HANDLER,
60007 		ZEND_NULL_HANDLER,
60008 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
60009 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
60010 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
60011 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60012 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60013 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60014 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60015 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60016 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60017 		ZEND_NULL_HANDLER,
60018 		ZEND_NULL_HANDLER,
60019 		ZEND_NULL_HANDLER,
60020 		ZEND_NULL_HANDLER,
60021 		ZEND_NULL_HANDLER,
60022 		ZEND_NULL_HANDLER,
60023 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
60024 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
60025 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
60026 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60027 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60028 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60029 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
60030 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
60031 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
60032 		ZEND_NULL_HANDLER,
60033 		ZEND_NULL_HANDLER,
60034 		ZEND_NULL_HANDLER,
60035 		ZEND_NULL_HANDLER,
60036 		ZEND_NULL_HANDLER,
60037 		ZEND_NULL_HANDLER,
60038 		ZEND_NULL_HANDLER,
60039 		ZEND_NULL_HANDLER,
60040 		ZEND_NULL_HANDLER,
60041 		ZEND_NULL_HANDLER,
60042 		ZEND_NULL_HANDLER,
60043 		ZEND_NULL_HANDLER,
60044 		ZEND_NULL_HANDLER,
60045 		ZEND_NULL_HANDLER,
60046 		ZEND_NULL_HANDLER,
60047 		ZEND_NULL_HANDLER,
60048 		ZEND_NULL_HANDLER,
60049 		ZEND_NULL_HANDLER,
60050 		ZEND_NULL_HANDLER,
60051 		ZEND_NULL_HANDLER,
60052 		ZEND_NULL_HANDLER,
60053 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
60054 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
60055 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
60056 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
60057 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
60058 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
60059 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
60060 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
60061 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
60062 		ZEND_NULL_HANDLER,
60063 		ZEND_NULL_HANDLER,
60064 		ZEND_NULL_HANDLER,
60065 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
60066 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
60067 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
60068 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
60069 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
60070 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
60071 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
60072 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60073 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60074 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
60075 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60076 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60077 		ZEND_NULL_HANDLER,
60078 		ZEND_NULL_HANDLER,
60079 		ZEND_NULL_HANDLER,
60080 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
60081 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60082 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60083 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
60084 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60085 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60086 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60087 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60088 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60089 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60090 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60091 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60092 		ZEND_NULL_HANDLER,
60093 		ZEND_NULL_HANDLER,
60094 		ZEND_NULL_HANDLER,
60095 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60096 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60097 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60098 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
60099 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60100 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60101 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60102 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60103 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60104 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60105 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60106 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60107 		ZEND_NULL_HANDLER,
60108 		ZEND_NULL_HANDLER,
60109 		ZEND_NULL_HANDLER,
60110 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60111 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60112 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60113 		ZEND_NULL_HANDLER,
60114 		ZEND_NULL_HANDLER,
60115 		ZEND_NULL_HANDLER,
60116 		ZEND_NULL_HANDLER,
60117 		ZEND_NULL_HANDLER,
60118 		ZEND_NULL_HANDLER,
60119 		ZEND_NULL_HANDLER,
60120 		ZEND_NULL_HANDLER,
60121 		ZEND_NULL_HANDLER,
60122 		ZEND_NULL_HANDLER,
60123 		ZEND_NULL_HANDLER,
60124 		ZEND_NULL_HANDLER,
60125 		ZEND_NULL_HANDLER,
60126 		ZEND_NULL_HANDLER,
60127 		ZEND_NULL_HANDLER,
60128 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
60129 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60130 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60131 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60132 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60133 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60134 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60135 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60136 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60137 		ZEND_NULL_HANDLER,
60138 		ZEND_NULL_HANDLER,
60139 		ZEND_NULL_HANDLER,
60140 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60141 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60142 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60143 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
60144 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
60145 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
60146 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
60147 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60148 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60149 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
60150 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60151 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60152 		ZEND_NULL_HANDLER,
60153 		ZEND_NULL_HANDLER,
60154 		ZEND_NULL_HANDLER,
60155 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
60156 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60157 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60158 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
60159 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60160 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60161 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60162 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60163 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60164 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60165 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60166 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60167 		ZEND_NULL_HANDLER,
60168 		ZEND_NULL_HANDLER,
60169 		ZEND_NULL_HANDLER,
60170 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60171 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60172 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60173 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
60174 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60175 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60176 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60177 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60178 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60179 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60180 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60181 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60182 		ZEND_NULL_HANDLER,
60183 		ZEND_NULL_HANDLER,
60184 		ZEND_NULL_HANDLER,
60185 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60186 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60187 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60188 		ZEND_NULL_HANDLER,
60189 		ZEND_NULL_HANDLER,
60190 		ZEND_NULL_HANDLER,
60191 		ZEND_NULL_HANDLER,
60192 		ZEND_NULL_HANDLER,
60193 		ZEND_NULL_HANDLER,
60194 		ZEND_NULL_HANDLER,
60195 		ZEND_NULL_HANDLER,
60196 		ZEND_NULL_HANDLER,
60197 		ZEND_NULL_HANDLER,
60198 		ZEND_NULL_HANDLER,
60199 		ZEND_NULL_HANDLER,
60200 		ZEND_NULL_HANDLER,
60201 		ZEND_NULL_HANDLER,
60202 		ZEND_NULL_HANDLER,
60203 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
60204 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60205 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60206 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60207 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60208 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60209 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60210 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60211 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60212 		ZEND_NULL_HANDLER,
60213 		ZEND_NULL_HANDLER,
60214 		ZEND_NULL_HANDLER,
60215 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60216 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60217 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60218 		ZEND_NULL_HANDLER,
60219 		ZEND_NULL_HANDLER,
60220 		ZEND_NULL_HANDLER,
60221 		ZEND_NULL_HANDLER,
60222 		ZEND_NULL_HANDLER,
60223 		ZEND_NULL_HANDLER,
60224 		ZEND_NULL_HANDLER,
60225 		ZEND_NULL_HANDLER,
60226 		ZEND_NULL_HANDLER,
60227 		ZEND_NULL_HANDLER,
60228 		ZEND_NULL_HANDLER,
60229 		ZEND_NULL_HANDLER,
60230 		ZEND_NULL_HANDLER,
60231 		ZEND_NULL_HANDLER,
60232 		ZEND_NULL_HANDLER,
60233 		ZEND_NULL_HANDLER,
60234 		ZEND_NULL_HANDLER,
60235 		ZEND_NULL_HANDLER,
60236 		ZEND_NULL_HANDLER,
60237 		ZEND_NULL_HANDLER,
60238 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
60239 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
60240 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
60241 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
60242 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
60243 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
60244 		ZEND_NULL_HANDLER,
60245 		ZEND_NULL_HANDLER,
60246 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
60247 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER,
60248 		ZEND_NULL_HANDLER,
60249 		ZEND_NULL_HANDLER,
60250 		ZEND_NULL_HANDLER,
60251 		ZEND_NULL_HANDLER,
60252 		ZEND_NULL_HANDLER,
60253 		ZEND_NULL_HANDLER,
60254 		ZEND_NULL_HANDLER,
60255 		ZEND_NULL_HANDLER,
60256 		ZEND_NULL_HANDLER,
60257 		ZEND_NULL_HANDLER,
60258 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
60259 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
60260 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
60261 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
60262 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
60263 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
60264 		ZEND_NULL_HANDLER,
60265 		ZEND_NULL_HANDLER,
60266 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
60267 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER,
60268 		ZEND_NULL_HANDLER,
60269 		ZEND_NULL_HANDLER,
60270 		ZEND_NULL_HANDLER,
60271 		ZEND_NULL_HANDLER,
60272 		ZEND_NULL_HANDLER,
60273 		ZEND_NULL_HANDLER,
60274 		ZEND_NULL_HANDLER,
60275 		ZEND_NULL_HANDLER,
60276 		ZEND_NULL_HANDLER,
60277 		ZEND_NULL_HANDLER,
60278 		ZEND_NULL_HANDLER,
60279 		ZEND_NULL_HANDLER,
60280 		ZEND_NULL_HANDLER,
60281 		ZEND_NULL_HANDLER,
60282 		ZEND_NULL_HANDLER,
60283 		ZEND_NULL_HANDLER,
60284 		ZEND_NULL_HANDLER,
60285 		ZEND_NULL_HANDLER,
60286 		ZEND_NULL_HANDLER,
60287 		ZEND_NULL_HANDLER,
60288 		ZEND_NULL_HANDLER,
60289 		ZEND_NULL_HANDLER,
60290 		ZEND_NULL_HANDLER,
60291 		ZEND_NULL_HANDLER,
60292 		ZEND_NULL_HANDLER,
60293 		ZEND_NULL_HANDLER,
60294 		ZEND_NULL_HANDLER,
60295 		ZEND_NULL_HANDLER,
60296 		ZEND_NULL_HANDLER,
60297 		ZEND_NULL_HANDLER,
60298 		ZEND_NULL_HANDLER,
60299 		ZEND_NULL_HANDLER,
60300 		ZEND_NULL_HANDLER,
60301 		ZEND_NULL_HANDLER,
60302 		ZEND_NULL_HANDLER,
60303 		ZEND_NULL_HANDLER,
60304 		ZEND_NULL_HANDLER,
60305 		ZEND_NULL_HANDLER,
60306 		ZEND_NULL_HANDLER,
60307 		ZEND_NULL_HANDLER,
60308 		ZEND_NULL_HANDLER,
60309 		ZEND_NULL_HANDLER,
60310 		ZEND_NULL_HANDLER,
60311 		ZEND_NULL_HANDLER,
60312 		ZEND_NULL_HANDLER,
60313 		ZEND_NULL_HANDLER,
60314 		ZEND_NULL_HANDLER,
60315 		ZEND_NULL_HANDLER,
60316 		ZEND_NULL_HANDLER,
60317 		ZEND_NULL_HANDLER,
60318 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
60319 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
60320 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
60321 		ZEND_NULL_HANDLER,
60322 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
60323 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60324 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60325 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60326 		ZEND_NULL_HANDLER,
60327 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60328 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60329 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60330 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60331 		ZEND_NULL_HANDLER,
60332 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60333 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
60334 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
60335 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
60336 		ZEND_NULL_HANDLER,
60337 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
60338 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
60339 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
60340 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
60341 		ZEND_NULL_HANDLER,
60342 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
60343 		ZEND_NULL_HANDLER,
60344 		ZEND_NULL_HANDLER,
60345 		ZEND_NULL_HANDLER,
60346 		ZEND_NULL_HANDLER,
60347 		ZEND_NULL_HANDLER,
60348 		ZEND_NULL_HANDLER,
60349 		ZEND_NULL_HANDLER,
60350 		ZEND_NULL_HANDLER,
60351 		ZEND_NULL_HANDLER,
60352 		ZEND_NULL_HANDLER,
60353 		ZEND_NULL_HANDLER,
60354 		ZEND_NULL_HANDLER,
60355 		ZEND_NULL_HANDLER,
60356 		ZEND_NULL_HANDLER,
60357 		ZEND_NULL_HANDLER,
60358 		ZEND_NULL_HANDLER,
60359 		ZEND_NULL_HANDLER,
60360 		ZEND_NULL_HANDLER,
60361 		ZEND_NULL_HANDLER,
60362 		ZEND_NULL_HANDLER,
60363 		ZEND_NULL_HANDLER,
60364 		ZEND_NULL_HANDLER,
60365 		ZEND_NULL_HANDLER,
60366 		ZEND_NULL_HANDLER,
60367 		ZEND_NULL_HANDLER,
60368 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
60369 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
60370 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
60371 		ZEND_NULL_HANDLER,
60372 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
60373 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
60374 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
60375 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60376 		ZEND_NULL_HANDLER,
60377 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60378 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
60379 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
60380 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60381 		ZEND_NULL_HANDLER,
60382 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60383 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
60384 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
60385 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
60386 		ZEND_NULL_HANDLER,
60387 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
60388 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
60389 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
60390 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
60391 		ZEND_NULL_HANDLER,
60392 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
60393 		ZEND_NULL_HANDLER,
60394 		ZEND_NULL_HANDLER,
60395 		ZEND_NULL_HANDLER,
60396 		ZEND_NULL_HANDLER,
60397 		ZEND_NULL_HANDLER,
60398 		ZEND_NULL_HANDLER,
60399 		ZEND_NULL_HANDLER,
60400 		ZEND_NULL_HANDLER,
60401 		ZEND_NULL_HANDLER,
60402 		ZEND_NULL_HANDLER,
60403 		ZEND_NULL_HANDLER,
60404 		ZEND_NULL_HANDLER,
60405 		ZEND_NULL_HANDLER,
60406 		ZEND_NULL_HANDLER,
60407 		ZEND_NULL_HANDLER,
60408 		ZEND_NULL_HANDLER,
60409 		ZEND_NULL_HANDLER,
60410 		ZEND_NULL_HANDLER,
60411 		ZEND_NULL_HANDLER,
60412 		ZEND_NULL_HANDLER,
60413 		ZEND_NULL_HANDLER,
60414 		ZEND_NULL_HANDLER,
60415 		ZEND_NULL_HANDLER,
60416 		ZEND_NULL_HANDLER,
60417 		ZEND_NULL_HANDLER,
60418 		ZEND_NULL_HANDLER,
60419 		ZEND_NULL_HANDLER,
60420 		ZEND_NULL_HANDLER,
60421 		ZEND_NULL_HANDLER,
60422 		ZEND_NULL_HANDLER,
60423 		ZEND_NULL_HANDLER,
60424 		ZEND_NULL_HANDLER,
60425 		ZEND_NULL_HANDLER,
60426 		ZEND_NULL_HANDLER,
60427 		ZEND_NULL_HANDLER,
60428 		ZEND_NULL_HANDLER,
60429 		ZEND_NULL_HANDLER,
60430 		ZEND_NULL_HANDLER,
60431 		ZEND_NULL_HANDLER,
60432 		ZEND_NULL_HANDLER,
60433 		ZEND_NULL_HANDLER,
60434 		ZEND_NULL_HANDLER,
60435 		ZEND_NULL_HANDLER,
60436 		ZEND_NULL_HANDLER,
60437 		ZEND_NULL_HANDLER,
60438 		ZEND_NULL_HANDLER,
60439 		ZEND_NULL_HANDLER,
60440 		ZEND_NULL_HANDLER,
60441 		ZEND_NULL_HANDLER,
60442 		ZEND_NULL_HANDLER,
60443 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
60444 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
60445 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
60446 		ZEND_NULL_HANDLER,
60447 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
60448 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60449 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60450 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60451 		ZEND_NULL_HANDLER,
60452 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60453 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60454 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60455 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60456 		ZEND_NULL_HANDLER,
60457 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60458 		ZEND_NULL_HANDLER,
60459 		ZEND_NULL_HANDLER,
60460 		ZEND_NULL_HANDLER,
60461 		ZEND_NULL_HANDLER,
60462 		ZEND_NULL_HANDLER,
60463 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
60464 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
60465 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
60466 		ZEND_NULL_HANDLER,
60467 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
60468 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
60469 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
60470 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
60471 		ZEND_NULL_HANDLER,
60472 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
60473 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
60474 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
60475 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
60476 		ZEND_NULL_HANDLER,
60477 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
60478 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
60479 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
60480 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
60481 		ZEND_NULL_HANDLER,
60482 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
60483 		ZEND_NULL_HANDLER,
60484 		ZEND_NULL_HANDLER,
60485 		ZEND_NULL_HANDLER,
60486 		ZEND_NULL_HANDLER,
60487 		ZEND_NULL_HANDLER,
60488 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
60489 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
60490 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
60491 		ZEND_NULL_HANDLER,
60492 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
60493 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
60494 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
60495 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
60496 		ZEND_NULL_HANDLER,
60497 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
60498 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
60499 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
60500 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60501 		ZEND_NULL_HANDLER,
60502 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60503 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
60504 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
60505 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60506 		ZEND_NULL_HANDLER,
60507 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60508 		ZEND_NULL_HANDLER,
60509 		ZEND_NULL_HANDLER,
60510 		ZEND_NULL_HANDLER,
60511 		ZEND_NULL_HANDLER,
60512 		ZEND_NULL_HANDLER,
60513 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
60514 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
60515 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
60516 		ZEND_NULL_HANDLER,
60517 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER,
60518 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER,
60519 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER,
60520 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER,
60521 		ZEND_NULL_HANDLER,
60522 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER,
60523 		ZEND_NULL_HANDLER,
60524 		ZEND_NULL_HANDLER,
60525 		ZEND_NULL_HANDLER,
60526 		ZEND_NULL_HANDLER,
60527 		ZEND_NULL_HANDLER,
60528 		ZEND_NULL_HANDLER,
60529 		ZEND_NULL_HANDLER,
60530 		ZEND_NULL_HANDLER,
60531 		ZEND_NULL_HANDLER,
60532 		ZEND_NULL_HANDLER,
60533 		ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER,
60534 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
60535 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
60536 		ZEND_NULL_HANDLER,
60537 		ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER,
60538 		ZEND_NULL_HANDLER,
60539 		ZEND_NULL_HANDLER,
60540 		ZEND_NULL_HANDLER,
60541 		ZEND_NULL_HANDLER,
60542 		ZEND_NULL_HANDLER,
60543 		ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER,
60544 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
60545 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
60546 		ZEND_NULL_HANDLER,
60547 		ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER,
60548 		ZEND_NULL_HANDLER,
60549 		ZEND_NULL_HANDLER,
60550 		ZEND_NULL_HANDLER,
60551 		ZEND_NULL_HANDLER,
60552 		ZEND_NULL_HANDLER,
60553 		ZEND_NULL_HANDLER,
60554 		ZEND_NULL_HANDLER,
60555 		ZEND_NULL_HANDLER,
60556 		ZEND_NULL_HANDLER,
60557 		ZEND_NULL_HANDLER,
60558 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER,
60559 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
60560 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
60561 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER,
60562 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER,
60563 		ZEND_NULL_HANDLER,
60564 		ZEND_NULL_HANDLER,
60565 		ZEND_NULL_HANDLER,
60566 		ZEND_NULL_HANDLER,
60567 		ZEND_NULL_HANDLER,
60568 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER,
60569 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
60570 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
60571 		ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER,
60572 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER,
60573 		ZEND_NULL_HANDLER,
60574 		ZEND_NULL_HANDLER,
60575 		ZEND_NULL_HANDLER,
60576 		ZEND_NULL_HANDLER,
60577 		ZEND_NULL_HANDLER,
60578 		ZEND_NULL_HANDLER,
60579 		ZEND_NULL_HANDLER,
60580 		ZEND_NULL_HANDLER,
60581 		ZEND_NULL_HANDLER,
60582 		ZEND_NULL_HANDLER,
60583 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER,
60584 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
60585 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
60586 		ZEND_NULL_HANDLER,
60587 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER,
60588 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER,
60589 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
60590 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
60591 		ZEND_NULL_HANDLER,
60592 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER,
60593 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER,
60594 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
60595 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
60596 		ZEND_NULL_HANDLER,
60597 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER,
60598 		ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER,
60599 		ZEND_NULL_HANDLER,
60600 		ZEND_NULL_HANDLER,
60601 		ZEND_NULL_HANDLER,
60602 		ZEND_NULL_HANDLER,
60603 		ZEND_NULL_HANDLER,
60604 		ZEND_NULL_HANDLER,
60605 		ZEND_NULL_HANDLER,
60606 		ZEND_NULL_HANDLER,
60607 		ZEND_NULL_HANDLER,
60608 		ZEND_NULL_HANDLER,
60609 		ZEND_NULL_HANDLER,
60610 		ZEND_NULL_HANDLER,
60611 		ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
60612 		ZEND_NULL_HANDLER,
60613 		ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
60614 		ZEND_NULL_HANDLER,
60615 		ZEND_NULL_HANDLER,
60616 		ZEND_NULL_HANDLER,
60617 		ZEND_NULL_HANDLER,
60618 		ZEND_NULL_HANDLER,
60619 		ZEND_NULL_HANDLER,
60620 		ZEND_NULL_HANDLER,
60621 		ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
60622 		ZEND_NULL_HANDLER,
60623 		ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
60624 		ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
60625 		ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
60626 		ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
60627 		ZEND_NULL_HANDLER,
60628 		ZEND_QM_ASSIGN_SPEC_CV_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_NULL_HANDLER,
60644 		ZEND_NULL_HANDLER,
60645 		ZEND_NULL_HANDLER,
60646 		ZEND_NULL_HANDLER,
60647 		ZEND_NULL_HANDLER,
60648 		ZEND_NULL_HANDLER,
60649 		ZEND_NULL_HANDLER,
60650 		ZEND_NULL_HANDLER,
60651 		ZEND_NULL_HANDLER,
60652 		ZEND_NULL_HANDLER,
60653 		ZEND_NULL_HANDLER,
60654 		ZEND_NULL_HANDLER,
60655 		ZEND_NULL_HANDLER,
60656 		ZEND_NULL_HANDLER,
60657 		ZEND_NULL_HANDLER,
60658 		ZEND_NULL_HANDLER,
60659 		ZEND_NULL_HANDLER,
60660 		ZEND_NULL_HANDLER,
60661 		ZEND_NULL_HANDLER,
60662 		ZEND_NULL_HANDLER,
60663 		ZEND_NULL_HANDLER,
60664 		ZEND_NULL_HANDLER,
60665 		ZEND_NULL_HANDLER,
60666 		ZEND_NULL_HANDLER,
60667 		ZEND_NULL_HANDLER,
60668 		ZEND_NULL_HANDLER,
60669 		ZEND_NULL_HANDLER,
60670 		ZEND_NULL_HANDLER,
60671 		ZEND_NULL_HANDLER,
60672 		ZEND_NULL_HANDLER,
60673 		ZEND_NULL_HANDLER,
60674 		ZEND_NULL_HANDLER,
60675 		ZEND_NULL_HANDLER,
60676 		ZEND_NULL_HANDLER,
60677 		ZEND_NULL_HANDLER,
60678 		ZEND_NULL_HANDLER,
60679 		ZEND_NULL_HANDLER,
60680 		ZEND_NULL_HANDLER,
60681 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
60682 		ZEND_NULL_HANDLER,
60683 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
60684 		ZEND_NULL_HANDLER,
60685 		ZEND_NULL_HANDLER,
60686 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60687 		ZEND_NULL_HANDLER,
60688 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60689 		ZEND_NULL_HANDLER,
60690 		ZEND_NULL_HANDLER,
60691 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60692 		ZEND_NULL_HANDLER,
60693 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60694 		ZEND_NULL_HANDLER,
60695 		ZEND_NULL_HANDLER,
60696 		ZEND_NULL_HANDLER,
60697 		ZEND_NULL_HANDLER,
60698 		ZEND_NULL_HANDLER,
60699 		ZEND_NULL_HANDLER,
60700 		ZEND_NULL_HANDLER,
60701 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
60702 		ZEND_NULL_HANDLER,
60703 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
60704 		ZEND_NULL_HANDLER,
60705 		ZEND_NULL_HANDLER,
60706 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
60707 		ZEND_NULL_HANDLER,
60708 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
60709 		ZEND_NULL_HANDLER,
60710 		ZEND_NULL_HANDLER,
60711 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
60712 		ZEND_NULL_HANDLER,
60713 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
60714 		ZEND_NULL_HANDLER,
60715 		ZEND_NULL_HANDLER,
60716 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
60717 		ZEND_NULL_HANDLER,
60718 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
60719 		ZEND_NULL_HANDLER,
60720 		ZEND_NULL_HANDLER,
60721 		ZEND_NULL_HANDLER,
60722 		ZEND_NULL_HANDLER,
60723 		ZEND_NULL_HANDLER,
60724 		ZEND_NULL_HANDLER,
60725 		ZEND_NULL_HANDLER,
60726 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
60727 		ZEND_NULL_HANDLER,
60728 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
60729 		ZEND_NULL_HANDLER,
60730 		ZEND_NULL_HANDLER,
60731 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
60732 		ZEND_NULL_HANDLER,
60733 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
60734 		ZEND_NULL_HANDLER,
60735 		ZEND_NULL_HANDLER,
60736 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60737 		ZEND_NULL_HANDLER,
60738 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60739 		ZEND_NULL_HANDLER,
60740 		ZEND_NULL_HANDLER,
60741 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60742 		ZEND_NULL_HANDLER,
60743 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60744 		ZEND_NULL_HANDLER,
60745 		ZEND_NULL_HANDLER,
60746 		ZEND_NULL_HANDLER,
60747 		ZEND_NULL_HANDLER,
60748 		ZEND_NULL_HANDLER,
60749 		ZEND_NULL_HANDLER,
60750 		ZEND_NULL_HANDLER,
60751 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
60752 		ZEND_NULL_HANDLER,
60753 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER,
60754 		ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER,
60755 		ZEND_NULL_HANDLER,
60756 		ZEND_NULL_HANDLER,
60757 		ZEND_NULL_HANDLER,
60758 		ZEND_NULL_HANDLER,
60759 		ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
60760 		ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
60761 		ZEND_NULL_HANDLER,
60762 		ZEND_NULL_HANDLER,
60763 		ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
60764 		ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
60765 		ZEND_NULL_HANDLER,
60766 		ZEND_NULL_HANDLER,
60767 		ZEND_NULL_HANDLER,
60768 		ZEND_NULL_HANDLER,
60769 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
60770 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
60771 		ZEND_NULL_HANDLER,
60772 		ZEND_NULL_HANDLER,
60773 		ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
60774 		ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
60775 		ZEND_NULL_HANDLER,
60776 		ZEND_NULL_HANDLER,
60777 		ZEND_POST_INC_SPEC_VAR_HANDLER,
60778 		ZEND_NULL_HANDLER,
60779 		ZEND_POST_INC_SPEC_CV_HANDLER,
60780 		ZEND_NULL_HANDLER,
60781 		ZEND_NULL_HANDLER,
60782 		ZEND_POST_DEC_SPEC_VAR_HANDLER,
60783 		ZEND_NULL_HANDLER,
60784 		ZEND_POST_DEC_SPEC_CV_HANDLER,
60785 		ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER,
60786 		ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER,
60787 		ZEND_JMP_SPEC_HANDLER,
60788 		ZEND_JMPZ_SPEC_CONST_HANDLER,
60789 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
60790 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
60791 		ZEND_NULL_HANDLER,
60792 		ZEND_JMPZ_SPEC_CV_HANDLER,
60793 		ZEND_JMPNZ_SPEC_CONST_HANDLER,
60794 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
60795 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
60796 		ZEND_NULL_HANDLER,
60797 		ZEND_JMPNZ_SPEC_CV_HANDLER,
60798 		ZEND_JMPZNZ_SPEC_CONST_HANDLER,
60799 		ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
60800 		ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
60801 		ZEND_NULL_HANDLER,
60802 		ZEND_JMPZNZ_SPEC_CV_HANDLER,
60803 		ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
60804 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
60805 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
60806 		ZEND_NULL_HANDLER,
60807 		ZEND_JMPZ_EX_SPEC_CV_HANDLER,
60808 		ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
60809 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
60810 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
60811 		ZEND_NULL_HANDLER,
60812 		ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
60813 		ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
60814 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
60815 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
60816 		ZEND_NULL_HANDLER,
60817 		ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
60818 		ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
60819 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
60820 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
60821 		ZEND_NULL_HANDLER,
60822 		ZEND_NULL_HANDLER,
60823 		ZEND_NULL_HANDLER,
60824 		ZEND_NULL_HANDLER,
60825 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER,
60826 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
60827 		ZEND_NULL_HANDLER,
60828 		ZEND_NULL_HANDLER,
60829 		ZEND_CAST_SPEC_CONST_HANDLER,
60830 		ZEND_CAST_SPEC_TMP_HANDLER,
60831 		ZEND_CAST_SPEC_VAR_HANDLER,
60832 		ZEND_NULL_HANDLER,
60833 		ZEND_CAST_SPEC_CV_HANDLER,
60834 		ZEND_BOOL_SPEC_CONST_HANDLER,
60835 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
60836 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
60837 		ZEND_NULL_HANDLER,
60838 		ZEND_BOOL_SPEC_CV_HANDLER,
60839 		ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
60840 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
60841 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
60842 		ZEND_NULL_HANDLER,
60843 		ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
60844 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
60845 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
60846 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
60847 		ZEND_NULL_HANDLER,
60848 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
60849 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
60850 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
60851 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
60852 		ZEND_NULL_HANDLER,
60853 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
60854 		ZEND_NULL_HANDLER,
60855 		ZEND_NULL_HANDLER,
60856 		ZEND_NULL_HANDLER,
60857 		ZEND_NULL_HANDLER,
60858 		ZEND_NULL_HANDLER,
60859 		ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
60860 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
60861 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
60862 		ZEND_NULL_HANDLER,
60863 		ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
60864 		ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
60865 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
60866 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
60867 		ZEND_NULL_HANDLER,
60868 		ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
60869 		ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
60870 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
60871 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
60872 		ZEND_NULL_HANDLER,
60873 		ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
60874 		ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
60875 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
60876 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
60877 		ZEND_NULL_HANDLER,
60878 		ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
60879 		ZEND_BEGIN_SILENCE_SPEC_HANDLER,
60880 		ZEND_END_SILENCE_SPEC_TMP_HANDLER,
60881 		ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
60882 		ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
60883 		ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
60884 		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
60885 		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
60886 		ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
60887 		ZEND_RETURN_SPEC_CONST_HANDLER,
60888 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
60889 		ZEND_RETURN_SPEC_TMP_HANDLER,
60890 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
60891 		ZEND_RETURN_SPEC_VAR_HANDLER,
60892 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
60893 		ZEND_NULL_HANDLER,
60894 		ZEND_NULL_HANDLER,
60895 		ZEND_RETURN_SPEC_CV_HANDLER,
60896 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
60897 		ZEND_RECV_SPEC_UNUSED_HANDLER,
60898 		ZEND_RECV_INIT_SPEC_CONST_HANDLER,
60899 		ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER,
60900 		ZEND_NULL_HANDLER,
60901 		ZEND_NULL_HANDLER,
60902 		ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER,
60903 		ZEND_NULL_HANDLER,
60904 		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
60905 		ZEND_NULL_HANDLER,
60906 		ZEND_NULL_HANDLER,
60907 		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
60908 		ZEND_NULL_HANDLER,
60909 		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
60910 		ZEND_NULL_HANDLER,
60911 		ZEND_NULL_HANDLER,
60912 		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_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_NULL_HANDLER,
60924 		ZEND_NULL_HANDLER,
60925 		ZEND_NULL_HANDLER,
60926 		ZEND_NULL_HANDLER,
60927 		ZEND_NULL_HANDLER,
60928 		ZEND_NULL_HANDLER,
60929 		ZEND_NULL_HANDLER,
60930 		ZEND_NULL_HANDLER,
60931 		ZEND_NULL_HANDLER,
60932 		ZEND_NULL_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_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
60945 		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
60946 		ZEND_NULL_HANDLER,
60947 		ZEND_NULL_HANDLER,
60948 		ZEND_NULL_HANDLER,
60949 		ZEND_NULL_HANDLER,
60950 		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER,
60951 		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_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_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
60965 		ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
60966 		ZEND_NULL_HANDLER,
60967 		ZEND_NULL_HANDLER,
60968 		ZEND_NULL_HANDLER,
60969 		ZEND_NULL_HANDLER,
60970 		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER,
60971 		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_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_NULL_HANDLER,
60984 		ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER,
60985 		ZEND_NULL_HANDLER,
60986 		ZEND_NULL_HANDLER,
60987 		ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER,
60988 		ZEND_NULL_HANDLER,
60989 		ZEND_NULL_HANDLER,
60990 		ZEND_NULL_HANDLER,
60991 		ZEND_NULL_HANDLER,
60992 		ZEND_NULL_HANDLER,
60993 		ZEND_NULL_HANDLER,
60994 		ZEND_SEND_REF_SPEC_CV_CONST_HANDLER,
60995 		ZEND_NULL_HANDLER,
60996 		ZEND_NULL_HANDLER,
60997 		ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER,
60998 		ZEND_NULL_HANDLER,
60999 		ZEND_NEW_SPEC_CONST_UNUSED_HANDLER,
61000 		ZEND_NULL_HANDLER,
61001 		ZEND_NEW_SPEC_VAR_UNUSED_HANDLER,
61002 		ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER,
61003 		ZEND_NULL_HANDLER,
61004 		ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
61005 		ZEND_FREE_SPEC_TMPVAR_HANDLER,
61006 		ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
61007 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
61008 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
61009 		ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
61010 		ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
61011 		ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
61012 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
61013 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
61014 		ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
61015 		ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
61016 		ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
61017 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
61018 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
61019 		ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
61020 		ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
61021 		ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
61022 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
61023 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
61024 		ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
61025 		ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
61026 		ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
61027 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
61028 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
61029 		ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
61030 		ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
61031 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
61032 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
61033 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
61034 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
61035 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
61036 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
61037 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
61038 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
61039 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
61040 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
61041 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
61042 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
61043 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
61044 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
61045 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
61046 		ZEND_NULL_HANDLER,
61047 		ZEND_NULL_HANDLER,
61048 		ZEND_NULL_HANDLER,
61049 		ZEND_NULL_HANDLER,
61050 		ZEND_NULL_HANDLER,
61051 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
61052 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
61053 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
61054 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
61055 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
61056 		ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
61057 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
61058 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
61059 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
61060 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
61061 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
61062 		ZEND_NULL_HANDLER,
61063 		ZEND_NULL_HANDLER,
61064 		ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
61065 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
61066 		ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
61067 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
61068 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
61069 		ZEND_NULL_HANDLER,
61070 		ZEND_UNSET_VAR_SPEC_CV_UNUSED_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_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
61082 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
61083 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
61084 		ZEND_NULL_HANDLER,
61085 		ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
61086 		ZEND_NULL_HANDLER,
61087 		ZEND_NULL_HANDLER,
61088 		ZEND_NULL_HANDLER,
61089 		ZEND_NULL_HANDLER,
61090 		ZEND_NULL_HANDLER,
61091 		ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
61092 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
61093 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
61094 		ZEND_NULL_HANDLER,
61095 		ZEND_UNSET_DIM_SPEC_CV_CV_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_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
61107 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
61108 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
61109 		ZEND_NULL_HANDLER,
61110 		ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
61111 		ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
61112 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61113 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61114 		ZEND_NULL_HANDLER,
61115 		ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
61116 		ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
61117 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
61118 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
61119 		ZEND_NULL_HANDLER,
61120 		ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
61121 		ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
61122 		ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
61123 		ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
61124 		ZEND_NULL_HANDLER,
61125 		ZEND_FE_RESET_R_SPEC_CV_HANDLER,
61126 		ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
61127 		ZEND_EXIT_SPEC_HANDLER,
61128 		ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
61129 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
61130 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
61131 		ZEND_NULL_HANDLER,
61132 		ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
61133 		ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
61134 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
61135 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
61136 		ZEND_NULL_HANDLER,
61137 		ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
61138 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
61139 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61140 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61141 		ZEND_NULL_HANDLER,
61142 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
61143 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
61144 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61145 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61146 		ZEND_NULL_HANDLER,
61147 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
61148 		ZEND_NULL_HANDLER,
61149 		ZEND_NULL_HANDLER,
61150 		ZEND_NULL_HANDLER,
61151 		ZEND_NULL_HANDLER,
61152 		ZEND_NULL_HANDLER,
61153 		ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
61154 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
61155 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
61156 		ZEND_NULL_HANDLER,
61157 		ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
61158 		ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
61159 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
61160 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
61161 		ZEND_NULL_HANDLER,
61162 		ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
61163 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
61164 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61165 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61166 		ZEND_NULL_HANDLER,
61167 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
61168 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
61169 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61170 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
61171 		ZEND_NULL_HANDLER,
61172 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
61173 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
61174 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
61175 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
61176 		ZEND_NULL_HANDLER,
61177 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
61178 		ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
61179 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
61180 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
61181 		ZEND_NULL_HANDLER,
61182 		ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
61183 		ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
61184 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
61185 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
61186 		ZEND_NULL_HANDLER,
61187 		ZEND_FETCH_W_SPEC_CV_UNUSED_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_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
61199 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
61200 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
61201 		ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
61202 		ZEND_FETCH_DIM_W_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_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
61209 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
61210 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
61211 		ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
61212 		ZEND_FETCH_DIM_W_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_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
61224 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
61225 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
61226 		ZEND_NULL_HANDLER,
61227 		ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
61228 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
61229 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
61230 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
61231 		ZEND_NULL_HANDLER,
61232 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
61233 		ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
61234 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
61235 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
61236 		ZEND_NULL_HANDLER,
61237 		ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
61238 		ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
61239 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
61240 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
61241 		ZEND_NULL_HANDLER,
61242 		ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
61243 		ZEND_NULL_HANDLER,
61244 		ZEND_NULL_HANDLER,
61245 		ZEND_NULL_HANDLER,
61246 		ZEND_NULL_HANDLER,
61247 		ZEND_NULL_HANDLER,
61248 		ZEND_NULL_HANDLER,
61249 		ZEND_NULL_HANDLER,
61250 		ZEND_NULL_HANDLER,
61251 		ZEND_NULL_HANDLER,
61252 		ZEND_NULL_HANDLER,
61253 		ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
61254 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
61255 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
61256 		ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
61257 		ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
61258 		ZEND_NULL_HANDLER,
61259 		ZEND_NULL_HANDLER,
61260 		ZEND_NULL_HANDLER,
61261 		ZEND_NULL_HANDLER,
61262 		ZEND_NULL_HANDLER,
61263 		ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
61264 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
61265 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
61266 		ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
61267 		ZEND_FETCH_DIM_RW_SPEC_CV_CV_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_NULL_HANDLER,
61277 		ZEND_NULL_HANDLER,
61278 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
61279 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
61280 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
61281 		ZEND_NULL_HANDLER,
61282 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
61283 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
61284 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
61285 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
61286 		ZEND_NULL_HANDLER,
61287 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
61288 		ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
61289 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
61290 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
61291 		ZEND_NULL_HANDLER,
61292 		ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
61293 		ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
61294 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
61295 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
61296 		ZEND_NULL_HANDLER,
61297 		ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
61298 		ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
61299 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
61300 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
61301 		ZEND_NULL_HANDLER,
61302 		ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
61303 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
61304 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61305 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61306 		ZEND_NULL_HANDLER,
61307 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
61308 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
61309 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61310 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61311 		ZEND_NULL_HANDLER,
61312 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
61313 		ZEND_NULL_HANDLER,
61314 		ZEND_NULL_HANDLER,
61315 		ZEND_NULL_HANDLER,
61316 		ZEND_NULL_HANDLER,
61317 		ZEND_NULL_HANDLER,
61318 		ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
61319 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
61320 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
61321 		ZEND_NULL_HANDLER,
61322 		ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
61323 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
61324 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
61325 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
61326 		ZEND_NULL_HANDLER,
61327 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
61328 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
61329 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61330 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61331 		ZEND_NULL_HANDLER,
61332 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
61333 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
61334 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61335 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
61336 		ZEND_NULL_HANDLER,
61337 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
61338 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
61339 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
61340 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
61341 		ZEND_NULL_HANDLER,
61342 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
61343 		ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
61344 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
61345 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
61346 		ZEND_NULL_HANDLER,
61347 		ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
61348 		ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
61349 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
61350 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
61351 		ZEND_NULL_HANDLER,
61352 		ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
61353 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
61354 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
61355 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
61356 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
61357 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
61358 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
61359 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
61360 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
61361 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
61362 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
61363 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
61364 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
61365 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
61366 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
61367 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
61368 		ZEND_NULL_HANDLER,
61369 		ZEND_NULL_HANDLER,
61370 		ZEND_NULL_HANDLER,
61371 		ZEND_NULL_HANDLER,
61372 		ZEND_NULL_HANDLER,
61373 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
61374 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
61375 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
61376 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
61377 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
61378 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
61379 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
61380 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
61381 		ZEND_NULL_HANDLER,
61382 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
61383 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
61384 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
61385 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
61386 		ZEND_NULL_HANDLER,
61387 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
61388 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
61389 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
61390 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
61391 		ZEND_NULL_HANDLER,
61392 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
61393 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
61394 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
61395 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
61396 		ZEND_NULL_HANDLER,
61397 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
61398 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
61399 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
61400 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
61401 		ZEND_NULL_HANDLER,
61402 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
61403 		ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
61404 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
61405 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
61406 		ZEND_NULL_HANDLER,
61407 		ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
61408 		ZEND_NULL_HANDLER,
61409 		ZEND_NULL_HANDLER,
61410 		ZEND_NULL_HANDLER,
61411 		ZEND_NULL_HANDLER,
61412 		ZEND_NULL_HANDLER,
61413 		ZEND_NULL_HANDLER,
61414 		ZEND_NULL_HANDLER,
61415 		ZEND_NULL_HANDLER,
61416 		ZEND_NULL_HANDLER,
61417 		ZEND_NULL_HANDLER,
61418 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
61419 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
61420 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
61421 		ZEND_NULL_HANDLER,
61422 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
61423 		ZEND_NULL_HANDLER,
61424 		ZEND_NULL_HANDLER,
61425 		ZEND_NULL_HANDLER,
61426 		ZEND_NULL_HANDLER,
61427 		ZEND_NULL_HANDLER,
61428 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
61429 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
61430 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
61431 		ZEND_NULL_HANDLER,
61432 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
61433 		ZEND_NULL_HANDLER,
61434 		ZEND_NULL_HANDLER,
61435 		ZEND_NULL_HANDLER,
61436 		ZEND_NULL_HANDLER,
61437 		ZEND_NULL_HANDLER,
61438 		ZEND_NULL_HANDLER,
61439 		ZEND_NULL_HANDLER,
61440 		ZEND_NULL_HANDLER,
61441 		ZEND_NULL_HANDLER,
61442 		ZEND_NULL_HANDLER,
61443 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
61444 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
61445 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
61446 		ZEND_NULL_HANDLER,
61447 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
61448 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
61449 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
61450 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
61451 		ZEND_NULL_HANDLER,
61452 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
61453 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
61454 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
61455 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
61456 		ZEND_NULL_HANDLER,
61457 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
61458 		ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER,
61459 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
61460 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
61461 		ZEND_NULL_HANDLER,
61462 		ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER,
61463 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
61464 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
61465 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
61466 		ZEND_NULL_HANDLER,
61467 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
61468 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
61469 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
61470 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
61471 		ZEND_NULL_HANDLER,
61472 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
61473 		ZEND_NULL_HANDLER,
61474 		ZEND_NULL_HANDLER,
61475 		ZEND_NULL_HANDLER,
61476 		ZEND_NULL_HANDLER,
61477 		ZEND_NULL_HANDLER,
61478 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
61479 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
61480 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
61481 		ZEND_NULL_HANDLER,
61482 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
61483 		ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
61484 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
61485 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
61486 		ZEND_NULL_HANDLER,
61487 		ZEND_NULL_HANDLER,
61488 		ZEND_NULL_HANDLER,
61489 		ZEND_NULL_HANDLER,
61490 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER,
61491 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER,
61492 		ZEND_NULL_HANDLER,
61493 		ZEND_NULL_HANDLER,
61494 		ZEND_EXT_STMT_SPEC_HANDLER,
61495 		ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
61496 		ZEND_EXT_FCALL_END_SPEC_HANDLER,
61497 		ZEND_EXT_NOP_SPEC_HANDLER,
61498 		ZEND_TICKS_SPEC_HANDLER,
61499 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER,
61500 		ZEND_NULL_HANDLER,
61501 		ZEND_NULL_HANDLER,
61502 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER,
61503 		ZEND_NULL_HANDLER,
61504 		ZEND_CATCH_SPEC_CONST_HANDLER,
61505 		ZEND_THROW_SPEC_CONST_HANDLER,
61506 		ZEND_THROW_SPEC_TMPVAR_HANDLER,
61507 		ZEND_THROW_SPEC_TMPVAR_HANDLER,
61508 		ZEND_NULL_HANDLER,
61509 		ZEND_THROW_SPEC_CV_HANDLER,
61510 		ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER,
61511 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
61512 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
61513 		ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
61514 		ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER,
61515 		ZEND_CLONE_SPEC_CONST_HANDLER,
61516 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
61517 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
61518 		ZEND_CLONE_SPEC_UNUSED_HANDLER,
61519 		ZEND_CLONE_SPEC_CV_HANDLER,
61520 		ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
61521 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
61522 		ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
61523 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
61524 		ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
61525 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
61526 		ZEND_NULL_HANDLER,
61527 		ZEND_NULL_HANDLER,
61528 		ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
61529 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
61530 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
61531 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
61532 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
61533 		ZEND_NULL_HANDLER,
61534 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
61535 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
61536 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
61537 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
61538 		ZEND_NULL_HANDLER,
61539 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
61540 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
61541 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
61542 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
61543 		ZEND_NULL_HANDLER,
61544 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
61545 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
61546 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
61547 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
61548 		ZEND_NULL_HANDLER,
61549 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
61550 		ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
61551 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
61552 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
61553 		ZEND_NULL_HANDLER,
61554 		ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
61555 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
61556 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
61557 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
61558 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
61559 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
61560 		ZEND_NULL_HANDLER,
61561 		ZEND_NULL_HANDLER,
61562 		ZEND_NULL_HANDLER,
61563 		ZEND_NULL_HANDLER,
61564 		ZEND_NULL_HANDLER,
61565 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
61566 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
61567 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
61568 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
61569 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
61570 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
61571 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
61572 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
61573 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
61574 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
61575 		ZEND_NULL_HANDLER,
61576 		ZEND_NULL_HANDLER,
61577 		ZEND_NULL_HANDLER,
61578 		ZEND_NULL_HANDLER,
61579 		ZEND_NULL_HANDLER,
61580 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
61581 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
61582 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
61583 		ZEND_NULL_HANDLER,
61584 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
61585 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
61586 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
61587 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
61588 		ZEND_NULL_HANDLER,
61589 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
61590 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
61591 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
61592 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
61593 		ZEND_NULL_HANDLER,
61594 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
61595 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
61596 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
61597 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
61598 		ZEND_NULL_HANDLER,
61599 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
61600 		ZEND_NULL_HANDLER,
61601 		ZEND_NULL_HANDLER,
61602 		ZEND_NULL_HANDLER,
61603 		ZEND_NULL_HANDLER,
61604 		ZEND_NULL_HANDLER,
61605 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
61606 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
61607 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
61608 		ZEND_NULL_HANDLER,
61609 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
61610 		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
61611 		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
61612 		ZEND_NULL_HANDLER,
61613 		ZEND_NULL_HANDLER,
61614 		ZEND_NULL_HANDLER,
61615 		ZEND_NULL_HANDLER,
61616 		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER,
61617 		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER,
61618 		ZEND_NULL_HANDLER,
61619 		ZEND_NULL_HANDLER,
61620 		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
61621 		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
61622 		ZEND_NULL_HANDLER,
61623 		ZEND_NULL_HANDLER,
61624 		ZEND_NULL_HANDLER,
61625 		ZEND_NULL_HANDLER,
61626 		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER,
61627 		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER,
61628 		ZEND_NULL_HANDLER,
61629 		ZEND_NULL_HANDLER,
61630 		ZEND_NULL_HANDLER,
61631 		ZEND_NULL_HANDLER,
61632 		ZEND_NULL_HANDLER,
61633 		ZEND_NULL_HANDLER,
61634 		ZEND_NULL_HANDLER,
61635 		ZEND_NULL_HANDLER,
61636 		ZEND_NULL_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_NULL_HANDLER,
61650 		ZEND_NULL_HANDLER,
61651 		ZEND_NULL_HANDLER,
61652 		ZEND_NULL_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_NULL_HANDLER,
61660 		ZEND_NULL_HANDLER,
61661 		ZEND_NULL_HANDLER,
61662 		ZEND_NULL_HANDLER,
61663 		ZEND_NULL_HANDLER,
61664 		ZEND_NULL_HANDLER,
61665 		ZEND_NULL_HANDLER,
61666 		ZEND_NULL_HANDLER,
61667 		ZEND_NULL_HANDLER,
61668 		ZEND_NULL_HANDLER,
61669 		ZEND_NULL_HANDLER,
61670 		ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER,
61671 		ZEND_NULL_HANDLER,
61672 		ZEND_NULL_HANDLER,
61673 		ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER,
61674 		ZEND_NULL_HANDLER,
61675 		ZEND_NULL_HANDLER,
61676 		ZEND_NULL_HANDLER,
61677 		ZEND_NULL_HANDLER,
61678 		ZEND_NULL_HANDLER,
61679 		ZEND_NULL_HANDLER,
61680 		ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER,
61681 		ZEND_NULL_HANDLER,
61682 		ZEND_NULL_HANDLER,
61683 		ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER,
61684 		ZEND_NULL_HANDLER,
61685 		ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
61686 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
61687 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
61688 		ZEND_NULL_HANDLER,
61689 		ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
61690 		ZEND_SEND_ARRAY_SPEC_HANDLER,
61691 		ZEND_SEND_USER_SPEC_CONST_HANDLER,
61692 		ZEND_SEND_USER_SPEC_TMP_HANDLER,
61693 		ZEND_SEND_USER_SPEC_VAR_HANDLER,
61694 		ZEND_NULL_HANDLER,
61695 		ZEND_SEND_USER_SPEC_CV_HANDLER,
61696 		ZEND_STRLEN_SPEC_CONST_HANDLER,
61697 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
61698 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
61699 		ZEND_NULL_HANDLER,
61700 		ZEND_STRLEN_SPEC_CV_HANDLER,
61701 		ZEND_DEFINED_SPEC_CONST_HANDLER,
61702 		ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
61703 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
61704 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
61705 		ZEND_NULL_HANDLER,
61706 		ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
61707 		ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
61708 		ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
61709 		ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
61710 		ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
61711 		ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
61712 		ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
61713 		ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
61714 		ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
61715 		ZEND_NULL_HANDLER,
61716 		ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
61717 		ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
61718 		ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
61719 		ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
61720 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
61721 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
61722 		ZEND_NULL_HANDLER,
61723 		ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
61724 		ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
61725 		ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
61726 		ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
61727 		ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
61728 		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
61729 		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
61730 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
61731 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
61732 		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
61733 		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
61734 		ZEND_NULL_HANDLER,
61735 		ZEND_NULL_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_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
61745 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
61746 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
61747 		ZEND_NULL_HANDLER,
61748 		ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
61749 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
61750 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61751 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61752 		ZEND_NULL_HANDLER,
61753 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
61754 		ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
61755 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
61756 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
61757 		ZEND_NULL_HANDLER,
61758 		ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
61759 		ZEND_NULL_HANDLER,
61760 		ZEND_NULL_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_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
61770 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
61771 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
61772 		ZEND_NULL_HANDLER,
61773 		ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
61774 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
61775 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61776 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61777 		ZEND_NULL_HANDLER,
61778 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
61779 		ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
61780 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
61781 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
61782 		ZEND_NULL_HANDLER,
61783 		ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
61784 		ZEND_ECHO_SPEC_CONST_HANDLER,
61785 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
61786 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
61787 		ZEND_NULL_HANDLER,
61788 		ZEND_ECHO_SPEC_CV_HANDLER,
61789 		ZEND_NULL_HANDLER,
61790 		ZEND_NULL_HANDLER,
61791 		ZEND_NULL_HANDLER,
61792 		ZEND_NULL_HANDLER,
61793 		ZEND_NULL_HANDLER,
61794 		ZEND_NULL_HANDLER,
61795 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
61796 		ZEND_NULL_HANDLER,
61797 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
61798 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
61799 		ZEND_NULL_HANDLER,
61800 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
61801 		ZEND_NULL_HANDLER,
61802 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
61803 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
61804 		ZEND_NULL_HANDLER,
61805 		ZEND_NULL_HANDLER,
61806 		ZEND_NULL_HANDLER,
61807 		ZEND_NULL_HANDLER,
61808 		ZEND_NULL_HANDLER,
61809 		ZEND_NULL_HANDLER,
61810 		ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
61811 		ZEND_NULL_HANDLER,
61812 		ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
61813 		ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
61814 		ZEND_NULL_HANDLER,
61815 		ZEND_GENERATOR_CREATE_SPEC_HANDLER,
61816 		ZEND_NULL_HANDLER,
61817 		ZEND_NULL_HANDLER,
61818 		ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
61819 		ZEND_NULL_HANDLER,
61820 		ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
61821 		ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
61822 		ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER,
61823 		ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
61824 		ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER,
61825 		ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER,
61826 		ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
61827 		ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER,
61828 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
61829 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
61830 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
61831 		ZEND_NULL_HANDLER,
61832 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
61833 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
61834 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
61835 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
61836 		ZEND_NULL_HANDLER,
61837 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
61838 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
61839 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
61840 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
61841 		ZEND_NULL_HANDLER,
61842 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
61843 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
61844 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61845 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
61846 		ZEND_NULL_HANDLER,
61847 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
61848 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
61849 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
61850 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
61851 		ZEND_NULL_HANDLER,
61852 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
61853 		ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
61854 		ZEND_USER_OPCODE_SPEC_HANDLER,
61855 		ZEND_ASSERT_CHECK_SPEC_HANDLER,
61856 		ZEND_JMP_SET_SPEC_CONST_HANDLER,
61857 		ZEND_JMP_SET_SPEC_TMP_HANDLER,
61858 		ZEND_JMP_SET_SPEC_VAR_HANDLER,
61859 		ZEND_NULL_HANDLER,
61860 		ZEND_JMP_SET_SPEC_CV_HANDLER,
61861 		ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
61862 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER,
61863 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER,
61864 		ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER,
61865 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
61866 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
61867 		ZEND_NULL_HANDLER,
61868 		ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER,
61869 		ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
61870 		ZEND_NULL_HANDLER,
61871 		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
61872 		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
61873 		ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
61874 		ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER,
61875 		ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
61876 		ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER,
61877 		ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
61878 		ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
61879 		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
61880 		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
61881 		ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
61882 		ZEND_YIELD_SPEC_CONST_CV_HANDLER,
61883 		ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
61884 		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
61885 		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
61886 		ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
61887 		ZEND_YIELD_SPEC_TMP_CV_HANDLER,
61888 		ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
61889 		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
61890 		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
61891 		ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
61892 		ZEND_YIELD_SPEC_VAR_CV_HANDLER,
61893 		ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
61894 		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
61895 		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
61896 		ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
61897 		ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
61898 		ZEND_YIELD_SPEC_CV_CONST_HANDLER,
61899 		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
61900 		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
61901 		ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
61902 		ZEND_YIELD_SPEC_CV_CV_HANDLER,
61903 		ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
61904 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
61905 		ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
61906 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
61907 		ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
61908 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
61909 		ZEND_NULL_HANDLER,
61910 		ZEND_NULL_HANDLER,
61911 		ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
61912 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
61913 		ZEND_FAST_CALL_SPEC_HANDLER,
61914 		ZEND_FAST_RET_SPEC_HANDLER,
61915 		ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
61916 		ZEND_SEND_UNPACK_SPEC_HANDLER,
61917 		ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
61918 		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
61919 		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
61920 		ZEND_NULL_HANDLER,
61921 		ZEND_YIELD_FROM_SPEC_CV_HANDLER,
61922 		ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER,
61923 		ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
61924 		ZEND_COALESCE_SPEC_CONST_HANDLER,
61925 		ZEND_COALESCE_SPEC_TMP_HANDLER,
61926 		ZEND_COALESCE_SPEC_VAR_HANDLER,
61927 		ZEND_NULL_HANDLER,
61928 		ZEND_COALESCE_SPEC_CV_HANDLER,
61929 		ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
61930 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
61931 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
61932 		ZEND_NULL_HANDLER,
61933 		ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
61934 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
61935 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
61936 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
61937 		ZEND_NULL_HANDLER,
61938 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
61939 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
61940 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
61941 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
61942 		ZEND_NULL_HANDLER,
61943 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
61944 		ZEND_NULL_HANDLER,
61945 		ZEND_NULL_HANDLER,
61946 		ZEND_NULL_HANDLER,
61947 		ZEND_NULL_HANDLER,
61948 		ZEND_NULL_HANDLER,
61949 		ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
61950 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
61951 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
61952 		ZEND_NULL_HANDLER,
61953 		ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
61954 		ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
61955 		ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
61956 		ZEND_NULL_HANDLER,
61957 		ZEND_NULL_HANDLER,
61958 		ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
61959 		ZEND_NULL_HANDLER,
61960 		ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER,
61961 		ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER,
61962 		ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER,
61963 		ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER,
61964 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER,
61965 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER,
61966 		ZEND_UNSET_STATIC_PROP_SPEC_HANDLER,
61967 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER,
61968 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
61969 		ZEND_NULL_HANDLER,
61970 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
61971 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
61972 		ZEND_NULL_HANDLER,
61973 		ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
61974 		ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER,
61975 		ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
61976 		ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
61977 		ZEND_NULL_HANDLER,
61978 		ZEND_NULL_HANDLER,
61979 		ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
61980 		ZEND_NULL_HANDLER,
61981 		ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
61982 		ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
61983 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
61984 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
61985 		ZEND_NULL_HANDLER,
61986 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
61987 		ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
61988 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
61989 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
61990 		ZEND_NULL_HANDLER,
61991 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
61992 		ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
61993 		ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
61994 		ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
61995 		ZEND_NULL_HANDLER,
61996 		ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
61997 		ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
61998 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
61999 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
62000 		ZEND_NULL_HANDLER,
62001 		ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
62002 		ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
62003 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
62004 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
62005 		ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
62006 		ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
62007 		ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
62008 		ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
62009 		ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
62010 		ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
62011 		ZEND_NULL_HANDLER,
62012 		ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
62013 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER,
62014 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
62015 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
62016 		ZEND_NULL_HANDLER,
62017 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER,
62018 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
62019 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
62020 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
62021 		ZEND_NULL_HANDLER,
62022 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
62023 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
62024 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
62025 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
62026 		ZEND_NULL_HANDLER,
62027 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
62028 		ZEND_NULL_HANDLER,
62029 		ZEND_NULL_HANDLER,
62030 		ZEND_NULL_HANDLER,
62031 		ZEND_NULL_HANDLER,
62032 		ZEND_NULL_HANDLER,
62033 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER,
62034 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
62035 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
62036 		ZEND_NULL_HANDLER,
62037 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER,
62038 		ZEND_MATCH_SPEC_CONST_CONST_HANDLER,
62039 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
62040 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
62041 		ZEND_NULL_HANDLER,
62042 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
62043 		ZEND_NULL_HANDLER,
62044 		ZEND_NULL_HANDLER,
62045 		ZEND_NULL_HANDLER,
62046 		ZEND_NULL_HANDLER,
62047 		ZEND_NULL_HANDLER,
62048 		ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER,
62049 		ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER,
62050 		ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER,
62051 		ZEND_NULL_HANDLER,
62052 		ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER,
62053 		ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER,
62054 		ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER,
62055 		ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER,
62056 		ZEND_NULL_HANDLER,
62057 		ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER,
62058 		ZEND_NULL_HANDLER,
62059 		ZEND_NULL_HANDLER,
62060 		ZEND_NULL_HANDLER,
62061 		ZEND_NULL_HANDLER,
62062 		ZEND_NULL_HANDLER,
62063 		ZEND_NULL_HANDLER,
62064 		ZEND_NULL_HANDLER,
62065 		ZEND_NULL_HANDLER,
62066 		ZEND_NULL_HANDLER,
62067 		ZEND_NULL_HANDLER,
62068 		ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER,
62069 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
62070 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
62071 		ZEND_NULL_HANDLER,
62072 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
62073 		ZEND_JMP_NULL_SPEC_CONST_HANDLER,
62074 		ZEND_JMP_NULL_SPEC_TMP_HANDLER,
62075 		ZEND_JMP_NULL_SPEC_VAR_HANDLER,
62076 		ZEND_NULL_HANDLER,
62077 		ZEND_JMP_NULL_SPEC_CV_HANDLER,
62078 		ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
62079 		ZEND_RECV_NOTYPE_SPEC_HANDLER,
62080 		ZEND_JMP_FORWARD_SPEC_HANDLER,
62081 		ZEND_NULL_HANDLER,
62082 		ZEND_NULL_HANDLER,
62083 		ZEND_NULL_HANDLER,
62084 		ZEND_NULL_HANDLER,
62085 		ZEND_NULL_HANDLER,
62086 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62087 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62088 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62089 		ZEND_NULL_HANDLER,
62090 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62091 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62092 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62093 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62094 		ZEND_NULL_HANDLER,
62095 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62096 		ZEND_NULL_HANDLER,
62097 		ZEND_NULL_HANDLER,
62098 		ZEND_NULL_HANDLER,
62099 		ZEND_NULL_HANDLER,
62100 		ZEND_NULL_HANDLER,
62101 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62102 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62103 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62104 		ZEND_NULL_HANDLER,
62105 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62106 		ZEND_NULL_HANDLER,
62107 		ZEND_NULL_HANDLER,
62108 		ZEND_NULL_HANDLER,
62109 		ZEND_NULL_HANDLER,
62110 		ZEND_NULL_HANDLER,
62111 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62112 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62113 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62114 		ZEND_NULL_HANDLER,
62115 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62116 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62117 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62118 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62119 		ZEND_NULL_HANDLER,
62120 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62121 		ZEND_NULL_HANDLER,
62122 		ZEND_NULL_HANDLER,
62123 		ZEND_NULL_HANDLER,
62124 		ZEND_NULL_HANDLER,
62125 		ZEND_NULL_HANDLER,
62126 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62127 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62128 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62129 		ZEND_NULL_HANDLER,
62130 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62131 		ZEND_NULL_HANDLER,
62132 		ZEND_NULL_HANDLER,
62133 		ZEND_NULL_HANDLER,
62134 		ZEND_NULL_HANDLER,
62135 		ZEND_NULL_HANDLER,
62136 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62137 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62138 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62139 		ZEND_NULL_HANDLER,
62140 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62141 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62142 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62143 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62144 		ZEND_NULL_HANDLER,
62145 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62146 		ZEND_NULL_HANDLER,
62147 		ZEND_NULL_HANDLER,
62148 		ZEND_NULL_HANDLER,
62149 		ZEND_NULL_HANDLER,
62150 		ZEND_NULL_HANDLER,
62151 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62152 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62153 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62154 		ZEND_NULL_HANDLER,
62155 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62156 		ZEND_NULL_HANDLER,
62157 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
62158 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
62159 		ZEND_NULL_HANDLER,
62160 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
62161 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62162 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62163 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62164 		ZEND_NULL_HANDLER,
62165 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62166 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62167 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62168 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62169 		ZEND_NULL_HANDLER,
62170 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62171 		ZEND_NULL_HANDLER,
62172 		ZEND_NULL_HANDLER,
62173 		ZEND_NULL_HANDLER,
62174 		ZEND_NULL_HANDLER,
62175 		ZEND_NULL_HANDLER,
62176 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62177 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62178 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62179 		ZEND_NULL_HANDLER,
62180 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62181 		ZEND_NULL_HANDLER,
62182 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62183 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62184 		ZEND_NULL_HANDLER,
62185 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62186 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62187 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62188 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62189 		ZEND_NULL_HANDLER,
62190 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62191 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62192 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62193 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62194 		ZEND_NULL_HANDLER,
62195 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62196 		ZEND_NULL_HANDLER,
62197 		ZEND_NULL_HANDLER,
62198 		ZEND_NULL_HANDLER,
62199 		ZEND_NULL_HANDLER,
62200 		ZEND_NULL_HANDLER,
62201 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62202 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62203 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62204 		ZEND_NULL_HANDLER,
62205 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62206 		ZEND_NULL_HANDLER,
62207 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62208 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62209 		ZEND_NULL_HANDLER,
62210 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62211 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62212 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62213 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62214 		ZEND_NULL_HANDLER,
62215 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62216 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62217 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62218 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62219 		ZEND_NULL_HANDLER,
62220 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62221 		ZEND_NULL_HANDLER,
62222 		ZEND_NULL_HANDLER,
62223 		ZEND_NULL_HANDLER,
62224 		ZEND_NULL_HANDLER,
62225 		ZEND_NULL_HANDLER,
62226 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62227 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62228 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62229 		ZEND_NULL_HANDLER,
62230 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62231 		ZEND_NULL_HANDLER,
62232 		ZEND_NULL_HANDLER,
62233 		ZEND_NULL_HANDLER,
62234 		ZEND_NULL_HANDLER,
62235 		ZEND_NULL_HANDLER,
62236 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62237 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62238 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62239 		ZEND_NULL_HANDLER,
62240 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62241 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62242 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62243 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62244 		ZEND_NULL_HANDLER,
62245 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62246 		ZEND_NULL_HANDLER,
62247 		ZEND_NULL_HANDLER,
62248 		ZEND_NULL_HANDLER,
62249 		ZEND_NULL_HANDLER,
62250 		ZEND_NULL_HANDLER,
62251 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
62252 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62253 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62254 		ZEND_NULL_HANDLER,
62255 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62256 		ZEND_NULL_HANDLER,
62257 		ZEND_NULL_HANDLER,
62258 		ZEND_NULL_HANDLER,
62259 		ZEND_NULL_HANDLER,
62260 		ZEND_NULL_HANDLER,
62261 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62262 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62263 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62264 		ZEND_NULL_HANDLER,
62265 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62266 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62267 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62268 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62269 		ZEND_NULL_HANDLER,
62270 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62271 		ZEND_NULL_HANDLER,
62272 		ZEND_NULL_HANDLER,
62273 		ZEND_NULL_HANDLER,
62274 		ZEND_NULL_HANDLER,
62275 		ZEND_NULL_HANDLER,
62276 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62277 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62278 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62279 		ZEND_NULL_HANDLER,
62280 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62281 		ZEND_NULL_HANDLER,
62282 		ZEND_NULL_HANDLER,
62283 		ZEND_NULL_HANDLER,
62284 		ZEND_NULL_HANDLER,
62285 		ZEND_NULL_HANDLER,
62286 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62287 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62288 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62289 		ZEND_NULL_HANDLER,
62290 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62291 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62292 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62293 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62294 		ZEND_NULL_HANDLER,
62295 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62296 		ZEND_NULL_HANDLER,
62297 		ZEND_NULL_HANDLER,
62298 		ZEND_NULL_HANDLER,
62299 		ZEND_NULL_HANDLER,
62300 		ZEND_NULL_HANDLER,
62301 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62302 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62303 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62304 		ZEND_NULL_HANDLER,
62305 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62322 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62323 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62324 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62325 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62326 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62327 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62328 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62329 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62330 		ZEND_NULL_HANDLER,
62331 		ZEND_NULL_HANDLER,
62332 		ZEND_NULL_HANDLER,
62333 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62334 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62335 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62336 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62337 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62338 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62339 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62340 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62341 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62342 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62343 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62344 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62345 		ZEND_NULL_HANDLER,
62346 		ZEND_NULL_HANDLER,
62347 		ZEND_NULL_HANDLER,
62348 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62349 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62350 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62351 		ZEND_NULL_HANDLER,
62352 		ZEND_NULL_HANDLER,
62353 		ZEND_NULL_HANDLER,
62354 		ZEND_NULL_HANDLER,
62355 		ZEND_NULL_HANDLER,
62356 		ZEND_NULL_HANDLER,
62357 		ZEND_NULL_HANDLER,
62358 		ZEND_NULL_HANDLER,
62359 		ZEND_NULL_HANDLER,
62360 		ZEND_NULL_HANDLER,
62361 		ZEND_NULL_HANDLER,
62362 		ZEND_NULL_HANDLER,
62363 		ZEND_NULL_HANDLER,
62364 		ZEND_NULL_HANDLER,
62365 		ZEND_NULL_HANDLER,
62366 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62367 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62368 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62369 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62370 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62371 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62372 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62373 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62374 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62375 		ZEND_NULL_HANDLER,
62376 		ZEND_NULL_HANDLER,
62377 		ZEND_NULL_HANDLER,
62378 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62379 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62380 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62381 		ZEND_NULL_HANDLER,
62382 		ZEND_NULL_HANDLER,
62383 		ZEND_NULL_HANDLER,
62384 		ZEND_NULL_HANDLER,
62385 		ZEND_NULL_HANDLER,
62386 		ZEND_NULL_HANDLER,
62387 		ZEND_NULL_HANDLER,
62388 		ZEND_NULL_HANDLER,
62389 		ZEND_NULL_HANDLER,
62390 		ZEND_NULL_HANDLER,
62391 		ZEND_NULL_HANDLER,
62392 		ZEND_NULL_HANDLER,
62393 		ZEND_NULL_HANDLER,
62394 		ZEND_NULL_HANDLER,
62395 		ZEND_NULL_HANDLER,
62396 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62397 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62398 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62399 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62400 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62401 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62402 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62403 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62404 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62405 		ZEND_NULL_HANDLER,
62406 		ZEND_NULL_HANDLER,
62407 		ZEND_NULL_HANDLER,
62408 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62409 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62410 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62411 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62412 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62413 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62414 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62415 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62416 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62417 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62418 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62419 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62420 		ZEND_NULL_HANDLER,
62421 		ZEND_NULL_HANDLER,
62422 		ZEND_NULL_HANDLER,
62423 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62424 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62425 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
62435 		ZEND_NULL_HANDLER,
62436 		ZEND_NULL_HANDLER,
62437 		ZEND_NULL_HANDLER,
62438 		ZEND_NULL_HANDLER,
62439 		ZEND_NULL_HANDLER,
62440 		ZEND_NULL_HANDLER,
62441 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62442 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62443 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62444 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62445 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62446 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62447 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62448 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62449 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62450 		ZEND_NULL_HANDLER,
62451 		ZEND_NULL_HANDLER,
62452 		ZEND_NULL_HANDLER,
62453 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62454 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62455 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62456 		ZEND_NULL_HANDLER,
62457 		ZEND_NULL_HANDLER,
62458 		ZEND_NULL_HANDLER,
62459 		ZEND_NULL_HANDLER,
62460 		ZEND_NULL_HANDLER,
62461 		ZEND_NULL_HANDLER,
62462 		ZEND_NULL_HANDLER,
62463 		ZEND_NULL_HANDLER,
62464 		ZEND_NULL_HANDLER,
62465 		ZEND_NULL_HANDLER,
62466 		ZEND_NULL_HANDLER,
62467 		ZEND_NULL_HANDLER,
62468 		ZEND_NULL_HANDLER,
62469 		ZEND_NULL_HANDLER,
62470 		ZEND_NULL_HANDLER,
62471 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62472 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62473 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62474 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62475 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62476 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62477 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62478 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62479 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62480 		ZEND_NULL_HANDLER,
62481 		ZEND_NULL_HANDLER,
62482 		ZEND_NULL_HANDLER,
62483 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62484 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62485 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62486 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62487 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62488 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62489 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62490 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62491 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62492 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62493 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62494 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62495 		ZEND_NULL_HANDLER,
62496 		ZEND_NULL_HANDLER,
62497 		ZEND_NULL_HANDLER,
62498 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62499 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62500 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62501 		ZEND_NULL_HANDLER,
62502 		ZEND_NULL_HANDLER,
62503 		ZEND_NULL_HANDLER,
62504 		ZEND_NULL_HANDLER,
62505 		ZEND_NULL_HANDLER,
62506 		ZEND_NULL_HANDLER,
62507 		ZEND_NULL_HANDLER,
62508 		ZEND_NULL_HANDLER,
62509 		ZEND_NULL_HANDLER,
62510 		ZEND_NULL_HANDLER,
62511 		ZEND_NULL_HANDLER,
62512 		ZEND_NULL_HANDLER,
62513 		ZEND_NULL_HANDLER,
62514 		ZEND_NULL_HANDLER,
62515 		ZEND_NULL_HANDLER,
62516 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62517 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62518 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62519 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62520 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62521 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62522 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62523 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62524 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62525 		ZEND_NULL_HANDLER,
62526 		ZEND_NULL_HANDLER,
62527 		ZEND_NULL_HANDLER,
62528 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62529 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62530 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62531 		ZEND_NULL_HANDLER,
62532 		ZEND_NULL_HANDLER,
62533 		ZEND_NULL_HANDLER,
62534 		ZEND_NULL_HANDLER,
62535 		ZEND_NULL_HANDLER,
62536 		ZEND_NULL_HANDLER,
62537 		ZEND_NULL_HANDLER,
62538 		ZEND_NULL_HANDLER,
62539 		ZEND_NULL_HANDLER,
62540 		ZEND_NULL_HANDLER,
62541 		ZEND_NULL_HANDLER,
62542 		ZEND_NULL_HANDLER,
62543 		ZEND_NULL_HANDLER,
62544 		ZEND_NULL_HANDLER,
62545 		ZEND_NULL_HANDLER,
62546 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62547 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62548 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62549 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62550 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62551 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62552 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62553 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62554 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62555 		ZEND_NULL_HANDLER,
62556 		ZEND_NULL_HANDLER,
62557 		ZEND_NULL_HANDLER,
62558 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62559 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62560 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62561 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62562 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62563 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62564 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62565 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62566 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62567 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62568 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62569 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62570 		ZEND_NULL_HANDLER,
62571 		ZEND_NULL_HANDLER,
62572 		ZEND_NULL_HANDLER,
62573 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62574 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62575 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62576 		ZEND_NULL_HANDLER,
62577 		ZEND_NULL_HANDLER,
62578 		ZEND_NULL_HANDLER,
62579 		ZEND_NULL_HANDLER,
62580 		ZEND_NULL_HANDLER,
62581 		ZEND_NULL_HANDLER,
62582 		ZEND_NULL_HANDLER,
62583 		ZEND_NULL_HANDLER,
62584 		ZEND_NULL_HANDLER,
62585 		ZEND_NULL_HANDLER,
62586 		ZEND_NULL_HANDLER,
62587 		ZEND_NULL_HANDLER,
62588 		ZEND_NULL_HANDLER,
62589 		ZEND_NULL_HANDLER,
62590 		ZEND_NULL_HANDLER,
62591 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62592 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62593 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62594 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62595 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62596 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62597 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62598 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62599 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62600 		ZEND_NULL_HANDLER,
62601 		ZEND_NULL_HANDLER,
62602 		ZEND_NULL_HANDLER,
62603 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62604 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62605 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62606 		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
62607 		ZEND_NULL_HANDLER,
62608 		ZEND_NULL_HANDLER,
62609 		ZEND_NULL_HANDLER,
62610 		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
62611 		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
62612 		ZEND_NULL_HANDLER,
62613 		ZEND_NULL_HANDLER,
62614 		ZEND_NULL_HANDLER,
62615 		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
62616 		ZEND_NULL_HANDLER,
62617 		ZEND_NULL_HANDLER,
62618 		ZEND_NULL_HANDLER,
62619 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62620 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62621 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62622 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62623 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62624 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62625 		ZEND_NULL_HANDLER,
62626 		ZEND_NULL_HANDLER,
62627 		ZEND_NULL_HANDLER,
62628 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62629 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62630 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62631 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62632 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62633 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62634 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62635 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62636 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62637 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62638 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62639 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62640 		ZEND_NULL_HANDLER,
62641 		ZEND_NULL_HANDLER,
62642 		ZEND_NULL_HANDLER,
62643 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62644 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62645 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62646 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62647 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62648 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62649 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62650 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62651 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62652 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62653 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62654 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62655 		ZEND_NULL_HANDLER,
62656 		ZEND_NULL_HANDLER,
62657 		ZEND_NULL_HANDLER,
62658 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62659 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62660 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62661 		ZEND_NULL_HANDLER,
62662 		ZEND_NULL_HANDLER,
62663 		ZEND_NULL_HANDLER,
62664 		ZEND_NULL_HANDLER,
62665 		ZEND_NULL_HANDLER,
62666 		ZEND_NULL_HANDLER,
62667 		ZEND_NULL_HANDLER,
62668 		ZEND_NULL_HANDLER,
62669 		ZEND_NULL_HANDLER,
62670 		ZEND_NULL_HANDLER,
62671 		ZEND_NULL_HANDLER,
62672 		ZEND_NULL_HANDLER,
62673 		ZEND_NULL_HANDLER,
62674 		ZEND_NULL_HANDLER,
62675 		ZEND_NULL_HANDLER,
62676 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62677 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62678 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62679 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62680 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62681 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62682 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62683 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62684 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62685 		ZEND_NULL_HANDLER,
62686 		ZEND_NULL_HANDLER,
62687 		ZEND_NULL_HANDLER,
62688 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62689 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62690 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62691 		ZEND_NULL_HANDLER,
62692 		ZEND_NULL_HANDLER,
62693 		ZEND_NULL_HANDLER,
62694 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62695 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62696 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62697 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62698 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62699 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62700 		ZEND_NULL_HANDLER,
62701 		ZEND_NULL_HANDLER,
62702 		ZEND_NULL_HANDLER,
62703 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62704 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62705 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62706 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62707 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62708 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62709 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62710 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62711 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62712 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62713 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62714 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62715 		ZEND_NULL_HANDLER,
62716 		ZEND_NULL_HANDLER,
62717 		ZEND_NULL_HANDLER,
62718 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62719 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62720 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62721 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62722 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62723 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62724 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62725 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62726 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62727 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62728 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62729 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62730 		ZEND_NULL_HANDLER,
62731 		ZEND_NULL_HANDLER,
62732 		ZEND_NULL_HANDLER,
62733 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62734 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62735 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62736 		ZEND_NULL_HANDLER,
62737 		ZEND_NULL_HANDLER,
62738 		ZEND_NULL_HANDLER,
62739 		ZEND_NULL_HANDLER,
62740 		ZEND_NULL_HANDLER,
62741 		ZEND_NULL_HANDLER,
62742 		ZEND_NULL_HANDLER,
62743 		ZEND_NULL_HANDLER,
62744 		ZEND_NULL_HANDLER,
62745 		ZEND_NULL_HANDLER,
62746 		ZEND_NULL_HANDLER,
62747 		ZEND_NULL_HANDLER,
62748 		ZEND_NULL_HANDLER,
62749 		ZEND_NULL_HANDLER,
62750 		ZEND_NULL_HANDLER,
62751 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62752 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62753 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62754 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62755 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62756 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62757 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62758 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62759 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62760 		ZEND_NULL_HANDLER,
62761 		ZEND_NULL_HANDLER,
62762 		ZEND_NULL_HANDLER,
62763 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62764 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62765 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62766 		ZEND_NULL_HANDLER,
62767 		ZEND_NULL_HANDLER,
62768 		ZEND_NULL_HANDLER,
62769 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62770 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62771 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62772 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62773 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62774 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62775 		ZEND_NULL_HANDLER,
62776 		ZEND_NULL_HANDLER,
62777 		ZEND_NULL_HANDLER,
62778 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62779 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62780 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62781 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62782 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62783 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62784 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62785 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62786 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62787 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62788 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62789 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62790 		ZEND_NULL_HANDLER,
62791 		ZEND_NULL_HANDLER,
62792 		ZEND_NULL_HANDLER,
62793 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62794 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62795 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62796 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62797 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62798 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62799 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62800 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62801 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62802 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62803 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62804 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62805 		ZEND_NULL_HANDLER,
62806 		ZEND_NULL_HANDLER,
62807 		ZEND_NULL_HANDLER,
62808 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62809 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62810 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62811 		ZEND_NULL_HANDLER,
62812 		ZEND_NULL_HANDLER,
62813 		ZEND_NULL_HANDLER,
62814 		ZEND_NULL_HANDLER,
62815 		ZEND_NULL_HANDLER,
62816 		ZEND_NULL_HANDLER,
62817 		ZEND_NULL_HANDLER,
62818 		ZEND_NULL_HANDLER,
62819 		ZEND_NULL_HANDLER,
62820 		ZEND_NULL_HANDLER,
62821 		ZEND_NULL_HANDLER,
62822 		ZEND_NULL_HANDLER,
62823 		ZEND_NULL_HANDLER,
62824 		ZEND_NULL_HANDLER,
62825 		ZEND_NULL_HANDLER,
62826 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62827 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62828 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62829 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62830 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62831 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62832 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62833 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62834 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62835 		ZEND_NULL_HANDLER,
62836 		ZEND_NULL_HANDLER,
62837 		ZEND_NULL_HANDLER,
62838 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62839 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62840 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62841 		ZEND_NULL_HANDLER,
62842 		ZEND_NULL_HANDLER,
62843 		ZEND_NULL_HANDLER,
62844 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62845 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62846 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62847 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62848 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62849 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62850 		ZEND_NULL_HANDLER,
62851 		ZEND_NULL_HANDLER,
62852 		ZEND_NULL_HANDLER,
62853 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62854 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62855 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62856 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62857 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62858 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62859 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62860 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62861 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62862 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62863 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62864 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62865 		ZEND_NULL_HANDLER,
62866 		ZEND_NULL_HANDLER,
62867 		ZEND_NULL_HANDLER,
62868 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62869 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62870 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62871 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62872 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62873 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62874 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62875 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62876 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62877 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62878 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62879 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62880 		ZEND_NULL_HANDLER,
62881 		ZEND_NULL_HANDLER,
62882 		ZEND_NULL_HANDLER,
62883 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62884 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62885 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62886 		ZEND_NULL_HANDLER,
62887 		ZEND_NULL_HANDLER,
62888 		ZEND_NULL_HANDLER,
62889 		ZEND_NULL_HANDLER,
62890 		ZEND_NULL_HANDLER,
62891 		ZEND_NULL_HANDLER,
62892 		ZEND_NULL_HANDLER,
62893 		ZEND_NULL_HANDLER,
62894 		ZEND_NULL_HANDLER,
62895 		ZEND_NULL_HANDLER,
62896 		ZEND_NULL_HANDLER,
62897 		ZEND_NULL_HANDLER,
62898 		ZEND_NULL_HANDLER,
62899 		ZEND_NULL_HANDLER,
62900 		ZEND_NULL_HANDLER,
62901 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62902 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62903 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62904 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62905 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62906 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62907 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62908 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62909 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62910 		ZEND_NULL_HANDLER,
62911 		ZEND_NULL_HANDLER,
62912 		ZEND_NULL_HANDLER,
62913 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62914 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62915 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62916 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
62917 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
62918 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
62919 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
62920 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
62921 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
62922 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
62923 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
62924 		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
62925 		ZEND_POST_INC_LONG_SPEC_CV_HANDLER,
62926 		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
62927 		ZEND_POST_DEC_LONG_SPEC_CV_HANDLER,
62928 		ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER,
62929 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
62930 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
62931 		ZEND_NULL_HANDLER,
62932 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
62933 		ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
62934 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
62935 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
62936 		ZEND_NULL_HANDLER,
62937 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
62938 		ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
62939 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
62940 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
62941 		ZEND_NULL_HANDLER,
62942 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
62943 		ZEND_NULL_HANDLER,
62944 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
62945 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
62946 		ZEND_NULL_HANDLER,
62947 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
62948 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
62949 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
62950 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
62951 		ZEND_NULL_HANDLER,
62952 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
62953 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
62954 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
62955 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
62956 		ZEND_NULL_HANDLER,
62957 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
62958 		ZEND_NULL_HANDLER,
62959 		ZEND_NULL_HANDLER,
62960 		ZEND_NULL_HANDLER,
62961 		ZEND_NULL_HANDLER,
62962 		ZEND_NULL_HANDLER,
62963 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
62964 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
62965 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
62966 		ZEND_NULL_HANDLER,
62967 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
62968 		ZEND_NULL_HANDLER,
62969 		ZEND_NULL_HANDLER,
62970 		ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
62971 		ZEND_NULL_HANDLER,
62972 		ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
62973 		ZEND_NULL_HANDLER,
62974 		ZEND_NULL_HANDLER,
62975 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER,
62976 		ZEND_NULL_HANDLER,
62977 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER,
62978 		ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER,
62979 		ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER,
62980 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
62981 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
62982 		ZEND_NULL_HANDLER
62983 	};
62984 	static const uint32_t specs[] = {
62985 		0,
62986 		1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62987 		26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62988 		51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
62989 		76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62990 		101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62991 		126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62992 		151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62993 		176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62994 		201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
62995 		226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
62996 		251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
62997 		276 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62998 		301 | SPEC_RULE_OP1,
62999 		306 | SPEC_RULE_OP1,
63000 		311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63001 		336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63002 		361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
63003 		386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
63004 		461 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
63005 		536 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
63006 		611 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
63007 		686 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
63008 		736 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
63009 		861 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
63010 		986 | SPEC_RULE_OP_DATA,
63011 		991 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63012 		1016 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63013 		1041 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63014 		1066,
63015 		1067 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63016 		1092 | SPEC_RULE_OP1,
63017 		1097 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
63018 		1222,
63019 		1223 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
63020 		1233 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
63021 		1243 | SPEC_RULE_OP1,
63022 		1248 | SPEC_RULE_OP1,
63023 		1253,
63024 		1253,
63025 		1254,
63026 		1254,
63027 		1255,
63028 		1256 | SPEC_RULE_OP1,
63029 		1261 | SPEC_RULE_OP1,
63030 		1266 | SPEC_RULE_OP1,
63031 		1271 | SPEC_RULE_OP1,
63032 		1276 | SPEC_RULE_OP1,
63033 		1281 | SPEC_RULE_OP2,
63034 		1286,
63035 		1287 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
63036 		1297 | SPEC_RULE_OP1,
63037 		1302 | SPEC_RULE_OP1,
63038 		1307 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63039 		1332 | SPEC_RULE_OP2,
63040 		1337 | SPEC_RULE_OP2,
63041 		1342 | SPEC_RULE_OP2,
63042 		1347,
63043 		1348,
63044 		1349,
63045 		1350 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
63046 		1354,
63047 		1355 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
63048 		1365,
63049 		1366,
63050 		1367 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63051 		1392 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
63052 		1442 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63053 		1467 | SPEC_RULE_OP1,
63054 		1472,
63055 		1473,
63056 		1474 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63057 		1499 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63058 		1524 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
63059 		1534 | SPEC_RULE_OP1,
63060 		1539 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63061 		1564 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63062 		1589 | SPEC_RULE_OP1,
63063 		1594,
63064 		1595,
63065 		1596 | SPEC_RULE_OP1,
63066 		1601 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63067 		1626 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63068 		1651 | SPEC_RULE_OP1,
63069 		1656 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63070 		1681 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63071 		1706 | SPEC_RULE_OP1,
63072 		1711 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63073 		1736 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63074 		1761 | SPEC_RULE_OP1,
63075 		1766 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63076 		1791 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63077 		1816 | SPEC_RULE_OP1,
63078 		1821 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63079 		1846 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63080 		1871 | SPEC_RULE_OP1,
63081 		1876 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63082 		1901 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63083 		1926 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63084 		1951,
63085 		1952 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
63086 		1962,
63087 		1963,
63088 		1964,
63089 		1965,
63090 		1966,
63091 		1967 | SPEC_RULE_OP2,
63092 		1972,
63093 		1973 | SPEC_RULE_OP1,
63094 		1978 | SPEC_RULE_OP2,
63095 		1983 | SPEC_RULE_OP1,
63096 		1988 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
63097 		1998 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63098 		2023 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63099 		2048 | SPEC_RULE_OP1,
63100 		2053 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63101 		2078 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
63102 		2128 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63103 		2153 | SPEC_RULE_OP2,
63104 		2158,
63105 		2159 | SPEC_RULE_OP1,
63106 		2164 | SPEC_RULE_OP1,
63107 		2169,
63108 		2170 | SPEC_RULE_OP1,
63109 		2175 | SPEC_RULE_OP1,
63110 		2180 | SPEC_RULE_OP1,
63111 		2185,
63112 		2186,
63113 		2187 | SPEC_RULE_OP2,
63114 		2192 | SPEC_RULE_RETVAL,
63115 		2194 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
63116 		2198 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
63117 		2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63118 		2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63119 		2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63120 		2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63121 		2252 | SPEC_RULE_OP1,
63122 		2257,
63123 		2258 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63124 		2283,
63125 		2284 | SPEC_RULE_OP1,
63126 		2289,
63127 		2290,
63128 		2291,
63129 		2292,
63130 		2293,
63131 		2294,
63132 		2295,
63133 		2296 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63134 		2321,
63135 		2322,
63136 		2323,
63137 		2324 | SPEC_RULE_OP1,
63138 		2329,
63139 		2330 | SPEC_RULE_ISSET,
63140 		2332 | SPEC_RULE_OP2,
63141 		2337,
63142 		2338 | SPEC_RULE_OP1,
63143 		2343 | SPEC_RULE_OBSERVER,
63144 		2345,
63145 		2346 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63146 		2371 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
63147 		2381,
63148 		2382,
63149 		2383,
63150 		2384,
63151 		2385 | SPEC_RULE_OP1,
63152 		2390,
63153 		2391,
63154 		2392 | SPEC_RULE_OP1,
63155 		2397 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63156 		2422,
63157 		2423 | SPEC_RULE_OP1,
63158 		2428,
63159 		2429,
63160 		2430,
63161 		2431,
63162 		2432,
63163 		2433,
63164 		2434,
63165 		2435,
63166 		2436 | SPEC_RULE_OP1,
63167 		2441,
63168 		2442,
63169 		2443,
63170 		2444 | SPEC_RULE_OP2,
63171 		2449,
63172 		2450 | SPEC_RULE_OP1,
63173 		2455 | SPEC_RULE_OP1,
63174 		2460 | SPEC_RULE_OP1,
63175 		2465 | SPEC_RULE_OP1,
63176 		2470 | SPEC_RULE_OP1,
63177 		2475,
63178 		2476 | SPEC_RULE_OP1,
63179 		2481 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63180 		2506 | SPEC_RULE_OP1,
63181 		2511 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
63182 		2536 | SPEC_RULE_OP1,
63183 		2541 | SPEC_RULE_OP1,
63184 		2546,
63185 		3450
63186 	};
63187 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
63188 	zend_opcode_handler_funcs = labels;
63189 	zend_spec_handlers = specs;
63190 	execute_ex(NULL);
63191 #else
63192 	zend_opcode_handlers = labels;
63193 	zend_handlers_count = sizeof(labels) / sizeof(void*);
63194 	zend_spec_handlers = specs;
63195 #endif
63196 	VM_TRACE_START();
63197 }
63198 
63199 static HashTable *zend_handlers_table = NULL;
63200 
63201 void zend_vm_dtor(void)
63202 {
63203 	VM_TRACE_END();
63204 	if (zend_handlers_table) {
63205 		zend_hash_destroy(zend_handlers_table);
63206 		free(zend_handlers_table);
63207 		zend_handlers_table = NULL;
63208 	}
63209 }
63210 
63211 static void init_opcode_serialiser(void)
63212 {
63213 	int i;
63214 	zval tmp;
63215 
63216 	zend_handlers_table = malloc(sizeof(HashTable));
63217 	zend_hash_init(zend_handlers_table, zend_handlers_count, NULL, NULL, 1);
63218 	zend_hash_real_init(zend_handlers_table, 0);
63219 	Z_TYPE_INFO(tmp) = IS_LONG;
63220 	for (i = 0; i < zend_handlers_count; i++) {
63221 		Z_LVAL(tmp) = i;
63222 		zend_hash_index_add(zend_handlers_table, (zend_long)(zend_uintptr_t)zend_opcode_handlers[i], &tmp);
63223 	}
63224 }
63225 
63226 ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op)
63227 {
63228 	zval *zv;
63229 
63230 	if (!zend_handlers_table) {
63231 		init_opcode_serialiser();
63232 	}
63233 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
63234 	ZEND_ASSERT(zv != NULL);
63235 	op->handler = (const void *)(zend_uintptr_t)Z_LVAL_P(zv);
63236 }
63237 
63238 ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op)
63239 {
63240 	op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler];
63241 }
63242 
63243 ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op)
63244 {
63245 #if ZEND_VM_KIND == ZEND_VM_KIND_CALL
63246 	return op->handler;
63247 #elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
63248 	zval *zv;
63249 
63250 	if (!zend_handlers_table) {
63251 		init_opcode_serialiser();
63252 	}
63253 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
63254 	ZEND_ASSERT(zv != NULL);
63255 	return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
63256 #else
63257 	return NULL;
63258 #endif
63259 }
63260 
63261 ZEND_API const zend_op *zend_get_halt_op(void)
63262 {
63263 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
63264 	return &hybrid_halt_op;
63265 #else
63266 	return NULL;
63267 #endif
63268 }
63269 
63270 ZEND_API int zend_vm_kind(void)
63271 {
63272 	return ZEND_VM_KIND;
63273 }
63274 
63275 static uint32_t ZEND_FASTCALL zend_vm_get_opcode_handler_idx(uint32_t spec, const zend_op* op)
63276 {
63277 	static const int zend_vm_decode[] = {
63278 		_UNUSED_CODE, /* 0 = IS_UNUSED  */
63279 		_CONST_CODE,  /* 1 = IS_CONST   */
63280 		_TMP_CODE,    /* 2 = IS_TMP_VAR */
63281 		_UNUSED_CODE, /* 3              */
63282 		_VAR_CODE,    /* 4 = IS_VAR     */
63283 		_UNUSED_CODE, /* 5              */
63284 		_UNUSED_CODE, /* 6              */
63285 		_UNUSED_CODE, /* 7              */
63286 		_CV_CODE      /* 8 = IS_CV      */
63287 	};
63288 	uint32_t offset = 0;
63289 	if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
63290 	if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
63291 	if (spec & SPEC_EXTRA_MASK) {
63292 		if (spec & SPEC_RULE_RETVAL) {
63293 			offset = offset * 2 + (op->result_type != IS_UNUSED);
63294 			if ((spec & SPEC_RULE_OBSERVER) && ZEND_OBSERVER_ENABLED) {
63295 				offset += 2;
63296 			}
63297 		} else if (spec & SPEC_RULE_QUICK_ARG) {
63298 			offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
63299 		} else if (spec & SPEC_RULE_OP_DATA) {
63300 			offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
63301 		} else if (spec & SPEC_RULE_ISSET) {
63302 			offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
63303 		} else if (spec & SPEC_RULE_SMART_BRANCH) {
63304 			offset = offset * 3;
63305 			if (op->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR)) {
63306 				offset += 1;
63307 			} else if (op->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR)) {
63308 				offset += 2;
63309 			}
63310 		} else if (spec & SPEC_RULE_OBSERVER) {
63311 			offset = offset * 2;
63312 			if (ZEND_OBSERVER_ENABLED) {
63313 				offset += 1;
63314 			}
63315 		}
63316 	}
63317 	return (spec & SPEC_START_MASK) + offset;
63318 }
63319 
63320 #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
63321 static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op)
63322 {
63323 	return zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
63324 }
63325 #endif
63326 
63327 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
63328 static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op)
63329 {
63330 	uint32_t spec = zend_spec_handlers[opcode];
63331 	return zend_opcode_handler_funcs[zend_vm_get_opcode_handler_idx(spec, op)];
63332 }
63333 
63334 #endif
63335 
63336 ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
63337 {
63338 	zend_uchar opcode = zend_user_opcodes[op->opcode];
63339 
63340 	if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
63341 		if (op->op1_type < op->op2_type) {
63342 			zend_swap_operands(op);
63343 		}
63344 	}
63345 	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
63346 }
63347 
63348 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)
63349 {
63350 	zend_uchar opcode = zend_user_opcodes[op->opcode];
63351 	uint32_t spec = zend_spec_handlers[opcode];
63352 	switch (opcode) {
63353 		case ZEND_ADD:
63354 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63355 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63356 					break;
63357 				}
63358 				spec = 2549 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
63359 				if (op->op1_type < op->op2_type) {
63360 					zend_swap_operands(op);
63361 				}
63362 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63363 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63364 					break;
63365 				}
63366 				spec = 2574 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
63367 				if (op->op1_type < op->op2_type) {
63368 					zend_swap_operands(op);
63369 				}
63370 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
63371 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63372 					break;
63373 				}
63374 				spec = 2599 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
63375 				if (op->op1_type < op->op2_type) {
63376 					zend_swap_operands(op);
63377 				}
63378 			}
63379 			break;
63380 		case ZEND_SUB:
63381 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63382 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63383 					break;
63384 				}
63385 				spec = 2624 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
63386 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63387 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63388 					break;
63389 				}
63390 				spec = 2649 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
63391 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
63392 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63393 					break;
63394 				}
63395 				spec = 2674 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
63396 			}
63397 			break;
63398 		case ZEND_MUL:
63399 			if (op->op1_type < op->op2_type) {
63400 				zend_swap_operands(op);
63401 			}
63402 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63403 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63404 					break;
63405 				}
63406 				spec = 2699 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
63407 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63408 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63409 					break;
63410 				}
63411 				spec = 2724 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
63412 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
63413 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63414 					break;
63415 				}
63416 				spec = 2749 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
63417 			}
63418 			break;
63419 		case ZEND_IS_IDENTICAL:
63420 			if (op->op1_type < op->op2_type) {
63421 				zend_swap_operands(op);
63422 			}
63423 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63424 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63425 					break;
63426 				}
63427 				spec = 2774 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
63428 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
63429 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63430 					break;
63431 				}
63432 				spec = 2849 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
63433 			} 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))) {
63434 				spec = 3074 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
63435 			}
63436 			break;
63437 		case ZEND_IS_NOT_IDENTICAL:
63438 			if (op->op1_type < op->op2_type) {
63439 				zend_swap_operands(op);
63440 			}
63441 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63442 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63443 					break;
63444 				}
63445 				spec = 2924 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
63446 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
63447 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63448 					break;
63449 				}
63450 				spec = 2999 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
63451 			} 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))) {
63452 				spec = 3079 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
63453 			}
63454 			break;
63455 		case ZEND_IS_EQUAL:
63456 			if (op->op1_type < op->op2_type) {
63457 				zend_swap_operands(op);
63458 			}
63459 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63460 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63461 					break;
63462 				}
63463 				spec = 2774 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
63464 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
63465 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63466 					break;
63467 				}
63468 				spec = 2849 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
63469 			}
63470 			break;
63471 		case ZEND_IS_NOT_EQUAL:
63472 			if (op->op1_type < op->op2_type) {
63473 				zend_swap_operands(op);
63474 			}
63475 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63476 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63477 					break;
63478 				}
63479 				spec = 2924 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
63480 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
63481 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63482 					break;
63483 				}
63484 				spec = 2999 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
63485 			}
63486 			break;
63487 		case ZEND_IS_SMALLER:
63488 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63489 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63490 					break;
63491 				}
63492 				spec = 3084 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
63493 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
63494 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63495 					break;
63496 				}
63497 				spec = 3159 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
63498 			}
63499 			break;
63500 		case ZEND_IS_SMALLER_OR_EQUAL:
63501 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
63502 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63503 					break;
63504 				}
63505 				spec = 3234 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
63506 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
63507 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63508 					break;
63509 				}
63510 				spec = 3309 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
63511 			}
63512 			break;
63513 		case ZEND_QM_ASSIGN:
63514 			if (op1_info == MAY_BE_LONG) {
63515 				spec = 3396 | SPEC_RULE_OP1;
63516 			} else if (op1_info == MAY_BE_DOUBLE) {
63517 				spec = 3401 | SPEC_RULE_OP1;
63518 			} 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))))) {
63519 				spec = 3406 | SPEC_RULE_OP1;
63520 			}
63521 			break;
63522 		case ZEND_PRE_INC:
63523 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
63524 				spec = 3384 | SPEC_RULE_RETVAL;
63525 			} else if (op1_info == MAY_BE_LONG) {
63526 				spec = 3386 | SPEC_RULE_RETVAL;
63527 			}
63528 			break;
63529 		case ZEND_PRE_DEC:
63530 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
63531 				spec = 3388 | SPEC_RULE_RETVAL;
63532 			} else if (op1_info == MAY_BE_LONG) {
63533 				spec = 3390 | SPEC_RULE_RETVAL;
63534 			}
63535 			break;
63536 		case ZEND_POST_INC:
63537 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
63538 				spec = 3392;
63539 			} else if (op1_info == MAY_BE_LONG) {
63540 				spec = 3393;
63541 			}
63542 			break;
63543 		case ZEND_POST_DEC:
63544 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
63545 				spec = 3394;
63546 			} else if (op1_info == MAY_BE_LONG) {
63547 				spec = 3395;
63548 			}
63549 			break;
63550 		case ZEND_JMP:
63551 			if (OP_JMP_ADDR(op, op->op1) > op) {
63552 				spec = 2548;
63553 			}
63554 			break;
63555 		case ZEND_RECV:
63556 			if (op->op2.num == MAY_BE_ANY) {
63557 				spec = 2547;
63558 			}
63559 			break;
63560 		case ZEND_SEND_VAL:
63561 			if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
63562 				spec = 3446;
63563 			}
63564 			break;
63565 		case ZEND_SEND_VAR_EX:
63566 			if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
63567 				spec = 3441 | SPEC_RULE_OP1;
63568 			}
63569 			break;
63570 		case ZEND_FE_FETCH_R:
63571 			if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
63572 				spec = 3448 | SPEC_RULE_RETVAL;
63573 			}
63574 			break;
63575 		case ZEND_FETCH_DIM_R:
63576 			if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
63577 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
63578 					break;
63579 				}
63580 				spec = 3411 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
63581 			}
63582 			break;
63583 		case ZEND_SEND_VAL_EX:
63584 			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))) {
63585 				spec = 3447;
63586 			}
63587 			break;
63588 		case ZEND_SEND_VAR:
63589 			if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
63590 				spec = 3436 | SPEC_RULE_OP1;
63591 			}
63592 			break;
63593 		case ZEND_BW_OR:
63594 		case ZEND_BW_AND:
63595 		case ZEND_BW_XOR:
63596 		case ZEND_BOOL_XOR:
63597 			if (op->op1_type < op->op2_type) {
63598 				zend_swap_operands(op);
63599 			}
63600 			break;
63601 		case ZEND_USER_OPCODE:
63602 			if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
63603 				if (op->op1_type < op->op2_type) {
63604 					zend_swap_operands(op);
63605 				}
63606 			}
63607 			break;
63608 		default:
63609 			break;
63610 	}
63611 	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(spec, op)];
63612 }
63613 
63614 ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex)
63615 {
63616 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
63617 	opcode_handler_t handler;
63618 #endif
63619 	int ret;
63620 #ifdef ZEND_VM_IP_GLOBAL_REG
63621 	const zend_op *orig_opline = opline;
63622 #endif
63623 #ifdef ZEND_VM_FP_GLOBAL_REG
63624 	zend_execute_data *orig_execute_data = execute_data;
63625 	execute_data = ex;
63626 #else
63627 	zend_execute_data *execute_data = ex;
63628 #endif
63629 
63630 	LOAD_OPLINE();
63631 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
63632 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
63633 	handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
63634 	handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
63635 	if (EXPECTED(opline != &hybrid_halt_op)) {
63636 #else
63637 	((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
63638 	if (EXPECTED(opline)) {
63639 #endif
63640 		ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
63641 		SAVE_OPLINE();
63642 	} else {
63643 		ret = -1;
63644 	}
63645 #else
63646 	ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
63647 	SAVE_OPLINE();
63648 #endif
63649 #ifdef ZEND_VM_FP_GLOBAL_REG
63650 	execute_data = orig_execute_data;
63651 #endif
63652 #ifdef ZEND_VM_IP_GLOBAL_REG
63653 	opline = orig_opline;
63654 #endif
63655 	return ret;
63656 }
63657 
63658